您的位置:

Python连接Hive详解

一、Python连接Hive集群

连接Hive集群需要用到thrift库,具体步骤如下:


from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift.server import TServer
from thrift.hive import ThriftHive
# 连接hive服务
transport = TSocket.TSocket('host', port)
transport = TTransport.TBufferedTransport(transport)
protocol = TBinaryProtocol.TBinaryProtocol(transport)
client = ThriftHive.Client(protocol)
transport.open()

其中host为Hive的服务器地址,port为服务端口号。

二、Python连接Hive数据库

连接Hive数据库使用PyHive库,需要先安装该库:


pip install pyhive

连接Hive数据库的代码如下:


from pyhive import hive
# 连接hive数据
conn = hive.Connection(host='host', port=port, username='user')
cursor = conn.cursor()
cursor.execute('use database')

其中host为Hive的服务器地址,port为服务端口号,user为用户名,database为连接的数据库名称。

三、Python连接Hive的configuration

在连接Hive时,可以使用configuration配置参数,例如:


from pyhive import hive
config = {'host': 'host', 'port': port, 'username': 'user', 
          'database': 'database', 'auth': 'NOSASL'}
conn = hive.Connection(**config)
cursor = conn.cursor()
cursor.execute('use database')

其中auth为Hive的认证方式,这里使用的是NOSASL方式。

四、Python连接Hive的库

Hive支持不同的存储格式,例如Avro、Parquet等,如果需要连接不同格式的库,需要指定相应的存储插件。以连接Avro为例:


from pyhive import hive
config = {'host': 'host', 'port': port, 'username': 'user', 
          'database': 'database', 'auth': 'NOSASL', 'configuration': {'mapred.job.tracker': 'local', 
          'hive.metastore.uris': 'thrift://host:port'}}
conn = hive.Connection(**config)
cursor = conn.cursor()
cursor.execute("CREATE TABLE table_name ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat' TBLPROPERTIES ('avro.schema.literal'='avro_schema_string')")

其中mapred.job.tracker指定的是Hadoop的job tracker,hive.metastore.uris指定的是Hive的元数据服务器地址。

五、Python连接Hive数据库的Thrift

除了使用PyHive库连接Hive外,还可以使用Hive的Thrift接口连接。示例如下:


from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift.hive import ThriftHive
# 连接hive Thrift服务
transport = TSocket.TSocket('host', port)
transport = TTransport.TBufferedTransport(transport)
protocol = TBinaryProtocol.TBinaryProtocol(transport)
client = ThriftHive.Client(protocol)
transport.open()
client.execute('use database')

其中host为Hive的服务器地址,port为服务端口号。

六、Python连接Hive数据库Impala

除了连接Hive,还可以连接Impala数据库。示例如下:


from impala.dbapi import connect
# 连接impala数据库
conn = connect(host='host', port=port, user='user', database='database')
cursor = conn.cursor()
cursor.execute('SELECT * FROM table_name LIMIT 10')

其中host为Impala的服务器地址,port为服务端口号,user为用户名,database为连接的数据库名称。

七、Python连接Hive的URL如何使用

连接Hive可以使用URL方式连接,连接字符串如下:


hive://[user]:[password]@host:port/database

示例代码如下:


from pyhive import hive
# 连接hive数据
conn = hive.Connection(url='hive://user:password@host:port/database')
cursor = conn.cursor()
cursor.execute('use database')

八、Python连接Hive的模式参数

连接Hive时可以指定schema,示例代码如下:


from pyhive import hive
config = {'host': 'host', 'port': port, 'username': 'user', 'database': 'database', 'schema': 'schema', 'auth': 'NOSASL'}
conn = hive.Connection(**config)
cursor = conn.cursor()
cursor.execute('use database')

其中schema为连接的模式参数。