Apache Hive Hook

Hive 2013.08.13 15:37

Apache Hive Hook

하이브 훅(Hook)에 대한 내용이 별로 없어서 하나 만듬. 필요한 사람에게 도움이 되길 바람. 메타스토어 이벤트 리스너에 대한 내용도 조금 들어 갔고 release-0.11 태그를 기반으로 작성되었음.


I couldn't find enough info about Hive hooks. So, I made this. I hope this presentation will be useful when you want to use hooks. This included some infomation about metastore event listeners. This was written based on release-0.11 tag.


Posted by 김민우 julingks

댓글을 달아 주세요

  1. hive 2014.02.11 19:44  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 하이브 관심있는 학생인데
    혹시 질문해도 되나요 ?

  2. 전득진 2014.03.14 11:21  댓글주소  수정/삭제  댓글쓰기

    좀더 범용적인 솔루션으로서 Spring의 AOP 같은 기능을 하는 것으로 보면 될까요?

Apache Hive 0.11.0 Released


아파치 하이브 버전 0.11.0이 출시됐다.


자세한 내용과 다운로드는 여기를 방문

릴리즈 노트는 여기


이번 릴리즈에는 HiveServer2, hcatalog 통함, 윈도우윙과 분석함수, decimal 데이터 타입, 향상된 쿼리 플래닝, 성능 향상과 다양한 버그 수정 등 총 350여개의 이슈가 이번 릴리즈에 포함 되었다.



0.11.0 관련 이전 포스트들


Posted by 김민우 julingks

댓글을 달아 주세요

Research Cloudera Impala 1.0


클라우데라 임팔라 1.0 이 지난 4월 30일이 릴리즈 했다. 조사 발표자료를 공유. Google Dremel도 간략히 설명함.



References


Posted by 김민우 julingks

댓글을 달아 주세요

Voting Hive 0.11.0 RC 2

Hive 2013.05.13 14:55

Voting Hive 0.11.0 RC 2


다음 7개의 문제를 수정함

  • 릴리즈 노트 오류
  • HIVE-4018 - MapJoin failing with Distributed Cache error
  • HIVE-4421 - Improve memory usage by ORC dictionaries
  • HIVE-4500 - Ensure that HiveServer 2 closes log files.
  • HIVE-4494 - ORC map columns get class cast exception in some contexts
  • HIVE-4498 - Fix TestBeeLineWithArgs failure
  • HIVE-4505 - Hive can’t load transforms with remote scripts
  • HIVE-4527 - Fix the eclipse template


RC2의 소스 태그는 여기.

https://svn.apache.org/repos/asf/hive/tags/release-0.11.0rc2


소스 타르 볼과 바이너리 artifacts는 여기.

http://people.apache.org/~omalley/hive-0.11.0rc2/


이번 리릴즈는 HiveServer2, hcatalog 통함, 윈도우윙과 분석함수들, decimal 데이터 타입, 더 좋은 쿼리 플래닝, 성능 향상과 다양한 버그 수정이 포함되어 있다.

총 350여개의 이슈를 해결했고 수정된 이슈의 모든 리스트는 여기.

http://s.apache.org/8Fr


72시간 동안 PMC(Project Management Committee)가 투표를 진행한다.


우짜든 0.11.0 릴리즈 임박

Posted by 김민우 julingks
TAG 0.11.0, hive, rc2

댓글을 달아 주세요

java.lang.reflect.InvocationTargetException when using UDF in Hive query


하이브 UDF 사용시에 다음과 같은 에러가 나면 (하이브 0.10.0 버전 기준)

java.lang.RuntimeException: Error in configuring object
    at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:93)
    at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:64)
    at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117)
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:387)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:325)
    at org.apache.hadoop.mapred.Child$4.run(Child.java:266)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1278)
    at org.apache.hadoop.mapred.Child.main(Child.java:260)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java


UDF의 jar파일이 중복으로 classpath에 잡혀 있을 가능성이 있다.

하이브에 jar를 등록하는 방법은 다음과 같다.

  • hive-site.xml 안에 hive.aux.jars.path 값
  • 환경 변수 HIVE_AUX_JARS_PATH
  • .hiverc 파일안에 add jar[s]
  • CLI 실행시 -i 옵션으로 지정한 스크립트에 add jar[s]

참고로 .hiverc는 cli에서만 읽는다. (Thrift 서버 구동시는 초기화 스크립트는 -i 옵션을 이용)


-----


5월 20일 추가


$HIVE_HOME/bin/hive 스크립트는 $HIVE_HOME/bin/ext/util/execHiveCmd.sh를 include한다.

결국 hadoop jar 명령을 통해서 HIve CLI 나 beeline 클래스의 메인 메소드를 실행하게 되어 있다.


그래서 $HADOOP_HOME/lib 이나 하둡 클래스 패스에도 UDF jar파일이 중복으로 잡혀 있다면 리플랙션으로 UDF를 불러올때 위와 같은 에러를 발생시킬 수 있다.


결국 hadoop의 lib과 클래스 패스도 살펴보아야 한다. (원인도 모르고 캐삽질 할 수 있음......;; )

Posted by 김민우 julingks
TAG hive, UDF

댓글을 달아 주세요

Voting Apache Hive 0.11.0 Release Candidate 0


아파치 하이브 0.11.0 RC0가 투표중이다.


현재는 호톤웍스에 Ashutosh Chauhan이 빌드매니징을 하고 있다.


후보0은 다음과 같다.


http://people.apache.org/~hashutosh/hive-0.11.0-rc0/


메이븐 artifacts는 여기서 확인할 수 있다


https://repository.apache.org/content/repositories/orgapachehive-154/


이번 릴리즈는 HiveServer2, 윈도우윙과 분석함수, Decimal 데이터 타입, 향상된 쿼리 플래닝, 성능 향상 및 다양한 버그가 수정되었고 총 350개 이슈이다.


수정된 이슈의 목록은 다음에서 확인할 수 있다.


http://s.apache.org/8Fr


72시간 동안 투표를 수행하고 PMC (Project Management Committee)가 투표할 권한을 가진다.


(회사에서 하이브 커미터였던 Navis님께서 이번에 PMC 맴버가 되었다)


암튼 하이브 0.11.0 이 곧 출시 임박. (RC 다운 받아서 미리 써봐야지)




-----


5월 2일 추가


버그 핫픽스 하고 rc1 다시 투표중
https://svn.apache.org/repos/asf/hive/tags/release-0.11.0-rc1


소스 타르 볼과 바이너리 artifacts는 여기 
http://people.apache.org/~hashutosh/hive-0.11.0-rc1/

하이브 메이븐 artifacts는 여기
https://repository.apache.org/content/repositories/orgapachehive-158/

