Hive 파일 압축

 

·       Version : Hadoop 3.0.0-cdh6.3.2, Hive

 

하이브를 이용하여 INSERT DIRECTORY, CTAS문으로 파일을 생성할때, 원하는 타입의 형태로 파일을 압축 있다. 하이브에서 사용할 있는 압축 코덱은 다양하다.

·       4mc com.hadoop.compression.fourmc.FourMcCodec

·       gzip org.apache.hadoop.io.compress.GzipCodec

·       lzo com.hadoop.compression.lzo.LzopCodec

·       Snappy org.apache.hadoop.io.compress.SnappyCodec

·       bzip2 org.apache.hadoop.io.compress.BZip2Codec

·       lz4 org.apache.hadoop.io.compress.Lz4Codec

·       org.apache.hadoop.io.compress.GzipCodec

·       org.apache.hadoop.io.compress.DefaultCodec

·       org.apache.hadoop.io.compress.BZip2Codec

·       org.apache.hadoop.io.compress.SnappyCodec

·       com.hadoop.compression.lzo.LzoCodec

·       com.hadoop.compression.lzo.LzopCodec

 

압축 하기 위해서는 io.compression.codecs 설정에 압축 포맷이 명시되어 있어야 한다.

<property>

              <name>hive.exec.compress.intermediate</name>

              <value>true</value>

</property>

 

<property>

              <name>hive.exec.compress.output</name>

              <value>true</value>

</property>

 

<property>

              <name>mapred.map.output.compression.codec</name>

               <value>com.hadoop.compression.fourmc.FourMCHighCodec</value>

</property>

 

압축을 사용하기 위해서는 쿼리를 실행 하기전 처리 결과를 압축하기위한 설정과 코덱을 명시해야한다.

set hive.exec.compress.output=true;

set mapreduce.output.fileoutputformat.compress=true;

set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.BZip2Codec;

 

아래 스크립트는 Gzip으로 압축한다. 압축파일은 지정한 경로에 생성되며 파일 개수는 매퍼와 리듀서의 개수만큼 생성된다.

set hive.exec.compress.output=true;

set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;

 

--table 내용을 /user/tables/ 경로에 CSV 형태로 압축 저장

INSERT OVERWRITE DIRECTORY 'hdfs:///user/tables/'

ROW FORMAT DELIMITED FIELDS TERMINATED BY ','

SELECT *

  FROM table

;

 

--table 내용을 temp_table 테이블에 저장

CREATE TABLE csvsample

ROW FORMAT DELIMITED FIELDS TERMINATED BY ','

LOCATION '/user/csv/'

AS

SELECT *

  FROM table

;

 

Hive에서압축 코덱을 사용하면 디스크 소비를 줄이면서 쿼리의 전체 시간 간격을 축소 있다.

 

[참고자료]

·       https://acadgild.com/blog/hive-compression-codecs

·       https://cwiki.apache.org/confluence/display/Hive/CompressedStorage

·       https://cwiki.apache.org/confluence/display/Hive/FileFormats

 

 

 

2020-02-06 / Sungwook Kang / http://sungwookkang.com

 

Hadoop, Big Data, 하둡, 빅데이터, 데이터분석,  Hive, Hive 쿼리, Hive Query, 하이브 파일 압축, Hive File compression

'SW Engineering > Hadoop' 카테고리의 다른 글

HUE에서 10만행이상 브라우저에 출력하기  (0) 2020.02.19
Hive 쿼리 - not like  (0) 2020.02.13
Hive 파일 Merge  (0) 2020.02.04
Hive 통계 정보  (0) 2020.01.29
Hive 쿼리 실행계획 보기  (0) 2020.01.17

Hive 파일 Merge

 

·       Version : Hadoop 3.0.0-cdh6.3.2, Hive

 

하이브에서 매퍼 단독 작업의 경우 파일이 많이 생성될 있다. 작은 사이즈의 파일이 많이 생성되면 HDFS 부담이 될수 있기 때문에 이럴 경우 파일을 Merge 하여 실행하는 것이 좋다. 아래 스크립터는 파일을 Merge 하는 설정이다.

-- 맵퍼 단독 작업일 머지

set hive.merge.mapfiles=true;

 

-- 맵리듀스 작업일 머지

set hive.merge.mapredfiles=true;

 

-- 테즈 작업일 머지

set hive.merge.tezfiles=true;

 

--테즈에서 실행하는지 확인

SET hive.execution.engine;

 

--테즈 엔진으로 설정

SET  hive.execution.engine=tez;

 

-- 머지 작업의 대상이 되는 파일 사이즈(32MB이하)

set hive.merge.smallfiles.avgsize=32000000;

 

-- 머지 파일을 묶을때 기준(256MB)

set hive.merge.size.per.task=256000000;

 

파일 Merge 할때, 너무 작은 크기의 파일을 대량으로 Merge 경우 Merge 하는 시간이 오래 걸릴수 있으니 주의해서 사용해야 한다.

 

 

2020-02-03 / Sungwook Kang / http://sungwookkang.com

 

Hadoop, Big Data, 하둡, 빅데이터, 데이터분석,  Hive, Hive 쿼리, Hive Query, 하이브 파일 머지, Hive File Merge

'SW Engineering > Hadoop' 카테고리의 다른 글

Hive 쿼리 - not like  (0) 2020.02.13
Hive 파일 압축  (0) 2020.02.07
Hive 통계 정보  (0) 2020.01.29
Hive 쿼리 실행계획 보기  (0) 2020.01.17
YARN Node Labels (노드 레이블)  (0) 2020.01.16

Hive 통계 정보

 

·       Version : Hadoop 3.0.0-cdh6.3.2, Hive

 

하이브는 테이블의 로우 , 파일 개수, 사이즈 등의 통계 정보를 이용하여 데이터를 빠르게 처리한다. 통계정보는 CBO(Cost Base Optimize) 방식이며, 실행계획 최적화, 단순 카운트 쿼리 등에 사용된다. 하이브는 기본적으로 통계 정보를 자동 수집하도록 되어 있어 따로 설정하지 않아도 테이블의 메타정보에 통계정보를 수집한다. 하지만 사용하는 버전, 제조사에 따라 설정이 다를 있으니 반드시 재확인을 있도록 한다. 통계 정보를 설정하는 옵션은 아래와 같다.

set hive.stats.autogather=true;

set hive.stats.column.autogather=true;

 

DML 이용하여 처리할 때는 통계 정보를 자동으로 수집하지만  파티션 위치에 파일을 직접 복사한 경우 메타데이터가 갱신되지 않아 통계 정보가 정확하지 않을 있다. 경우 Analyze명령을 사용하여 수동으로 통계 정보를 업데이트 할수 있다.

--tbl 테이블 통계정보 수집

ANALYZE TABLE tbl COMPUTE STATISTICS;

 

--tbl 테이블의 yymmdd '2020-01-01' 파티션의 통계정보 수집

ANALYZE TABLE tbl PARTITION(yymmdd='2020-01-01') COMPUTE STATISTICS;

 

--컬럼 통계정보 수집

ANALYZE TABLE tbl PARTITION(yymmdd='2018-01-01') COMPUTE STATISTICS FOR COLUMNS;

 

통계정보는 desc extended|formatted 명령으로 확인할 있으며, 테이블 정보, 파티션 정보에 통계정보가 추가되어 나타난다.

desc formatted tbl partition(yymmddval='20180101');

 

Table Parameters:               

        COLUMN_STATS_ACCURATE   {\"BASIC_STATS\":\"true\"}

        EXTERNAL                TRUE               

        last_modified_by        root             

        last_modified_time      1577490527         

        numFiles                9973               

        numPartitions           392                

        numRows                 2305106979         

        rawDataSize             12729039219        

        totalSize               717032673468       

        transient_lastDdlTime   1577490527

 

 

통계정보를 활용하기 위해서는 쿼리 호출시 통계 정보를 활용할 있도록 설정해야 한다. 아래 예제는 단순 count 하는 쿼리를 MapReduce 작업을 통하지 않고 통계정보를 이용하여 데이터를 확인할 있다.

set hive.compute.query.using.stats=true;

 

-- 통계정보를 활용하여 쿼리 실행

hive> select count(*) from tbl;

 

 

[참고자료]

·       https://cwiki.apache.org/confluence/display/Hive/StatsDev

·       https://wikidocs.net/26789

 

 

 

2020-01-28 / Sungwook Kang / http://sungwookkang.com

 

Hadoop, Big Data, 하둡, 빅데이터, 데이터분석,  Hive, Hive 쿼리, Hive Query, 하이브 통계, Hive Statistics, Hive CBO, 하이브 옵티마이저

'SW Engineering > Hadoop' 카테고리의 다른 글

Hive 파일 압축  (0) 2020.02.07
Hive 파일 Merge  (0) 2020.02.04
Hive 쿼리 실행계획 보기  (0) 2020.01.17
YARN Node Labels (노드 레이블)  (0) 2020.01.16
YARN 메모리 설정  (0) 2020.01.14

Hive 쿼리 실행계획 보기

 

·       Version : Hadoop 3.0.0-cdh6.3.2, Hive

 

하이브(Hive)에서 쿼리를 실행할때, 쿼리가 어떤 실행계획으로 결과를 추출했는지 확인하는 방법으로는 explain 또는 explain extended 명령을 사용할 있다.

EXPLAIN [EXTENDED|AST|DEPENDENCY|AUTHORIZATION|LOCKS|VECTORIZATION|ANALYZE] query

 

·       EXTENDED : 추가 정보 확인

·       AST : Abstract Syntax Tree 정보 확인

·       DEPENDENCY : 테이블간 의존 정보 확인

·       AUTHORIZATION : 테이블 조회 권한 정보 확인

·       LOCKS : 테이블의 정보 확인

·       VECTORIZATION : 벡터화 처리 정보 확인

·       ANALYZE : 실제 참조하는 row 정보 확인

 

 실행하려는 쿼리 앞에 explain 또는 explain extended명령을 함께 실행한다.

explain select * from tbl;

explain extended select * from tbl;

 

실행계획에는 쿼리를 실행하는 스테이지 정보, 스테이지에서 처리되는 작업의 정보가 출력된다.

hive> explain

    > select * from tbl_a where date = '20200114' and (url like '%XXXX%' and param like '%XXXX%')

    > ;

OK

STAGE DEPENDENCIES:

  Stage-1 is a root stage

  Stage-0 depends on stages: Stage-1

 

STAGE PLANS:

  Stage: Stage-1

    Map Reduce

      Map Operator Tree:

          TableScan

            alias: tbl_a

            Statistics: Num rows: 1343079 Data size: 694357252 Basic stats: COMPLETE Column stats: NONE

            Filter Operator

              predicate: ((url like '%XXXX%') and (param like '%XXXX%')) (type: boolean)

              Statistics: Num rows: 335769 Data size: 173588925 Basic stats: COMPLETE Column stats: NONE

              Select Operator

                expressions: col_1 (type: string), col_2 (type: string), col_3 (type: string), col_4 (type: string), col_5 (type: string), col_6 (type: string), col_7 (type: string), col_8 (type: string), col_9 (type: string), col_10 (type: string), '20200114' (type: string)

                outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10

                Statistics: Num rows: 335769 Data size: 173588925 Basic stats: COMPLETE Column stats: NONE

                File Output Operator

                  compressed: false

                  Statistics: Num rows: 335769 Data size: 173588925 Basic stats: COMPLETE Column stats: NONE

                  table:

                      input format: org.apache.hadoop.mapred.SequenceFileInputFormat

                      output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat

                      serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe

 

  Stage: Stage-0

    Fetch Operator

      limit: -1

      Processor Tree:

        ListSink

 

Time taken: 2.517 seconds, Fetched: 32 row(s)

hive>

 

 

 

2020-01-16 / Sungwook Kang / http://sungwookkang.com

 

Hadoop, Big Data, 하둡, 빅데이터, 데이터분석,  Hive, 쿼리 실행계획, Hive 쿼리, Hive Query execution plan

'SW Engineering > Hadoop' 카테고리의 다른 글

Hive 파일 Merge  (0) 2020.02.04
Hive 통계 정보  (0) 2020.01.29
YARN Node Labels (노드 레이블)  (0) 2020.01.16
YARN 메모리 설정  (0) 2020.01.14
YARN 스케줄러 – Capacity 스케줄러  (0) 2020.01.10

Hive에서 콤마(,) 컬럼 구분 쿼테이션 내부의 콤마(“, , ”) 파싱 스킵하기

 

·       Version : Hadoop 3.0.0-cdh6.3.2

 

Hive 테이블에서 데이터를 로드할때, 특정 구분자를 이용해서 파싱하는 경우 파싱의 규칙을 미리 테이블을 생성할때 정의해야 한다. 아래 스크립트는 콤마(,) 컬럼을 구분하는 데이터에서 파싱을 하지 않아야 하는 콤마(,) 데이터는 더블 쿼테이션(“”)으로 감싸서 해당 문장이 파싱되지 않도록 하는 규칙이다.

 

예를 들어 아래와 같은 콤마로 구분된 텍스트 데이터가 있다고 , 컬럼 Col_1, Col_2, Col_3 파싱한다.

col_1,col_2,"col_3(a=3&b=40&c=NOTES&cid=1,10,33)"

 

create table tbl_a (

col_1 string

col_2 string

col_3 string

)

ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ("separatorChar" = ",","quoteChar" = "\"")

 

이미 테이블이 생성되어 있는 경우에는 ALTER 구문으로 테이블의 속성을 변경할 있다.

ALTER TABLE tbl_a set SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ("separatorChar" = ",","quoteChar" = "\"")

 

 

 

2020-01-02 / Sungwook Kang / http://sungwookkang.com

 

Hadoop, Hive, 하이브, 하이브 콤마 파싱, SERDE, SERDEPROPERTIES, 서데, 서데 속성, ROW FORAT, 컬럼 파싱

'SW Engineering > Hadoop' 카테고리의 다른 글

임시 데이터 처리를 위한 매퍼 환경 설정 및 셔플 환경 설정  (0) 2020.01.08
MapReduce 메모리 설정  (0) 2020.01.07
MapReduce JobTracker  (0) 2019.12.31
MapReduce (맵리듀스)  (0) 2019.12.28
Hive Buckets (버켓)  (0) 2019.12.27

Hive Buckets (버켓)

 

·       Version : Hadoop 3.0.0-cdh6.3.2, Hive

 

하이브는 쿼리 성능을 높이기 위해 버켓(Buckets)이라는 데이터 모델을 제공하며, 버켓은 지정된 칼럼의 값을 해쉬 처리하고 지정한 수의 파일로 나누어 저장한다. 조인에 사용되는 키로 버켓 컬럼을 생성하면 필요한 버켓만 조회하면 되기 때문에 전제 디렉터리를 풀스캔하는 것보다 훨씬 빠르게 처리할 있다.

파티션은 데이터를 디렉터리로 나누어 저장하는 방식이며 버켓은 데이터를 파일별로 나누어 저장한다. 아래 그림은 파티션과 버켓의 차이점을 쉽게 정의하고 있다.

 

 아래 스크립트는 버켓 테이블을 생성한다.

-- col2 버켓팅하여 20개의 파일에 저장

CREATE TABLE tbl1(

       col1 STRING,

       col2 STRING

)

CLUSTERED BY (col2) INTO 20 BUCKETS

LOCATION '/user/data/'

 

-- col2 버켓팅 하고, col1 기준으로 정렬

CREATE TABLE tbl2(

       col1 STRING,

       col2 STRING

)

CLUSTERED BY (col2) SORTED BY (col1) INTO 20 BUCKETS

LOCATION '/user/data/'

 

 

 

[참고자료]

https://data-flair.training/blogs/hive-partitioning-vs-bucketing/

 

 

 

2019-12-26 / Sungwook Kang / http://sungwookkang.com

 

Hadoop, hive, 하이브, hive buckets, 하이브 버켓

'SW Engineering > Hadoop' 카테고리의 다른 글

MapReduce JobTracker  (0) 2019.12.31
MapReduce (맵리듀스)  (0) 2019.12.28
Hive Skewed (스큐)  (0) 2019.12.24
Hive Partition 생성,수정,복구  (0) 2019.12.21
Hive Meta Database  (0) 2019.12.19

Hive Skewed (스큐)

 

·       Version : Hadoop 3.0.0-cdh6.3.2, Hive

 

스큐(skewed) 사전적 의미는 비스듬하다라는 뜻으로, 특정 데이터가 많이 입력되는 경우, 데이터 파일 한쪽에만 너무 많은 데이터가 쌓이는 것을 의미한다. 하이브에서 스큐 테이블로 생성하면 따로 파일을 만들어서 사용하므로 성능상 이점이 있다. 스큐는 파티션과 유사하지만 용도가 조금 다르다. 파티션은 크게 데이터를 분류하는 용도로 사용되며, 스큐는 컬럼의 데이터를 구분할 사용된다.

 

하이브 매뉴얼에는 아래와 같은 내용이 있다. 스큐 테이블은 스큐의 정보를 저장하고, 리스트 버켓팅까지 추가하면 스큐된  서브 디렉터리를 생성한다.

Skewed Table vs. List Bucketing Table

·       Skewed Table is a table which has skewed information.

·       List Bucketing Table is a skewed table. In addition, it tells Hive to use the list bucketing feature on the skewed table: create sub-directories for skewed values.

 

 

예를 들어, col_1이라는 컬럼에 1 ~ 1000 숫자 사이의 데이터가 입력된다고 할때, 파티션은 1000개가 생성된다. 그런데 대부분의 데이터가 1, 2라고 가정한다면 스큐는 1, 2 데이터 파일과 나머지 3개의 디렉토리로 나누어서 파일로 구별하여 저장한다. 이렇게 스큐를 사용하여 파일 갯수를 줄이면 네임노드의 관리포인트가 줄어들어 네임노드의 성능 관리에 효율적이다. 실제 데이터를 조인할 경우에도 많은 성능 이점이 있다.

 

아래 스크립트는 스큐 테이블을 생성한다. STORED AS DIRECTORIES 옵션을 사용하지 않으면 디렉토리 구분없이 파일로 따로 저장한다.

-- col2 입력 값중 1 들어오는 값만 스큐로 저장

CREATE TABLE tbl_skewed (

col_1 STRING,

col_2 STRING

) SKEWED BY (col2) ON ('1')

STORED AS DIRECTORIES

LOCATION '/user/tbl_skewed/';

 

 

 

 

2019-12-23 / Sungwook Kang / http://sungwookkang.com

 

Hadoop, hive, 하이브, hive skewed, 하이브 스큐

'SW Engineering > Hadoop' 카테고리의 다른 글

MapReduce (맵리듀스)  (0) 2019.12.28
Hive Buckets (버켓)  (0) 2019.12.27
Hive Partition 생성,수정,복구  (0) 2019.12.21
Hive Meta Database  (0) 2019.12.19
Hive Meta Store 설정  (0) 2019.12.18

Hive Meta Database

 

·       Version : Hadoop 3.0.0-cdh6.3.2, Hive

 

하이브(Hive) 메타정보는 파일의 물리적인 위치 데이터에 대한 디렉터리 정보를 저장를 데이터베이스에 저장하며 기본적으로 사용되는 데이터베이스로는 더비(Derby), MySQL, Oracle, PostgreSQL 있다. 하이브 클라이언트를 이용해서 확인하는 정보는 메타 데이터베이스 정보에 기반하고 있으며, 테이블 관련 정보는 메타 데이터베이스에서 직접 쿼리하여 확인이 가능하다.

·       Hive Architecture : http://sqlmvp.kr/221718439399

 

hive메타 데이터베이스가 설치된 DB 접속하여 테이블 목록을 살펴보면 매우 많은 테이블이 있는 것을 확인할 있다. 필자의 경우 MySQL 메타데이터베이스로 사용하였다.

# Tables_in_hive

AUX_TABLE

MASTER_KEYS

SD_PARAMS

BUCKETING_COLS

METASTORE_DB_PROPERTIES

SEQUENCE_TABLE

CDH_VERSION

NEXT_COMPACTION_QUEUE_ID

SERDES

CDS

NEXT_LOCK_ID

SERDE_PARAMS

COLUMNS_V2

NEXT_TXN_ID

SKEWED_COL_NAMES

COMPACTION_QUEUE

NOTIFICATION_LOG

SKEWED_COL_VALUE_LOC_MAP

COMPLETED_COMPACTIONS

NOTIFICATION_SEQUENCE

SKEWED_STRING_LIST

COMPLETED_TXN_COMPONENTS

NUCLEUS_TABLES

SKEWED_STRING_LIST_VALUES

DATABASE_PARAMS

PARTITIONS

SKEWED_VALUES

DBS

PARTITION_EVENTS

SORT_COLS

DB_PRIVS

PARTITION_KEYS

TABLE_PARAMS

DELEGATION_TOKENS

PARTITION_KEY_VALS

TAB_COL_STATS

FUNCS

PARTITION_PARAMS

TBLS

FUNC_RU

PART_COL_PRIVS

TBL_COL_PRIVS

GLOBAL_PRIVS

PART_COL_STATS

TBL_PRIVS

HIVE_LOCKS

PART_PRIVS

TXNS

IDXS

ROLES

TXN_COMPONENTS

INDEX_PARAMS

ROLE_MAP

TYPES

KEY_CONSTRAINTS

SDS

TYPE_FIELDS

 

 

VERSION

 

 

WRITE_SET

 

메타 데이터베이스 테이블에서 많이 사용되는 정보는 DBS, TBLS, PARTITIONS 이다. 테이블을 조인하여 기본적인 메타데이터 정보를 확인할 있다.

·       DBS : hive 생성되어 있는 데이터베이스 정보

·       TBS : hive 생성되어 있는 테이블 정보

·       PARTITIONS : hive 생성되어 있는 파티션 정보

 

아래 스크립트는 DBS 테이블과 TBLS 테이블을 조인하여 DB 어떤 테이블에 생성되어 있는지 확인할 있다.

SELECT

              *

FROM hive.TBLS as t

              inner join hive.DBS as d on t.DB_ID = d.DB_ID

ORDER BY d.NAME;

 

 

아래 스크립트는 특정 이름(예제에서는 key라는 글자를 포함하는) 포함하는 테이블을 찾아서 DB 정보, 테이블, 파티션 정보를 출력한다.

SELECT

              d.NAME, t.TBL_NAME, p.PART_NAME

FROM hive.DBS as d

              inner join hive.TBLS as t on d.DB_ID = t.DB_ID

    inner join hive.PARTITIONS as p on t.TBL_ID = p.TBL_ID

where t.TBL_NAME like '%key%';

 

 

 

 

 

 

2019-12-18 / Sungwook Kang / http://sungwookkang.com

 

Hadoop, hive, 하이브 메타 데이터베이스, hive meta database, 하이브 테이블, 하이브 테이블 정보, 메타 정보

'SW Engineering > Hadoop' 카테고리의 다른 글

Hive Skewed (스큐)  (0) 2019.12.24
Hive Partition 생성,수정,복구  (0) 2019.12.21
Hive Meta Store 설정  (0) 2019.12.18
MapReduce 메모리 부족으로 인한 쿼리 실패  (0) 2019.12.14
HiveServer2 와 Beeline  (0) 2019.12.13

Hive Meta Store 설정

 

·       Version : Hadoop 3.0.0-cdh6.3.2, Hive

 

하이브(Hive) 메타정보는 파일의 물리적인 위치 데이터에 대한 디렉터리 정보를 저장하고 있다. 메타스토어는 쓰리프트(Thrift) 프로토콜을 사용하여 다른 서비스에 정보를 제공한다. 메타 정보는 JDBC 드라이버를 이용하여 RDBMS 저장한다. 메타스토어는 3가지 타입(Embedded, Local, Remote) 있으며 타입에 대한 특징은 아래 링크를 참고 한다.

·       Hive Architecture : http://sqlmvp.kr/221718439399

 

[Embedded Meta Store]

하이브 기본설정은 더비DB 사용하며, DB 한명의 사용자만 접근할수 있어 실제 서비스에는 사용이 불가능하다.

hive-site.xml

<property>

   <name>javax.jdo.option.ConnectionURL</name>

   <value>jdbc:derby:metastore_db;create=true </value>

   <description>JDBC connect string for a JDBC metastore </description>

</property>

 

[Local Mete Store]

로컬 메타스토어는 하이브와 같은 JVM에서 동작하며 메타데이터는 외부 RDBMS 저장한다. 동시 사용자 접속이 가능하다.

hive-site.xml

<property>

    <name>javax.jdo.option.ConnectionURL</name>

    <value>jdbc:mysql://[IP]:[port]/[DB NAME]</value>

    <description>username to use against metastore database</description>

</property>

 

<property>

    <name>javax.jdo.option.ConnectionDriverName</name>

    <value>org.mariadb.jdbc.Driver</value>

    <description>username to use against metastore database</description>

</property>

 

<property>

    <name>javax.jdo.option.ConnectionUserName</name>

    <value>User</value>

    <description>username to use against metastore database</description>

</property>

 

<property>

    <name>javax.jdo.option.ConnectionPassword</name>

    <value>Password</value>

    <description>password to use against metastore database</description>

</property>

 

 

[Remote Meta Store]

원격 메타스토어는 메타스토어가 별도의 JVM에서 동작하며 쓰리프트(Thrift) 프로토콜을 사용하여 접속한다.

hive-site.xml

<property>

    <name>hive.metastore.uris</name>

    <value>thrift://[Meta Store IP]:[Meta Store Port]</value>

    <description>JDBC connect string for a JDBC metastore</description>

</property>

 

 

 

2019-12-17 / Sungwook Kang / http://sungwookkang.com

 

Hadoop, hive, 하이브 설정, hive-site.xml, 하이브 메타스토어, hive meta store,

'SW Engineering > Hadoop' 카테고리의 다른 글

Hive Partition 생성,수정,복구  (0) 2019.12.21
Hive Meta Database  (0) 2019.12.19
MapReduce 메모리 부족으로 인한 쿼리 실패  (0) 2019.12.14
HiveServer2 와 Beeline  (0) 2019.12.13
Hive CLI  (0) 2019.12.12

MapReduce 메모리 부족으로 인한 쿼리 실패

-         FAILED Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask

 

·       Version : Hadoop 3.0.0-cdh6.3.2, Hive

 

Hue에서 Hive 결과셋이 쿼리를 실행하였을때 아래와 같은 오류가 발생하였다.

Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask

 

위의 에러로그는 실제 에러로그가 아니기 때문에 문제를 해결하기 위해서는 실제 에러로그를 살펴보아야 한다. 필자의 경우 Hadoop Job History UI에서 에러 로그를 확인하였다.

[2019-12-12 09:11:17.232]Container [pid=11024,containerID=container_1576170300177_0002_01_000176] is running 45285376B beyond the 'PHYSICAL' memory limit. Current usage: 1.0 GB of 1 GB physical memory used; 2.5 GB of 2.1 GB virtual memory used. Killing container. Dump of the process-tree for container_1576170300177_0002_01_000176 : |- PID PPID PGRPID SESSID CMD_NAME USER_MODE_TIME(MILLIS) SYSTEM_TIME(MILLIS) VMEM_USAGE(BYTES) RSSMEM_USAGE(PAGES) FULL_CMD_LINE |- 11024 11016 11024 11024 (bash) 0 0 9797632 287 /bin/bash -c /usr/lib/jvm/java-openjdk/bin/java -Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN -Djava.net.preferIPv4Stack=true -Xmx820m -Djava.io.tmpdir=/data/yarn/nm/usercache/admin/appcache/application_1576170300177_0002/container_1576170300177_0002_01_000176/tmp -Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=/data/yarn/container-logs/application_1576170300177_0002/container_1576170300177_0002_01_000176 -Dyarn.app.container.log.filesize=0 -Dhadoop.root.logger=INFO,CLA -Dhadoop.root.logfile=syslog -Dyarn.app.mapreduce.shuffle.logger=INFO,shuffleCLA -Dyarn.app.mapreduce.shuffle.logfile=syslog.shuffle -Dyarn.app.mapreduce.shuffle.log.filesize=0 -Dyarn.app.mapreduce.shuffle.log.backups=0 org.apache.hadoop.mapred.YarnChild 10.210.63.18 31249 attempt_1576170300177_0002_r_000011_0 176 1>/data/yarn/container-logs/application_1576170300177_0002/container_1576170300177_0002_01_000176/stdout 2>/data/yarn/container-logs/application_1576170300177_0002/container_1576170300177_0002_01_000176/stderr |- 11057 11024 11024 11024 (java) 3712 153 2693627904 272913 /usr/lib/jvm/java-openjdk/bin/java -Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN -Djava.net.preferIPv4Stack=true -Xmx820m -Djava.io.tmpdir=/data/yarn/nm/usercache/admin/appcache/application_1576170300177_0002/container_1576170300177_0002_01_000176/tmp -Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=/data/yarn/container-logs/application_1576170300177_0002/container_1576170300177_0002_01_000176 -Dyarn.app.container.log.filesize=0 -Dhadoop.root.logger=INFO,CLA -Dhadoop.root.logfile=syslog -Dyarn.app.mapreduce.shuffle.logger=INFO,shuffleCLA -Dyarn.app.mapreduce.shuffle.logfile=syslog.shuffle -Dyarn.app.mapreduce.shuffle.log.filesize=0 -Dyarn.app.mapreduce.shuffle.log.backups=0 org.apache.hadoop.mapred.YarnChild 10.210.63.18 31249 attempt_1576170300177_0002_r_000011_0 176 [2019-12-12 09:11:17.303]Container killed on request. Exit code is 143 [2019-12-12 09:11:17.312]Container exited with a non-zero exit code 143.

 

필자가 생각할땐 메모리 리밋으로 인하여 MapReduce 충분한 메모리를 확보하지 못해 강제로 태스크가 종료된것으로 판단되었다. 실제 서버의 물리 메모리는 충분히 여유 공간이 많았기 때문에, MapReduce 할당된 메모리 설정에 문제가 있다고 판단되어  YARN에서 메모리 설정을 다음과 같이 변경하였으며, 이후 해당 문제가 발하지 않았다.

Map Task Memory (mapreduce.map.memory.mb)

변경 / : 0GB -> 6GB

Reduce Task Memory (mapreduce.reduce.memory.mb)

변경 / : 0GB -> 6GB

 

 

 

 

2019-12-13 / Sungwook Kang / http://sungwookkang.com

 

Hadoop, hive, YARN, Map Task Memory, Reduce Task Memory, MapReduce, 메모리 설정, 맵리듀스 메모리 설정

'SW Engineering > Hadoop' 카테고리의 다른 글

Hive Meta Database  (0) 2019.12.19
Hive Meta Store 설정  (0) 2019.12.18
HiveServer2 와 Beeline  (0) 2019.12.13
Hive CLI  (0) 2019.12.12
HDFS Safe 모드  (0) 2019.12.11

HiveServer2 Beeline

 

·       Version : Hadoop 3.0.0-cdh6.3.2, Hive

 

HiveServer2(HS2) HiveServer1 후속으로 클라이언트가 하이브에 대해 쿼리를 실행할 있게 해주는 서비스이며 아래와 같은 특징이 있다.

·       HS2 다중 클라이언트 동시성 인증을 지원

·       JDBC ODBC 같은 공개 API 클라이언트를 지원

·       Thrift 기반 하이브 서비스 (TCP 또는HTTP) UI Jetty 서버를 포함하는 복합 서비스로 실행되는 단일 프로세스

 

Beeline HiveServer2 접속하여 Command shell 수행할 있도록 도와주는 Client이며 SQLLine CLI 기반으로하는 JDBC 클라이언트이기도 하다. Beeline shell 가지 방식으로 수행된다.

·       Embeded mode : Hive CLI 유사하게 embeded hive 수행

·       Remote mode : Thrift 통신을 통해 원격지에 있는 HiveServer2 접속하여 수행 (, Thrift 통신만 허용)

 

Beeline에서 하이브서버2 접속하는 방법은 Beeline CLI 실행후에 입력하는 방법과 비라인 CLI 실행하면서 옵션을 사용하는 방식이 있다. Beeline 커맨드는 Hive 실행 디렉터리에 있다. Beeline에서는 ! 이용하여 SQLLine 명령을 입력할 있다.

[Beeline CLI 실행 Connect 명령을 이용한 접속]

--beeline shell 실행

beeline

--beeline CLI HiveServer2 커넥트

!connect jdbc:hive2://{hive ip & port} {user} {password}

!connect jdbc:hive2://localhost:10000 user password

 

--beeline CLI MySQL 접속

!connect jdbc:mysql://localhost:port/db_name db_id db_password

 

[커맨드라인 옵션을 사용한 접속]

beeline -u jdbc:hive2://localhost:10000 -n user -p password

 

 

Beeline 명령어 Beeline Hive 명령은 아래 참고자료의 공식 문서를 참고한다.

 

 

[참고자료]

HiveServer2 Clients : https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients

 

 

 

2019-12-12 / Sungwook Kang / http://sungwookkang.com

 

Hadoop, hive, 하이브 명령어, hive command, 하이브쉘, 하이브 커맨드, 비라인, Beeline, Beeline, HiveServer2, 하이버서버2, Hive CLI

'SW Engineering > Hadoop' 카테고리의 다른 글

Hive Meta Store 설정  (0) 2019.12.18
MapReduce 메모리 부족으로 인한 쿼리 실패  (0) 2019.12.14
Hive CLI  (0) 2019.12.12
HDFS Safe 모드  (0) 2019.12.11
HDFS 커럽션 파일 확인  (0) 2019.12.10

Hive CLI

 

·       Version : Hadoop 3.0.0-cdh6.3.2, Hive

 

Hive CLI(Command Line Interface)  하이브 쿼리를 실행하기 위한 명령 도구로, 쉘을 이용하여 사용자의 명령을 입력할 있다. 하이브 쿼리 실행시 다양한 옵션을 사용할 있으며, 대표적인 옵션은 아래와 같다.

·       -e <query-string> : 커맨드라인으로 실행할 쿼리

·       -f <filename> : 쿼리가 작성된 파일을 이용하여 실행할 경우

·       --hiveconf <property=value> : 하이브 설정값 입력

·       --hivevar <key=value> 쿼리에 사용할 변수 입력

hive --hiveconf mydb.data.name=queue --hivevar date=20190101

 

[하이브 입력]

하이브 CLI 실행하고 쉘을 이용하여 사용한다.

-- 커맨드에서 hive 실행

$ hive

--하이브 쉘에서 쿼리 실행

hive> select * from table;

 

 

[커맨드 라인에서 하이브 명령 실행]

커맨드라인으로 하이브를 실행할때 -e 옵션을 사용한다.

-- 커맨드라인에서 하이브의 table 테이블 조회

$ hive -e "select * from table"

 

-- 쿼리의 실행 엔진과, 변수를 설정

$ hive -e 'select * from table where yymmdd=${hivevar:tDate}' \

   --hiveconf hie.execution.engine=tez \

   --hiveconf tez.queue.name=queue_name \

   --hivevar Date=20190101

 

 

[파일로 저장된 쿼리 실행]

쿼리를 파일로 저장하여 해당 파일을 실행하는 방식으로 -f 옵션을 사용한다.

--sample.hql 파일에 저장되어 있는 쿼리

select * from table where yymmdd=${hivevar:targetDate}

 

-- -f 옵션을 사용하여 파일 쿼리 실행 변수 입력

$ hive -f sample.hql --hivevar Date=20190101

 

[하이브 로깅]

하이브 CLI log4j 사용하여 로깅한다. 로깅 방법을 변경할때는 log4j 설정파일을 변경하거나 --hiveconf 옵션을 사용한다.

-- 로깅 레벨, 파일 위치 변경

hive --hiveconf hive.log.file=hive_debug.log \

  --hiveconf hive.log.dir=./ \

  --hiveconf hive.root.logger=DEBUG,DRFA

 

 

[하이브 CLI 명령어]

Command

Description

Exit

하이브 종료

Reset

설정값 초기화

set <key>=<value>

설정값 입력

set

하이브의 설정값 출력

set -v

하둡, 하이브의 설정값 출력

add file <>

파일 추가

add files <>

여러개의 파일 추가, 공백으로 경로 구분

add jar <>

jar 파일 추가

add jars <>

여러개의 jar 파일 추가, 공백으로 경로 구분

!<command>

커맨드 실행

dfs <dfs command>

하둡 dfs 커맨드 실행

 

 

jar 파일 추가는 사용자가 구현한 UDF, SerDe 자바 클래스를 사용할때, jar 파일 위치를 지정한다. 파일 추가는 스크립트나 UDF에서 내부적으로 사용하는 메타파일을 추가할때 사용한다.

-- 옵션 설정

hive> set mapred.reduce.tasks=32;

-- 모든 옵션 확인

hive> set;

-- CLI 상에서 설정한 옵션 초기화

hive> reset;

-- 쉘커맨드 실행

hive> !ls -alh;

-- dfs 커맨드 실행

hive> dfs -ls /user/;

-- 파일 추가

hive> add file hdfs:///user/sample.txt;

-- 여러개의 파일 추가. 공백으로 구분

hive> add files hdfs:///user/sample1.txt hdfs:///user/sample2.txt;

-- jar 파일 추가

hive> add jar hdfs:///user/sample.jar;

 

 

[참고자료]

·       https://wikidocs.net/24771

·       https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Cli

 

 

 

2019-12-11 / Sungwook Kang / http://sungwookkang.com

 

Hadoop, hive, 하이브 명령어, hive command, 하이브쉘, 하이브 커맨드, 빅데이터

requirements.txt
0.00MB

Python으로 Hive 연결하기

 

·       Version : Python 2.7.5, pip, Hive, CDH 6.3.0, Centos7

 

Hive 하둡 에코시스템 중에서 데이터를 모델링하고 프로세싱할때 가장 많이 사용되는 데이터 웨어하징 솔루션이다. RDB 데이터베이스, 테이블과 같은 형태로 HDFS 저장된 데이터의 구조를 정의하는 방법을 제공하여 SQL 유사한 HiveQL쿼리를 사용하여 데이터를 조작할수 있다.

·       Hive Architecture : https://en.wikipedia.org/wiki/Apache_Hive

 

필자의 경우, 배치잡 성격의 데이터 처리나 하이브 쿼리 조회등의 자동화 작업을 대부분 파이썬 스크립트로 개발하고, 해당 파이썬을 Cron 으로 실행하는 방식으로 운영하고 있다. (물론 에코시스템중에 좋은 ETL 툴이 많지만, 관리 유지보수 차원에서 파이썬을 선택하였다.) 오픈소스 프로젝트로 작업을 진행하면서 자주 느끼는 부분인데, 오픈소스는 궁합이 매우 중요하다. 특히 파이썬의 경우 버전에 따라 지원되는 기능 패키지 모듈이 다르기 때문에 버전 문제로 인한 스트레스가 있는 편이다. 이번 포스팅은 pyhive 패키지를 이용해서 파이썬에서 Hive 커넥트할 있는 방법에 대해서 알아본다.

 

필자의 하둡 환경은 Cloudera Hadoop 6.3.0, Centos7, Python 2.7.5 환경이다. 첨부된 requirement.txt 사용하여, 필요한 pip 패키지를 설치한다. 해당 파일에는 hive 커텍트에 필요한 패키지 외에, 필자가 필요한 pip 패키지가 일부 포함되어 있다.

pip install -r /path/to/requirements.txt

 

아래 내용은 설치되어 있는 pip 패키지 리스트이다.

backports.ssl-match-hostname==3.5.0.1

certifi==2019.9.11

chardet==3.0.4

configobj==4.7.2

decorator==3.4.0

docopt==0.6.2

future==0.18.2

futures==3.1.1

hdfs==2.5.8

hdfs3==0.3.1

idna==2.8

iniparse==0.4

ipaddress==1.0.16

IPy==0.75

javapackages==1.0.0

kitchen==1.1.1

langtable==0.0.31

LinkChecker==9.3

lxml==3.2.1

MySQL-python==1.2.5

numpy==1.16.5

pandas==0.24.2

perf==0.1

pexpect==4.7.0

policycoreutils-default-encoding==0.1

psycopg2==2.5.1

ptyprocess==0.6.0

pycurl==7.19.0

pygobject==3.22.0

pygpgme==0.3

PyHive==0.6.1

pyliblzma==0.5.3

pysasl==0.4.1

python-augeas==0.5.0

python-dateutil==2.8.1

python-linux-procfs==0.4.9

pytz==2019.3

pyudev==0.15

pyxattr==0.5.1

PyYAML==3.10

requests==2.22.0

sasl==0.2.1

schedutils==0.4

seobject==0.1

sepolicy==1.1

six==1.9.0

slip==0.4.0

slip.dbus==0.4.0

SSSDConfig==1.16.4

thrift==0.13.0

thrift-sasl==0.3.0

urlgrabber==3.10

urllib3==1.25.7

virtualenv==15.1.0

yum-langpacks==0.4.2

yum-metadata-parser==1.1.4

 

패키지 설치가 완료되었으면, 파이썬에서 필요한 패키지를 import 하여 Hive 커넥트 한다. 아래 스크립트는 파이썬에서 hive 연결하거 tbl이라는 테이블의 내용을 조회하는 예제이다.

from pyhive import hive

 

conn = hive.Connection(host='hd-master', port=10000, username='ID', password='PASSWORD', database='default', auth='CUSTOM')

cur = conn.cursor()

cur.execute('select 1 from tbl')

result = cur.fetchall()

 

 

 

2019-12-03 / Sungwook Kang / http://sungwookkang.com

 

Hadoop, hive, 파이썬으로 hive 연결하기, python connect to hive, hive connection, pyhive

Hive 테이블 생성

 

·       Version : Hive

 

Apache Hive에서 테이블은 HDFS 저장된 파일과 디렉터리 구조에 대한 메터 정보를 저장한다.  Hive HiveQL이라는 SQL 유사한 언어를 제공하며 아래와 같은 특징이 있다.

·       Hive에서 사용하는 테이블은 HDFS 저장되며, HDFS 한번 저장한 파일은 수정할 없기 때문에 UPDATE DELETE 사용할 없다.

·       데이터를 INSERT할때 테이블에 입력하거나 입력된 데이터를 덮어쓰는 경우(INSERT OVERWRITE 구문 사용)에만 가능하다.

·       HiveQL FROM 절에만 서브쿼리를 사용할 있다.

·       HiveQL 뷰는 읽기 전용이다.

·       SELECT 문을 사용할때 HAVING절을 사용할 없다.

·       Stored Procedure 제공하지 않으며 MapReduce 스크립트를 실행 있다.

 

아래 명령은 테이블을 생성하는 구문으로 다양한 옵션이 있다. CREATE TABLE 대한 다양한 옵션은 공식 문서를 참고 한다.

·       Create/Drop/Truncate Table : https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-CreateTableCreate/Drop/TruncateTable

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.] table_name

