背景
在大数据的处理过程中,目前最流行的开源框架无非就是hadoop体系,那说到Hadoop 最核心的两个部分无非就是HDFS、MapReduce,前者主要是用来存储数据,后者则是用来计算处理数据的,在此基础上如果要处理海量的数据就必须要基于此进行创建mapper、reduce、partition、job驱动等操作,这样一套流程下来,开发人员是不是很头大,为什么呢 工作繁琐开发效率太低,那有没有更好的简单的解决方案呢? 还真有,推荐使用Facebook开源的Hive
Hive是什么呢? 其实就是针对MapReduce进行了二次封装,方便开发人员通过大家熟悉的SQL脚本来便捷的操作Hadoop集群上的数据,基本的工作流程是开发人员首先编写要操作数据的SQL,其次连接上Hive,然后Hive会将你书写的SQL转为MapReduce任务,最后这些任务会在Hadoop集群上运行,具体流程如下:
具体实现
实现方案
本文介绍主要是使用python开发语言实现,其他语言可以参考对应的官方API文档
基于此,我们首先需要安装Hive的环境,其次客户端代码需要引入hive驱动包
安装Hive环境不在本篇文章介绍,本文侧重点于客户端代码怎么实现操作hive的流程
引入hive包
$pip3 install pyhive
示例代码
from pyhive import hive
class HiveUtils:
def query_count_data(self,query_count_sql,sql_config):
'''
统计表总条数
'''
logger.info('query_sql:%s',query_count_sql)
hive_conn = self.__get_connection(sql_config)
hive_cursor = hive_conn.cursor()
hive_cursor.execute(query_count_sql)
list_res = hive_cursor.fetchall()
total_count = list_res[0][0]
logger.info('get total_count:%s',total_count)
hive_cursor.close()
hive_conn.close()
return total_count
@retry(stop=stop_after_attempt(5), wait=wait_fixed(10))
def __get_connection(self,sql_config):
'''
连接不上时重试5次,每次重试延时10秒
'''
logger.info('start to connect to hive ...')
hive_connection = hive.Connection(host=sql_config.host
, port=sql_config.port
, username=sql_config.user_name
, database=sql_config.db_name)
logger.info('connect to hive successful!')
return hive_connection