最近接手了一个数据分析的项目,开发语言是Hive。 看到见小伙伴们开发调试都在命令行上,经常需要window下编写hive sql,再拷贝到linux中进行执行,效率感觉比较低。于是,想寻找一个客户端工具来提供开发调试的效率。网上一问度娘,发现了Squirrel这个客户端工具,但对于如何安装、配置却没有一个完整描述,实在让人恼火。 运维同事也表示不熟悉开发工具,看来还得“自给自足”啊。
2. 下载完成后,进行正常的安装。安装完成的界面如下所示:
3. 配置Driver,如下图所示:
填写名称
填写URL: jdbc:hive2://192.168.142.128:10000/test (可先随便写一个地址)
填写ClassName: org.apache.hive.jdbc.HiveDriver
重点问题,就是这里的 class Path:
需要选中Extra Class Path,然后让Hive的lib目录下的所有jar包和 hadoop的lib目录下的所有jar,都加入进来。
(虽然简单粗暴,却非常有效)
我个环境上,做了以上操作后,仍然缺少一个slf4j-api的jar包,只有单独下载并加入进来。
4. 新建连接,选择刚刚创建的Driver,建立连接。如下所示:
这里的重点是这个用户名和密码。
首先打开hive的hive-site.xml,配置端口、用户名和密码。
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
<description>Port number of HiveServer2 Thrift interface when hive.server2.transport.mode is 'binary'.</description>
</property>
<property>
<name>hive.server2.thrift.client.user</name>
<value>hive</value>
<description>Username to use against thrift client</description>
</property>
<property>
<name>hive.server2.thrift.client.password</name>
<value>123456</value>
<description>Password to use against thrift client</description>
</property>
其次,打开hadoop的core-site.xml,配置代理用户(我理解是代理Hive远程连接去操作HDFS的用户),新增如下内容
远程连接时或使用 beeline连接,需要注意代理用户,其它用户无权限通过hive 操作hdfs
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
然后设置hadoop安装目录下的tmp目录的权限(操作系统本地目录)
chmod 777 hadoop目录上的tmp目录 (否则连接时会报:(Connection refused) (state=08S01,code=0))
最后记得重启hadoop和hiveServer2 。
重启还需要设置一下hdfs目录的权限(不是本地目录)
hdfs dfs -chmod -R 777 /tmp (否则运行sql时会报:Permission denied: user=hive, access=EXECUTE, inode="/tmp":root:supergroup:drwx-----)
开放操作系统的端口,否则仍然无法远程连接
firewall-cmd --add-port=10000/tcp
5. 开始使用客户端进行连接
终于大功造成,记录下关键步骤分享给大家。