1. Python 和hive连接
主要是要实现一个导入json文件的脚本,数据是从11月到12月的数据。可以直接在hive里面运行:
load data local inpath ‘/home/bi/ap_stalogs_20151101.json’ into table bi.stalogs partition (logdate=’20151101’);
python的实现如下,注意load命令是没有输出的,也就是说不能fetch
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
import pyhs2
class HiveClient: def __init__(self, db_host, user, password, database, port=10000, authMechanism="PLAIN"): self.conn = pyhs2.connect(host=db_host, port=port, authMechanism=authMechanism, user=user, password=password, database=database, )
def query(self, sql): with self.conn.cursor() as cursor: cursor.execute(sql) return cursor.fetch()
def loaddata(self, sql): with self.conn.cursor() as cursor: cursor.execute(sql)
def close(self): self.conn.close()
def main(): hive_client = HiveClient(db_host='127.0.0.1', port=10000, user='root', password='root', database='default', authMechanism='PLAIN') for log_date in range(3,6): sql = 'load data local inpath \'/home/bi/ap_stalogs_2015110' + str(log_date) + '.json\' into table bi.stalogs partition (logdate=\'2015110' + str(log_date) + '\')' print sql try: hive_client.loaddata(sql) except Exception as e: print e hive_client.close()
if __name__ == '__main__': main()
|
2. pyhs2主要接口
具体可以看官方的代码:Github
如果没什么特别要求execute可以执行,fetch能够获取返回结果,无返回结果的无法fetch。
3. 使用beeline连接hive
现在直接运行hive会给warning,说要用beeline,下面用beeline进行测试
2.1 beeline连接
命令行运行beeline进入beeline
!connect jdbc:hive2://node1:10000/;auth=PLAIN root root org.apache.hive.jdbc.HiveDriver
这个的root分别是账号和密码,因为auth默认是plain也就是无密码的那种认证方式,随便输什么都可以
2.2 运行指令
CREATE TABLE bi.stalogs(param string) PARTITIONED BY(logdate STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’ STORED AS TEXTFILE;
载入原始数据文件并分区
LOAD DATA LOCAL INPATH ‘/root/tmp/ap_stalogs_20151123.json’ INTO TABLE bi.stalogs PARTITION (logdate = ‘20151123’)