본문 바로가기

IT 지식51

Hive와 HDFS Hive는 HDFS에 저장된 파일, 디렉토리 구조에 대한 메타 데이터를 가지고 이를 RDB처럼 테이블로 제공하고, SQL을 활용할 수 있는 툴을 제공한다. 이 말은 무엇을 의미할까? 한 마디로 Hive의 데이터 중 메타 데이터와 HDFS에 저장된 데이터가 별도라는 이야기이다. 메타 데이터는 항상 HIVE가 관리한다. 그렇다면 HDFS에 저장된 데이터는? HDFS에 저장된 데이터의 관리 주체에 따라 HIVE의 테이블은 두 가지로 나뉠 수 있다.Managed Table : Hive가 HDFS 내의 데이터도 관리한다.External Table : Hive가 HDFS 내의 데이터까지 관리하지는 않는다. Managed Table일반 RDB처럼 CREATE TABLE 쿼리를 사용할 경우 생성되는 테이블이다. 메타 .. 2024. 5. 2.
Hive의 메타스토어로 MariaDB를 설정했을 때 나는 에러 Hive는 메타데이터를 자체적으로 저장할 수도 있지만, 특정 DB를 설정해 해당 DB에 메타데이터를 저장할 수도 있다. 이번에 새로운 프로젝트의 개발 및 인프라 구축을 맡게되었다. 그래서 요구사항대로 MariaDB를 메타스토어로 하는 Hive 2.3.6을 설치하려고 했다. 설치는 이전과 같이 진행했다. https://123okk2.tistory.com/414 JAVA-HIVE/HBASE 간 통신_Hadoop/HIVE/HBase 설치 프로젝트를 진행하던 중, 빅데이터 플랫폼인 하둡의 대표적인 RDB인 Hive와, NoSQL DB인 HBase에 데이러틀 적재해야 하는 프로그램을 짜야할 일이 생겼다. Hadoop 기반 개발은 처음이기에 꽤 많이 헤멨 123okk2.tistory.com 위 게시글에서 추가로 한.. 2024. 2. 26.
이진트리 (JAVA 코드 포함) 대학생때부터 취업 직전까지 많이 듣고 많이 공부한 알고리즘 중 하나는 당연 트리이고, 그 중 이진트리를 기초로 생각하고 배운 적이 있다. 한창 취준하며 코테를 공부하던 때에는 과장해서 말하자면 이진트리는 굳이 생각이라는 것을 거치지 않고도 단어만 듣고 코드가 줄줄 써지는 정도였다. 하지만 너무 기초라고 생각했고, 취업 이후에는 이 구현 방법 자체를 머리속에서 지우고 살았다. 자기변명을 해보자면, 이진 트리를 굳이 실무에서 적용할 일이 없었고, 또 지난 여러 기업의 코딩 테스트를 응시하며 이진 트리가 나온 적은 한 번도 존재하지 않았었기 때문이다. *물론 많은 회사의 코딩테스트에 응시했던 것은 아니므로, 언제 어디서 등장할 지는 모른다. 이 사실을 상기하지 못한 것에 대한 변명일 뿐이다. 그렇게 살던 중 .. 2024. 2. 26.
[DB] 두 개 컬럼을 인덱스로 묶고 그 중 하나로만 쿼리를 하면? 옛날부터 궁금한게 한 가지 있었다. 예를 들어, 한 테이블의 col1, col2 칼럼에 동시에 인덱스를 걸어놓았다. 이 떄 인덱스는 따로따로가 아니라 동시에 걸어놓는다. 무슨 말이냐 하면, 위 사진처럼 하나의 인덱스당 하나의 컬럼을 거는 것이 아니라, 아래의 사진처럼 하나의 인덱스에 두 개의 컬럼을 묶어놓는 식이다. 그리고 col2 칼럼을 기준으로 CRUD 쿼리를 실행시키면 과연 "Index가 정상적으로 작동할까?" 궁금한 건 못참으니, 한 번 테스트를 해볼까 한다. 참고로 MariaDB 11.2.2 를 사용했다. 테이블, 프로시저 생성 및 초기 데이터 입력 우선 테이블을 생성한다. 각 테이블은 동일하게 9개의 INT 컬럼으로 구성되어 있으며, 서로 다른 인덱스를 설정해 다섯 개의 테이블을 생성했다. 인.. 2024. 1. 16.
ON DELETE(UPDATE) 옵션 프로젝트 진행 전 프로젝트 세팅 과정에서 초기 테이블 생성용 schema.sql 을 작성하고 있었다. 테이블 CREATE 쿼리를 작성하며 외래키를 설정하고 요구사항에 따라 ON DELETE, ON UPDATE 옵션을 설정하는데 문득 의문이 들었다. "나 이게 뭔지 제대로 알고는 쓰나?" 물론 얼추 알기는 안다. 하지만 누군가 "이 옵션이 무슨 옵션이야" 라고 물었을 때 아무 고민 없이 나올 정도로 확실하게 알지는 못한다. 그래서 잠시 반성의 시간을 가졌고, 개념을 확실하게 공부해볼까 한다. 외래 키 (FK, Foreign Key) 외래 키는 데이터베이스 관리 시스템에서 두 테이블 간의 관계를 정의하는 데 사용되는 키이다. 한 테이블의 컬럼이 다른 테이블의 기본 키를 참조하는 것을 의미한다. 주로 참조 무.. 2024. 1. 10.
[PostgreSQL] 컬럼의 Length를 지정해야 하는 이유 이번 프로젝트에서 데이터 코어 구축 후 데이터 마트까지의 구축을 담당했다. 원래대로라면 데이터 마트 내 테이블의 컬럼들 각각에 length를 부여해줬을 것이다. 하지만 이번에는 구체적인 데이터의 양식이 주어지지 않았고, 그저 협력업체로부터 각 테이블에 들어갈 샘플 데이터 몇 개만 전달받았다. 그래서 데이터의 구체적인 도메인과 Length를 파악할 수 없었다. *협력업체에 문의했는데 자기들도 모른단다. 그래서 어떻게 해야하나 생각을 하던 중 때마침 데이터 마트 구축으로 사용한 DB가 PostgreSQL라는 사실이 생각났다. PostgreSQL은 VARCHAR 등의 칼럼에 굳이 Length를 지정해주지 않아도 됐고, 그래서 컬럼에 length를 지정해주지 않았다. 그러다 감리 진행 중 length를 지정하지.. 2023. 7. 5.
내부망에서 apt 사용 프로그램 개발 후 고객사 내부망에 프로그램을 설치하기 위해서는 JAVA 등의 몇몇 인프라가 필요하다. 하지만 말 그대로 내부망은 인터넷이 되지 않는 환경이고, 이에 필요한 인프라를 오프라인으로 설치할 수 있는 준비를 해야했다. CentOS의 경우 local repository를 만드는 방법을 통해 yum을 오프라인 환경에서 사용할 수 있다. 방법은 아래 링크에 적어놓았다. https://123okk2.tistory.com/404 내부망에서 yum 사용 개발이 완료된 후에는 클라이언트의 서버에 개발 완료된 프로그램을 배포해주어야 한다. 하지만 당연하게도 프로그램은 단일로 동작하지 않고, Java, DB등 여러 인프라가 필요하다. 만약 서버가 123okk2.tistory.com 하지만 Ubuntu의 경우에는.. 2023. 6. 4.
자동 재실행 스크립트 만들기 개발 완료된 프로그램을 설치 및 배포하는 과정에서 문득 굼긍증이 들었다. "이거... 에러나서 꺼지면 어떻게 하지?" 굳이 변명을 해보자면 지금까지 설치 및 배포를 진행해본 경험은 몇 차례 있었다. 하지만 지금까지는 부사수로써 사수를 보조하는 역할이 대부분이었다. 즉, 주도적으로 설치 및 배포를 해본 적이 없어 그냥 단순히 프로그램을 설치하고 배포하는 것만 생각했지 그 외의 부분까지 고려하는 시각을 가지지 못했었다. 늘 그 외의 부분은 사수이신 과장님께서 해주셨으니까... 그리고 내가 담당하고 개발한 프로그램들은 대부분 도커화 해서 개발했기 때문에, 에러가 나서 꺼질 경우 재실행 되는 것은 당연한 일이었다. 그냥 도커 컨테이너에 restart=always만 걸어놓으면 됐으니까. 결국 부랴부랴 자동으로 재.. 2023. 5. 28.
NIFI 설치 및 사용법 현재 재직중인 회사가 빅데이터를 주로 다루는 회사이다보니, 프로그램 구축이 끝나고난 후 해당 프로그램을 통해 모인 데이터를 데이터 마트에 옮겨주는 작업까지 해야할 일이 종종 생겼다. 지난 프로젝트에서는 위의 작업을 Hue UI 내에서 Oozie와 Sqoop, 그리고 Hive의 유틸인 Beeline과 직접 만든 java application을 이용해서 데이터 마트 적재 플로우를 구축했다. 하지만 이번 프로젝트에서는 Hue가 설치되어 있지 않아 위와 같은 방법을 사용할 수 없었다. 그래서 대신 NIFI를 이용해 데이터 마트를 구축하기로 결정했다. nifi nifi란 데이터 ETL 툴 중 하나로, 분산환경에서 대량의 데이터를 수집하기에 용이한 프로그램이다. nifi는 실시간 처리에 적합하고, 웹 UI를 지원하.. 2023. 5. 21.
JAVA-HIVE/HBASE 간 통신_HBase 통신 HBase는 Hadoop에 데이터를 저장하는 일종의 NoSQL DB라고 볼 수 있다. 이전 포스팅인 Hive의 경우, 기존 RDB와 DDL을 제외하면 대부분이 비슷했었지만, HBase는 HBase만의 문법이 존재했고, 이는 Java Application에도 적용되었다. CREATE - CREATE ALTER - ALTER DROP - DROP INSERT - PUT UPDATE - PUT DELETE - DELETE SELECT - GET/SCAN 현 포스팅에서는 MyBatis가 아닌 HBase 자체 문법을 사용해 HBase와 통신하는 방법을 다룰 것이다. 또한 각 칼럼이 칼럼패밀리-칼럼퀄리파이어로 구성되는데, 지금 포스팅에서는 칼럼 = 칼럼패밀리 = 칼럼퀄리파이어로 구성해서 진행할 예정이다. 먼저 HB.. 2023. 1. 22.
JAVA-HIVE/HBASE 간 통신_Hive 통신 Hive는 HDFS에 데이터를 저장하고 이를 RDB처럼 보여주는 Hadoop의 데이터베이스이다. Hive는 Java의 HIVE-JDBC 드라이버와 HIVESERVER2 간의 연동을 통해 쉽게 접근할 수 있다. 구글링 결과 JPA를 적용할 수 도 있을 것으로 보이는데, 이번 프로젝트에서는 DML뿐 아니라 DDL도 사용해야 했기에 JPA를 사용하지 않았다. 그래서 JPA 대신 MyBatis를 적용했고, 현 포스팅에서도 Mybatis를 사용한 Hive 접근을 다룰 예정이다. 1. 프로젝트 생성 우선 프로젝트를 다음과 같이 생성했다. Maven Java : 1.8 Spring Boot : 2.7.7 Dependency : Lombok, MyBatis Framework 다음으로 Hive에 접근하기 위한 Depen.. 2023. 1. 22.
JAVA-HIVE/HBASE 간 통신_Hadoop/HIVE/HBase 설치 프로젝트를 진행하던 중, 빅데이터 플랫폼인 하둡의 대표적인 RDB인 Hive와, NoSQL DB인 HBase에 데이러틀 적재해야 하는 프로그램을 짜야할 일이 생겼다. Hadoop 기반 개발은 처음이기에 꽤 많이 헤멨었고, 언젠가 또 Hadoop 기반 개발을 해야할 지 모르는 상황이 발생하면 이번처럼 헤매지 않기 위해 간단한 Java를 통한 HIVE/HBASE 연동 방법을 코드로 구현하는 방법을 대략적으로 적어놓고자 한다. 우선 Java Application과 연동되기 위한 Hadoop 인프라를 먼저 설치한다. Hadoop이 설치될 서버는 다음과 같이 구성했다. OS : CentOS 7.9 ROM : 32GB RAM : 8GB 사실 RAM이 중요한데, 로컬 컴퓨터에 램의 용량이 크지 않아 8GB로 설정했다.. 2023. 1. 21.