[(col_name data_type [COMMENT col_comment], ...)]

[COMMENT table_comment]

[ROW FORMAT row_format]

[STORED AS file_format]

 

[LOCATION]

Hive 테이블을 생성할때 저장위치를 정할 있는데, 기본값은 Hive 데이터베이스 디렉터리에 위치하며 테이블의 이름으로 폴더가 생성된다.

 

[TABLE TYPE]

Hive 테이블에는 3가지 형식이 있으며 아래와 같은 특징이있다.

·       MANAGED : 기본 옵션이며 세션이 종료되어도 테이블의 데이터와 파일은 유지된다. 테이블 삭제시 파일도 함께 삭제 된다.

·       EXTERNAL : 세션이 종료되어도 테이블의 데이터와 파일은 유지되며, 테이블 삭제시에도 파일은 유지된다. 테이블 삭제 동일한 이름으로 테이블을 다시 생성하면 데이터가 그대로 보존되어 있음을 확인할 있다. 사용자 실수를 방지하기 위해서는 옵션을 사용한다.

·       TEMPORARY : 현재 세션에서만 사용하는 테이블을 생성하는 것으로 세션이 종료되면 테이블 파일이 삭제 된다.

 

[PARTITION]

파티션은 폴더 구조로 데이터를 분할하여 저장하고, PARITION BY 지정한 컬럼을 기준으로 폴더 단위로 데이터가 생성된다. 하이브는 폴더 단위로 데이터를 읽기 때문에  파이션을 구분하지 않으면 모든 테이블의 데이터를 읽게되어 조회시간이 길어진다. 아래 스크립트는 일별 파티션 테이블을 생성한다.

