Apache hive
-
Upload
hyeonseok-choi -
Category
Technology
-
view
1.796 -
download
5
Transcript of Apache hive
Hive아꿈사Cecil
13년 10월 7일 월요일
Contents• 하이브란?
• 하이브 설치하기
• 하이브의 컨포넌트
• 전통적인 데이터 베이스와의 비교
• HiveQL
• 테이블
• 데이터 쿼리하기
• References
13년 10월 7일 월요일
하이브란?
하둡에 저장된 데이터를 쉽게 처리할 수 있는데이터웨어하우스 패키지
Facebook에서 매일 같이 생산되는 대량의 데이터를 관리하고 학습하기 위해 개발
What is the data warehouse?In computing, a data warehouse or enterprise data warehouse (DW, DWH, or EDW) is a database used for reporting and data analysis. It is a central repository of data which is created by integrating data from one or more disparate sources. Data warehouses store current as well as historical data and are used for creating trending reports for senior management reporting such as annual and quarterly comparisons
wikipidea(http://en.wikipedia.org/wiki/Data_warehouse)
13년 10월 7일 월요일
하이브 설치하기• 요구사항
- Java 1.6 이상- Hadoop 0.20.x (버전은 크게 상관 없음)
• 설치 및 실행- http://mirror.apache-kr.org/hive/stable/hive-0.10.0.tar.gz 다운 로드 후 압축 해제- 환경 변수 설정: $HADOOP_HOME
- 실행을 위한 기본 파일 생성 및 권한 설정‣ hadoop fs -mkdir /tmp‣ hadoop fs -chmod a+w /tmp‣ hadoop fs -mkdir /user/hive/warehouse‣ hadoop fs -chmod a+w /user/hive/warehouse
- 하이브 셸 실행: hive
13년 10월 7일 월요일
FAILED: Error in metadata: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClientFAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask
Hive 실행시 아래와 같은 예외가 발생하는 경우
• 원인: hadoop을 직접 Build를 수행한 적이 있을 경우 classpath에
동일한 jar 파일이 여러번 참조되어 발생함
• 해결책: $HADOOP_HOME/build 디렉토리 삭제 or 이름 변경
13년 10월 7일 월요일
하이브의 컨포넌트
13년 10월 7일 월요일
하이브 설정• config 파일 설정
- hive-site.xml 파일이 아닌 경로를 설정
- 하이브 셸 실행 시
‣ hive --config <디렉토리 경로>
• 속성 설정- 하이브 셸 실행 시‣ hive -hiveconf fs.default.name=localhost
- 셸 내에서
‣ hive> SET hive.enforce.bucketing=true
13년 10월 7일 월요일
속성 지정 우선 순위
1. 하이브 SET 명령어2. 명령행 -hiveconf 옵션3. hive-site.xml
4. hive-default.xml
5. hadoop-site.xml
6. hadoop-default.xml
13년 10월 7일 월요일
로깅
• 설정- conf/hive-log4j.properties
• 기본 로그 파일 위치- /tmp/$USER/hive.log
• 하이브 셸 실행시 옵션 변경- hive -hiveconf hive.root.logger=DEBUG,console
13년 10월 7일 월요일
하이브 서비스
cli하이브 셸에 대한 명령행 인터페이스
hiveserver쓰리프트, JDBC, ODBC 연결자를 사용하는 응용 프로그램은 하이브와 통신하기 위하여 하이브 서버를 필요
hwi하이브 웹 인터페이스
jarclasspath에 하둡과 하이브 클래스 모두를 사용하는 자바 응용 프로그램을 실행하기 위한 방법. hadoop jar 와
metastore하이브 실행시 메타 데이터가 저장되는 장소
13년 10월 7일 월요일
The Hive Web Interface (HWI)$V�DQ�DOWHUQDWLYH�WR�WKH�VKHOO��\RX�PLJKW�ZDQW�WR�WU\�+LYH¦V�VLPSOH�ZHE�LQWHUIDFH��6WDUWLW�XVLQJ�WKH�IROORZLQJ�FRPPDQGV�
% export ANT_LIB=/path/to/ant/lib% hive --service hwi
�<RX�RQO\�QHHG�WR�VHW�WKH�ANT_LIB�HQYLURQPHQW�YDULDEOH�LI�$QW¦V�OLEUDU\�LV�QRW�IRXQGLQ� �RSW�DQW�OLE� RQ� \RXU� V\VWHP��� 7KHQ� QDYLJDWH� WR� KWWS���ORFDOKRVW������KZL� LQ� \RXUEURZVHU��)URP�WKHUH��\RX�FDQ�EURZVH�+LYH�GDWDEDVH�VFKHPDV�DQG�FUHDWH�VHVVLRQV�IRULVVXLQJ�FRPPDQGV�DQG�TXHULHV�
,W¦V�SRVVLEOH�WR�UXQ�WKH�ZHE�LQWHUIDFH�DV�D�VKDUHG�VHUYLFH�WR�JLYH�XVHUV�ZLWKLQ�DQ�RUJD�QL]DWLRQ�DFFHVV�WR�+LYH�ZLWKRXW�KDYLQJ�WR�LQVWDOO�DQ\�FOLHQW�VRIWZDUH��7KHUH�DUH�PRUHGHWDLOV�RQ�WKH�+LYH�:HE�,QWHUIDFH�RQ�WKH�+LYH�ZLNL�DW�KWWSV���FZLNL�DSDFKH�RUJ�FRQIOXHQFH�GLVSOD\�+LYH�+LYH:HE,QWHUIDFH�
Hive clients,I�\RX�UXQ�+LYH�DV�D�VHUYHU��hive --service hiveserver���WKHQ�WKHUH�DUH�D�QXPEHU�RIGLIIHUHQW�PHFKDQLVPV�IRU�FRQQHFWLQJ�WR�LW�IURP�DSSOLFDWLRQV��7KH�UHODWLRQVKLS�EHWZHHQ+LYH�FOLHQWV�DQG�+LYH�VHUYLFHV�LV�LOOXVWUDWHG�LQ�)LJXUH������
)LJXUH�������+LYH�DUFKLWHFWXUH
418 | Chapter 12:ಗHive
www.it-ebooks.info
하이브 서비스 아키텍처
13년 10월 7일 월요일
메타 스토어
하이브 메타데이터에서 가장 중요한 저장소
• 서비스와 데이터 저장소로 이루어짐• 기본 설정값
- 메타 데이터 서비스: 하이브 서비스와 동일 JVM에서 실행- 데이터 저장소: 로컬 디스크 임베디드 더비 데이터 베이스
13년 10월 7일 월요일
PDFKLQH�� $Q\� -'%&�FRPSOLDQW� GDWDEDVH� PD\� EH� XVHG� E\� VHWWLQJ� WKHjavax.jdo.option.*�FRQILJXUDWLRQ�SURSHUWLHV�OLVWHG�LQ�7DEOH�������
0\64/� LV� D� SRSXODU� FKRLFH� IRU� WKH� VWDQGDORQH� PHWDVWRUH�� ,Q� WKLV� FDVH�javax.jdo.option.ConnectionURL�LV�VHW�WR�jdbc:mysql://host/dbname?createDatabaseIfNotExist=true�� DQG� javax.jdo.option.ConnectionDriverName� LV� VHW� WRcom.mysql.jdbc.Driver���7KH�XVHU�QDPH�DQG�SDVVZRUG�VKRXOG�EH�VHW��WRR��RI�FRXUVH��7KH�-'%&�GULYHU�-$5�ILOH�IRU�0\64/��&RQQHFWRU�-��PXVW�EH�RQ�+LYH¦V�FODVVSDWK��ZKLFKLV�VLPSO\�DFKLHYHG�E\�SODFLQJ�LW�LQ�+LYH¦V�OLE�GLUHFWRU\�
*RLQJ�D�VWHS�IXUWKHU�� WKHUH¦V�DQRWKHU�PHWDVWRUH�FRQILJXUDWLRQ�FDOOHG�D�UHPRWH�PHWD�VWRUH��ZKHUH�RQH�RU�PRUH�PHWDVWRUH�VHUYHUV�UXQ�LQ�VHSDUDWH�SURFHVVHV�WR�WKH�+LYH�VHUYLFH�7KLV�EULQJV�EHWWHU�PDQDJHDELOLW\�DQG�VHFXULW\��VLQFH�WKH�GDWDEDVH�WLHU�FDQ�EH�FRPSOHWHO\ILUHZDOOHG�RII��DQG�WKH�FOLHQWV�QR�ORQJHU�QHHG�WKH�GDWDEDVH�FUHGHQWLDOV�
)LJXUH�������0HWDVWRUH�FRQILJXUDWLRQV
�� 7KH�SURSHUWLHV�KDYH�WKH�javax.jdo�SUHIL[�VLQFH�WKH�PHWDVWRUH�LPSOHPHQWDWLRQ�XVHV�WKH�-DYD�'DWD�2EMHFWV�-'2��$3,�IRU�SHUVLVWLQJ�-DYD�REMHFWV��,W�XVHV�WKH�'DWD1XFOHXV�LPSOHPHQWDWLRQ�RI�-'2�
420 | Chapter 12:ಗHive
www.it-ebooks.info
메타 스토어 설정
주요 속성• 하이브 기본 디렉토리
- hive.metastore.warehouse.dir
• 임베디드 메타 스토어 사용유무- hive.metastore.local
- 0.10 버전에서 duplicate 됨• 연결할 메타 스토어 서버
- hive.metastore.uris
• ETC
- javax.jdo.option.xxxx
13년 10월 7일 월요일
전통적인 데이터 베이스와의 비교
13년 10월 7일 월요일
테이블 스키마 검증 시점
전통적인 데이터 베이스• 데이터를 적재하는 시점에 검증• 만일 Insert중인 데이터가 스키마에 부합되지 않으면 데이터 거부• 컬럼 단위로 색인이 가능하기 때문에 빠른 쿼리 성능을 제공
하이브• 쿼리 실행시 데이터 검증• 데이터의 매우 빠른 적재를 제공 (ex: 파일 복사 or 이동)
• 동일 데이터를 두 스키마로 다루어야 할때 훌륭한 유연성을 제공
13년 10월 7일 월요일
갱신, 트랜잭션, 색인
• 하이브는 갱신을 지원하지 않음• 락 매카니즘
• 주키퍼를 사용하여 테이블과 파티션 수준의 락을 지원(0.7.0)
• 지원 색인• 0.7.0부터 특별한 경우를 위한 색인 기능을 제공• 컴팩트, 비트맵 타입 지원
13년 10월 7일 월요일
HiveQL
13년 10월 7일 월요일
표준 SQL과의 주요 차이
속성 SQL HiveQL
갱신 UPDATE, INSERT, DELETE INSERT OVERWRITE TABLE
데이터형 정수형, 부동 소수점, 고정소수점, 텍스트, 바이너리, 시간 추가적으로 배열, 맵, 구조체 지원
다중 테이블 삽입 지원하지 않음 지원
조인 FROM 절에서 테이블 조인WHERE 절에서도 조건 지원 (SQL-92 지원)
내부조인, 외부조인, 세미조인, 맵조인지원(WHERE절 조건 지원 X)
서브쿼리 어떠한 절에서도 사용가능 FROM 절에서만 사용 가능
뷰 업데이트 가능 읽기 전용
확장 가능성 사용자 정의 함수, 저장 프로시저 사용자 정의 함수, 맵-리듀스 스크립트
13년 10월 7일 월요일
데이터형
Feature SQL HiveQL References
Joins SQL-92 or variants (jointables in the FROM clause,join condition in theWHERE clause)
Inner joins, outer joins, semijoins, map joins. SQL-92syntax, with hinting.
“Joins” on page 443
Subqueries In any clause. Correlated ornoncorrelated.
Only in the FROM clause.Correlated subqueries notsupported
“Subqueries” on page 446
Views Updatable. Materialized ornonmaterialized.
Read-only. Materializedviews not supported
“Views” on page 447
Extension points User-defined functions.Stored procedures.
User-defined functions.MapReduce scripts.
“User-Defined Functions” on page 448,“MapReduce Scripts” on page 442
Data Types+LYH� VXSSRUWV� ERWK�SULPLWLYH� DQG� FRPSOH[�GDWD� W\SHV�� 3ULPLWLYHV� LQFOXGH�QXPHULF�ERROHDQ��VWULQJ��DQG�WLPHVWDPS�W\SHV��7KH�FRPSOH[�GDWD�W\SHV�LQFOXGH�DUUD\V��PDSV�DQG�VWUXFWV��+LYH¦V�GDWD�W\SHV�DUH�OLVWHG�LQ�7DEOH�������1RWH�WKDW�WKH�OLWHUDOV�VKRZQ�DUHWKRVH�XVHG�IURP�ZLWKLQ�+LYH4/��WKH\�DUH�QRW�WKH�VHULDOL]HG�IRUP�XVHG�LQ�WKH�WDEOH¦VVWRUDJH�IRUPDW��VHH�£6WRUDJH�)RUPDWV¤�RQ�SDJH������
7DEOH�������+LYH�GDWD�W\SHV
Category Type Description Literal examples
Primitive TINYINT 1-byte (8-bit) signed integer, from -128 to127
1
SMALLINT 2-byte (16-bit) signed integer, from-32,768 to 32,767
1
INT 4-byte (32-bit) signed integer, from-2,147,483,648 to 2,147,483,647
1
BIGINT 8-byte (64-bit) signed integer, from-9,223,372,036,854,775,808 to9,223,372,036,854,775,807
1
FLOAT 4-byte (32-bit) single-precision floating-point number
1.0
DOUBLE 8-byte (64-bit) double-precision floating-point number
1.0
BOOLEAN true/false value TRUE
STRING Character string 'a', "a"
BINARY Byte array Not supported
TIMESTAMP Timestamp with nanosecond precision 1325502245000, '2012-01-0203:04:05.123456789'
424 | Chapter 12:ಗHive
www.it-ebooks.info
Category Type Description Literal examples
Complex ARRAY An ordered collection of fields. The fieldsmust all be of the same type.
array(1, 2) a
MAP An unordered collection of key-value pairs.Keys must be primitives; values may be anytype. For a particular map, the keys mustbe the same type, and the values must bethe same type.
map('a', 1, 'b', 2)
STRUCT A collection of named fields. The fields maybe of different types.
struct('a', 1, 1.0) b
a The literal forms for arrays, maps, and structs are provided as functions. That is, array(), map(), and struct() are built-in Hive functions.b The columns are named col1, col2, col3, etc.
Primitive types+LYH¦V�SULPLWLYH�W\SHV�FRUUHVSRQG�URXJKO\�WR�-DYD¦V��DOWKRXJK�VRPH�QDPHV�DUH�LQIOX�HQFHG�E\�0\64/¦V�W\SH�QDPHV��VRPH�RI�ZKLFK��LQ�WXUQ��RYHUODS�ZLWK�64/������7KHUHDUH�IRXU�VLJQHG�LQWHJUDO�W\SHV��TINYINT��SMALLINT��INT��DQG�BIGINT��ZKLFK�DUH�HTXLYDOHQWWR�-DYD¦V�byte��short��int��DQG�long�SULPLWLYH�W\SHV��UHVSHFWLYHO\��WKH\�DUH���E\WH����E\WH���E\WH��DQG���E\WH�VLJQHG�LQWHJHUV�
+LYH¦V�IORDWLQJ�SRLQW�W\SHV��FLOAT�DQG�DOUBLE��FRUUHVSRQG�WR�-DYD¦V�float�DQG�double�ZKLFK�DUH����ELW�DQG����ELW�IORDWLQJ�SRLQW�QXPEHUV��8QOLNH�VRPH�GDWDEDVHV��WKHUH�LV�QRRSWLRQ�WR�FRQWURO�WKH�QXPEHU�RI�VLJQLILFDQW�GLJLWV�RU�GHFLPDO�SODFHV�VWRUHG�IRU�IORDWLQJSRLQW�YDOXHV�
+LYH�VXSSRUWV�D�BOOLEAN�W\SH�IRU�VWRULQJ�WUXH�DQG�IDOVH�YDOXHV�
7KHUH� LV� D� VLQJOH�+LYH�GDWD� W\SH� IRU� VWRULQJ� WH[W��STRING��ZKLFK� LV� D� YDULDEOH�OHQJWKFKDUDFWHU�VWULQJ��+LYH¦V�STRING�W\SH�LV�OLNH�VARCHAR�LQ�RWKHU�GDWDEDVHV��DOWKRXJK�WKHUHLV�QR�GHFODUDWLRQ�RI� WKH�PD[LPXP�QXPEHU�RI�FKDUDFWHUV� WR�VWRUH�ZLWK�STRING�� �7KHWKHRUHWLFDO�PD[LPXP�VL]H�STRING�WKDW�PD\�EH�VWRUHG�LV��*%��DOWKRXJK�LQ�SUDFWLFH�LW�PD\EH� LQHIILFLHQW� WR�PDWHULDOL]H� VXFK� ODUJH� YDOXHV�� 6TRRS� KDV� ODUJH� REMHFW� VXSSRUW�� VHH£,PSRUWLQJ�/DUJH�2EMHFWV¤�RQ�SDJH������
7KH�BINARY�GDWD�W\SH�LV�IRU�VWRULQJ�YDULDEOH�OHQJWK�ELQDU\�GDWD�
7KH�TIMESTAMP�GDWD�W\SH�VWRUHV�WLPHVWDPSV�ZLWK�QDQRVHFRQG�SUHFLVLRQ��+LYH�FRPHVZLWK�8')V�IRU�FRQYHUWLQJ�EHWZHHQ�+LYH�WLPHVWDPSV��8QL[�WLPHVWDPSV��VHFRQGV�VLQFHWKH�8QL[�HSRFK���DQG�VWULQJV��ZKLFK�PDNHV�PRVW�FRPPRQ�GDWH�RSHUDWLRQV�WUDFWDEOH�TIMESTAMP� GRHV� QRW� HQFDSVXODWH� D� WLPH]RQH�� KRZHYHU� WKH� to_utc_timestamp� DQGfrom_utc_timestamp�IXQFWLRQV�PDNH�LW�SRVVLEOH�WR�GR�WLPH]RQH�FRQYHUVLRQV�
Conversions3ULPLWLYH�W\SHV�IRUP�D�KLHUDUFK\��ZKLFK�GLFWDWHV�WKH�LPSOLFLW�W\SH�FRQYHUVLRQV�WKDW�+LYHZLOO�SHUIRUP��)RU�H[DPSOH��D�TINYINT�ZLOO�EH�FRQYHUWHG�WR�DQ�INT��LI�DQ�H[SUHVVLRQ�H[�
HiveQL | 425
www.it-ebooks.info
기본형과 복합형 모두 지원
13년 10월 7일 월요일
연산자와 함수
• 관계형, 산술, 논리 연산자와 같은 일반적인 SQL 연산자 제공- “||”는 문자열 연결이 아니라 논리 OR
• 여러가지 내장 함수가 포함되어 있음- hive> SHOW FUNCTIONS
• 형 변환- 암묵적 형변환을 수행하기 위해 기본형에 대한 계층 구조를 가짐- 암묵적 원칙
- 정수형, FLOAT, STRING => DOUBLE
- TINY INT, SMALL INT, INT => FLOAT
- Boolean은 어떠한 형으로 변환 안됨- 명시적 형변환: CAST 사용
13년 10월 7일 월요일
테이블
13년 10월 7일 월요일
하이브 테이블은 논리적으로 저장된 데이터와테이블에서 데이터의 배치를 기술하는 메타데이터로 구성
13년 10월 7일 월요일
관리 테이블과 외부 테이블
• 하이브는 기본적으로 테이블을 직접 관리- 데이터를 데이터웨어하우스로 이동한다는 의미
• 외부 테이블- 웨어하우스 디렉토리 외부에서 데이터를 참조
• 차이점- 삭제시 외부 테이블은 데이터를 삭제하지 않음
13년 10월 7일 월요일
파티션
컬럼의 값을 기반으로 크게 나눠놓는 방식관련된 파티션의 파일만 스캔하면 되기 때문에 효율적
CREATE TABLE logs (ts BIGINT, line STRING) PARTITIONED BY (dt STRING, country STRING);
LOAD DATA LOCAL INPATH 'input/hive/partitions/file1'
INTO TABLE logs PARTITION (dt='2001-01-01', country='GB');
/user/hive/warehouse/logs/dt=2010-01-01/country=GB/file1 /file2
/country=US/file3/dt=2010-01-02/country=GB/file4
/country=US/file5 /file6
EX) 날짜와 국가 코드로 파티셔닝할 경우
저장 디렉토리
13년 10월 7일 월요일
버킷
• 테이블이나 파티션에서 더 효율적 쿼리를 위해 사용• 사용 이유
- 추가 구조를 부여하여 효율적인 쿼리가 가능(조인, 정렬 등)
- 샘플링을 효율적으로 할수 있음
• 버킷은 테이블 디렉토리 안에 파일 하나로 표현
CREATE TABLE bucketed_users (id INT, name STRING) CLUSTERED BY (id) INTO 4 BUCKETS;
CREATE TABLE bucketed_users (id INT, name STRING) CLUSTERED BY (id) SORTED BY (id ASC) INTO 4 BUCKETS;// 정렬, 외부에서 생성된 데이터를 버킷팅된 테이블로 적재가 가능하지만
일반적으로는 존재하는 테이블에서 버킷팅 수행
hive> SELECT * FROM users; 0 Nat2 Joe3 Kay4 Ann
INSERT OVERWRITE TABLE bucketed_users SELECT * FROM users;
13년 10월 7일 월요일
기타 테이블 연산
• 데이터 임포트하기- INSERT or CATS(CREATE TABLE .. AS .. SELECT)
- ex) INSERT OVERWRITE TABLE target SELECT col1, col2 FROM source;
• 테이블 변경하기- ALTER TABLE
- ex) ALTER TABLE target ADD COLUMNS (col3 STRING);
• 테이블 삭제하기- DROP TABLE
- 데이터만 지울 경우 warehouse 디렉토리 내의 파일 제거
13년 10월 7일 월요일
데이터 쿼리하기
13년 10월 7일 월요일
ORDER BY - 전체적으로 정렬된 결과를 생성, 이를 위해 리듀서를 하나로 설정해야 함- 대규모 데이터셋에서 매우 비효율적
SORT BY- 리듀서당 정렬된 파일을 생성
DISTRIBUTE BY- 특정 로우가 특정 리듀서로 가도록 보장
정렬과 집계
FROM records2SELECT year, temperatureDISTRIBUTE BY yearSORT BY year ASC, temperature DESC;
13년 10월 7일 월요일
하둡 스트리밍과 같은 방식을 사용하여
TRANSFORM, MAP, REDUCE 절을
통해 외부 스크립트나 프로그램을 호출 가능
맵 리듀스 스크립트
#!/usr/bin/env pythonimport re import sysfor line in sys.stdin:(year, temp, q) = line.strip().split()if (temp != "9999" and re.match("[01459]", q)):print "%s\t%s" % (year, temp)
ADD FILE /path/to/is_good_quality.py;
FROM records2SELECT TRANSFORM(year, temperature, quality) USING 'is_good_quality.py'AS year, temperature;
13년 10월 7일 월요일
하이브는 내부조인, 외부조인, 세미조인, 맵 조인을 지원- 맵조인: 테이블 하나가 메모리에 적재될 만큼 충분히 작다면 하이브는
매퍼 단위로 조인을 수행할 수 있도록 지원
조인
hive> SELECT * FROM sales; Joe 2Hank 4Ali 0Eve 3Hank 2
hive> SELECT * FROM things; 2 Tie4 Coat3 Hat1 Scarf
hive> SELECT sales.*, things.*> FROM sales JOIN things ON (sales.id = things.id);Joe 2 2 TieHank 2 2 Tie Eve 3 3 Hat Hank 4 4 Coat
EX) 내부 조인 EX
13년 10월 7일 월요일
서브 쿼리 & 뷰
SELECT station, year, AVG(max_temperature) FROM (
SELECT station, year, MAX(temperature) AS max_temperature FROM records2WHERE temperature != 9999AND (quality = 0 OR quality = 1 OR quality = 4 OR quality = 5 OR quality = 9) GROUP BY station, year) mt
GROUP BY station, year;
CREATE VIEW valid_records ASSELECT *FROM records2WHERE temperature != 9999
AND (quality = 0 OR quality = 1 OR quality = 4 OR quality = 5 OR quality = 9);
13년 10월 7일 월요일
References1. Tom White (2013). 하둡 완벽가이드. (심탁길, 김현우, 옮김). 서울: 한빛미디어. (원서출판 2012)
13년 10월 7일 월요일