hcatalog 메이븐 artifacts는 여기
https://repository.apache.org/content/repositories/orgapachehcatalog-159/



Posted by 김민우 julingks

댓글을 달아 주세요

Book : Programming Hive

Hive 2013.04.23 17:33

Book : Programming Hive


Programming Hive 번역본이 출간되었다.


하이브 완벽 가이드, O'REILLY, 한빛 미디어 에드워드 카프리올로, 딘 웜플러, 제이슨 러더글렌 지음 (오세봉 외 옮김)


 회사 동료분들이 번역 했고 나는 부록A를 집필했다.

영문판을 미리 받아 봤지만 훝어보기만 하고 방치하다가 교육 자료를 만들려니 번역본을 읽었다.

그래서 출간된지 20일이 넘어서야 책을 다 읽게 되었다. 하이브가 딱히 마땅한 레퍼런스 북이 없어서 하이브 사용자들은 대부분 이 책을 구매할 것으로 예상되긴 하지만 그래도 이 책을 읽어야 되는 이유를 간단히 적고자 한다. (홍보 때문은 아니고 어둠에 경로를 통해서라도.)


 우선 하이브 오픈소스 커뮤니티가 왕성하게 활동하는 결과로 많은 기능이 추가되고 있는데 그에 비해서 문서 보강은 더디다. 그래서 문서가 최신 상태가 아닌 경우가 많은데 이때는 사용자 메일링이나 JIRA에서 이슈를 찾아보게 된다. 그래도 못 찾는 경우에는 아예 코드를 뒤져보는게 맘편하다. 하지만 아무리 이슈와 소스가 공개되어 있다고 하더라도 사용자가 직접 찾아보는 것은 시간과 수고가 드는 일이다. 그나마 이 책은 0.10 버전 기준으로 가장 최신의 하이브의 기능을 설명하고 있다.


 하이브를 사용하면서 소홀히 하게 되는 보안, 잠금, 권한에 대한 내용도 충분하진 않지만 그 어떤 문서보다 쉽게 잘 정리되어 있다.


 기능이 Case by case 동작이 달라서 직접 문제에 부딪혀봐야 알 수 있는 디테일한 정보들도 깨알같이 정리되어 있다. 매번 까먹고 삽질을 반복하던 내용들이 책을 한 번 훝어보니 깔끔하게 정리가 된다.


 물론 이제 곧 출시된 0.11에는 Decimal Type, 분석함수, ORC 파일포맷, HiveServer2, HCatalog 코드 통합 등 많은 변화가 있을 예정이다. 0.11이 출시되자마자 이 책도 outdated 되겠지만 그래도 0.11에 추가된 새로운 기능이 안정화 되려면 0.12는 되어야 할 것 같다.


기능이 많이 추가된 만큼 버그도 속출하고 있어서 하이브 커뮤니티에서 열심히 수정 중이다.

Posted by 김민우 julingks

댓글을 달아 주세요

New Hive Committer

Hive 2013.04.19 11:02

New Hive Committer


하이브 PMC(Project Management Committee)에서 SAP의 Harish Butani와 Hortonworks의 Owen O'Malley가 커미터 voting을 통과했다.


Harish의 기여는 여기서 확인할 수 있다.


http://s.apache.org/n3h


주요 커밋은 이전에 포스트에 올렸다시피 분석함수와 윈도우 함수 추가이다.

Owen의 기여는 여기서 확인할 수 있다.


http://s.apache.org/wQm


RC파일의 몇몇 문제점을 개선한 ORC(Optimized Row Columnar) 파일 포멧을 추가했다.

Hcatalog 개발자들은 서브 모듈 커미터로 등록 되었는데 이 두 명은 기여한 이슈가 중요한 공헌으로 판단이 되었는지 바로 커미터가 되었다.


회사에 있는 커미터(navis)분께 물어보니 수준(실력)을 보는거 같다고?? 믿거나 말거나.

Posted by 김민우 julingks
TAG commiter, hive

댓글을 달아 주세요

Hive 0.11 will support analytic and windowing functions.


하이브 0.11이 곧 릴리즈 할 것 같다. 이미 빌드 메니저가 0.11 branch를 따는 중인 듯. 곧 출시할 0.11에는 분석함수와 윈도우 함수가 추가될 예정이다.

이 이슈도 오래 끌 줄 알았는데 이번에 trunk에 커밋이 되었다.


하둡 서밋 2012에 SAP에서 하이브 분석함수 관련해서 발표를 하고 github에 코드를 공개했던 harish butani가 하이브에 코드를 기여했다.

문서가 없어서 patch를 살펴 보니, 지원되는 함수가 많다. (오라클에서 지원하는 함수 거의 다 지원하는 듯)


rank, dense_rank, lag, lead, sum, count, cume_dist, percent_rank, ntile, avg, stddev, first_value, last_value, min, max, stddev_pop, collect_set, variance, corr, covar_pop, row_number, percentile, histogram_numberic


이야. Harish butani 이 사람 좀 대단하다. 물론 그전에 오랬동안 개발해 온 것이지만 그동안 분석함수 때문에 하이브를 외면했던 사용자는 다시 돌아와야 할 듯. 윈도우윙 절은 하이브 특성상 partition by, order by 구문 대신 distribute by, sort by 구문으로 바뀐 것이 차이점이다.


예제 쿼리를 하나 보자면 다음과 같다.

select p_mfgr, p_name, p_size,
    sum(p_retailprice) over (distribute by p_mfgr sort by p_size range between current row and unbounded following) as s1
from part ;

 분석함수는 MySQL에서는 지원하지 않는다. 오라클에서 8.1x 버전 부터 지원 됐고, 집계 함수(aggregation function)과 차이점 이라면 집계 함수는 그룹 별로 하나의 행을 결과로 내지만 분석 함수는 결과 셋이 줄지 않는다. 쿼리가 간단해지고 실제 수행 시간도 단축된다는 장점 있다.


 흔히 우리가 집계 함수라고 알고 있는 min, max 도 뒤에 윈도우 절이 붙으면 리포팅 집계 함수로서 분석함수로 처리 된다. 윈도우라는 개념은 하나의 파티션에서 각각 행에 대해서 미끄러지는 창(sliding window)라고 할 수 있다. 현재 행(current row)에 대해서 분석 함수를 처리할 파티션의 정의를 윈도우 절에서 하게 된다.

 

분석 함수의 처리순서는 다음과 같다.

  1. 조인, WHERE, GROUP BY, HAVING 절을 수행한 이후에
  2. 분석 함수가 처리할 결과 셋이 만들어지고 계산이 수행된다.
  3. ORDER BY 절이 있다면, 최종 결과의 순서를 정렬한다.


하이브 0.11에는 HiveServer2, Decimal 데이터 타입, 분석함수 등 많은 향상이 있을 예정이다.