CREATE TABLE tbl(

  col1 STRING

) PARTITIONED BY (yymmdd STRING);

 

 

[ROW FROAMT]

ROW FORMAT 데이터를 컬럼 단위로 구분하는 구분자(delimeter) 데이터를 해석하는 방법을 지정하는 서드 (SERDEPROPERTIES) 지정한다. 사용자가 지정하지 않으면 기본 구분자를 사용한다. 아래 명령은 기본적으로 사용되는 구분자이다.

FIELDS TERMINATED BY '\t'            -- 컬럼 구분

COLLECTION ITEMS TERMINATED BY ','   -- 리스트 구분

MAP KEYS TERMINATED BY '='           -- 맵데이터의 키밸류 구분

LINES TERMINATED BY '\n'             -- row 구분

ESCAPED BY '\\'                     

NULL DEFINED AS 'null'               

 

[STORAGE FORMATS]

HIVE TEXTFILE, SEQUENCEFILE, ORC, PARQUET 등의 저장포맷을 지정하며, 사용자 정의 파일 형식도 지원한다. 기본 포맷은TEXTFILE 이다. 자세한 내용은 아래 링크를 참고한다.

·       https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-StorageFormatsStorageFormatsRowFormat,StorageFormat,andSerDe

 

아래 스크립트는 employee 테이블을 생성하는 예제 스크립트 이다.

