본문 바로가기

하이브18

[빅데이터] 하이브 메타스토어 통합을 지원하는 waggle-dance waggle-dance는 여러 개의 하이브 메타스토어를 통합하여 하나의 메타스토어처럼 처리할 수 있게 해주는 서비스입니다. 아래의 쿼리에서 x, y테이블은 다른 메타스토어에 존재하는데 waggle-dance가 이 메타스토어를 통합하여 하나의 메타스토어에 요청하는 것처럼 처리할 수 있게 도와줍니다. hive> SELECT * FROM local.x, remote.y WHERE x.id = y.id AND x.foo > 1 AND y.bar = 2; 특징 호텔스 닷컴에서 개발하여 오픈 소스로 변경 여러 곳에 배포된 하이브 메타스토어를 통합하여 조회할 수 있는 기능을 제공 다중 하이브 메타스토어 환경에서 통합된 정보를 제공할 수 있는 장점 테이블의 select, join 처리를 위한 통합 엔드 포인트 제공 아.. 2020. 3. 12.
[hive] 벡터화(vectorized) 처리 하이브 성능 향상의 한 방법인 벡터화(vectorized) 처리는 한 번에 처리하는 데이터의 양을 늘려서 CPU 사용률을 높이고, 처리속도를 빠르게 하는 기법입니다. 검색, 필터, 집계, 조인 처리에서 사용되고, 한 번에 1024개의 행을 동시에 처리하여 속도를 높입니다. 벡터화 설정을 하면 1024행(row)의 블록으로 한번에 작업을 처리합니다. 하나의 블록에서 열(column)은 배열로 처리됩니다. 아래의 클래스와 같이 칼럼이 ColumnVector클래스 배열로 한 번에 읽어서 처리합니다. 조회, 필터링 등에 벡터화를 이용하면 한번에 처리하는 작업이 증가하여 속도가 빨라지게 됩니다. 16억 건의 데이터를 이용해서 count명령을 처리한 결과 벡터화 처리를 하지 않으면 67.6초, 벡터화 처리를 하면 .. 2020. 1. 7.
[hive] 하이브의 조인방식(hive join) 하이브의 세가지 조인 방식에 대해서 알아보겠습니다. 셔플조인 매퍼에서 각 테이블을 읽고 셔플 단계에서 조인되는 키를 기준으로 파티션닝후 셔플을 진행하여 각 리듀서에서 조인을 수행 어떤형태의 데이터 크기와 구성에도 사용 가능 가장 자원을 많이 사용하고 느린 조인 방식 맵조인 (브로드캐스트 조인, 맵사이드 조인) 작은 사이즈의 테이블이 메모리에 올라가고, 각 매퍼에서 조인을 수행후 결과를 반환하는 방식 가장 큰 테이블에서 가장 빠른 단일 스캔 작은 테이블은 메모리에 들어갈 정도로 작아야 함 -- 맵조인 사용여부 설정, 3개 이상의 테이블을 조인할 때 맵조인 사용여부 설정하는 옵션 hive> set hive.auto.convert.join=true; hive> set hive.auto.convert.join... 2020. 1. 6.
[oozie] 우지 액션의 log4j 설정 추가 우지 5.0에서 log4j 설정을 읽지 못해서 발생하는 오류는 우지의 쉐어라이브러리에 log4j 설정을 복사해서 적용할 수 있습니다. SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/mnt/yarn/filecache/56/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/usr/lib/hadoop/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.sl.. 2019. 11. 4.
[hive] 하이브 schemaTool을 이용하여 스키마 생성 원격 하이브 메타스토어를 이용하기 위해서는 RDB에 하이브 메타스토어 스키마를 설정해야 합니다. hive-site.xml에 RDB에 접속을 위한 정보를 입력하고, 커맨드를 입력하여 스키마를 생성할 수 있습니다. hive-site.xml 설정 원격 데이터베이스에 접속하기 위한 접속정보를 설정합니다. javax.jdo.option.ConnectionURL jdbc:mysql://database_ip:database_port/database_name javax.jdo.option.ConnectionDriverName org.mariadb.jdbc.Driver javax.jdo.option.ConnectionUserName user_name javax.jdo.option.ConnectionPassword pas.. 2019. 10. 30.
[AWS-EMR] EMR의 하이브메타스토어 재시작 AWS EMR의 하이브메타스토어를 재시작하는 방법은 다음과 같습니다. * 하이브메타스토어는 hive-hcatalog-server 라는 이름으로 서비스되고 있습니다. # 운영 중지 sudo stop hive-hcatalog-server # 운영 시작 sudo start hive-hcatalog-server 2019. 10. 10.
[hive] 트랜잭션(Transactional, ACID) 테이블 구성 Hive 트랜잭션 하이브는 0.13버전부터 트랜잭션을 지원한다. 파일 수정이 없는 HDFS의 특성상 모든 기능이 완벽하게 지원되지 않고, 기본(default) 트랜잭션 설정은 off로 되어 있다. BEGIN, COMMIT, ROLLBACK은 아직 지원하지 않음, 현재는 auto-commit 만 지원 ORC 파일 포맷, 버켓팅 설정이 된 매니지드 테이블에서만 지원 Non-ACID 세션에서는 ACID 테이블에 접근 불가 상세한 내용은 Hive Wiki를 참조하면 된다. 트랜잭션 구조 HDFS는 파일의 변경/수정을 지원하지 않는다. 따라서 HDFS에서 데이터의 수정, 삭제를 지원하기 위해서 데이터를 베이스(base) 파일에 기록하고, 트랜잭션이 발생할 때마다 델타(delta) 파일에 내용을 기록한다. 그리고 .. 2018. 5. 21.
[hive] 하이브 관련 주요 면접 질문 [[하이브 면접 주요 질문]] - HBase와 Hive의 차이는?HBase는 NoSQL 데이터베이스이고 Hive는 하둡잡을 실행하는 DW 프레임워크이다. HBase는 HDFS위에서 동작하고, Hive는 MapReduce 위에서 동작한다. - 하이브 서비스에 대하여 설명하세요cli하이브 쉘에 대한 명령해 인터페이스이며 기본 서비스이다. HiveServer2다른 언어로 개발된 클라이언트와 연동할 수 있도록 하이브를 쓰리프트 서비스로 실행기존 하이브 서버를 개선하여 인증과 다중 사용자 동시성을 지원쓰리프트, JDBC, ODBC 연결자를 사용하는 애플리케이션과의 연결을 지원beeline일반적인 CLI 처럼 내장형 모드로 동작하거나 JDBC로 하이브서버2 프로세스에 접근할 수 있는 하이브의 명령행 인터페이스hwi.. 2018. 4. 18.
[개념] HCatalog, HCatalog Server HCatalog는 하이브 0.11.0 버전에 통합되었습니다. [바로가기] HCatalog Server는 Hive Metastore와 같습니다. 따라서 EMR의 경우 hive-hcatalog-server 로 실행되는 프로세스가 하이브 메타스토어 입니다. 개요 HCatalog는 하둡 에코 시스템의 데이터 처리 도구(Pig, MR, Hive)들 간의 테이블, 저장공간 관리 계층을 제공한다. HDFS 상의 파일들에 대한 추상계층을 제공하여, 사용자가 데이터의 위치, 저장 형태에 대하여 신경쓰지 않아도 되도록 제공한다. HCatalog는 파일을 읽고, 쓰기 위한 SerDe 를 제공한다. RCFile, CSV, JSON, SequenceFile, ORC 포맷을 지원한다. 사용자가 커스텀 포맷을 생성하여 처리할 수도.. 2017. 11. 28.
[hive] 하이브 테이블에 데이터 입력 방법 하이브 테이블에 데이터를 입력하기 위해서는 몇가지 방법이 존재한다. - 테이블 생성시에 LOCATION 을 지정하는 방법CREATE TABLE employee ( id String, name String ) LOCATION 'hdfs://127.0.0.1/user/data/'; - LOAD DATA INPATH 를 이용하여 HDFS 의 파일을 입력하는 방법LOAD DATA INPATH 'hdfs://127.0.0.1/user/data/sample.csv' INTO TABLE tbl;;LOAD DATA INPATH '/user/data/sample.csv' INTO TABLE tbl;; - LOAD DATA LOCAL INPATH 를 이용하여 로컬의 데이터를 입력하는 방법LOAD DATA LOCAL INP.. 2017. 2. 21.
[hive][tez][mr] 하이브 처리중 매퍼의 개수 설정하는 벙법 하이브의 맵리듀스 처리중 속도가 너무 느리다면 매퍼의 개수를 늘려서 처리를 해볼 수 있다. 이럴때 매퍼의 개수를 늘이기 위한 설정은 다음과 같다. * MR 엔진일때와 Tez 엔진일때 다른 설정을 이용한다. SET hive.exec.reducers.bytes.per.reducer=67108864;SET mapreduce.input.fileinputformat.split.minsize.per.node=134217728;SET mapreduce.input.fileinputformat.split.minsize.per.rack=134217728;SET mapreduce.input.fileinputformat.split.minsize=67108864;SET mapreduce.input.fileinputformat... 2017. 1. 17.
[hive] java.net.URISyntaxException: Relative path in absolute URI: file:./tmp/yarn 오류 처리 하이브 처리중 다음과 같은 오류가 발생하는 경우는 scratchdir 를 설정해 주면된다. 아래의 오류는 getScratchDir() 메소드를 호출하다가 오류가 발생한것을 알 수 있다. 따라서 아래의 설정을 해주면 된다. hive.exec.scratchdir/tmp/hivehive.exec.local.scratchdir/tmp/hive 위의 설정은 하이브 처리중 사용하는 플랜 파일이나, 임시 파일들을 저장하기 위하여 사용한다. 2017-01-13 07:33:08,521 INFO [hive-job uber-SubtaskRunner] org.apache.hadoop.hive.ql.exec.SerializationUtilities: Serializing MapredWork using kryo2017-01-13.. 2017. 1. 17.
[hive][error] 하이브의 mysql 커넥터 오류 수정 우지를 이용하여 하이브 액션 처리시 다음의 오류가 발생한다. Caused by: MetaException(message:For direct MetaStore DB connections, we don't support retries at the client level.)at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.reconnect(HiveMetaStoreClient.java:263)at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.invoke(RetryingMetaStoreClient.java:88)at com.sun.proxy.$Proxy40.alter_partitions(Unknown Sou.. 2016. 11. 24.
[hive][error] MetaException(message:Metastore contains multiple versions) 처리 AWS의 EMR에서 하이브를 이용하다 보면 한번씩 이런 오류가 발생할 때가 있다. 원인은 하이브의 메타스토어 중 VERSION 테이블에 여러개의 정보가 들어가 있어서이다. 해당 테이블에는 버전정보가 하나, 다시말해 1row 만 있어야 하는데 하이브 소스에서 해당 정보가 없으면 insert 하는 로직이 있어서 두개의 정보가 들어가서 오류가 발생한다. 이럴경우 VERSION 테이블에 1번 row 의 데이터외에 나머지 정보는 모두 지워버리면 된다. 하이브의 DB 정보는 hive-site.xml 파일을 확인하면 DB 접속 정보를 알 수 있다. 이 정보를 이용하여 DB에 접속하여 VERSION 테이블의 정보를 지우면 된다. http://www.popit.kr/hive-metastore-contains-multip.. 2016. 10. 7.
[hive][EMR] EMR의 하이브 작업이 쓴 파일 확인하기 EMR 하이브 처리결과가 파일로 저장될 때 파일명은 EMR에서 임의의 값으로 설정해 준다. hdfs://location/175508f3-1524-46ee-88c2-24722c5d5749-000XXX 이로 인하여 같은 파티션에 파일이 저장되면 어떤 잡이 해당 파일을 썻는지 알 수가 없다. 이럴때는 하이브 잡로그를 확인하여 결과를 확인해야 한다. 하이브 테이블 로케이션을 s3로 잡은 경우 파일은 최종적으로 'com.amazon.ws.emr.hadoop.fs.s3n.Jets3tNativeFileSystemStore' 클래스를 이용하여 파일이 쓰여진다. 또한 'org.apache.hadoop.hive.ql.exec.FileSinkOperator' 클래스도 파일 쓰기에 관여하기 때문에 이 클래스의 정보를 grep.. 2016. 9. 30.
[hive] 하이브의 가상 컬럼(virtual column)을 이용하여 파일 내용 삭제 하이브는 0.8.0 버전부터 가상칼럼을 제공한다. - INPUT__FILE__NAME: 파일명- BLOCK__OFFSET__INSIDE__FILE: 파일에서의 offset 이는 다음과 같이 사용하면 된다. SELECT INPUT__FILE__NAME, BLOCK__OFFSET__INSIDE__FILE, column1, column2 FROM table; 가상칼럼을 이용하여 하이브 테이블엥 로드된 파일의 이름을 알 수 있다. AWS는 S3에서의 하이브 delete 명령은 아직 지원하고 있지 않기 때문에,잘 못 입력된 내용을 지우고 싶다면 가상컬럼을 이용하여 파일을 확인하고, 오프셋을 이용하여 위치를 확인한 후 개별적으로 지워야 한다. 2016. 9. 30.
[하이브] 매니지드 테이블과 익스터널 테이블 변경하기 하이브의 테이블은 매니지드(MANAGED) 테이블과 익스터널(EXTERNAL) 테이블 타입이 존재한다. 매니지드 테이블은 테이블을 drop 하면 관리하는 파일도 삭제가 되고, 익스터널 테이블은 파일은 보관된다. 중요한 파일을 저장하는 테이블은 익스터널로 설정하여 실수로 파일이 삭제 되는 것을 막는 것이 좋다. 매니지드 테이블을 익스터널로 수정하는 방법은 다음과 같다. ALTER TABLE 테이블명 SET TBLPROPERTIES('EXTERNAL'='TRUE');ALTER TABLE 테이블명 SET TBLPROPERTIES('EXTERNAL'='FALSE'); 2016. 9. 23.
[Hive] 하이브의 정렬, 집계, 유저 함수, 조인, 서브쿼리, 뷰의 정의 정렬과 집계 하이브의 데이터 정렬은 order by 절로 처리 가능 - 하지만 order by 처리하기 위해서는 모든 처리의 결과를 집계해야 하기 때문에 리듀서의 개수가 1개가 되어야 한다. - 마지막 결과파일의 개수가 1개가 된다. 전체적인 정렬의 결과가 필요 없다면, sort by를 사용하면 된다. - sort by는 리듀서당 정렬된 파일을 생성 어떤 경우에는 특정 로우가 특정 리듀서로 가도록 설계하여 집계연산을 사용하는 것이 좋다. - distributed by가 이 역할을 한다. sort by, distributed by에 사용되는 칼럼이 같다면 둘 다를 동시에 지정하기 위해 약칭으로 cluster by를 사용할 수 있다. select year, temperature from records2 di.. 2015. 9. 14.