분류 전체보기 1385

Hive ORDER BY, SORT BY, DISTRIBUTE BY, CLUSTER BY

Hive ORDER BY, SORT BY, DISTRIBUTE BY, CLUSTER BY · Version : Hive 하이브 또는 RDBMS에서 ORDER BY는 쿼리 결과 집합에 대해서 전체 정렬을 수행한다. 하이브에서 ORDER BY는 모든 데이터가 하나의 리듀서로 처리되기 때문에 데이터 셋이 클수록 시간이 오래 걸린다. ORDER BY에 오랜 시간을 수행될 수 있기 때문에 하이브는 hive.mapred.node가 strict로 설정되었을 경우 ORDER BY절에 대해서 LIMIT 를 요구한다. 기본값은 nonstrict 이다. 하이브에서 ORDER BY 대신 SORT BY를 사용하면 각 리듀서에서 지역 정렬하여 출력한다. ORDER와SORT를 사용할 경우 어떠한 컬럼이라도 지정할 수도 있고 ASC..

Hive Map-Side-Join, Bucket-Map-Join, Sort-Merge-Join

Hive Map-Side-Join, Bucket-Map-Join, Sort-Merge-Join · Version : Hive Hive에서 조인 명령을 실행할때, 크기가 작은 테이블은 메모리에 캐시하고 크기가 큰 테이블은 맵퍼로 흘려 보낼 수 있다. 하이브는 메모리에 캐시한 작은 테이블로 부터 일치하는 모든 것을 찾아 낼 수 있기 때문에 맵에서 모든 조인을 할 수 있다. 이렇게 하면 일반 조인 시나리오에서 필요한 리듀스 단계를 제거할 수 있다. 데이터가 작을 수록 맵 사이드 조인은 일반 조인보다 효율이 좋다. 리듀스 단계를 제거할 뿐만 아니라 맵 단계 역시 줄어들기 때문이다.맵 사이드 조인을 활성화 하기 위해서는 hive.auto.convert.join 속성을 true로 설정해야한다. 기본값은 false ..

Hive Left Semi Join (세미 조인) 과 Cartesian Product Join (카테시안 프로덕트 조인)

Hive Left Semi Join (세미 조인) 과 Cartesian Product Join (카테시안 프로덕트 조인) · Version : Hive Hive에서 Left Semi Join (왼쪽 세미 조인)은 오른쪽 테이블에서 ON 조건을 만족하는 레코드를 찾을 경우 왼쪽 테이블의 레코드를 반환한다. 일반적인 RDBMS의 SQL은 조건을 만족하기 위해 IN 또는 EXISTS 구문을 지원하지만, 하이브에서는 동작하지 않는다. 하이브는 기본적으로 Right Semi Join (오른쪽 세미 조인) 을 지원하지 않으며 SELECT 와 WHERE절에서 오른쪽 테이블의 컬럼을 참조 할 수 없음에 주의해야 한다. 아래 스크립트는 하이브에서 사용할 수 있는 Left Semi Join의 예시이다. select a.c..

Hive JOIN 및 조인 최적화

Hive JOIN 및 조인 최적화 · Version : Hive Hive는 RDBMS와 같은 JOIN(조인) 구문을 제공하며 기능도 거의 유사하지만 동등조인(EQUI-JOIN)만 제공한다. 내부조인(INNER JOIN)의 경우 조인하는 모든 테이블에서 일치하는 레코드만 반환한다. ON 절은 두 테이블에서 조인할 레코드의 조건을명시한다. select a.col_1, b.col_2 from tbl_a inner join tbl_b on a.col_1 = b.col_1 RDBMS의 표준 SQL의 경우 조인 키에 대해서 비동등 조인(NON-EQUI-JOIN)을 허용하지만 하이브에서는 제공하지 않는다. 또한 하이브에서는 ON절에서 OR 조건의 사용을 허용하지 않는다. 만약 ON 절에 OR를 사용하려고 한다면 아래..

Hive LIKE 와 RLIKE

Hive LIKE 와 RLIKE · Version : Hive Hive에서 LIKE 구문은 RDBMS의 LIKE 구문과 동일한 동작으로, 어떤 서브 문자열(substring)이 문자열의 시작이나 끝, 혹은 문자열 내에서 일치하는지 확인할 수 있다. 아래 스크립트는 LIKE 구문으로 검색한 것이며, OR 절을 사용하여 여러개의 LIKE 구문을 사용하였다. DROP TABLE IF EXISTS TBL_A; CREATE TABLE TBL_A( COL_1 STRING ); INSERT INTO TBL_A(COL_1) VALUES ('CHICAGO'), ('NEWYORK'); SELECT * FROM TBL_A WHERE COL_1 LIKE '%CA%' OR COL_1 LIKE '%YO%'; 하이브는 LIKE 절..

HDFS fsimage와 에디트 로그

