본문 바로가기

미분류/Hadoop

NiFi 활용기 ) Oracle과 Hive 연결 (실패기)

[중요] Oracle 연결을 해봤으니 이제 HIVE를 연동하여 원하는 정보를 담은 테이블을 옮겨본다.

1. Hive?

 Hadoop은 System이 많아서 참 헷갈리는데, Kafka나 Zookeeper Sqoop과 같은 대부분의 친구들은 목적이 명확하고 사용법이 잘 명시되어 있어서 이해하기가 쉽다. 하지만 유독 Hadoop DB라는 Hive, Impala나 Spark, Presto 친구들은 무슨 말 하는지도 잘 모르겠고(내가 빡대가리라서?ㅎ) 정확한 사용법도 잘 모르겠다. 그래서 찾아봄. 

 일단 HDFS에 대해 이해가 필요하다. 분산 환경에 데이터를 저장하는 기능인데 직접 구성해봤다면 이해하기 편하다. Master + Slave 구조에서 하나의 파일을 특정 사이즈로 분리한 뒤 N개로 복제하여 분산 환경에 저장하는 것이다. 이 과정에서 디스크 IO를 줄일 수 있어 매우 빠르게 읽을 수 있고! 데이터가 유실될 확률을 줄여준다. Master는 계속해서 하트비트로 Slave를 확인하고 Master 자체도 HA 구성이 가능하다. 빠질 수 없는 우리의 YARN은 하둡 과정에서 리소스 관리를 해준다.

 하지만 이해ㅋ한ㅋ만큼ㅋ 사용할 수 있다면 얼마나 좋을까? 이 정도 이해하는 것도 오랜 시간이 걸렸고... 그것은 남들도 마찬가지일 것이다. HDFS 그대로 사용하는건 무리가 있다. Map-Reduce를 직접 짜보면 알지만 작성이 까다롭고 개발자가 아닌 이상 쉽지 않다. 그래서 여러 에코 시스템이 나온 것이다. 더 쉽고, 더 편하게 분산처리 할 수 있게 말이다. 

 HIVE의 존재또한 위 과정과 일맥상통한다. ANSI SQL에 익숙한 사람들이 Map-Reduce를 편하게 진행하기 위한 도구인 것이다. 정확히 말하면 Database는 아니고(왜 Mysql이 필요한지 여기서 깨달았다) DW인 것이다. Hive Architecture를 보면 더 이해가 쉽다.

직접 저장하지 않고 Metastore를 이용한다. 이 것을 어디에 구성하는지는 Hive를 구성하다보면 알게된다. 다른 RDB에 하는데 이 곳에서는 HDFS 상의 데이터를 Table 형식으로 저장하고 있다. 여기서 스파크가 따-란 하고 등장한다.

Map-Reduce의 자체적인 단점을 막기 위해 Spark가 사용된다. Hive는 방식을 따라갈 뿐이다. 이 분이 너무 정리를 잘해놓으셔서 링크 건다

2. Oracle to Hive

 (1) 대충 이해했으니 실제로 해본다. Hive는 HDFS 상에 자신의 데이터를 가지고 있다. 먼저 옮겨줄 테이블의 폴더를 만들어준다.

(2) Hive 테이블을 만들어준다. 이 때에 3가지 절차를 밟아야 한다.

- Table is stored as ORC

- Transactional Property is set to "True"

- The Table is Bucketed

hive> CREATE EXTERNAL TABLE
    > REAL_TIME_KEYWORD(REAL_DATE STRING, KEYWORD STRING)
    > CLUSTERED BY (REAL_DATE) INTO 3 BUCKETS
    > ROW FORMAT DELIMITED
    > STORED AS ORC
    > LOCATION '/user/hive/warehouse/real_time_keyword'
    > TBLPROPERTIES('transactional'='true');

Hive Metastore 어지간하면 바꾸지 말자..^-^ 하루 종일 고생했ㄸ ㅏ..★

(3) 이제 NiFi를 Configure 해준다.

하지만 희안하게 ~ 안됨~~~~~~~~~~~~~~~~~~ ㅎㅎ

이렇게 서로 연결도 됐는데 세팅의 문제 같다 . . . . . . . . . . . . 막상 들어오는 데이터가 없다 

큐에도 들어가고 ... 그러는데도 .. 따흐흑.

SELECT 여러번의 문제는 cron에서 스케줄링을 조정해주면 되었다.

오라클은 어제 한 그대로 했는데 이 친구는 오류도 안뜨고 (더 답답) 좀 더 해봐야겠다.. 성공하면 .. 수정해서 포스팅..

찾아보니 NiFi는 Hive 2.3.~ 버전과 호환이 잘 안된다고 한다... 재설치해서 다시 포스팅해야겠다.

링크 : https://stackoverflow.com/questions/49079577/apache-nifi-puthivestreaming-is-not-connecting