Posted by 김민우 julingks

댓글을 달아 주세요

Hive query for granting all authorities on default database

하이브에서 authorization 옵션을 enabled 시키고 테이블을 생성하려고 하면..


Authorization failed:No privilege 'Create' found for outputs { database:default}. Use show grant to get more details.


이런 에러 메시지만 나온다. 권한이 없다는 얘기 인데 사용자에게 기본 데이터베이스(default)의 모든 권한을 부여하는 쿼리는 다음과 같다.

set hive.security.authorization.enabled=true;
grant all on database default to user hive_user;

0.10.0 버전 기준.

Posted by 김민우 julingks

댓글을 달아 주세요

Hive Query Examples from test code (2 of 2)


하이브 쿼리 예제들 (0.10.0 기준) hive.ql.src.test.queries.clientpositive 에서 추려냄. 생소한 구문 위주로 정리함. 자세한 사항은 하이브 메뉴얼 참조 https://cwiki.apache.org/confluence/display/Hive/LanguageManual


Hive query for adding jar or script files

set jar=${system:build.ivy.lib.dir}/default/derby-${system:derby.version}.jar;

add file ${hiveconf:jar}; -- 추가
list file;  -- 리스트
delete file ${hiveconf:jar}; -- 삭제


Hive example for creating table using RegexSerDe

CREATE TABLE serde_regex(
  host STRING,
  identity STRING,
  user STRING,
  time STRING,
  request STRING,
  status STRING,
  size STRING,
  referer STRING,
  agent STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
  "input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) ([^ \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*)(?: ([^ \"]*|\"[^\"]*\") ([^ \"]*|\"[^\"]*\"))?",
  "output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s"
)
STORED AS TEXTFILE;

아파치 로그 파일

../data/files/apache.access.log

127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326

아파치 로그 파일2

../data/files/apache.access.2.log

127.0.0.1 - - [26/May/2009:00:00:00 +0000] "GET /someurl/?track=Blabla(Main) HTTP/1.1" 200 5864 - "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.65 Safari/525.19"


Hive query which contains “transform” using specific script.

set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
CREATE TABLE dest1(key INT, value STRING);

ADD FILE src/test/scripts/testgrep;

FROM (
  FROM src
  SELECT TRANSFORM(src.key, src.value)
         USING 'testgrep' AS (tkey, tvalue)
  CLUSTER BY tkey
) tmap
INSERT OVERWRITE TABLE dest1 SELECT tmap.tkey, tmap.tvalue;

SELECT dest1.* FROM dest1;

src/test/scripts/testgrep

#!/bin/bash
egrep '10.*'

exit 0;


Hive tablesamples example

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

-- TABLESAMPLES
CREATE TABLE bucketized_src (key INT, value STRING)
CLUSTERED BY (key) SORTED BY (key) INTO 1 BUCKETS;

INSERT OVERWRITE TABLE bucketized_src
SELECT key, value FROM src WHERE key=66;

SELECT key FROM bucketized_src TABLESAMPLE(BUCKET 1 out of 1);


Hive query for creating table using specific delimiters

create table impressions (imp string, msg string)
row format delimited
fields terminated by '\t'
lines terminated by '\n'
stored as textfile;


기본 파티션 이름 설정

create table default_partition_name (key int, value string) partitioned by (ds string);

set hive.exec.default.partition.name='some_other_default_partition_name';

alter table default_partition_name add partition(ds='__HIVE_DEFAULT_PARTITION__');

show partitions default_partition_name;


문자열 상수 처리

SELECT 'face''book', 'face' 'book', 'face'
                                'book',
   "face""book", "face" "book", "face"
                                "book",
   'face' 'bo' 'ok', 'face'"book",
   "face"'book', 'facebook' FROM src LIMIT 1;

결과

facebook    facebook    facebook    facebook    facebook    facebook    facebook    facebook    facebook    facebook


Hive table lock examples

CREATE TABLE tstsrc (col1 STRING) STORED AS TEXTFILE;

SHOW LOCKS;
SHOW LOCKS tstsrc;
SHOW LOCKS tstsrc extended;

LOCK TABLE tstsrc shared;
UNLOCK TABLE tstsrc;


Hive partition lock examples

LOCK TABLE tstsrcpart PARTITION(ds='2008-04-08', hr='11') EXCLUSIVE;

SHOW LOCKS tstsrcpart PARTITION(ds='2008-04-08', hr='11') extended;

UNLOCK TABLE tstsrcpart PARTITION(ds='2008-04-08', hr='11');  


Hive virtual column

0.8.0 부터 INPUT_FILENAME, BLOCKOFFSETINSIDE_FILE 두 개 가상 컬럼 지원함

  • INPUT_FILE_NAME는 맵퍼 테스크의 파일 이름
  • BLOCK_OFFSETINSIDE_FILE는 현재 글로벌 파일 포지션

블락이 압축된 파일인 경운 현재 블락의 파일 오프셋은 현재 블락의 첫번째 바이트의 파일 오프셋이다.

select INPUT__FILE__NAME, key, BLOCK__OFFSET__INSIDE__FILE from src;


로컬 디렉토리에 결과 쓰기

FROM src INSERT OVERWRITE DIRECTORY '../build/contrib/hive/ql/test/data/warehouse/dest4.out' SELECT src.value WHERE src.key >= 300