HDFS fsimage와 에디트 로그 · Version : HDFS HDFS 에서 클라이언트가 파일을 생성하거나 이동할때 에디트 로그에 먼저 기록한다. 네임노드는 파일시스템 메타데이터를 메모리로 로드하여 인-메모리 자료구조로 관리하며 에디트 로그가 수정된 후 업데이트를 진행한다. 인-메모리 메타데이터는 읽기 요청을 수행하는데 사용되며 각 디렉터리에 쓰기 동작이 끝나고 나서 성공했다는 결과가 클라이언트로 반환 되기전에 에디트 로그를 플러시하여 동기화한다. 이렇게 함으로서 장애가 발생해도 데이터 유실을 방지할 수 있다. fsimage는 파일시스템 데이터의 영속적인 체크포인트 파일이다. 하지만 개별 쓰기 동작 때마다 갱신되지는 않는다. fsimage는 파일 시스템에서 존재하는 모든 디렉터리와 파일 아이노드(i..

Hive는 무조건 MapReduce를 사용할까?

Hive는 무조건 MapReduce를 사용할까 · Version : Hive Hive에서 쿼리를 실행할때, 무조건 맵리듀스(MapReduce)를 사용할까? 하이브에서 대부분의 쿼리를 실행할 경우 맵리듀스가 사용된다. 하지만 일부 쿼리의 경우 로컬 모드 환경에서 맵리듀스를 사용하지 않고도 쿼리가 동작 할수도 있다. 예를 들어 아래 스크립트 처럼 단순히 테이블을 조회하는 쿼리는 맵리듀스를 사용하지 않는다. select * from tbl_a; 단순히 SELECT와 같은 쿼리는 하이브가 테이블로 부터 레코드를 읽고 형식에 맞춰서 콘솔로 출력한다. 이 경우 맵리듀스 작업대신 파일에서 Fetch Task로 전체 데이터를 가져온다. 마치 아래 하둡 명령과 유사하다. hadoop fs -cat $ file_name ..

Hive에서 SELECT 결과를 테이블로 INSERT 하기

Hive에서 SELECT 결과를 테이블로 INSERT 하기 · Version : Hive Hive에서 쿼리 결과를 테이블에 입력할때, 이미 존재하는 테이블에 데이터를 입력할수도 있으며, 새로운 테이블을 생성하며 데이터를 입력할 수도 있다. 이미 존재하는 테이블에 SELECT된 결과를 저장할 때는 INSERT 구문을 사용한다. OVERWRITE 예약어를 사용하여 해당 파티션의 데이터를 교체할 수 있다. OVERWRITE 예약어를 INTO로 변경하면 하이브는 데이터를 교체하지 않고 원래 데이터에 추가한다. INSERT OVERWRITE TABLE tbl_new PARTITION (month = '1', day = '1') select * from tbl_origin as origin where origin...

Hive 테이블 삭제, 수정

Hive 테이블 삭제, 수정 · Version : Hive 하이브에서 테이블을 삭제하는 명령은 DROP TABLE 명령어를 사용한다. DROP TABLE IF EXISTS table_name; 테이블을 삭제할때, 하둡의 휴지통기능이 활성화되어 있으면 데이터는 분산 파일 시스템의 .Trash 디렉터리로 이동된다. 휴지통 기능에 설정된 시간이후 데이터가 완전히 삭제 된다. 휴지통 기능이 비활성화 되어 있는 경우 즉시 삭제된다. 또한 삭제하려는 테이블이 외부 테이블인경우, 테이블의 메타데이터만 삭제되며 데이터는 그대로 남아있다. 테이블 수정은 ALTER TABLE 명령을 사용하여 변경한다. 테이블 수정은 메타데이터만 변경할 뿐 데이터 자체는 변경시키지 않는다. [테이블명 변경] Table_name 테이블명을 ..

2020-07-04 Big Bear Lake Camping (빅베어 호수 캠핑)

2020-07-04 Big Bear Lake Camping (빅베어 호수 캠핑) - Serrano campground 2020년 7월 4일, LA에서 약 2시간 거리인 빅베어 호수(Big Bear Lake)로 캠핑을 떠낫다. 지난 캠핑을 다년온후 1주일만에 다시 떠나는 캠핑이어서 그런지, 쉽게 준비가 되었다. 우스갯 소리로, “삼대가 덕을 쌓아야 7월4일(미국 독립 기념일)에 스팟을 예약할 수 있다”고 했는데, 매일 같이 예약 사이트를 리프레시 하면서 취소된 스팟을 잡을 수 있었다. 그것도 매우 좋은 자리로! 1박2일 일정으로 캠핑을 하였고, 낮에는 매우 더우면서도 밤에는 매우 추웠으며(고도 7000ft), 일주일 정도 머무르면서 호숫가 산책과 생각하는 시간을 가지고 싶은 장소였다. 특히 겨울에는 눈이 ..

Kang's Life 2020.07.06