Hive HBase 整合

jopen 10年前發布 | 65K 次閱讀 分布式/云計算/大數據 HBase

環境說明:

l  hadoop2.4.0

l  Zookeeper3.4.6

l  Hbase0.96

l  Hive0.13.1

 

1.  Hive整合HBase原理

HiveHBase整合的實現是利用兩者本身對外的API接口互相進行通信,相互通信主要是依靠Hive安裝包\apache-hive-0.13.1-bin\lib\hive-hbase-handler-0.9.0.jar工具類,它負責HbaseHive進行通信的。

HiveHBase通信原理如下圖:

Hive HBase 整合

2.  Hive的安裝

Step01:上傳apache-hive-0.13.1-binLinux目錄下

說明:

  1. 這里使用的是最新版本穩定版,下載:http://mirrors.hust.edu.cn/apache/hive/

  2. 使用遠程ftp工具上傳到Linux下的 /yf/home/software目錄下

Step02:解壓到安裝目錄下:

    cd /home/yf/software

       #切換到root用戶:

    su

    password

       #創建目錄

    mkdir -p /usr/share/hive

       #解壓到安裝目錄

    tar -zxvf apache-hive-0.13.1-bin.tar.gz -C /usr/share/hive

       #更改用戶

    chown -R yf:yf /usr/share/hive

       #切換回來

    su yf

    cd /usr/share/hive

    ll

      

Step03:配置環境變量

su do vi /etc/profile

編輯如下:

Hive HBase 整合

# 使之生效

source /etc/profile

Step04:拷貝jar

#刪除$HIVA_HOME/lib目錄下的的Zookeeperjar

rm -rf $HIVE_HOME/lib/zookeeper*

 

#拷貝生產環境下的Zookeeperjar包到$HIVA_HOME/lib目錄下

cp $ZOOKEEPER_HOME/zookeeper-3.4.6.jar $HIVA_HOME/lib

 

Step05修改$HIVE_HOME/conf/hive-site.xml

cd $HIVE_HOME/conf

 

#復制一份出來

cp hive-default.xml.template hive-site.xml

 

#修改hive-site.xml

vi hive-site.mxl

由于文件內容比較多,需要進行查找,查找方式很簡單,在命令行模式下輸入 ‘/’ 后面跟上需要查找的文本即可找到,如:   / hive.querylog.location

  hive.querylog.location

  /usr/share/hive/logs

記得創建logs目錄:

mkdir $HIVE_HOME/logs

 

#修改hive.zookeeper.quorum的值:

  hive.zookeeper.quorum

  yf001,yf002,yf003,yf004,yf005,yf006,yf007

 

Step06在目錄$HIVE_HOME/bin目錄下面,修改文件hive-config.sh

#在最后面增加以下內容:

export JAVA_HOME=/usr/lib/jvm/java7

export HIVE_HOME=/usr/share/hive

export HADOOP_HOME=/usr/share/hadoop/static

 

Step07:修改$HADOOP_HOME/conf/hadoop-env.sh

#增加HADOOP_CLASSPATH

export HADOOP_CLASSPATH=.:$CLASSPATH:$HADOOP_CLASSPATH:$HADOOP_HOME/bin

#記得修改完成以后,要將修改后的文件同步拷貝到其他的節點。

注:如果hadoop-env.sh中沒有增加HADOOP_CLASSPATH的話會報下面的錯誤:

java.lang.NoClassDefFoundError: org/apache/hadoop/hive/ql/CommandNeedRetryException

 

Step07:驗證

#在命令行中輸入hive

yf@yf007:/usr/share/hive/conf$ hive

14/10/29 11:18:16 WARN conf.HiveConf: DEPRECATED: hive.metastore.ds.retry.* no longer has any effect.  Use hive.hmshandler.retry.* instead

 

Logging initialized using configuration in jar:file:/usr/share/hive/lib/hive-common-0.13.1.jar!/hive-log4j.properties

#查看當前數據庫

hive> show databases;

OK

default

Time taken: 0.03 seconds, Fetched: 1 row(s)

Step08:創建表

hive> use default;

hive> create table student(id string, name string);

