배치로 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 |
댓글