hive 源码下载([Hive] - Beeline 偶发 Unable to read HiveServer2 uri from ZooKeeper 问题)
![hive 源码下载([Hive] - Beeline 偶发 Unable to read HiveServer2 uri from ZooKeeper 问题)](/static/images/bgimages/under-water-1819586_1920.jpg)
本文目录
- [Hive] - Beeline 偶发 Unable to read HiveServer2 uri from ZooKeeper 问题
- 如何配置hive访问其他服务器的hadoop
- org.apahce.hadoop.hive.ql.exec.udf 在哪个包里
- ubuntu 安装hive下哪个压缩包 src bin
- python连接hive,怎么安装thrifthive
- 我想学习hive,请问安装hive之前,必须安装centos、hadoop、java这些吗
- hue/oozie 调度shell执行hive脚本
[Hive] - Beeline 偶发 Unable to read HiveServer2 uri from ZooKeeper 问题
用户有大量的并发 beeline hive sql 任务,偶发 Unable to read HiveServer2 uri from ZooKeeper 报错。
hive 版本:hdp 1.2.1
修改 beeline connect url 增加 retries。
beeline url 修改前:
beeline url 修改后 :
通过阅读源码,hiveserver2 连接步骤大致如下:
1)获取连接 url,如果是 serviceDiscoveryMode=zooKeeper ,动态的方式获取真正的连接信息与配置
2)通过 ZK 获取 hiveserver2 所有节点,对应的路径为/hiveserver2/。路径格式为: "/" + zooKeeperNamespace :这个 zooKeeperNamespace 就是连接串里面配置的 hiveserver2。
3)从 list 中随机取一个 Znode,获取 zk 中 Znode 的值
4)解析 url ,获取真正的 hiveserver2 的地址与端口等信息
5)创建连接,支持重试
问题在于:
一个小建议:遇到此类问题,直接看源码是最好的, 不要去网上瞎找。
***隐藏网址***
如何配置hive访问其他服务器的hadoop
***隐藏网址***
***隐藏网址***
3、修改文件 /etc/profile,添加如下的行:
export HADOOP_HOME=/usr/local/hadoopexport ANT_HOME=$HADOOP_HOME/apache-ant-1.7.1export PATH=$PATH:/usr/local/hadoop/bin:$JAVA_HOME/bin:$HADOOP_HOME/contrib/hive/bin:$ANT_HOME/bin
export ANT_LIB=$HADOOP_HOME/apache-ant-1.7.1/lib
export HADOOP=$HADOOP_HOME/bin/hadoop
4、修改hive配置文件 /usr/local/hadoop/contrib/hive/conf/hive-default.xml,只要改一个地方,使其内容为:/usr/local/hadoop/contrib/hive/lib/hive_hwi.war。昨天我把它书写成 “hive-hwi.war”,浏览器访问,就只列出文件目录,死活都不对,唉!
***隐藏网址***
注:hive表的存放地为hdfs,默认是 /user/hive .这个路径只有通过hadoop shell才能看见(不是/usr)
org.apahce.hadoop.hive.ql.exec.udf 在哪个包里
你说的应该是hive的udf吧?
udf的源码如下:
package org.apache.hadoop.hive.ql.exec;
import org.apache.hadoop.hive.ql.udf.UDFType;
@UDFType(
deterministic = true
)
public class UDF {
private UDFMethodResolver rslv;
// 后面省略
可以看到,类UDF在包org.apache.hadoop.hive.ql.exec下,如果要使用hive的udf,需要用到以下依赖:
我用的是maven pom, pom依赖如下:
《dependency》
《groupId》org.apache.hive《/groupId》
《artifactId》hive-exec《/artifactId》
《version》2.1.0《/version》
《/dependency》
ubuntu 安装hive下哪个压缩包 src bin
ubuntu 安装hive下哪个压缩包 src bin
不行。 安装 vm 下载:去官网下 VMware-player-5.0.1-894247.zip 安装和配置ubanto 下载:去官网下 ubuntu-12.10-desktop-i386.iso 打开vm,载入ubanto iso文件,进行安装更新 进入ubanto,如果是第一个进入,则需要设置root的密码
python连接hive,怎么安装thrifthive
HiveServer2的启动
启动HiveServer2
HiveServer2的启动十分简便:
$ $HIVE_HOME/bin/hiveserver2
或者
$ $HIVE_HOME/bin/hive --service hiveserver2
***隐藏网址***
使用beeline测试客户端连接
HiveServer2成功运行后,我们可以使用Hive提供的客户端工具beeline连接HiveServer2。
$ $HIVE_HOME/bin/beeline
beeline 》 !connect jdbc:hive2://localhost:10000
如果成功登录将出现如下的命令提示符,此时可以编写HQL语句。
0: jdbc:hive2://localhost:10000》
报错:User: xxx is not allowed to impersonate anonymous
在beeline使用!connect连接HiveServer2时可能会出现如下错误信息:
Caused by: org.apache.hadoop.ipc.RemoteException:
User: xxx is not allowed to impersonate anonymous
这里的xxx是我的操作系统用户名称。这个问题的解决方法是在hadoop的core-size.xml文件中添加xxx用户代理配置:
《property》《name》hadoop.proxyuser.xxx.groups《/name》《value》*《/value》《/property》《property》《name》hadoop.proxyuser.xxx.hosts《/name》《value》*《/value》《/property》
重启HDFS后,再用beeline连接HiveServer2即可成功连接。
常用配置
HiveServer2的配置可以参考官方文档《Setting Up HiveServer2》
这里列举一些hive-site.xml的常用配置:
hive.server2.thrift.port:监听的TCP端口号。默认为10000。
hive.server2.thrift.bind.host:TCP接口的绑定主机。
hive.server2.authentication:身份验证方式。默认为NONE(使用 plain SASL),即不进行验证检查。可选项还有NOSASL, KERBEROS, LDAP, PAM and CUSTOM.
hive.server2.enable.doAs:是否以模拟身份执行查询处理。默认为true。
Python客户端连接HiveServer2
python中用于连接HiveServer2的客户端有3个:pyhs2,pyhive,impyla。官网的示例采用的是pyhs2,但pyhs2的官网已声明不再提供支持,建议使用impyla和pyhive。我们这里使用的是impyla。
impyla的安装
impyla必须的依赖包括:
six
bit_array
thriftpy(python2.x则是thrift)
sasl
thrift_sasl
- from impala.dbapi import connect
- conn = connect(host=’127.0.0.1’, port=10000, database=’default’, auth_mechanism=’PLAIN’)
- cur = conn.cursor()
- cur.execute(’SHOW DATABASES’)print(cur.fetchall())
- cur.execute(’SHOW Tables’)print(cur.fetchall())
为了支持Hive还需要以下两个包:
可在Python PI中下载impyla及其依赖包的源码。
impyla示例
以下是使用impyla连接HiveServer2的示例:
我想学习hive,请问安装hive之前,必须安装centos、hadoop、java这些吗
安装需要
java 1.6,java 1.7或更高版本。
Hadoop 2.x或更高, 1.x. Hive 0.13 版本也支持 0.20.x, 0.23.x
Linux,mac,windows操作系统。以下内容适用于linux系统。
安装打包好的hive
需要先到apache下载已打包好的hive镜像,然后解压开该文件
$ tar -xzvf hive-x.y.z.tar.gz
设置hive环境变量
$ cd hive-x.y.z$ export HIVE_HOME={{pwd}}
设置hive运行路径
$ export PATH=$HIVE_HOME/bin:$PATH
编译Hive源码
下载hive源码
此处使用maven编译,需要下载安装maven。
以Hive 0.13版为例
编译hive 0.13源码基于hadoop 0.23或更高版本
$cdhive$mvncleaninstall-Phadoop-2,dist$cdpackaging/target/apache-hive-{version}-SNAPSHOT-bin/apache-hive-{version}-SNAPSHOT-bin$lsLICENSENOTICEREADME.txtRELEASE_NOTES.txtbin/(alltheshellscripts)lib/(requiredjarfiles)conf/(configurationfiles)examples/(sampleinputandqueryfiles)hcatalog/(hcataloginstallation)scripts/(upgradescriptsforhive-metastore)
编译hive 基于hadoop 0.20
$cdhive$antcleanpackage$cdbuild/dist#lsLICENSENOTICEREADME.txtRELEASE_NOTES.txtbin/(alltheshellscripts)lib/(requiredjarfiles)conf/(configurationfiles)examples/(sampleinputandqueryfiles)hcatalog/(hcataloginstallation)scripts/(upgradescriptsforhive-metastore)
运行hive
Hive运行依赖于hadoop,在运行hadoop之前必需先配置好hadoopHome。
export HADOOP_HOME=《hadoop-install-dir》
在hdfs上为hive创建\tmp目录和/user/hive/warehouse(akahive.metastore.warehouse.dir) 目录,然后你才可以运行hive。
在运行hive之前设置HiveHome。
$ export HIVE_HOME=《hive-install-dir》
在命令行窗口启动hive
$ $HIVE_HOME/bin/hive
若执行成功,将看到类似内容如图所示
hue/oozie 调度shell执行hive脚本
前面已经有篇文章介绍如何编译包含hive的spark-assembly.jar了,不清楚的可以翻看一下前面的文章。 clouderamanager装好的spark,直接执行spark-shell进入命令行后,写入如下语句: valhiveContext=neworg.apache.spark.sql.hive.HiveContext(sc) 你会发现没法执行通过,因为cm装的原生的spark是不支持sparkhql的,我们需要手动进行一些调整: 第一步,将编译好的包含hive的JAR包上传到hdfs上配置的默认的spark的sharelib目录:/user/spark/share/lib 第二步:在你要运行spark-shell脚本的节点上的/opt/cloudera/parcels/CDH-5.3.0-1.cdh5.3.0.p0.30/lib/spark/lib/目录下面,下载这个jar到这个目录:hadoopfs-gethdfs://n1:8020/user/spark/share/lib/spark-assembly-with-hive-maven.jar(具体路径替换成你自己的)。然后这个目录下面原来会有个软链接spark-assembly.jar指向的是spark-assembly-1.2.0-cdh5.3.0-hadoop2.5.0-cdh5.3.0.jar,我们把这个软链接删除掉重新创建一个同名的软链接:ln-sspark-assembly-with-hive-maven.jarspark-assembly.jar,指向我们刚下载下来的那个JAR包,这个JAR包会在启动spark-shell脚本时装载到driverprogram的classpath中去的,sparkContext也是在driver中创建出来的,所以需要将我们编译的JAR包替换掉原来的spark-assembly.jar包,这样在启动spark-shell的时候,包含hive的spark-assembly就被装载到classpath中去了。 第三步:在/opt/cloudera/parcels/CDH/lib/spark/conf/目录下面创建一个hive-site.xml。/opt/cloudera/parcels/CDH/lib/spark/conf目录是默认的spark的配置目录,当然你可以修改默认配置目录的位置。hive-site.xml内容如下: hive.metastore.localfalsehive.metastore.uristhrift://n1:9083hive.metastore.client.socket.timeout300hive.metastore.warehouse.dir/user/hive/warehouse这个应该大家都懂的,总要让spark找到hive的元数据在哪吧,于是就有了上面一些配置。 第四步:修改/opt/cloudera/parcels/CDH/lib/spark/conf/spark-defaults.conf,添加一个属性:spark.yarn.jar=hdfs://n1:8020/user/spark/share/lib/spark-assembly-with-hive-maven.jar。这个是让每个executor下载到本地然后装载到自己的classpath下面去的,主要是用在yarn-cluster模式。local模式由于driver和executor是同一个进程所以没关系。 以上完事之后,运行spark-shell,再输入: valhiveContext=neworg.apache.spark.sql.hive.HiveContext(sc) 应该就没问题了。我们再执行一个语句验证一下是不是连接的我们指定的hive元数据库: hiveContext.sql("showtables").take(10)//取前十个表看看 最后要重点说明一下这里的第二步第三步和第四步,如果是yarn-cluster模式的话,应该替换掉集群所有节点的spark-assembly.jar集群所有节点的sparkconf目录都需要添加hive-site.xml,每个节点spark-defaults.conf都需要添加spark.yarn.jar=hdfs://n1:8020/user/spark/share/lib/spark-assembly-with-hive-maven.jar。可以写个shell脚本来替换,不然手动一个一个节点去替换也是蛮累的。
![hive 源码下载([Hive] - Beeline 偶发 Unable to read HiveServer2 uri from ZooKeeper 问题)](/static/images/bgimages/mimosa-4253396_1920.jpg)
更多文章:
docker 运行容器(RunV: 让 Docker 支持虚拟化容器)
2026年3月21日 14:15
电脑出现invalid(电脑PHILIPS出现invalid partition table怎么办)
2025年12月30日 16:15
properties转yml(yml文件常见的几种读取方式)
2025年8月26日 03:30
bootstrap框架过时了吗(为什么前端工程师多不愿意用 Bootstrap 框架)
2025年5月28日 09:30
content的用法和固定搭配(content, contented的区别)
2025年6月9日 22:45
数控加工中心代码大全(数控编程的各系统中的各代码代表的什么意思)
2025年12月26日 14:30
把打乱的字母组成单词,并翻译lwak?英语Using awk to transpoose column to row怎么翻译
2026年7月18日 16:00

















