分享

hive1.2.1版本 hive --service hiveserve报错,求解决。。。

$hive --service hiveserver -p 10009
Starting Hive Thrift Server
Exception in thread "main" java.lang.ClassNotFoundException: org.apache.hadoop.hive.service.HiveServer
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:274)
        at org.apache.hadoop.util.RunJar.run(RunJar.java:214)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:136)


hive-service-1.2.1.jar的包中也有对应的class文件,

想用python链接hive 在execute()执行语句的时候,一直卡着,,
transport.open()返回也是none

新版的hive怎么和python连接呢???



QQ截图20150813181618.png

已有(8)人评论

跳转到指定楼层
军在桥 发表于 2015-8-16 18:55:35
回复

使用道具 举报

军在桥 发表于 2015-8-16 18:14:13
回复

使用道具 举报

muyannian 发表于 2015-8-13 18:49:37


楼主启动hive是用的Java,应该使用python

下面仅供参考
1 准备连接hive的python代码

在使用Python连接hive之前需要将hive中的文件拷贝到python的sys.path中
[mw_shl_code=bash,true]cp -r $HIVE_PATH/lib/py     /usr/local/lib/python2.7/site-packages[/mw_shl_code]
或者将hive中连接代码,设法加入到python的eclipse项目中
总之,目的只有一个,就是用hive自己提供的python客户端代码,来连接hive
关于具体如果将第三方的python代码加入环境变量,可以参照python中添加环境变量


2 启动hive 的thrift

如果hive机器没有thrift请先安装,
确保以下服务开启:
[mw_shl_code=bash,true]hive --service hiveserver  [/mw_shl_code]


3 写代码连接hive

hive的ip是机器的ip,端口默认为10000
-------------------------------------------------------------------
[mw_shl_code=python,true]import sys  
from hive_service import ThriftHive  
from hive_service.ttypes import HiveServerException  
from thrift import Thrift  
from thrift.transport import TSocket  
from thrift.transport import TTransport  
from thrift.protocol import TBinaryProtocol  
  
def hiveExe(sql):  
  
    try:  
        transport = TSocket.TSocket('127.0.0.1', 10000)   
        transport = TTransport.TBufferedTransport(transport)  
        protocol = TBinaryProtocol.TBinaryProtocol(transport)  
        client = ThriftHive.Client(protocol)  
        transport.open()  

        client.execute(sql)  

        print "The return value is : "   
        print client.fetchAll()  
        print "............"  
        transport.close()  
    except Thrift.TException, tx:  
        print '%s' % (tx.message)  
  
if __name__ == '__main__':  
    hiveExe("show tables")  
--------------------------------[/mw_shl_code]

回复

使用道具 举报

军在桥 发表于 2015-8-13 18:55:41
第一步 之前已经做完了,到第二步的时候总是报错,Exception in thread "main" java.lang.ClassNotFoundException: org.apache.hadoop.hive.service.HiveServer
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
回复

使用道具 举报

bob007 发表于 2015-8-13 19:44:01
军在桥 发表于 2015-8-13 18:55
第一步 之前已经做完了,到第二步的时候总是报错,Exception in thread "main" java.lang.ClassNotFoundExc ...

显然第一步做的还不够
回复

使用道具 举报

军在桥 发表于 2015-8-13 20:49:58
bob007 发表于 2015-8-13 19:44
显然第一步做的还不够

还需要cp什么,指点指点呗
回复

使用道具 举报

bob007 发表于 2015-8-14 14:20:20
军在桥 发表于 2015-8-13 20:49
还需要cp什么,指点指点呗

环境变量添加了吗,别人只是给一个方向,更多需要根据自己的实际情况来解决
回复

使用道具 举报

军在桥 发表于 2015-8-16 19:29:35
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条