1. 程式人生 > >hive 三種方式區別和搭建

hive 三種方式區別和搭建

一、安裝模式介紹:

    Hive官網上介紹了Hive3種安裝方式,分別對應不同的應用場景。

    1、內嵌模式(元資料保村在內嵌的derby種,允許一個會話連結,嘗試多個會話連結時會報錯)

    2、本地模式(本地安裝mysql 替代derby儲存元資料)

    3、遠端模式(遠端安裝mysql /替代derby儲存元資料)

二、安裝環境以及前提說明:

    首先,Hive是依賴於hadoop系統的,因此在執行Hive之前需要保證已經搭建好hadoop叢集環境。

    本文中使用的hadoop版本為2.6 Hive版本為1.2.1版。(centos 7 64位,JDK 1.8

下載Hive的安裝包,且安裝到了/usr/local/hive-1.2.1 
 /etc/profile中設定HIVE_HOME環境變數:

export HIVE_HOME=/usr/local/hive-1.2.1

export HIVE_CONF_DIR=$HIVE_HOME/conf

export PATH= $HIVE_HOME/bin

三、內嵌模式安裝:

這種安裝模式的元資料是內嵌在Derby資料庫中的,只能允許一個會話連線,資料會存放到HDFS上。

1、切換到HIVE_HOME/conf目錄下,執行下面的命令:

cp hive-env.sh.template hive-env.sh

vim hive-env.sh

hive-env.sh中新增以下內容:

# Set HADOOP_HOME to point to a specific hadoop install directory

 HADOOP_HOME=/usr/local/hadoop

# Hive Configuration Directory can be controlled by:

export HIVE_CONF_DIR=/usr/local/hive-1.2.1/conf

# Foder containing extra ibraries required for hive compilation/execution can be controlled by:

export HIVE_AUX_JARS_PATH=/usr/local/hive-1.2.1/lib

2、啟動hive,由於已經將HIVE_HOME加入到了環境變數中,所以這裡直接在命令列敲hive即可:

註明:如果啟動不了,請提前手動啟動元資料服務 hive  --service metastore -hiveconf hive.root.logger=DEBUG,console

然後在啟動hive

有時不啟動元資料庫,會遇到以下錯誤

Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient

        at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:295)

        at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:679)

        at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:623)

        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        at

參考http://www.aboutyun.com/thread-7881-1-1.html

2首先說一些遇到的各種問題遇到的問題問題1:元資料庫未啟動
這裡首先概括一下,會遇到的問題。首先需要啟動元資料庫,通過下面命令:
1hive --service metastore
2hive  --service metastore -hiveconf hive.root.logger=DEBUG,console  

註釋:
-hiveconf hive.root.logger=DEBUG,console命令的含義是進入debug模式,便於尋找錯誤

注意,只要上面2步即可完成內嵌模式的安裝和啟動,

四、本地模式安裝:

這種安裝方式和嵌入式的區別在於,不再使用內嵌的Derby作為元資料的儲存介質,而是使用其他資料庫比如MySQL來儲存元資料。

這種方式是一個多使用者的模式,執行多個使用者client連線到一個數據庫中。這種方式一般作為公司內部同時使用Hive

這裡有一個前提,每一個使用者必須要有對MySQL的訪問權利,即每一個客戶端使用者需要知道MySQL的使用者名稱和密碼才行。

下面開始正式搭建,這裡要求hadoop系統已經正常啟動,且MySQL資料庫已經正確安裝。

1首先必須解除安裝系統自帶資料mariadb再安裝mysql

[[email protected] mysql]# rpm -qa | grep mariadb

[[email protected] mysql]# rpm -e mariadb-libs-5.5.44-2.el7.centos.x86_64 --nodep

1.1首先介紹mysql安裝方式

