[Hadoop] Hive : Installation and Configuration by sehwa4444

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

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

  • PAHT에 하둡이 있어야 한다.
  • 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


덧글

댓글 입력 영역