一、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为连接的模式参数。