CREATE TABLE IF NOT EXISTS employee (

eid int,

name String,

salary String,

destination String)

COMMENT 'Employee details'

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\t'

LINES TERMINATED BY '\n'

STORED AS TEXTFILE;

 

아래 스크립트는 JAVA에서 JDBC 사용하여 Hive 테이블을 생성하고 sample.txt 데이터를 테이블로 로드한다.

import java.sql.SQLException;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.Statement;

import java.sql.DriverManager;

 

public class HiveCreateTable {

   private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";

  

   public static void main(String[] args) throws SQLException {

  

      // Register driver and create driver instance

      Class.forName(driverName);

     

      // get connection

      Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/userdb", "", "");

     

      // create statement

      Statement stmt = con.createStatement();

     

      // execute statement

      stmt.executeQuery("CREATE TABLE IF NOT EXISTS "

         +" employee ( eid int, name String, "

         +" salary String, destignation String)"

         +" COMMENT ‘Employee details’"

         +" ROW FORMAT DELIMITED"

         +" FIELDS TERMINATED BY ‘\t’"

         +" LINES TERMINATED BY ‘\n’"

         +" STORED AS TEXTFILE;");

        

      System.out.println(“ Table employee created.”);

      con.close();

   }

}

 

 

[참고자료]

·       https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-CreateTableCreate/Drop/TruncateTable

