환경
OS : CentOs7
Java : 1.8
Hadoop : 3.1.4
Hive : 3.1.0
metastore : mysql 5.7
Hadoop cluster 구성(내 환경)
ActiveNameNode : cwhdp01 | StandbyNameNode : cwhdp02
journalNode : 3 대로 구성
external table 생성
create external table employee (
employee_id INT,
birthday DATE,
first_name STRING,
family_name STRING,
gender CHAR(1),
work_day DATE)
row format serde 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
with serdeproperties (
"separatorChar" = ",",
"quoteChar" = "'"
)stored as textfile
location '/cwdevtmp/nifi';
managed table 생성
create할때 external 이라는 걸 빼면 default로 managed table로 생성된다.
create table employee (
employee_id INT,
birthday DATE,
first_name STRING,
family_name STRING,
gender CHAR(1),
work_day DATE)
row format serde 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
with serdeproperties (
"separatorChar" = ",",
"quoteChar" = "'"
)
stored as textfile
location '/cwhdp/warehouse/tablespace/managed/hive/nifi.db'
여기서 잠깐 ~~
전체적인 흐름
사용 processor 와 흐름
GetFile > PutHDFS > SelectHiveQL > ReplaceText > PutHiveQL
사용 Processor 설명
사용한 Controller Services
HiveConnectionPool - SelectHiveQl,PutHiveQL 사용 시 필수
property 설정
로컬에서 get할 파일 위치를 property에 설정
HDFS에 put하기
Hadoop Configuration Resources : 로컬에서 core-site.xml, hdfs-site.xml 파일이 있는 위치를 작성해준다.
Directory : hdfs 내에 put할 hdfs 폴더 위치를 작성
HDFS external table에 insert한 data가 잘 들어갔는지 확인하기위해 중간에 넣었음ㅋㅋ
hive에 연결하는 processor기 때문에 HiveConnectionPool이라는 controller services가 필요하다.
HiveQL Select Query : hive 테이블에서 select문으로 data를 조회하는것이기 때문에 여기에 select문을 작성해준다.
일반 sql 문과는 다른 hiveql로 변환해야하기 때문에 변환할 sql문을 작성. nifi 데이터베이스에 employee external table -> managed table로 insert 하는 sql 문을 작성해준다.
SelectHiveQL과 마찬가지로 hive테이블에 접근하는 것이므로 Controller services를 지정해줘야한다. HiveConnectionPool