Hcatalog introduction and install.
2012/09/03 Leave a comment
Hcatalog는 하둡 도구들 hive, pig, mapreduce 등의 메타데이터를 관리하는 레이어이다.
소스 분석하기위해서 설치할때 문서를 디테일하게 살펴보려는 스타일이라 설치 섹션을 발번역했다.
Overview
- Translated from : http://incubator.apache.org/hcatalog/
Introduction
HCatalog는 하둡을 위한 테이블과 메터데이터 관리 레이어다. Pig, MapReduce, Hive와 같이 서로 다른 데이터 처리 도구들를 하둡에서 사용할 수 있도록 도와준다. HCatalog는 테이블 추상화를 통해서 사용자에게 HDFS에 있는 데이터의 관계형 뷰 제공한다. 사용자는 더이상 데이터가 어디에 저장되어 있는지, 또 어떤 포맷(RCFile format, text file, sequence file)으로 저장되어 있는지 신경쓰지 않아도 된다. HCatalog는 SerDe로 작성되는 어떤 포맷이든 파일 입출력을 지원한다. 기본적으로 RCFile, CSV, JSON, 시퀀스 파일 포맷을 지원한다. 커스텀 포맷을 사용하기 위해서는 InputFormat, OutputFormat 과 SerDe를 제공한다.
HCatalog Architecture
HCatalog는 하이브의 메타스토어와 Hive DDL의 통합 컴포넌트 기반으로 작성되어 있다. HCatalog는 Pig와 MapReduce를 위한 읽기, 쓰기 인터페이스를 제공하고 하이브 커맨드라인 인터페이스를 사용해서 데이터를 정의하고 메터데이터 탐색한다.
Interfaces
Pig를 위한 HCatalog 인터페이스 HCatLoader 와 HCatStorer 는 Pig의 Load 와 Store interfaces의 구현체다. Pig는 기본적으로 load와 store에 대한 사용자 정의 함수(UDF) 인터페이스를 제공한다. http://pig.apache.org/docs/r0.10.0/udf.html HCatLoader는 데이터를 읽어드릴 테이블을 받아들인다. 사용자는 파티션 필터가 포함된 load 문장으로 어떤 파티션을 스캔해야할지 바로 알 수 있다. HCatStorer는 데이터를 써야할 테이블과 새로운 파티션을 만들기 위한 파티션키들의 스팩을 선택적으로 받아들인다. 사용자는 지정한 파티션 키와 값에 따라서 싱글 파티션에 쓸 수 있다. 이때 STORE 절을 이용한다. 만약 파티션 키들이 저장된 데이터의 컬럼이라면 다중 파티션을 쓸 수 있다 HCatLoader와 HCatStorer는 HCatInputFormat과 HCatOutputFormat 위에 각각 구현되어 있다.
Data Model
HCatalog는 데이터의 관계형 뷰를 제공한다. 데이터는 테이블안에 저장되고 이들 테이블은 데이터베이스에 배치 될 수 있다. 테이블은 또한 하나 이상의 Hash 파티션 될 수 있다. 즉 하나의 키의 값이 주어진다면 모든 row를 포함하는 하나의 파티션이 될 수 있다. 예를 들면, 만약 테이블이 날짜에 대해서 파티션되어 있고 테이블안의 3개의 날짜들의 데이터가 있다면, 테이블에는 3개의 파티션이 있게 된다. 새로운 파티션은 테이블에 추가될 수 있다. 그리고 파티션들은 테이블에서 drop될 수 있다. 파티션된 테이블들은 생성 시점는 파티션이 없다. 파티션 되지 않은 테이블들은 효과적으로 하나의 기본 파티션을 가진다. 이파티션은 테이블 생성 시점에 만들어져야 한다. 파티션이 drop될 때에는 읽기 정합성(read consistency)에 보장은 없다. 파티션은 레코드를 포함한다. 파티션이 한번 생성되면, 레코드은 추가되거나, 지워지거, 업데이터 될 수 없다. 파티션들은 다차원적이고 hierarchical하지 않다. 레코드들은 컬럼으로 나누어 진다. 컬럼들은 이름과 데이터 타입을 가진다. HCatalog는 Hive와 같은 데이터 타입을 지원한다.
Example
다음 간단한 데이터 흐름 예제는 HCatalog가 어떻게 그리드 사용자가 데이터를 공유하고 접근하는 것을 도와주는지 보여줍니다. 첫번째, 데이터 입수 팀에 있는 Joe는 데이터를 그리드로 가져오기 위해서 distcp를 사용합니다.
hadoop distcp file:///file.dat hdfs://data/rawevents/20100819/data hcat "alter table rawevents add partition (ds='20100819') location 'hdfs://data/rawevents/20100819/data'"
두번째, 데이터 처리 팀에 있는 sally는 데이터를 cleaning하고 준비하기 위해서 Pig를 사용합니다. HCatalog가 없다면, Sally는 데이터가 사용가능할 때 수동으로 Joe가 알려줘야 합니다. 또는 HDFS위에 조사를 해야 합니다.
A = load '/data/rawevents/20100819/data' as (alpha:int, beta:chararray, …); B = filter A by bot_finder(zeta) = 0; … store Z into 'data/processedevents/20100819/data';
HCatalog를 사용한다면, HCatalog는 데이터가 사용 가능해졌다는 JMS 메시지를 보낼 것입니다. Pig 잡은 그리고 나서 시작될 수 있을 것입니다.
A = load 'rawevents' using HCatLoader(); B = filter A by date = '20100819' and by bot_finder(zeta) = 0; … store Z into 'processedevents' using HCatStorer("date=20100819");
세번째, 고객 관리 팀의 Robert는 고객들의 결과를 분석하기 위해서 Hive를 사용하빈다. HCatalog가 없다면, Robert는 필요한 파티션을 추가하기 위해서 테이블을 변경해야 합니다.
alter table processedevents add partition 20100819 hdfs://data/processedevents/20100819/data select advertiser_id, count(clicks) from processedevents where date = '20100819' group by advertiser_id;
HCatalog를 사용한다면,Robert는 테이블 구조를 수정할 필요가 없습니다.
select advertiser_id, count(clicks) from processedevents where date = ‘20100819’ group by advertiser_id;
Install
Server Installation from Source
Prerequisites
- 설치 tar가 빌드할 머신
- 서버가 설치될 수 있는 머신 – Hadoop 클러스터에 접근 할 수 있어야 하고 당신이 잡들을 실행한 머신으로 부터 접근 할 수 있어야 한다.
- RDBMS – MySQL을 추천한다.
- 하둡 클러스터
- 서버를 실행할 유닉스 사용자 , 그리고 실행 중인 클러스터가 안전 모드라면, Kerberos Service Principal과 keytab과 관련된 사용자.
Building a tarball
만약 Apache 또는 다른 소스 릴리즈 사이트에서 HCatalog를 다운로드 했다면, 당신은 우선 설치를 위해서 tarball을 빌드해야 한다. 당신이 당신이 다운로드 파일의 이름을 보면 소스 빌리즈 버전인지를 확인할 수 있다. 만약 Hcatalog-src-0.4.0-incubating.tar.gz(이름에 src가 들어 있으면)라는 이름이면 소스 릴리즈 버전이다. 만약 Apache Ant가 당신의 머신에 설치되어 있지 않다면, 우선 이것을 얻는 것이 필요하다. Apache Ant Website에서 부터 얻을 수 있다. 다룬로드 했다면, 압축을 푼다. 압축을 푼 디렉토리를 ANT_HOME 환경변수를 설정한다. 만약 당신의 머신에 Apache Forrest가 설치되지 않았으면, 우선 이것을 얻는 것이 필요하다. Apache Forrest website에서 얻을 수 있다. 다운로드를 했다면, 이것을 머신에서 압축을 푼다. 압축을 푼 디렉토리를 FORREST_HOME 환경변수를 설정한다. tarball을 생성하기 위해서 다음을 실시한다. 소스 릴리즈를 확장하기 위한 디렉토리를 만듭니다. 소스 릴리즈를 이 디렉토리로 복사하고 압축을 풉니다.
mkdir /tmp/hcat_source_release cp hcatalog-src-0.4.0-incubating.tar.gz /tmp/hcat_source_release cd /tmp/hcat_source_release tar xzf hcatalog-src-0.4.0-incubating.tar.gz
압축이 풀어진 소스 릴리즈로 디렉토리를 이동하고 설치 tarball을 빌드합니다.
cd hcatalog-src-0.4.0-incubating ant_home/bin/ant -Dhcatalog.version=0.4.0 -Dforrest.home=forrest_home tar
설치를 위한 tarball은 이제 build/hcatalog-0.4.0.tar.gz에 위치합니다.
Database Setup
만약 당신이 MySQL과 Hive가 설지되어 있지 않다면, 다음은 당신이 어떻게 할지를 알려 줄것입니다. 이미 설치되어 있다면 이 스텝을 스킵할 수 있습니다. 머신에 설치할 데이터베이스를 선택합니다. 이것은 이후에 설치할 Thrift 서버와 마찬가지로 같은 머신에 있을 필요는 없습니다. 대형 클러스터들을 위해서는 우리는 같은 머신에 있지 않기를 추천합니다. 이 지침서의 목적에 따라서 데이터베이스가 설치된 머신을 _hivedb.acme.com_으로 참조하겠습니다. _hivedb.acme.com_에 MySQL서버를 설치합니다. MySQL’s download site에서 Mysql 패키지를 얻을 수 있습니다. 우리는 5.1.46과 5.1.48버전으로 개발과 테스트를 해왔습니다. 우리는 이 버전과 이후 버전을 사용하기를 추천합니다. MySQL를 띄우고 실행 시키고 나면, mysql 커맨드 라인 도구를 이용해서 _hive_ 사용자와 _hivemetastoredb_ 데이터베이스를 추가합니다.
mysql -u root mysql> CREATE USER 'hive'@'hivedb.acme.com' IDENTIFIED BY 'dbpassword'; mysql> CREATE DATABASE hivemetastoredb DEFAULT CHARACTER SET latin1 DEFAULT COLLATE latin1_swedish_ci; mysql> GRANT ALL PRIVILEGES ON hivemetastoredb.* TO 'hive'@'hivedb.acme.com' WITH GRANT OPTION; mysql> flush privileges; mysql> quit;
Hive 패키지에서 찾은 데이터 베이스 설치 스크립트를 이용하여 데이터 베이스를 생성합니다. hive_home은 hive가 설치 된 디렉토리를 참조합니다. 만약 Hive rpms을 사용했다면 hive_home은 /usr/lib/hive가 될 것입니다.
mysql -u hive -D hivemetastoredb -hhivedb.acme.com -p < hive_home/scripts/metastore/upgrade/mysql/hive-schema-0.9.0.mysql.sql
Thrift Server Setup
만약 Thrift를 사용해서 메타스토어 서버를 실행시키는 Hive가 준비되어 있지 않다면, 실생 시키고 설치하기 위한 다음 지침서를 사용하십시오. 만약 Hive 메타스토어 서버를 사용할 수 잇는 준비가 되어 있다면 이 스텝을 넘어가도 됩니다. Thrift 서버를 실행할 머신을 선택합니다. 데이터베이스로서 같은 머신에 있어야 합니다. 이 지침서의 목표를 위해서 우리는 이 머신을 _hcatsvr.acme.com_을 참조할 것입니다. 만약 당신이 이것을 끝냈다면, 이 머신에 Hive 0.9를 설치합니다. Apache Bigtop에서 사용가능한 rpm 또는 Hive가 제공하는 binary distributions 을 사요할 수 있습니다. 당신이 Apache Hive binary distribution을 사용한다면, 디렉토리를 선택합니다. 앞으로 hive_home으로 참조 합니다. 이 distribution을 여기에 압축을 풉니다. 만약 rpm을 사용한다면 hive_home은 /usr/lib/hive가 될 것 입니다. Thrift 서버를 실행할 사용자를 선택합니다. 이 사용자는 실제 사람이 사용하는 사용자가 되서는 안됩니다. 다른 사용자들과의 프록시로 행동 할 수 있어야 합니다. 우리는 _hive_라는 이름의 사용자를 추천합니다. 이 문서의 남은 부분에서는, 우리는 _hive_를 이 사용자로서 참조할 것입니다. 만약 필요하다면 hcatsvr.acme.com에 사용자를 추가합니다. HCatalog의 설치를 위한 _root_ 디렉토리를 선택합니다. 이 디렉토리는 _hive_ 사용자에 의해서 소유(owned)되어야 합니다. 우리는 /usr/local/hive를 추천합니다. 필요하다면, 디렉토리를 생성합니다. 당신이 이 Thrift 서버 설치 섹션의 나머지에서 설명할 작업들을 위한 _hive_ 사용자가 있어야할 필요할 것이다. 임시 디렉토리로 Hcatalog 설치 tarball을 복사하고 압축을 풉니다. 그리고 나서 새로운 distribution과 Hcatalog 서버 설치 스크립트를 실행할 디렉토리로 이동합니다. 당신은 root로 선택한 디렉토리와 MySQL 자바 커넥터 라이브러리가 설치된 디렉토리를 알아야할 필요가 있습니다. 당신은 HADOOP_HOME과 하둡이 설치된 디렉토리, portnum으로 정해진 HCatalog가 운용하기 위한 포트 넘버가 필요하다.
tar zxf hcatalog-0.4.0.tar.gz cd hcatalog-0.4.0 share/hcatalog/scripts/hcat_server_install.sh -r root -d dbroot -h hadoop_home -p portnum
이제 hive_home/conf/hive-site.xml 파일을 수정할 필요가 있다. 이 파일을 열어라. 다음 테이블은 당신이 필요한 설정들의 값을 보여준다.
Parameter | Value to Set it to | |
---|---|---|
hive.metastore.local | false | |
javax.jdo.option.ConnectionURL | jdbc:mysql://hostname/hivemetastoredb?createDatabaseIfNotExist=true | MySQL을 설치한 머신의 hostname |
javax.jdo.option.ConnectionDriverName | com.mysql.jdbc.Driver | |
javax.jdo.option.ConnectionUserName | hive | |
javax.jdo.option.ConnectionPassword | 위에 MySQL 서버의 세팅할 때 사용한 _dbpassword_ | |
hive.semantic.analyzer.factory.impl | org.apache.hcatalog.cli.HCatSemanticAnalyzerFactory | |
hadoop.clientside.fs.operations | true | |
hive.metastore.warehouse.dir | 디렉토리는 URI 또는 절대 파일 경로가 될 수 있다. 만약 절대 파일 경로라면 메타스토어에 의해 URI로 해결될 것이다; — 만약 기본 HDFS가 core-site.xml에 지정되어 있다면, 경로는 HDFS 위치로 해결될 것이다. — 그렇지 않다면, 경로는 로컬 파일 URI로 해결된다. 이 세팅은 새로운 테이블을 생성할 때 효과적이 된다. (테이블 생성시점에 기본설정인 DBS.DB_LOCATION_URI를 선행한다.) 만약 당신의 시스템위에서 실행하기 위한 설정된 하이브가 없다면 당신은 오직 이것을 설정하는 것만 필요하다. |
|
hive.metastore.uris | thrift://hostname:portnum | Thrift 서버를 호스팅하는 머신의 hostname이다. 그리고 portnum은 위에 설치 스크립에서 사용된 포트 넘버이다. |
hive.metastore.execute.setugi | true | |
hive.metastore.sasl.enabled | 당신의 하둡 클러스터가 kerberos 보안을 사용한다면 true로 설정하고 그러지 않다면 false로 설정한다. | |
hive.metastore.kerberos.keytab.file | kerberos keytab 파일의 경로이다. 이것은 메타스토어 thrift 서버의 서비스 principal을 포함한다. 위에 hive.metastore.sasl.enabled를 true로 설정했을 때만 필요하다. | |
hive.metastore.kerberos.principal | 메타스토어 Thrift 서버를 위한 서비스 principal 이다. 당신은 _HOST로 참조되는 당신의 호스트는 실제 hostname으로 교체될 것이다. 위에 hive.metastore.sasl.enabled를 true로 설정했을 때만 필요하다. |
이제 당신은 서버 시작하기로 넘어갈 수 있습니다.
Starting the Server
서버를 시작하기 위해서, HCatalog는 Hive가 설치된 곳을 알아야한다. HIVE_HOME 환경 변수를 정하는 것으로 커뮤니케이션한다. sbin/hcat_server.sh stop을 실행한다.
Logging
서버 활동 로그는 root/var/log/hcat_server에 위치한다. 로깅 설정은 root/conf/log4j.properties에 위치한다. 서버 로깅은 DailyRollingFileAppender를 기본으로 사용한다. 이것은 자동으로 오래된 로그 파일을 만기 시키지 않고 매일 하나의 파일을 생성할 것이다.
Stopping the Server
Hcatalog 서버를 엄추기 위해서는, _root_ 디렉토리로 이동한다, sbin/hcat_server.sh stop을 실행한다.
Client Installation
HCatalog client의 설치를 위한 _root_ 디렉토리를 선정한다. /usr/local/hcat을 추천한다. 필요하다면 디렉토리를 생성한다. Hcatalog 설치 tarball을 임시 디렉토리로 복사하고 압축을 푼다. tar zxf hcatalog-0.4.0.tar.gz 이제 당신은 _hive\_home_/conf/hive-site.xml 파일을 수정하는 것이 필요하다. 당신은 javax.jdo.option.ConnectionPassword 값이 제외된 서버에 있는 같은 파일을 사용할 수 있다. 이것은 client가 텍스트로 패스워드를 사용가능하게 하는 것을 피하게 한다. HCatalog 커맨드 라인 인터페이스는 이제 root/bin/hcat으로 실행될 수 있다.
References
- http://geekdani.wordpress.com/2012/07/11/introduction-to-hcatalog/
- http://mixellaneous.tistory.com/1099
- https://github.com/apache/hcatalog
- http://www.slideshare.net/hortonworks/future-of-hcatalog-hadoop-summit-2012
- http://developer.yahoo.com/blogs/hadoop/posts/2011/04/hcatalog-tables-and-metadata-for-hadoop/