dfs -cat ../build/contrib/hive/ql/test/data/warehouse/dest4.out/*;


Hive example for comparison of timestamp values

select cast('2011-05-06 07:08:09' as timestamp) > 
  cast('2011-05-06 07:08:09' as timestamp) from src limit 1;


Hive type casting

SELECT IF(false, 1, cast(2 as smallint)) + 3 FROM src LIMIT 1;


Show table properties in Hive

show tblproperties tmpfoo;
show tblproperties tmpfoo("bar");


Display functions in Hive CLI

SHOW FUNCTIONS;

SHOW FUNCTIONS '^c.*';

SHOW FUNCTIONS '.*e$';

SHOW FUNCTIONS 'log.*';

SHOW FUNCTIONS '.*date.*';

SHOW FUNCTIONS '***';


Show colums in Hive

CREATE TABLE shcol_test(KEY STRING, VALUE STRING) PARTITIONED BY(ds STRING) STORED AS TEXTFILE;

SHOW COLUMNS from shcol_test;


Reset hive settings

set hive.skewjoin.key;
set hive.skewjoin.mapjoin.min.split;
set hive.skewjoin.key=300000;
set hive.skewjoin.mapjoin.min.split=256000000;
set hive.skewjoin.key;
set hive.skewjoin.mapjoin.min.split;

reset;

set hive.skewjoin.key;
set hive.skewjoin.mapjoin.min.split;


Print column header in Hive CLI

set hive.cli.print.header=true;


프로그래스 heartbeat 간격

set hive.heartbeat.interval=5; 


DDL 관련 출력 포맷을 json으로 변경

set hive.ddl.output.format=json;

desc extended table_name;

set hive.ddl.output.format=text; -- 기본값


Posted by 김민우 julingks

댓글을 달아 주세요

Hive Query Examples from test code (1 of 2)

하이브 쿼리 예제들 (0.10.0 기준)

hive.ql.src.test.queries.clientpositive 에서 추려냄.

생소한 구문 위주로 정리함.

자세한 사항은 하이브 메뉴얼 참조


Hive query for creating table

CREATE TABLE page_view (
 viewTime INT,
 userid BIGINT,
 page_url STRING,
 ip STRING COMMENT 'IP Address of the User',
 referrer_url STRING
) COMMENT 'This is the page view table'
 PARTITIONED BY (dt STRING, country STRING)
 CLUSTERED BY (userid) SORTED BY (viewTime) INTO 32 BUCKETS
 ROW FORMAT DELIMITED
   FIELDS TERMINATED BY '\001'
   COLLECTION ITEMS TERMINATED BY '\002'
   MAP KEYS TERMINATED BY '\003'
   LINES TERMINATED BY '\n'
 STORED AS SEQUENCEFILE;


Hive query for adding partitions

CREATE TABLE add_part_test (key STRING, value STRING) PARTITIONED BY (ds STRING);

ALTER TABLE add_part_test ADD PARTITION (ds='2010-01-01');

ALTER TABLE add_part_test ADD IF NOT EXISTS PARTITION (ds='2010-01-01');

ALTER TABLE add_part_test ADD IF NOT EXISTS PARTITION (ds='2010-01-01') PARTITION (ds='2010-01-02') PARTITION (ds='2010-01-03');

ALTER TABLE alter2 ADD PARTITION (insertdate='2008-01-01') LOCATION '2008/01/01';


Hive query for showing partitions

show partitions alter2;


Hive query for changing table properties

ALTER TABLE alter1 SET TBLPROPERTIES ('a'='1', 'c'='4', 'd'='3');


Hive query for changing SerDe properties

ALTER TABLE alter1 SET SERDEPROPERTIES('s1'='10', 's2' ='20');


Hive query for changing SerDe

ADD JAR ../data/files/TestSerDe.jar;
ALTER TABLE alter1 SET SERDE 'org.apache.hadoop.hive.serde2.TestSerDe' WITH SERDEPROPERTIES ('s1'='9');


Hive query for changing columns

ALTER TABLE alter1 REPLACE COLUMNS (a int, b int, c string);


Hive query for changing table name

ALTER TABLE alter3 RENAME TO alter3_renamed;


Hive queries for loading data

CREATE TABLE alter3_src (col1 STRING) STORED AS TEXTFILE ;
LOAD DATA LOCAL INPATH '../data/files/test.dat' OVERWRITE INTO TABLE alter3_src ;

-

load data local inpath '../data/files/kv1.txt' into table load_overwrite;

load data inpath '${system:test.tmp.dir}/load_overwrite/kv*.txt' overwrite into table load_overwrite2;

load data inpath '${system:test.tmp.dir}/load2_*' overwrite into table load_overwrite;  

LOAD DATA LOCAL INPATH '../data1/files/kv1.txt' INTO TABLE loadpart1 PARTITION(ds='2009-05-05'); -- 파티션 로드


Hive query for overwriting data

INSERT OVERWRITE TABLE alter3_like PARTITION (pCol1='test_part:', pcol2='test_part:') SELECT col1 FROM alter3_src;


Hive query for creating bucketed table

CREATE TABLE set_bucketing_test (key INT, value STRING) CLUSTERED BY (key) INTO 10 BUCKETS;


Hive query for changing bucketed table

ALTER TABLE set_bucketing_test NOT CLUSTERED;


Hive query for creating index

CREATE INDEX src_rc_concatenate_test_index ON TABLE src_rc_concatenate_test(key) AS 'compact' WITH DEFERRED REBUILD IDXPROPERTIES ("prop1"="val1", "prop2"="val2"); 


Hive query for showing index

SHOW     INDEXES ON src_rc_concatenate_test;


Hive query for removing index from specific table

DROP INDEX src_rc_concatenate_test_index ON src_rc_concatenate_test;


Hive query for calculating statistics

analyze table src_rc_merge_test_part_stat partition(ds='2011') compute statistics;
desc extended src_rc_merge_test_part_stat;


Hive query for changing # of buckets from specific table

create table tst1(key string, value string) partitioned by (ds string) clustered by (key) into 10 buckets;

alter table tst1 clustered by (key) into 8 buckets;


Hive query for changing fileformat

alter table alter_partition_format_test set fileformat rcfile;

alter table alter_partition_format_test partition(ds='2010') set fileformat rcfile;


Hive query for changing where the data is located.

alter table alter_partition_format_test set location "file:/test/test/";

alter table alter_partition_format_test partition(ds='2010') set location "file:/test/test/ds=2010";


Hive query for protect mode

alter table alter_part_protect_mode partition (year='1996') enable no_drop;

alter table alter_part_protect_mode partition (year='1995') disable no_drop;

alter table tbl1 enable no_drop cascade;

alter table tbl1 enable no_drop;

alter table tbl1 disable no_drop cascade;


Hive query for changing partition names

CREATE TABLE alter_rename_partition (col1 STRING) PARTITIONED BY (pcol1 STRING, pcol2 STRING) STORED AS SEQUENCEFILE;

ALTER TABLE alter_rename_partition PARTITION (pCol1='old_part1:', pcol2='old_part2:') RENAME TO PARTITION (pCol1='new_part1:', pcol2='new_part2:');


Hive query for authorization

create table authorization_part (key int, value string) partitioned by (ds string);  -- 테이블 생성

ALTER TABLE authorization_part SET TBLPROPERTIES ("PARTITION_LEVEL_PRIVILEGE"="TRUE");  -- 프로퍼티 설정
set hive.security.authorization.enabled=true;  -- 권한 사용

grant select on table src_auth_tmp to user hive_test_user;
grant Create on table authorization_part to user hive_test_user;
grant Update on table authorization_part to user hive_test_user;
grant Drop on table authorization_part to user hive_test_user;

show grant user hive_test_user on table authorization_part;


Hive query for creating a skewed table

set hive.mapred.supports.subdirectories=true;
set hive.internal.ddl.list.bucketing.enable=true;

create table original3 (key STRING, value STRING) SKEWED BY (key, value) ON ((1,1),(5,6)); 

alter table original3 not skewed;


Hive query for changing SerDe’s delimiter

alter table test_table set serde 'org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe';

alter table test_table set serdeproperties ('field.delim' = ',');


Hive query for changing view name

CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);
CREATE VIEW view1 as SELECT * FROM invites;

ALTER VIEW view1 RENAME TO view2;


Hive queries about archive

아카이브에 관한 자세한 내용응 여기를 참고.

If you want to get more information about achive, click this.

set hive.archive.enabled = true;
set hive.enforce.bucketing = true;

create table tstsrcpart (key string, value string) partitioned by (ds string, hr string) clustered by (key) into 10 buckets;

ALTER TABLE tstsrcpart ARCHIVE PARTITION (ds='2008-04-08', hr='12');

ALTER TABLE tstsrcpart UNARCHIVE PARTITION (ds='2008-04-08', hr='12');

CREATE TABLE harbucket(key INT) PARTITIONED by (ds STRING) CLUSTERED BY (key) INTO 10 BUCKETS;
ALTER TABLE tstsrcpart ARCHIVE PARTITION (ds='2008-04-08', hr='12');
ALTER TABLE tstsrcpart UNARCHIVE PARTITION (ds='2008-04-08', hr='12');


Hive queries for authorization (grant, revoke)

권한 부여에 대한 자세한 내용은 여기를 참고.

set hive.security.authorization.enabled=true;

--table grant to user

grant select on table src_autho_test to user hive_test_user;

revoke select on table src_autho_test from user hive_test_user;

--column grant to user

grant select(key) on table src_autho_test to user hive_test_user;

revoke select(key) on table src_autho_test from user hive_test_user;

--table grant to group

grant select on table src_autho_test to group hive_test_group1;

revoke select on table src_autho_test from group hive_test_group1;

--column grant to group

grant select(key) on table src_autho_test to group hive_test_group1;

revoke select(key) on table src_autho_test from group hive_test_group1;


Hive query for creating roles

--role
create role src_role;
grant role src_role to user hive_test_user;
show role grant user hive_test_user;


Hive query for granting authority to specific role

--column grant to role

grant select(key) on table src_autho_test to role src_role;

revoke select(key) on table src_autho_test from role src_role;

--table grant to role

grant select on table src_autho_test to role src_role;

revoke select on table src_autho_test from role src_role;


Hive query for deleting role

drop role src_role;


Hive query for granting all authoritie to specific user

set hive.security.authorization.enabled=true;

grant All on table src_autho_test to user hive_test_user;


Hive examples for granting table authority to specific user or role

CREATE DATABASE IF NOT EXISTS test_db COMMENT 'Hive test database';
SHOW DATABASES;

GRANT drop ON DATABASE test_db TO USER hive_test_user;  -- 사용자에게 drop 권한 부여
GRANT select ON DATABASE test_db TO USER hive_test_user; -- 사용자에게 select 권한 부여

SHOW GRANT USER hive_test_user ON DATABASE test_db;  -- 사용자 권한 보기

CREATE ROLE db_test_role; -- 역할 생성
GRANT ROLE db_test_role TO USER hive_test_user; -- 사용자에게 역할 부여
SHOW ROLE GRANT USER hive_test_user; -- 역할 보기

GRANT drop ON DATABASE test_db TO ROLE db_test_role; -- 역할에 drop 권한 부여
GRANT select ON DATABASE test_db TO ROLE db_test_role; -- 역할에 select 권한 부여

SHOW GRANT ROLE db_test_role ON DATABASE test_db; -- 역할 권한 보기


Hive example for revoking its all authorities for specific user

GRANT ALL TO USER hive_test_user;
SET hive.security.authorization.enabled=true;

CREATE TABLE src_authorization_7 (key int, value string);

REVOKE ALL FROM USER hive_test_user;


Hive example for revoking its all authorities for specific group

GRANT ALL TO GROUP hive_test_group1;
SET hive.security.authorization.enabled=true;

CREATE TABLE src_authorization_7 (key int, value string);

REVOKE ALL FROM GROUP hive_test_group1;


Hive example for setting prehook class

set hive.exec.pre.hooks = org.apache.hadoop.hive.ql.hooks.PreExecutePrinter,org.apache.hadoop.hive.ql.hooks.EnforceReadOnlyTables,org.apache.hadoop.hive.ql.hooks.UpdateInputAccessTimeHook$PreExec;


Hive uniqujoin example

CREATE TABLE T1(key STRING, val STRING) STORED AS TEXTFILE;
CREATE TABLE T2(key STRING, val STRING) STORED AS TEXTFILE;
CREATE TABLE T3(key STRING, val STRING) STORED AS TEXTFILE;

LOAD DATA LOCAL INPATH '../data/files/T1.txt' INTO TABLE T1;
LOAD DATA LOCAL INPATH '../data/files/T2.txt' INTO TABLE T2;
LOAD DATA LOCAL INPATH '../data/files/T3.txt' INTO TABLE T3;

FROM UNIQUEJOIN PRESERVE T1 a (a.key), PRESERVE T2 b (b.key), PRESERVE T3 c (c.key)
SELECT a.key, b.key, c.key;

FROM UNIQUEJOIN T1 a (a.key), T2 b (b.key), T3 c (c.key)
SELECT a.key, b.key, c.key;


Source command in Hive CLI

항이브 퀴리 스크립트 파일을 실행한다.

../data/files/source.txt 에 있는 내용

EXPLAIN
SELECT x.* FROM SRC x;

SELECT x.* FROM SRC x;

실제 source 커맨드

source ../data/files/source.txt;


Hive examples for variable substitution

set hivevar:key1=value1;

EXPLAIN SELECT * FROM src where key="${key1}";
EXPLAIN SELECT * FROM src where key="${hivevar:key1}";

set hivevar:a=1;
set hivevar:b=a;
set hivevar:c=${hivevar:${hivevar:b}};            -- 서브 변수 치환
EXPLAIN SELECT * FROM src where key="${hivevar:c}";

set hivevar:a;
set hivevar:b;
set hivevar:c;
set hivevar:key1;


Posted by 김민우 julingks

댓글을 달아 주세요

Hive 0.7.0 New Features

Hive 2011.06.12 23:18

https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12310843&version=12315150

New Features

  • [HIVE-78] - Authorization infrastructure for Hive
  • [HIVE-417] - 하이브에서 인덱스 구현
  • [HIVE-471] - 자바 메서드 reflective invocation을 위한 reflect() UDF 추가
  • [HIVE-537] - 하이브 TypeInfo/ObjectInspector 객채가 union을 지원 (struct, array, map)
  • [HIVE-842] - 사용자 권한 인프라스트럭처
  • [HIVE-1096] - 하이브 변수
  • [HIVE-1293] - 하이브를 위한 동시성 모델
  • [HIVE-1304] - row_sequence UDF 추가
  • [HIVE-1405] - 다른 SQL 커맨드 이전에 파일을 초기화 파일을 실행하는 커맨드 라인 -i 옵션
  • [HIVE-1408] - 튜닝할 수 있는 휴리스틱 기반의 로컬 모드에서 자동적으로 하이브를 실행하는 옵션 추가
  • [HIVE-1413] - 테이블/파티션을 오프라인으로 가져오기
  • [HIVE-1438] - 자연어 tokenization을 위한 sentences() UDF
  • [HIVE-1481] - 기존 top-k n-gram 빈도수를 예측하기 위한 ngrams() UDAF
  • [HIVE-1514] - 파티션의 파일포맷과 파일 위치 정보를 수정할 수 있다.
  • [HIVE-1518] - top-k econtextual n-grams 추정하기 위한 UDFA context_ngrams() 추가
  • [HIVE-1528] - json_tuple() UDTF 함수 추가
  • [HIVE-1529] - ANSI SQL covariance 집계 함수들 (covar_pop과 covar_samp 추가)
  • [HIVE-1549] - ANSI SQL 연관 집계 함수 추가 (CORR(X,Y))
  • [HIVE-1609] - 메타스토어에서 파티션 필터링 지원
  • [HIVE-1624] - S3에 위치한 스크립트 허용
  • [HIVE-1636] - SHOW TABLES {FROM | IN} db_name 구현
  • [HIVE-1659] - parse_url_tuple : parse_url의 UDTF 버젼
  • [HIVE-1661] - 파라메터들의 디폴트 값들
  • [HIVE-1779] - str_to_map의 GenericUDF 구현
  • [HIVE-1790] - Hive에서 HAVING 절 지원
  • [HIVE-1792] - 자동적으로 맵-조인으로 전환되는 조인들을 추적한다
  • [HIVE-1818] - jmx를 통해 HiveMetaSotre를 위한 빈도수와 지속시간 메트릭을 호출한다
  • [HIVE-1819] - 메타스토어에서 lastAccessTime을 유지한다
  • [HIVE-1820] - Hive 데이타베이스 데이터 센터를 알린다
  • [HIVE-1827] - 테스트에 새로운 로컬 모드 flag 추가
  • [HIVE-1835] - 하이브를 위한 더 낳은 자동 완성 기능
  • [HIVE-1840] - 데이터 프로퍼티들을 변경하기 위한 ALTER DATABASE 지원
  • [HIVE-1856] - DROP TABLE/VIEW ... IF EXISTS 구현
  • [HIVE-1858] - DROP {PARTITION, INDEX, TEMPORARY FUNCTION} IF EXISTS 구현
  • [HIVE-1881] - 메타스토어 파일시스템 인터페이스가 hive.metastore.fs.handler.class.configuration property 를 통해서 연결되도록 한다.
  • [HIVE-1889] - 인덱스 파일들에 저장된  HDFS 위치를 무시하도록하는 hive.index.compact.file.ignore.hdfs 옵션 추가
  • [HIVE-1971] - Hive CLI 를 위한 verbose(진행 메세지 표시)/echo 모드
Posted by 김민우 julingks

댓글을 달아 주세요

DDL Operation

하이브 테이블을 만들고 결과를 보여준다.

hive> CREATE TABLE pokes (foo INt, bar STRING);

두 개의 컬럼이 있는 pokes 테읍ㄹ을 생성한다. 첫 번째는 정수, 두 번째는 문자열이다.

hive> CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);

두개의 컬럼을 가지고 한 개의 파티션 컬럼을 가지는 invites 테이블은 생성한다. 파티션 걸럼은 가상 컬럼이다. 이것은 데이타 자체의 일부분이 아니다. 특별한 데이터 셋이 로드되는 파티션으로 부터 유래한다.
디폴트로 테이블들은 text input format이고 구분자는 ^A(crt-a)라고 가정한다.

hive> SHOW TABLES;

테이블의 목록을 보여준다.

hive> SHOW TABLES ‘.*s’;

‘s’로 끝나는 테이블의 모든 목록을 보여준다. 이 패턴 매칭은 Java regular expressions을 따른다.

hive> DESCRIBE invites;

컬럼의 목록을 보여준다.

테이블 변경에서 테이블 이름은 변경될 수 있다. 그리고 추가 컬럼도 drop 될 수 있다.

hive> ALTER TABLE pokes ADD COLUMNS (new_col INT);
hive> ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT ‘a comment’);
hive> ALTER TABLE events RENAME TO 3koobecaf;

테이블 drop

hive> DROP TABLE pokes;

 

Metadata Store

메타데이터는 javax.jdo.option.ConnectionURL 의 이름의 하이브 설정 변수에 의해 디스크 스토리의 위치 결정되는  임베디드 더비 데이터베이스이다.  초기 값은 ./metasore_db 이다.

메타스토어는  JPOX를 지원하는 어떤 데이타베이스에도 저장될 수 있다. 위치와 RDBMS의 타입은 javax.jdo.option.ConnectionURL 과 javax.jdo.option.ConnectionDriverName 두 변수에 의해서 조정된다.
지원하는 데이터베이스들의 좀 더 자세항 사항은 JDO(또는 JPOX) 문서를 참조해라 테이터베이스 스키마는  src/contrib/hive/metasore/src/model에 있는 JDO 메타데이터 어노테이션 파일 package.jdo 에 정의 되어 있다.

향후에는 메타스토어 자체가 stand-alone 서버가 될 것이다.

DML Operation

flat 파일의 데이타를 Hive로 로드한다.

hive> LOAD DATA LOCAL INPATH ‘./examples/files/kv1.txt’ OVERWRITE INTO TABLE pokes;

ctrl-a 로 나눠진 두 컬럼 포함하는 파일을 pkes 테이블로 로드한다.  ‘local’ 이라고 명시하는 것은 입력파일이 로컬 파일 시스템에 있다는 것이다. ‘local’을 빼면 HDFS 에 있는 파일을 찾는다. ‘overwrite’ 키워드는 테이블의 기존의 데이타는 삭제됨을 명시한다. ‘overwrite’ 키워드가 빠지면 데이터 파일은 기존 데이터 셋에 추가된다.

알아야 할 점

  • 로드 커맨드에 수행되는 스키마에 대한 데이터 검증(verification)은 없다
  • 만약 HDFS에 파일이 있다면 그것은 Hive-controlled 파일 시스템 네임스페이스로 이동한다.
    하이브 디렉토리의 루트는 hive-default.xml 파일에 hive.metastore.warehouse.dir 옵션에 의해 지정된다. 하이브에서 테이블을 생성하기 전에 이 디렉토리를 만들 것을 사용자에게 충고한다
hive> LOAD DATA LOCAL INPATH ‘./examples/files/kv2.txt’ OVERWRITE INTO TABLE invites PARTITION (ds=’2008-08-15)’;
hive> LOAD DATA LOCAL INPATH ‘./.examples/files/kv3.txt’ OVERWRiTE INTO TABLE invites PARTITION  (ds=’2008-08-08’);

위에 두 개의 LOAD 명령은 invites 테이블의 두 개의 다른 파티션으로 데이터를 로드한다. invites 테이블은 ds 키에 의해서 파티션되어 생성된다.

hive> LOAD DATA INPATH ‘/user/myname/kv2.txt’ OVERWRITE INTO TABLE invites PARTITION (ds=’2008-08-15)’;

위에 커맨드는 HDFS 파일/디렉토리로 부터 데이터를 읽어 table에 로드한다. HDFS로 부터 데이터를 로드하는 것의 결과는 파일/디렉토리로 이동되는 것이다. operation은 거의 즉시 수행된다.

SQL Operation

Example Queries

예제 쿼리는 build/dist/examples/queries에 있다. 더 많은 쿼리는 ql/src/test/queries/positive 에 있다

SELECTS and FILTERS

hive> SELECT a.foo FROM invites a WHERE a.ds=’2008-08-15’;

invites 테이블의 파티션 ds=2008-08-15의 모든 로우에서 foo 컬럼을 선택한다. 결과는 어디에도 저장되지 않는다. 그러나 콘솔 화면에 디스플레이 된다.
다음 예제들에서 INSERT(하이브 테이블이나, 로컬 디렉토리, HDFS 디렉토리)는 선택적이다.

hive> INSERT OVERWRITE DIRECTORY ‘/tm/hdfs_out’ SELECT a.* FROM invites a WHERE a.ds=’2008-08-15’;

쿼리의 결과를  HDFS 디렉토리에 저장한다. 결과 데이터는 디렉토리 파일 안에 있다. (mapper의 개수의 의존한다)
파티션된 테이블은 항상 WHERE 절에 파티션 선택해야 한다.

hive> INSERT OVERWRITE LOCAL DIRECTORY ‘/tmp/local_out’ SELECT a.* FROM pokes a;

pokes 테이블의 모든 로우를 선택하여 로컬 디렉토리로 로드한다.

hive> INSERT OVERWRITE TABLE events SELECT a.* FROM profiles a;
hive> INSERT OVERWRITE TABLE events SELECT a.* FROM profiles a WHERE a.key < 100;
hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/reg_3' SELECT a.* FROM events a;
hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_4' select a.invites, a.pokes FROM profiles a;
hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_5' SELECT COUNT(*) FROM invites a WHERE a.ds='2008-08-15';
hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_5' SELECT a.foo, a.bar FROM invites a;
hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/sum' SELECT SUM(a.pc) FROM pc1 a;

컬럼의 합(SUM), 평균(arg), 최소값(min), 최대값(max)이 사용 될 수 있다.

GROUP BY

hive> FROM invites a INSERT OVERWRITE TABLE events ELECT a.bar, count**) WHERE a.foo > 0 GROUP BY a.bar
hive> INSERT OVERWRITE TABLE events SELECT a.bar, count(*) FROM invites a WHERE a.foo > 0 GROUP BY a.bar;

MULTITABLE INSERT

FROM src
INSERT OVERWRITE TABLE dest1 SELECT src.* WHERE src.key < 100
INSERT OVERWRITE TABLE dest2 SELECT src.key, src.value WHERE src.key >= 100 and src.key < 200
INSERT OVERWRITE TABLE dest3 PARTITION(ds='2008-04-08', hr='12') SELECT src.key WHERE src.key >= 200 and src.key < 300
INSERT OVERWRITE LOCAL DIRECTORY '/tmp/dest4.out' SELECT src.value WHERE src.key >= 300;

JOIN

hive> FROM pokes t1 JOIN ivites t2 ON (t1.bar=t2.bar) INSERT OVERWRITE TABLE evners SELECt t1.bar, t2.bar,t2.foo;

 

STREAMING

hive> FROM invites a INSERT OVERWRITE TABLE event SELECT TRANSFORM (a.foo, b.bar) AS (off,rb) USING ‘/bin/cat’ WHERE a.ds>’2008-0809

 

Reference

Posted by 김민우 julingks
TAG ddl, dml, Hadoop, hive, NoSQL, SQL

댓글을 달아 주세요

Hive는  하둡 위에서 돌아가는 데이터 웨어하우스 인프라 스트럭처다.   하둡에 저장된 데이터를 요약, adhoc  쿼리, 큰 데이터셋의 분석을 쉽게 만들어주는 도구를 제공한다.  Hive는 이 데이타 위의 스트럭처를 집어 넣는 매커니즘을 제공한다. 이 데이터에 쿼리 요청을 위해서 SQL과 친숙한 SQL의 기반의 Hive QL로 불리는 간단한 쿼리 언어를 제공한다. 동시에 이 언어는 내장 언어가 제공하지 않는 좀 더 정교한 분석을 하기 위해 전통적인 맵/리듀스 프로그래머가 커스텀 mapper와 reducer를 연결할 수 있게 해준다.

Installation and Configuration

Requirements

  • Java 1.6
  • Hadoop 0.17.x to 0.20.x.

Installing HIve a Stable Release

아파치 다운로드 미러에서 안정된 배포 버전을 다운 받는다.압축을 푼다.

$ tar -xzvf hive-x.y.z.tar.gz

HIVE_HOME환경변수를 설치한 디렉토리를 가리키도록 설정한다.

$ cd hive-x.y.z
$ export HIVE_HOME=`pwd`

마지막으로 $HIVE_HOME/bin 을 PATH에 추가한다

$ export PATH=$HIVE_HOME/bin:$PATH

Running Hive

하이브는 하둡을 사용한다는 것은

  • PATH에 하둡이 있어야 한다.
  • export HADOOP_HOME=<hadoop-install-dir>

추가로 /tmp 와 /user/hive/warehouse를 만들어야 한다. HDFS에서 chmod g+w 정해야 한다. 그래야 하이브가 테이블을 만들 수 있다.

$HADOOP_HOME/bin/hadoop fs -mkdir /tmp
$ $HADOOP_HOME/bin/hadoop fs -mkdir /user/hive/warehouse
$ $HADOOP_HOME/bin/hadoop fs -chmod g+w /tmp
$ $HADOOP_HOME/bin/hadoop fs -chmod g+w /user/hive/warehouse

하이브 커맨드 라인 인터페이스 사용한다

$ $HIVE_HOME/bin/hive

 

Configugration management Overview

하이브 default 설정은 <install-dir>/conf/hive-default.xml에 저장되어 있다.
설정 변수는 <install-dir>/conf/hive-site.xml 에서 정의된 것의 따라 변경될 수 있다.
하이브 설정 디렉토리의 위치는 HIVE_CONF_DIR 환경 변수 설정에 의해 변경될 수 있다.
Log4j 설정은 <install-dir>/conf/hive-log4j.properties에 저장되었다.
하이브 설정은 하둡 위에 덮어 쓴다. - 즉 하둡 설정 변수를 초기값으로 상속 받는다.
하이브 설정은 다음에 의해 조작된다.

  • hive-site.xml을 편집하기나 알맞는 변수(하둡 변수 포함)를 정의한다.
  • cli에서 set 커맨드를 사용한다.
  • 다음 syntax를 사용하여 하이브를 실행한다
    - $ bhin/hive -hiveconf x1=y1 -hiveconf x2=y2
    - HIVE_OPTS 환경변수를 위와 같이 “-hiveconf x1=y1 -hiveconf x2=y2” 로 지정한다

Runtime Configuration

  • Hive 퀄리는 map-reduce 쿼리들을 이용해서 실행된다. 따라서 그런 쿼리들은 하둡 설정 변수에 의해 control 된다.
  • cli 커맨드 ‘SET’ 은 하둡 (또는 하이브) 설정 변수를 지정하는데 사용될 수 있다. 예를 들면
hive> SET mapred.job.tracker=myhost.mycompany.com:50030;
hive> SET -v;

-v 는 현재의 모든 설정들을 보여준다. -v 옵션이 없다면 오직 기본 하둡 설정과 다른 변수만 표시된다

Hive, Map-Reduce and Local-Mode

Hive 컴파일러는 대부분의 쿼리들의 map-reduce job들을 생성한다. 이 job들은 다음 변수가 가리키는 Map-Reduce 클러스터에 제출된다.

mapred.job.tracker

보통 map-reduce 클러스터는 여러 개의 노드를 가리키지 않는 반면에, 하둡 또한 유저 워크스테이션 위에서 map-reduce job들을 로컬에서 실행하기 위한 멋진 옵션을 제공한다. 이 것은 작은 데이터 셋에 쿼리를 실행할 때 매우 유용할 수 있다. 이 경우에 로컬 모드 실행은 보통 대형 클러스터에 job을 제출하는 것 보다 상당히 빠르다. 데이터는 HDFS에서 투명하게 접근할 수 있다. 반대로 로컬 모드는 오직 하나의 reducer 만 실행하며 큰 데이터 셋 처리에서는 매우 느려진다.

0.7버전부터 하이브는 로컬 모드 실행을 완전히 지원한다. 이것을 가능하게 하기 위해 사용자는 다음 옵션을 지정해야 한다.

hive> SET mapred.job.tracker=local;

추가로, mapred.local.dir 로컬 머신 위에 유요한 경로를 가리켜야 합니다. (예를 들면 /tmp/<username>/mapred/local) (그러지 않으면, 사용자는 로컬 디스크 스페이스를 할당 받으라는 예외를 얻게 된다.)

0.7 버전부터, 하이브는 또한 자동적으로 로컬 모드에서 map-reduce job들을 실행하기 위한 모드를 제공한다. 관련된 옵션은 다음과 같습니다.

hive> SET hive.exec.mode.local.auto=false;

이 특징은 초기 값이 false임을 명심하자. 만약 ture라면, 하이브는  쿼리에서 각각 map-reduce job의 크기를 분석한다.
다음 thresholds가 만족된다면 로컬에서 실행이 될 수도 있다.

  • job의 총 입력 크기가 hive.exec.mode.local.auto.inputbytes.max  (초기값 128MB) 보다 작을 때
  • 총 map-task의 개수가 havie.exec.mode.local.auto.tasks.max( 초기값 4)
  • 총 필요한 reduce-task의 개수가 1 또는 0

따라서 작은 데이터 셋의 쿼리와 다음 job들의 입력이 실질적으로 더 작을 때 여러 개 map-reduce job들 위한 쿼리에서 job들은 로컬에서 실행될 수 있다.

하둡 서버 노드들의 runtime 환경과 하이브 클라이언트를 실행하는 머신의 차이점이 있을 수 있다는 것을 명심해라. (vm 버전이나 다른 소프트웨어 라이브러리 때문에) 이는 로컬 모드에서 실행 중 예기치 못한 행동이나 에러를 유발할 수 잇다. 또한 로컬 모든 실행은 child jvm(하이브 클라이언트의)으로 분리되어 실행된다. 사용자가 정말 원한다면, child jvm을 위한 최대 메모리 양을 hive.mapred.local.mem. 옵션을 통해서 조정할 수 있다. 초기값은 0 이다. 이 경우에 하이브는 하둡이 child jvm의 초기 메모리 한계를 정하도록 한다.

Error Logs

하이브는 로깅을 위해 log4j를 사용한다.  디폴트 로그들은 CLI에 의해 콘솔로 방출되지 않는다. 디폴트 로깅 레벨은 WARN 이다. 로그는 다음 폴더에 저장된다.

  • /tmp/{user.name}/hive.log

사용자가 원한다면 밑에 보여지는 arguments를 추가하여 콘솔로 방출하게 할 수 있다.

  • bin/hive -hiveconf hive.root.logger=INFO,console

사용자는 오직 다음을 이용해서 로깅 레벨을 변경할 수 있다.

  • bin/hive -hiveconf hive.root.logger=INFO,DRFA

set 커맨드를 이용해서 hive.root.logger를 정하는 것은 로깅의 property를 변경하지 않는다. property는 초기화 시간에 결정된다.

하둡 클러스터에서 하이브 실행 중 로깅은 하둡 설정에 의해 통제된다. 보통 하둡은 테스크가 실행되었을 때 클러스터 머신에 저장된 맵과 리듀스 테스크 당 하나의 로그파일을 생성한다, 로그 파일은 하둡의 JobTracker 웹 UI에서 Task Details 페이지를 클릭 해서 얻을 수 있다.

로컬 모드를 사용할 때, 하둡/하이브 실행 로그는 클라이언트 머신 자체에서 생성된다. 0.6 버전부터는 하이브는 디폴트로 로그가 어디에 전달될지를 결정하기 위해 hive-exec-log4j.properties 를 사용한다. 디폴트 설정은 로컬 모드에서 실행된 쿼리 당 하나의 로그 파일이 생성된다. 그리고 이것은 /tmp/{user.name} 밑에 저장된다. 설정파일을 분리하여 생성하는 의도는 관리자가 만약 바람직하다면 실행 로그 캡쳐를 집중화 할 수 있도록 하기 위함이다.  실행 로그는 runt-time 에러를 디버깅 하는 데는 가치가 없다.

Reference


Posted by 김민우 julingks

댓글을 달아 주세요