hive 三種方式區別和搭建
一、安裝模式介紹:
Hive官網上介紹了Hive的3種安裝方式,分別對應不同的應用場景。
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:元資料庫未啟動
這裡首先概括一下,會遇到的問題。首先需要啟動元資料庫,通過下面命令:
(1)hive --service metastore
(2)hive --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檔案的basedir和datadir目錄路徑為我們環境所在的mysql的basedir和datadir路徑, 如下:
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
設定MySQL在345等級自動啟動
chkconfig --level 345 mysqld on
或用這個命令設定開機啟動:
chkconfig mysqld on
(8)mysql服務的啟動/重啟/停止
啟動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
(9)改root使用者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密碼,需滿足密碼複雜度(worker3,mysql 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配置,指定密碼策略
# 選擇0(LOW),1(MEDIUM),2(STRONG)其中一種,選擇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) 將MySQL的JDBC驅動包拷貝到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資料夾
注:不要直接複製,我的hostname是worker4,mysql埠3306,直接複製貼上到你那邊會報錯
<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/conf的log4j配置檔案
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並不能稱之為“遠端模式”,是否遠端指的是metastore和hive服務是否在同一程序內,換句話說,“遠”指的是metastore和hive服務離得“遠”
Hive 1.2.1 UI(HWI)配置
Hive Web Interface(HWI)簡介: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.jar)jre下的tools.jar包拷到Hive的lib目錄下,重啟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時候,不注意安全控制,將非常危險,因為任何人都可以作為超級使用者來操作Hive及HDFS資料。比如:在配置HiveServer2的時候,hive.server2.authentication=NONE,表示沒有使用者認證。
在之前的學習和實踐Hive中,使用的都是CLI或者hive –e的方式,該方式僅允許使用HiveQL執行查詢、更新等操作,並且該方式比較笨拙單一。幸好Hive提供了輕客戶端的實現,通過HiveServer或者HiveServer2,客戶端可以在不啟動CLI的情況下對Hive中的資料進行操作,兩者都允許遠端客戶端使用多種程式語言如Java、Python向Hive提交請求,取回結果。HiveServer或者HiveServer2都是基於Thrift的,但HiveSever有時被稱為Thrift
server,而HiveServer2卻不會。既然已經存在HiveServer為什麼還需要HiveServer2呢?這是因為HiveServer不能處理多於一個客戶端的併發請求,這是由於HiveServer使用的Thrift介面所導致的限制,不能通過修改HiveServer的程式碼修正。因此在Hive-0.11.0版本中重寫了HiveServer程式碼得到了HiveServer2,進而解決了該問題。HiveServer2支援多客戶端的併發和認證,為開放API客戶端如JDBC、ODBC提供了更好的支援。
既然HiveServer2提供了更強大的功能,將會對其進行著重學習,但也會簡單瞭解一下HiveServer的使用方法。在命令中輸入hive
--service help,結果如下。從結果可以瞭解到,可以使用hive <parameters> --service serviceName <serviceparameters>啟動特定的服務,如cli、hiverserver、hiveserver2等。
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