1. 程式人生 > >hadoop學習之HIVE(3.2):hadoop2.7.2下配置hiveserver2啟動遠端連線

hadoop學習之HIVE(3.2):hadoop2.7.2下配置hiveserver2啟動遠端連線

./hive只是啟動本地客戶端,往往用來測試,我們可以啟動hive server2伺服器用於遠端連線,方便開發。

前提是配置好hadoop和hive

1,開啟hive server服務:bin/hiveserver2

可檢視服務是否開啟:netstat -nplt | grep 10000

2,新開一個視窗,啟動客戶端,測試能否連線伺服器:

$ bin/beeline
beeline> !connect jdbc:hive2://localhost:10000

輸入使用者名稱,hive預設使用者是root,不過如果你是用其他的使用者建立的hadoop和hive,就使用你的使用者名稱,密碼無,直接回車。

若出現如下資訊,說明連線成功:

Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://localhost:10000>

3,連線成功後,就可以命令列操作,也可以像第4步一樣遠端連線後操作。

4,現在可以用eclipse連線hiveserver2寫程式碼了:

a,新建java project,匯入jar包:Project->Properties->Java Build Path->Libraries->Add External JARs,

分別找到並匯入:hive\lib目錄下的所有jar包;hadoop\share\hadoop\common\下的3個jar包;hadoop\share\hadoop\common\lib\下的以“slf4j-”開頭的2個jar包。

b,新建java檔案,內容如下:

package com.xxx.hive;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class ConnectTest {
	public static void main(String[] args) throws Exception {
		Class.forName("org.apache.hive.jdbc.HiveDriver");
		Connection conn = DriverManager.getConnection
				("jdbc:hive2://localhost:10000/default", "你的使用者名稱", "");
		try {
			Statement stat = conn.createStatement();
			ResultSet ret = stat.executeQuery("select count(*) from stu");
			while(ret.next())
			{
				System.out.println(ret.getInt(1));
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			conn.close();
		}
	}
}

這段程式碼連線hiveserver2執行hiveql語句,轉化為mr程式執行並返回執行結果。

可能會出現錯誤:

(1):當執行!connect jdbc:hive2://localhost:10000時,出現錯誤:

Error: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: jimmyhadoop is not allowed to impersonate root (state=,code=0)

解決辦法:終止hadoop,修改etc/hadoop/core-site.xml,新增兩項:

<property>
    <name>hadoop.proxyuser.username.hosts</name>
    <value>*</value>
</property>

<property>
    <name>hadoop.proxyuser.username.groups</name>
    <value>*</value>
</property>

其中的username改成你hadoop master主機的使用者名稱,儲存,重啟hadoop,重新連線hive。

(2):hive2.X已經沒有timeout中5000L的錯誤了,1.x中有的話就把L刪掉。