·       https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-StorageFormatsStorageFormatsRowFormat,StorageFormat,andSerDe

 

 

2019-11-26 / Sungwook Kang / http://sungwookkang.com

 

Hadoop, Hive, 하둡, 하이브, Hive Datawarehouse, 하이브 테이블, Hive Table

Hive Architecture

 

·       Version : Hive

 

Apache Hive 데이터 쿼리 분석을 제공하기 위해 Apache Hadoop 위에 구축 데이터웨어 하우스 소프트웨어 프로젝트이다. Hive Hadoop 통합되는 다양한 데이터베이스 파일 시스템에 저장된 데이터를 쿼리하기위한 SQL 유사한 인터페이스를 제공한다. 분산 데이터에 대해 SQL 응용 프로그램 조회를 실행하려면 MapReduce Java API에서 기존 SQL 조회를 구현해야한다. HiveJava API에서 쿼리를 구현할 필요없이 SQL 유사한 쿼리 (HiveQL) 기본 Java 통합하는 필요한 SQL 추상화를 제공한다. 대부분의 데이터웨어 하우징 응용 프로그램은 SQL 기반 쿼리 언어와 함께 작동하므로 Hive SQL 기반 응용 프로그램을 Hadoop으로 이식 있도록 도와준다.

·       Apache Hive : https://en.wikipedia.org/wiki/Apache_Hive

 

