您的位置:首页 > 运维架构

hadoop学习之HIVE(3.2):hadoop2.7.2下配置hiveserver2启动远程连接

2016-11-10 10:43 573 查看
./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删掉。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: