Big Data/Apache Hive: 5개의 글
Shell Script에서 외부 하이브 테이블 가져오는 방법 외부에서 하이브 테이블 가져오기 (외부) 하이브 테이블 데이터 복사 (내부) 하이브 테이블 생성 (내부) 데이터 하이브 테이블로 로드(Load) 쉘(shell)에서 데이터를 덤프, 테이블 생성, 로드 까지 하는 방법 스크립트 스크립트에서 첫번째로 hadoop distcp를 이용해서 데이터를 덤프해 오자. cat을 이용해서 하이브 쿼리를 특정 디렉토리의 .hql을 생성 .hql의 파일을 hive -f를 통해서 실행 위 과정에서 Hive 쿼리를 직접 입력하지 않고, hql을 생성한 이유는 이후에 스크립트에서가 아닌 스크립트 내에 있는 여러 쿼리들 중에서 하나만 실행하고 싶을때 사용하면 좋다. 또한 cat을 이용하는 이유는 하이브 쿼리를 순수하게 그..
하이브에서 랜덤 샘플링 하는 방법 (셔플링) 하이브에서 수백만 수천만의 행이 있다고 생각을 해보자, 효율적으로 고정된 숫자를 임의로 샘플링을 하고 싶다면, 어떻게 효율적으로 할 수 있을까? 하지만, 동일한 방법으로 1000개를 가져오는 쿼리를 수행하면 같은 데이터가 샘플링이 된다. order by sql select * from my_table order by rand() limit 1000; 그렇다면, 임의로 정렬을 한뒤에 샘플링을 하면 어떨까? 아래와 같이 샘플링을 하면, 임의로 데이터를 정렬을 한 뒤에 1000개를 추출하기 때문에 매번 다른 결과를 준다. sort by sql select * from my_table sort by rand() limit 1000; 하지만 하이브에서는 데이터의 양이 ..
하이브(Hive) 테이블 join 성능 올리기, 최적화, 튜닝하는 방법 들어가며 하이브에서 테이블 조인의 성능을 올리기 위해서는 다양한 방법이 있지만, 크게 두가지 방법에 대해서 설명을 한다. 하이브에서 큰 두개의 테이블을 만약 그냥 조인을 한다면 쿼리를 날리고 다음 날 아침에 와도, 쿼리는 동작하고 있을 것이다. 두개의 테이블을 조인을 해보자 두개의 테이블을 조인을 하기 전에, 각 테이블의 성격을 알아야 한다. 한개의 테이블의 metadata의 성격이 있는 테이블, 즉 작은 테이블의 사이즈라면, 해당 테이블을 메모리에 올린 이후에, 조인을 하면 성능이 올라갈 것이고, 두 테이블이 너무 커서 메모리에 올리기 어렵다면, 조인할 키를 뭉탱이로 뭉쳐서 뭉탱이 끼리 조인을 하면 빠르게 할 수 있다. Map-Si..
하이브(Hive) 테이블 클러스터간 복사하기 두개의 클러스터(Cluster) A, B가 있다고 가정하고, A에서 B로 하이브 테이블을 복사하는 방법에 대해서 설명한다. 순서 [A]에서 [A]의 HDFS로 테이블 export [A]에서 [B]의 HDFS로 데이터 copy [B]의 HDFS에서 Hive로 데이터 import 코드 --export export table DB.table_name to 'hdfs://A:8020/data/import/table_name' --distcp hadoop distcp hdfs://A:8020/data/import/table_name hdfs://B:8020/data/import/table_name --import import external table DB.table_..
하이브(Hive) 테이블 생성 하이브 테이블이 만약 textfile로 되어 있다면, 테이블을 load하거나, hue에서 테이블을 로딩할때 에러가 발생하는 경우가 있다. malformed ORC 에러가 뜬다면, 하이브 테이블의 타입을 확인할 필요가 있다. 이럴 경우에는 아래와 같이 기존 textfile을 orc테이블의 형태로 생성한 뒤에 export/import를 하면 에러 없이 진행이 된다. 코드 drop table if exists target_table; CREATE TABLE target_table stored as orc tblproperties ("orc.compress"="ZLIB") as select * from source_table; 출처 : ourcstory.tistory.com/370..