아래 그림은 Apache Hive Architecture 이다. 크게 Hive Client, Hive Services, Hive Storage 영역으로 나눌 있으며, Meta store, Hive Server, Driver 대해서 살펴본다.

 

 

 

[Meta Store]

Meta Store Hive 구동될때 필요한 테이블의 스키만 구조나 다양한 설정값이 저장된다. 따라서 Hive 구성하는데 가장 중요한 요소이며, Meta Store 장애가 발생할 경우 Hive 정상적으로 구동되지 않는다. Hive Mete Store MySQL, Oracle, PostgreSQL 등에 저장되며, 임베디드(Embedded), 로컬(Local), 리모트(Remote) 3가지 실행모드가 있다.

·       임베디드(Embedded)  : 별도의 데이터베이스를 구성하지 않고 더비DB 이용한 모드이며 한번에 한명의 유저만 접근이 가능하다.

·       로컬(Local) : 별도의 데이터베이스를 가지고 있지만 하이브 드라이버와 같은 JVM에서 동작한다.

·       리모트(Remote) : 별도의 데이터베이스를 가지고, 별도의 JVM에서 단독으로 동작하는 모드이며, 리모트로 동작하는 메타스토어를 HCat서버라고도 한다.

 

 

[Hive Server]

Hive Server Hive 질의하는 가장 앞단의 서버이다. JDBC ODBC 부터 질의를 받아서 이를 Driver 전달하는 역할이다. Hive Server 통해야 권한, 접근성 등을 체크할 있다. Hive Server 상단 박스의 CLI 통할경우 바로 Driver 접속되기 때문에 권한이나 제어를 받지않고 바로 모든 컨트롤이 가능해진다. 따라서 보안을 위해서는 운영모드에서는 사용하지 않는것이 좋다.

 

[Driver]

Driver Hive 엔진으로써 여러 질의에 대해 Optimizer 통해 Hive SQL 연산 방식을 계산하고 MR, Spark 여러 엔진등과 연동하는 역할을 담당한다.

 

 

2019-11-25 / Sungwook Kang / http://sungwookkang.com

 

Hadoop, Hive, 하둡, 하이브, Hive Datawarehouse, 하이브 아키텍처, Hive Architecture

+ Recent posts