1)建議下載離線安裝包直接安裝配置 (mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz

2建立mysql的使用者組/使用者, data目錄及其使用者目錄

# groupadd mysql

# useradd -g mysql -d /home/mysql mysql

# mkdir /home/mysql/data

3解壓安裝包並將解壓包裡的內容

拷貝到mysql的安裝目錄/usr/local/mysql

tar -xzvf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz

cd mysql-5.7.18-linux-glibc2.5-x86_64/

mv * /usr/local/mysql

4 初始化mysql資料庫

cd /usr/local/mysql/

執行這個命令

./bin/mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/home/mysql/data –initialize

牢記上面的隨機密碼, 如上dUjoGB&Bk8_J 下面我們修改密碼時需要用到。

5 檢測下是否能啟動mysql服務

./support-files/mysql.server start

注:此處之所以出錯的原因我們上面的預設安裝目錄為 /usr/local/mysql/mysql-5.7.18-linux-glibc2.5-x86_64/

而我們稍後用了mv * /usr/local/mysql/  把所有的檔案移動到上一層目錄裡面了

此時我們需要修改/support-files/mysql.server檔案的basedirdatadir目錄路徑為我們環境所在的mysqlbasedirdatadir路徑, 如下:

basedir=/usr/local/mysql

datadir=/home/mysql/data

修改完之後重新啟動  ./support-files/mysql.server start

6 建立軟連結

ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql

去系統裡面檢視是否建立成功

注:安裝離線包方式在mysql目錄 support-files裡面 沒有my-default.cnf或者my.cnf,如果改系統自帶的/etc/my.cnf 檔案 反而會出錯,所以此處可以忽略my.cnf,下面可以正常啟動

7 配置mysql服務開機自動啟動

拷貝啟動檔案到/etc/init.d/下並重命令為mysqld

cp /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysqld

上面手誤在最後面寫的mysql不是mysqld,下面重新命名

增加執行許可權

chmod 755 /etc/init.d/mysqld

檢查自啟動項列表中沒有mysqld這個,如果沒有就新增mysqld

chkconfig --list mysqld

chkconfig -- add mysqld

設定MySQL345等級自動啟動

chkconfig --level 345 mysqld on

或用這個命令設定開機啟動:

chkconfig mysqld on

8mysql服務的啟動/重啟/停止

啟動mysql服務

./support-files/mysql.server start 或者 service mysqld start

重啟mysql服務

./support-files/mysql.server restart   或者  service mysqld restart

停止mysql服務

./support-files/mysql.server restart  或者 service mysqld stop

檢視mysql啟動狀態

./support-files/mysql.server start   或者  service mysqld status

9root使用者mysql登入密碼為abcd1234

mysql -u root -p

SET PASSWORD = PASSWORD('abcd1234');

休息完密碼 執行命令

flush privileges;

mysql 新設定使用者或更改密碼後需用flush privileges重新整理MySQL的系統許可權相關表,否則會出現拒絕訪問,還有一種方法,就是重新啟動mysql伺服器,來使新設定生效。

10 mysql遠端授權

grant all on *.* to 'root'@'%' identified by 'abcd1234';

到此,完成了離線安裝mysql

1.2線上安裝mysql(不建議,時間太長)

worker3節點中安裝

下載mysql源安裝包

安裝mysql

yum localinstall mysql57-community-release-el7-8.noarch.rpm

檢查mysql源是否安裝成功

yum repolist enabled | grep "mysql.*-community.*"

看到上圖所示表示安裝成功

安裝MySQL

yum install mysql-community-server

注:此處網路下載特別耗時

啟動MySql服務

開機啟動mysql

systemctl enable mysqld

systemctl daemon-reload

修改root預設密碼

mysql安裝完成之後,在/var/log/mysqld.log檔案中給root生成了一個預設密碼。通過下面的方式找到root預設密碼,然後登入mysql進行修改:

grep 'temporary password' /var/log/mysqld.log

mysql -u root –p 登入修改root密碼,需滿足密碼複雜度(worker3mysql root使用者密碼偉Abcd1234!

set password for 'root'@'localhost'=password('Abcd1234!');

注意:mysql5.7預設安裝了密碼安全檢查外掛(validate_password),預設密碼檢查策略要求密碼必須包含:大小寫字母、數字和特殊符號,並且長度不能少於8位。否則會提示ERROR 1819 (HY000): Your password does not satisfy the current policy requirements錯誤,如上圖所示:

通過msyql環境變數可以檢視密碼策略的相關資訊:

 validate_password_policy:密碼策略,預設為MEDIUM策略  validate_password_dictionary_file:密碼策略檔案,策略為STRONG才需要  validate_password_length:密碼最少長度  validate_password_mixed_case_count:大小寫字元長度,至少1  validate_password_number_count :數字至少1  validate_password_special_char_count:特殊字元至少1 上述引數是預設策略MEDIUM的密碼檢查規則。

共有以下幾種密碼策略:

策略

檢查規則

0 or LOW

Length

1 or MEDIUM

Length; numeric, lowercase/uppercase, and special characters

2 or STRONG

Length; numeric, lowercase/uppercase, and special characters; dictionary file

1.3修改密碼策略

/etc/my.cnf檔案新增validate_password_policy配置,指定密碼策略

# 選擇0LOW),1MEDIUM),2STRONG)其中一種,選擇2需要提供密碼字典檔案

validate_password_policy=0

如果不需要密碼策略,新增my.cnf檔案中新增如下配置禁用即可:

validate_password = off

重新啟動mysql服務使配置生效:

systemctl restart mysqld

注:我在配置檔案裡面/etc/my.cnf 裡面把密碼策略禁用,我要保持所有環境mysql  root使用者密碼一樣方便記 (worker3,線上安裝mysql

set password for 'root'@'localhost'=password('abcd1234');

1.4新增遠端登入使用者

預設只允許root帳戶在本地登入,如果要在其它機器上連線mysql,必須修改root允許遠端連線,或者新增一個允許遠端連線的帳戶

grant all on *.* to 'root'@'%' identified by 'abcd1234' with grant option;

1.5配置預設編碼為utf8

修改/etc/my.cnf配置檔案,在[mysqld]下新增編碼配置,如下所示:

[mysqld]

character_set_server=utf8

init_connect='SET NAMES utf8'

重新啟動mysql服務,檢視資料庫預設編碼如下所示:

systemctl restart mysqld

systemctl status mysqld

預設配置檔案路徑:  配置檔案:/etc/my.cnf  日誌檔案:/var/log//var/log/mysqld.log  服務啟動指令碼:/usr/lib/systemd/system/mysqld.service  socket檔案:/var/run/mysqld/mysqld.pid

線上安裝mysql 配置完畢

------

  $ $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

  hadoop fs -chmod -R 777  /tmp

------

2、Hive本地模式安裝建立mysql資料庫資訊

(1) 首先登入MySQL,建立一個數據庫,這裡命名為hive,資料庫名是可以隨意定義的。

create database hive;

建立hive使用者,並賦予所有的許可權:

CREATE USER 'hive'@'localhost' IDENTIFIED BY 'abcd1234';

GRANT ALL PRIVILEGES ON *.* TO hive IDENTIFIED BY 'abcd1234'  WITH GRANT OPTION;

(2) MySQLJDBC驅動包拷貝到hive的安裝目錄中,驅動包自行查詢下載。(下載之後解壓)

驅動下載地址https://dev.mysql.com/downloads/connector/j/

mysql-connector-java-5.1.32-bin.jar

(3) HIVE_HOME/conf下的hive-default.xml.template拷貝一份:

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

3、修改hive-site.xml檔案:

該配置檔案有3300多行,選擇其中的幾個選項進行修改即可。

hive目錄下建立iotmp資料夾

注:不要直接複製,我的hostnameworker4mysql3306,直接複製貼上到你那邊會報錯

<property>

    <name>javax.jdo.option.ConnectionURL</name>

    <value>jdbc:mysql://worker4: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>

3修改javax.jdo.option.ConnectionUserName屬性。即資料庫使用者名稱(我們建立的是hive使用者名稱)

  <property>

    <name>javax.jdo.option.ConnectionUserName</name>

    <value>hive</value>

    <description>Username to use against metastore database</description>

  </property>

  <property>

    <name>javax.jdo.option.ConnectionPassword</name>

    <value>abcd1234</value>

    <description>password to use against metastore database</description>

  </property>

5修改hive.server2.logging.operation.log.location屬性,因為預設的配置裡沒有指定具體的路徑。

  <property>

    <name>hive.server2.logging.operation.log.location</name>

    <value>/usr/local/hive-1.2.1/iotmp/operation_logs</value>

    <description>Top level directory where operation logs are stored if logging functionality is enabled</description>

  </property>

6修改hive.exec.local.scratchdir屬性。

  <property>

    <name>hive.exec.local.scratchdir</name>

    <value>/usr/local/hive-1.2.1/iotmp</value>

    <description>Local scratch space for Hive jobs</description>

  </property>

7修改hive.downloaded.resources.dir屬性。3

  <property>

    <name>hive.downloaded.resources.dir</name>

    <value>/usr/local/hive-1.2.1/iotmp</value>

    <description>Temporary local directory for added resources in the remote file system.</description>

  </property>

8修改屬性hive.querylog.location屬性。

  <property>

    <name>hive.querylog.location</name>

    <value>/usr/local/hive-1.2.1/iotmp</value>

    <description>Location of Hive run time structured log file</description>

  </property>

.

4配置hive/conflog4j配置檔案

cp hive-log4j.properties.template hive-log4j.properties

5.hive下的jline-2.12.jar替換掉hadoop自帶的包,不然會報錯。

先把hadoop裡面jline備份以下

mv /usr/local/hadoop/share/hadoop/yarn/lib/jline-0.9.94.jar /usr/local/hadoop/share/hadoop/yarn/lib/jline-0.9.94.jar.backup

然後把hive裡面替換掉hadoop自帶的包

cp /usr/local/hive-1.2.1/lib/jline-2.12.jar /usr/local/hadoop/share/hadoop/yarn/lib/

7、啟動hive,介面如下:

worker4中 可以看到hive databases

hive資料庫中 有一些hive插入的元資料(登陸遠端資料mysql檢視儲存的元資料)

. 遠端模式安裝

這種儲存方式需要在遠端伺服器執行一個MySQL伺服器,並且需要在Hive伺服器啟動meta服務。這裡用mysql測試伺服器, ip(worker3  192.168.64.131)

1、 服務端和客戶端都放在同一臺伺服器上

  <property>

    <name>javax.jdo.option.ConnectionURL</name>

    <value>jdbc:mysql://worker3: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>hive</value>

    <description>Username to use against metastore database</description>

  </property>

  <property>

    <name>javax.jdo.option.ConnectionPassword</name>

    <value>abcd1234</value>

    <description>password to use against metastore database</description>

  </property>

  <property>

    <name>hive.server2.logging.operation.log.location</name>

    <value>/usr/local/hive-1.2.1/iotmp/operation_logs</value>

    <description>Top level directory where operation logs are stored if logging functionality is enabled</description>

  </property>

  <property>

    <name>hive.exec.scratchdir</name>

    <value>/tmp/hive</value>

    <description>HDFS root scratch dir for Hive jobs which gets created with write all (733) permission. For each connecting user, an HDFS scratch dir: ${hive.exec.scratchdir}/<username> is created, with ${hive.scratch.dir.permission}.</description>

  </property>

  <property>

    <name>hive.exec.local.scratchdir</name>

    <value>/usr/local/hive-1.2.1/iotmp</value>

    <description>Local scratch space for Hive jobs</description>

  </property>

  <property>

    <name>hive.downloaded.resources.dir</name>

    <value>/usr/local/hive-1.2.1/iotmp</value>

    <description>Temporary local directory for added resources in the remote file system.</description>

  </property>

  <property>

    <name>hive.querylog.location</name>

    <value>/usr/local/hive-1.2.1/iotmp</value>

    <description>Location of Hive run time structured log file</description>

  </property>

注:這裡把hive的服務端和客戶端都放在同一臺伺服器上了。服務端和客戶端可以拆開,將hive-site.xml配置檔案拆為如下兩部分

Hive 服務端和客戶端放在不同伺服器上

2、 服務端配置檔案

  <property>

    <name>javax.jdo.option.ConnectionURL</name>

    <value>jdbc:mysql://worker3: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>hive</value>

    <description>Username to use against metastore database</description>

  </property>

  <property>

    <name>javax.jdo.option.ConnectionPassword</name>

    <value>abcd1234</value>

    <description>password to use against metastore database</description>

  </property>

  <property>

    <name>hive.server2.logging.operation.log.location</name>

    <value>/usr/local/hive-1.2.1/iotmp/operation_logs</value>

    <description>Top level directory where operation logs are stored if logging functionality is enabled</description>

  </property>

  <property>

    <name>hive.exec.scratchdir</name>

    <value>/tmp/hive</value>

    <description>HDFS root scratch dir for Hive jobs which gets created with write all (733) permission. For each connecting user, an HDFS scratch dir: ${hive.exec.scratchdir}/<username> is created, with ${hive.scratch.dir.permission}.</description>

  </property>

  <property>

    <name>hive.exec.local.scratchdir</name>

    <value>/usr/local/hive-1.2.1/iotmp</value>

    <description>Local scratch space for Hive jobs</description>

  </property>

  <property>

    <name>hive.downloaded.resources.dir</name>

    <value>/usr/local/hive-1.2.1/iotmp</value>

    <description>Temporary local directory for added resources in the remote file system.</description>

  </property>

  <property>

    <name>hive.querylog.location</name>

    <value>/usr/local/hive-1.2.1/iotmp</value>

    <description>Location of Hive run time structured log file</description>

  </property>

3、 客戶端配置檔案

<property>  

  <name>hive.metastore.warehouse.dir</name>  

  <value>/user/hive/warehouse</value>  

</property>  

<property>  

  <name>hive.metastore.local</name>  

  <value>false</value>  

</property>  

<property>  

  <name>hive.metastore.uris</name>  

  <value>thrift://worker4:9083</value>  

</property>

啟動hive服務端(worker4)程式 啟動元資料

 hive --service metastore 

客戶端(worker3)直接使用hive命令即可

總結

內嵌模式 本地模式和遠端模式的區別

1. 內嵌模式,特點是:hive服務和metastore服務執行在同一個程序中,derby服務也執行在該程序中。該模式無需特殊配置, 

2. 本地模式,特點是:hive服務和metastore服務執行在同一個程序中,mysql是單獨的程序,可以在同一臺機器上,也可以在遠端機器上。該模式只需將hive-site.xml中的ConnectionURL指向mysql,並配置好驅動名、資料庫連線賬號即可:

3. 遠端模式,特點是:hive服務和metastore在不同的程序內,可能是不同的機器。該模式需要將hive.metastore.local設定為false,並將hive.metastore.uris設定為metastore伺服器URI,如有多個metastore伺服器,URI之間用逗號分隔。metastore伺服器URI的格式為thrift://hostort

<property>  

<name>hive.metastore.uris</name>  

<value>thrift://worker4:9083</value>   

</property>

把這些理解後,大家就會明白,其實僅連線遠端的mysql並不能稱之為遠端模式,是否遠端指的是metastorehive服務是否在同一程序內,換句話說,指的是metastorehive服務離得

Hive 1.2.1 UI(HWI)配置

Hive Web InterfaceHWI)簡介:Hive自帶了一個Web-GUI配置

 編輯檔案conf/hive-site.xml,新增hive.hwi.war.file的配置:(需要把配置檔案原有的下列熟悉去掉,再新增,不然內容重複了,啟動會報錯)

<property>

    <name>hive.hwi.listen.host</name>

    <value>0.0.0.0</value>

    <description>This is the host address the Hive Web Interface will listen on</description>

  </property>

  <property>

    <name>hive.hwi.listen.port</name>

    <value>9999</value>

    <description>This is the port the Hive Web Interface will listen on</description>

  </property>

 <property>

    <name>hive.hwi.war.file</name>

    <value>lib/hive-hwi-1.2.1.war</value>

    <description>This sets the path to the HWI war file, relative to ${HIVE_HOME}. </description>

  </property>

沒有UI war包的,需要自己下載對應版本的原始碼進行打包,後拷到lib下。

下載原始碼

apache-hive-1.2.1-src.tar.gz

將原始碼解壓:

tar -vxzf apache-hive-1.2.1-src.tar.gz

進入解壓後的目錄,再進入hwi目錄下:

cd apache-hive-1.2.1-src 

cd hwi/web 

zip hive-hwi-1.2.1.zip ./*

再更改字尾名為war,複製到HIVE_HOME/lib/

mv hive-hwi-1.2.1.zip hive-hwi-1.2.1.war

mv hive-hwi-1.2.1.war $HIVE_HOME/lib

拷貝tools

cp */java/jdk1.7.0_51/lib/tools.jar /usr/local/hive-1.2.1/lib

如果不進行此步驟,將無法啟動介面。報錯解決

同事服務端報錯資訊

若有如下報錯,需將(JDK目錄下tools.jarjre下的tools.jar包拷到Hivelib目錄下,重啟hwi服務:

啟動

 $ sh bin/hive --service hwi

配置成功

http://192.168.64.130:9999/hwi/

參考:http://blog.csdn.net/ckfflyingdream/article/details/50515837

hiveserver2

HiveServer2提供了JDBC連結操作Hive的功能,非常實用,但如果在使用HiveServer2時候,不注意安全控制,將非常危險,因為任何人都可以作為超級使用者來操作HiveHDFS資料。比如:在配置HiveServer2的時候,hive.server2.authentication=NONE,表示沒有使用者認證。

在之前的學習和實踐Hive中,使用的都是CLI或者hive –e的方式,該方式僅允許使用HiveQL執行查詢、更新等操作,並且該方式比較笨拙單一。幸好Hive提供了輕客戶端的實現,通過HiveServer或者HiveServer2,客戶端可以在不啟動CLI的情況下對Hive中的資料進行操作,兩者都允許遠端客戶端使用多種程式語言如JavaPythonHive提交請求,取回結果。HiveServer或者HiveServer2都是基於Thrift的,但HiveSever有時被稱為Thrift server,而HiveServer2卻不會。既然已經存在HiveServer為什麼還需要HiveServer2呢?這是因為HiveServer不能處理多於一個客戶端的併發請求,這是由於HiveServer使用的Thrift介面所導致的限制,不能通過修改HiveServer的程式碼修正。因此在Hive-0.11.0版本中重寫了HiveServer程式碼得到了HiveServer2,進而解決了該問題。HiveServer2支援多客戶端的併發和認證,為開放API客戶端如JDBCODBC提供了更好的支援。

       既然HiveServer2提供了更強大的功能,將會對其進行著重學習,但也會簡單瞭解一下HiveServer的使用方法。在命令中輸入hive --service help,結果如下。從結果可以瞭解到,可以使用hive <parameters> --service serviceName <serviceparameters>啟動特定的服務,如clihiverserverhiveserver2等。

Hive服務啟動hiveserver2

[[email protected] ~]# hive --service hiveserver2

別的節點機器可以通過beeline連線

[[email protected] ~]# beeline

Beeline version 1.6.0 by Apache Hive

beeline> !connect jdbc:hive2://worker4:10000 hive abcd1234

Connecting to jdbc:hive2://worker4:10000

17/06/27 15:02:27 INFO jdbc.Utils: Supplied authorities: worker4:10000

17/06/27 15:02:27 INFO jdbc.Utils: Resolved authority: worker4:10000

17/06/27 15:02:28 INFO jdbc.HiveConnection: Will try to open client transport with JDBC Uri: jdbc:hive2://worker4:10000

Connected to: Apache Hive (version 1.2.1)

Driver: Spark Project Core (version 1.6.0)

Transaction isolation: TRANSACTION_REPEATABLE_READ

0: jdbc:hive2://worker4:10000> show tables;

JDBC

一般連線Hive的方式有CLI(登入到伺服器或者本地切換到hive環境),Client(SQUIREEL SQL客戶端)Web UI(hive --service hwi ), Java 操作JDBC同普通JDBC資料庫一樣,首先需要啟動Hive 服務開啟hive --service hiveserver2

依賴的jar:

hadoop-2.2.0/share/hadoop/common/hadoop-common-2.2.0.jar

$HIVE_HOME/lib/hive-exec-0.11.0.jar

$HIVE_HOME/lib/hive-jdbc-0.11.0.jar

$HIVE_HOME/lib/hive-metastore-0.11.0.jar  

$HIVE_HOME/lib/hive-service-0.11.0.jar   

$HIVE_HOME/lib/libfb303-0.9.0.jar   

$HIVE_HOME/lib/commons-logging-1.0.4.jar  

$HIVE_HOME/lib/slf4j-api-1.6.1.jar

但是建議全部匯入 

點選專案project 右鍵properties

然後hive 二進位制包中的jar全部進來

程式碼如下   

可以參考官網 JDBC 原始碼

https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients#HiveServer2Clients-JDBC

package com.hive;

import java.sql.SQLException;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.Statement;

import java.sql.DriverManager;

public class HiveJdbcClient {

//  private static String driverName = "org.apache.hive.jd