본문 바로가기

OpenSource(Bigdata&distribution&Network)/Hive

Hive로 결정.

 

Hbase 로 이것저것 보다가 pig , hive를 발견했다.
사실 pig 와 hive는 hadoop을 보면서 봤던 단어이기도 하다.

그중에 hive!
여기저기 찾아보니 페이스북에서 개발했고 그게 오픈소스프로젝트에서 업그레이드?를 한다고 하던데 (맞는지 안맞는지는 난 모름)
기본적인 세팅을 하고 hive를 실행해보니 약간 DB와 비슷하다.
내가 늘하던 SQL과 비슷해서 (단 INSERT는 무슨 load도 아니고;;;; 뭐냐;;) 그래서
hive로 이것저것 하기로 하고 세팅을 하기로 했다.

아파치 hive 문서를 찾아보면

https://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStarted-InstallationandConfiguration

소스를 받아서 압축풀고 경로잡고 하면 바로 인식하는데 이게 문제가 있었다.

일단 소스 설치하고 테스트해보자.

요구사항은 Hadoop이 설치된곳. 그리고 소스파일이다.

Hadoop 설치된곳에 Hadoop 과 , jdk가 다 있으니 큰일없이 테스트 가능할것이다.
그리고 hive소스 [소스위치 : http://apache.tt.co.kr/hive/ ] ( 지금 보니까 보인다. tt.co.kr은 오늘과내일 호스팅서비스업체인데... 이런거도 해주네 ㅡ_ㅡ;;; )

1. Hive 소스풀고 경로 설정

뭐 굳이 없어도 알아서들 하겠지....
HIVE_HOME이 없으면 자바에러가 주루룩 난다.

HIVE_HOME=/usr/local/hive
PATH=$HIVE_HOME/bin
export HIVE_HOME PATH

 

2. 실행해보자.

보면 다 알겠지만 절~라 쉽다.

[hadoop@master1 ~]$ hive
WARNING: org.apache.hadoop.metrics.jvm.EventCounter is deprecated. Please use org.apache.hadoop.log.metrics.EventCounter in all the log4j.properties files.
Logging initialized using configuration in file:/usr/local/hive/conf/hive-log4j.properties
Hive history file=/tmp/hadoop/hive_job_log_hadoop_201207311732_843316443.txt
hive>

3. 테이블만들고 확인하고 문제점 발생!

 

아래는 테이블을 만들고 그 테이블을 확인한 예제이다.

hive> show tables;
OK
Time taken: 6.199 seconds
hive> create table first_tbl (col1 int , col2 string);
OK
Time taken: 0.299 seconds
hive> show tables;
OK
first_tbl
Time taken: 0.084 seconds
hive> describe first_tbl;
OK
col1    int
col2    string
Time taken: 0.147 seconds
hive>

이제 계속 아래처럼 해봤다.

보면 알겠지만 hive를 실행한 디렉토리하위로 metastore_db가 생성이 된다 .
저걸모르고 이상하게 테이블이 자꾸 사라져서 뭐가 문제인지 졸라리 당황하다가 저걸 발견했다.

실제로 HADOOP에는 만든 데이터가 계속있지만 실제로 HIVE에서 show tables로 확인해보면 안보인다.
결국은 metastore 가 테이블 목록인 기본 메타 데이터를 저장하는 공간일것이라고 예상된다.
( 물론 설정의 문제가 있겠으나 내용자체를 DB관리할겸..... )

이것을 토대로 찾아보니 이 meta정보를 실제 DB에 넣어서 관리한다고 하니. 이것을 MYSQL에 넣어보겠다.
oracle사랑에 빠진 나로서는 mysql이 그닥 반갑지는 않다.
단지 oracle에 clob이 생성되는것은 싫었을뿐.
( 문서를 찾아보니 오라클에서는 long타입을 사용해서
데이터를 관리하는데 알다시피 long 타입은 더이상 안쓰고
더군다나 나오는 패치가 clob타입이어서 그냥 메타데이터고
커넥션의 즉각적인 반응을 위해서 MYSQL로 하기로 함)

hive> quit;
[hadoop@master1 ~]$ ls
derby.log            hive            lost+found    test2.txt   TEST.java  URLCAT2.class  URLCAT.class  work
hadoop-1.0.3.tar.gz  hive_save1.txt  metastore_db  TEST.class  test.txt   URLCAT2.java   URLCAT.java   zookeeper
[hadoop@master1 ~]$ cd /usr/local/hive
[hadoop@master1 hive]$ hive
WARNING: org.apache.hadoop.metrics.jvm.EventCounter is deprecated. Please use org.apache.hadoop.log.metrics.EventCounter in all the log4j.properties files.
Logging initialized using configuration in file:/usr/local/hive/conf/hive-log4j.properties
Hive history file=/tmp/hadoop/hive_job_log_hadoop_201207311736_308605943.txt
hive> show tables;
OK
Time taken: 6.093 seconds
hive>

 

4. mysql 설치및 사용자 생성.

MYSQL.COM 의 현재 시점의 최신소스 버전은 5.5.25a (오 버전업 많이도 했다. )
mysql3.0 부터 설치하고 사용해봤던 나로서는 많이 변했구나..... 하는 생각이 든다.
설치하면서 추가모듈없어서 리눅스에 이것저거 설치하고 하는 모습이 내머릿속에 스쳐지나갔다. .... 시발... 술생각나네;;;;

설치위치는 hbase1 ( 192.168.0.144 ) 서버에 설치하기로 했다. hbase 는 ... 일단 보류..

[root@hbase1 mysql-5.5.25a]# groupadd mysql
[root@hbase1 mysql-5.5.25a]# useradd -r -g mysql mysql 
[root@hbase1 Desktop]# cd ..
[root@hbase1 Desktop]# mv mysql-5.5.25a/ /usr/local/mysql
[root@hbase1 Desktop]# cd /usr/local/mysql
[root@hbase1 mysql]# chown -R mysql .
[root@hbase1 mysql]# chgrp -R mysql .
[root@hbase1 mysql]# ./scripts/mysql_install_db --user=mysql
Installing MySQL system tables...
OK
Filling help tables...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

./bin/mysqladmin -u root password 'new-password'
./bin/mysqladmin -u root -h hbase1 password 'new-password'

Alternatively you can run:
./bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd . ; ./bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd ./mysql-test ; perl mysql-test-run.pl

Please report any problems with the ./bin/mysqlbug script!

[root@hbase1 mysql]#

[root@hbase1 mysql]# chown -R root .
[root@hbase1 mysql]# chown -R mysql data
[root@hbase1 mysql]# cp support-files/my-medium.cnf /etc/my.cnf
[root@hbase1 mysql]#
[root@hbase1 mysql]# ./bin/mysqld_safe --user=mysql &
[1] 6038
[root@hbase1 mysql]# 120731 18:21:29 mysqld_safe Logging to '/usr/local/mysql/data/hbase1.err'.
120731 18:21:29 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data

[root@hbase1 mysql]#

[root@hbase1 mysql]# ./bin/mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.25a-log MySQL Community Server (GPL)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
mysql> create user 'hivemeta'@'호스트명' identified by '1234';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on *.* to 'hivemeta'@'호스트명';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql>  

 

hive 디렉토리의 conf에 hive-default.xml 이 있는데 로그를 보니까 이건 안쓴다고 한단다.
검색해보니 hive-site.xml로 변경하면 될듯.
변경하고나서 아래 내용을 고쳐준다.

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://hbase1:3306/hive?createDatabaseIfNotExist=true</value>
  <description>JDBC connect string for a JDBC metastore</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.jdbc.Driver</value>
  <description>Driver class name for a JDBC metastore</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>hivemeta</value>
  <description>username to use against metastore database</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>1234</value>
  <description>password to use against metastore database</description>
</property>

 

5. 테스트

[hadoop@master1 conf]$ hive
WARNING: org.apache.hadoop.metrics.jvm.EventCounter is deprecated. Please use org.apache.hadoop.log.metrics.EventCounter in all the log4j.properties files.
Logging initialized using configuration in file:/usr/local/hive/conf/hive-log4j.properties
Hive history file=/tmp/hadoop/hive_job_log_hadoop_201207312003_1038190772.txt
hive> create table babo (col1 int , col2 string);
OK
Time taken: 3.012 seconds
hive>

 

Mysql 에서 확인해보면

mysql> select *From TBLS;
+--------+-------------+-------+------------------+--------+-----------+-------+----------+---------------+--------------------+--------------------+
| TBL_ID | CREATE_TIME | DB_ID | LAST_ACCESS_TIME | OWNER  | RETENTION | SD_ID | TBL_NAME | TBL_TYPE      | VIEW_EXPANDED_TEXT | VIEW_ORIGINAL_TEXT |
+--------+-------------+-------+------------------+--------+-----------+-------+----------+---------------+--------------------+--------------------+
|      6 |  1343732091 |     1 |                0 | hadoop |         0 |     6 | test_tbl | MANAGED_TABLE | NULL               | NULL               |
|     11 |  1343732650 |     1 |                0 | hadoop |         0 |    11 | babo     | MANAGED_TABLE | NULL               | NULL               |
+--------+-------------+-------+------------------+--------+-----------+-------+----------+---------------+--------------------+--------------------+
2 rows in set (0.00 sec)

 mysql>

mysql> select *from COLUMNS_V2;
+-------+---------+-------------+-----------+-------------+
| CD_ID | COMMENT | COLUMN_NAME | TYPE_NAME | INTEGER_IDX |
+-------+---------+-------------+-----------+-------------+
|     6 | NULL    | col1        | int       |           0 |
|     6 | NULL    | col2        | string    |           1 |
|    11 | NULL    | col1        | int       |           0 |
|    11 | NULL    | col2        | string    |           1 |
+-------+---------+-------------+-----------+-------------+
4 rows in set (0.00 sec)
mysql>

'OpenSource(Bigdata&distribution&Network) > Hive' 카테고리의 다른 글

Hive java connection 설정  (0) 2012.08.04