본문 바로가기
Biz/Etc

배치로 Hive 로 보내기

by 조병희 2016. 4. 3.

배치로 Hdfs 로 옮기는 방법은 여러 가지가 있고 최근 들어 나오는 컴포넌트들을 사용하면 쉽게 할 수 있다. 하지만 보안 등의 이슈로 인해 이러한 컴포넌트들을 사용할 수 없을 때 그리고 텍스트 파일 경우 사용할 간단한 방법을 알아보자.

많은 종류의 Sql on Hadoop 이 있지만 아직까지 비교적 느리지만 Hive 가 여러 방면으로 유용하게 사용되고 있다. 조회를 해보기 위해 Hive에서 특정 디렉토리를 external 로 잡은 테이블로 생성한다.

올릴 파일들의 크기가 너무 작은 파일들이 많다면 묶어서 올리는 것이 좋다.

cat <landing_path>/<file_pattern> | hadoop fs –put - <hdfs_path>/<target_hdfs_filename>

그러데 배치인 경우에는 매일 올리거나 하는 경우가 많은데 roll back 이나 관리가 어려울 수 있다.

다행히 Hive 에서는 파티션을 물리적인 디렉토리로 구분하여 저장한다. Hive에서 테이블을 다음과 같이 구성한다.

CREATE EXTERNAL TABLE daily_transaction (

Column_1

….

Column_N

)

PARTITIONED BY (transaction_date string)

<additional table specifications> ;

 

그리고 배치프로그램에서 일자별로 디렉토리를 생성하여 넣어주면 하루하루 데이터들이 들어가고, 혹 문제가 생기더라도 해당 파티션만 날려주면 된다.

hadoop fs –mkdir <hdfs_data_path>/daily_transaction/<YYYYMMDD>

cat <local_landing_path>/<filename> |

<data_quality_filter> | tr ',' '\001' |

hadoop fs –put  -  <hdfs_data_path>/daily_transaction/<YYYYMMDD>/<filename>

 

새로 생성된 파티션은 add partition 으로 Hive에서 알아채도록 한다.

hive –e "ALTER TABLE daily_transaction ADD PARTITION (transaction_date = 'YYYYMMDD')

LOCATION '<hdfs_data_path>/daily_transaction/YYYYMMDD';"

반대로 파티션을 날릴 때는 아래와 같이 하거나 MSCK REPAIR를 통해서도 가능하다.

ALTER TABLE daily_transaction

DROP PARTITION (transaction_date = '<YYYYMMDD>')

DROP PARTITION (transaction_date = '<YYYYMMDD>')

DROP PARTITION (transaction_date = '<YYYYMMDD>')

….

;

'Biz > Etc' 카테고리의 다른 글

Hortonwork ambari admin password reset  (0) 2016.05.20
a loading into HDFS - Part1  (0) 2016.05.18
Loading RCFile Format Data into Oracle Database  (0) 2016.03.25
Bringing ORC Support into Apache Spark  (0) 2016.03.25
A Lap Around Apache Spark on HDP  (0) 2016.03.25

댓글