創建好表以后,會在hdfs文件系統上產生一個/user/hive/warehouse/student的目錄,至此,Hive就安裝好了。

3.修改存儲引擎為MySQL

為什么要修改存儲引擎?

1. metastorehive元數據的集中存放地。metastore默認使用內嵌的derby數據庫作為存儲引擎。

2. Derby引擎的缺點:一次只能打開一個會話

3. 使用Mysql作為外置存儲引擎,多用戶同時訪問

 

Step01:安裝MySQL

我采用在線安裝的方式,機器為Ubuntu

# 安裝server

sudo apt-get install mysql-server

中間會提示輸入root用戶密碼

# 安裝client

sudo apt-get install mysql-client

Step02:啟動MySQL服務

mysqld_safe &

Step03:登錄數據庫

mysql –root –p1234

# 創建數據庫

create database hive;

# yf用戶授權,可以對hive數據庫下的所有內容執行任意操作,在任意位置,root驗證密碼是admin

mysql> GRANT all ON hive.* TO yf@'%' IDENTIFIED BY 'admin';

mysql> flush privileges;        --刷新權限表

 

Step04:上傳mysql-connector-java-5.1.20-bin.jar$HIVE_HOME/lib目錄下

Step05修改hive的數據庫配置信息,修改hive-site.xml文件,修改如下:

     hive.metastore.warehouse.dir

     /hive

     location of default database for the warehouse

4.啟動Hive

# 以集群的方式啟動

hive --auxpath /usr/share/hive/lib/hive-hbase-handler-0.9.0.jar,/usr/share/hive/lib/zookeeper-3.4.6.jar -hiveconf hbase.master=yfV007:60000

 

5.創建Hive外部表關聯HBase

說明:現在已存在一張HBase’bidask_quote’,現在要創建一張hive的外部表,關聯到hbase的表,語句如下:

hive> CREATE EXTERNAL TABLE bidask_quote_hive(key string,ProdCode string,ProdName string,TradingDay string,ExchangeID string,ExchangeInstID string,LastPrice string,PreSettlementPrice string,PreClosePrice string)

STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

WITH SERDEPROPERTIES ("hbase.columns.mapping" = "info:ProdCode,info:ProdName,info:TradingDay,info:ExchangeID,info:ExchangeInstID,info:LastPrice,info:PreSettlementPrice,info:PreClosePrice ")

TBLPROPERTIES("hbase.table.name" = "bidask_quote"); 

說明:

    * bidask_quote_hivehivebiao

    * "hbase.table.name" = "bidask_quote"hbase中已經存在的表

    * bidask_quote_hive(key string,ProdCode string,string,ProdName string,....)hive表的結構

    * "hbase.columns.mapping" = "info:ProdCode,info:ProdName,info:TradingDay,...)HBase中的列信息,這里現在只有一個列蔟。

 

現在來看一下是否創建成功:

hive> show tables;

 

如果存在我們創建的bidask_quote_hive表,就查詢幾條數據試試吧

hive> select * from bidask_quote_hive limit 3;

 

 

 

后續還有關于Hive API的操作。

 

 

 

 

 

遇到的錯誤

錯誤1

yf@yf007:/usr/share/hive/bin$ ./hive

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hive/ql/CommandNeedRetryException

        at java.lang.Class.forName0(Native Method)

        at java.lang.Class.forName(Class.java:270)

        at org.apache.hadoop.util.RunJar.main(RunJar.java:205)

Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.ql.CommandNeedRetryException

        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)

        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)

        at java.security.AccessController.doPrivileged(Native Method)

        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)

        ... 3 more

解決辦法:

/usr/share/hadoop/etc/hadoop/hadoop-env.sh里面被增加了HADOOP_CLASSPATH.

設置如下:

export HADOOP_CLASSPATH=$HBASE_HOME/hbase/hbase-0.20.3.jar:$HABSE_HOME/hbase-config:$ZOOKEEPER/zookeeper-3.2.2.jar

將其修改為:

export HADOOP_CLASSPATH=.:$CLASSPATH:$HADOOP_CLASSPATH:$HADOOP_HOME/bin

來自:http://my.oschina.net/AlbertHa/blog/338556

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!