实战hadoop海量数据处理系列02: hql执行工具

xiaoxiao2021-02-28  87

实战hadoop海量数据处理系列02: hql执行工具

本文假设读者已经按照范老师的书搭建好了eclipse环境,并且已经导入myBi文件夹下面的子工程。

在阅读本文前,强烈建议阅读原书“实现数据分析工具模块”章节。

本文的代码同步于https://github.com/titer1/Play_HadoopFelix

ps:由于图床网络问题,本文的图显示不正常,所以请看不到图的小伙伴稍安勿躁,我会后续跟进处理,想了解原图的,可以在本文下面留言。

1 原理图

对比数据导入章节的结构图,你会发现本章原理类似,先解析xml,然后触发命令。

2 核心代码

首先理解xml文件,然后看相关的解析程序及hql执行逻辑。 这里仅列出作者详细注释的hql_exe.hql, 有兴趣的读者可以阅读加深并理解。

from com.cal.Basic import BasicCalculate from com.util.pro_env import * from xml.etree import ElementTree as ET from com.util.hive import HiveUtils #question1 parameter #question2 xml not found ,hivejob.xml ? #quesiton3 BasicCalculate from com.cal.Basic #class CalQuery(BasicCalculate): class CalQuery(): def __init__(self): ''' Constructor ''' def resolveTheConf(self): #获得配置文件名 #66: create xml as format confFile = PROJECT_CONF_DIR + "Query.xml" #解析配置文件 xmlTree = ET.parse(confFile) #获得pras元素 eles = xmlTree.findall('./pras') pras = eles[0] #遍历pras的子元素,获得所需参数 for pra in pras.getchildren(): #获得hql标签的值 if pra.tag == 'hql': self.hql = pra.text.strip() #获得output标签的值 if pra.tag == 'output': self.output = pra.text.strip() #获得filepath标签的值 if pra.tag == 'filepath': self.filepath = pra.text.strip() #检查参数有效性,无效则抛出异常 if len(self.hql) == 0 or self.hql == "" or self.hql == None: raise Exception('参数有误,终止运行') #检查参数有效性,无效则抛出异常 if len(self.output) == 0 or self.output == "" or self.output == None: raise Exception(' 参数有误,终止运行') #检查参数有效性,无效则抛出异常 if self.output == 'true' and (len(self.filepath) == 0 or self.filepath == "" or self.filepath == None): raise Exception('参数有误,终止运行') def executeQueryTask(self): #debug hql by debugger print self.hql #如果需要输出 if(self.output == 'true'): HiveUtils.execute_shell(self.hql, True, self.filepath) #如果不需要输出 else : HiveUtils.execute_shell(self.hql) def calculate(self): try: #解析配置文件,获取运行参数 self.resolveTheConf() except Exception: print "运行参数有误,中断执行" return #执行查询任务 self.executeQueryTask(); if __name__ == '__main__': aa = CalQuery() #direct run will trigger error here #aa.resolveTheConf() aa.calculate() #done ,配置好了 Query.xml就可以运行,期中输出路径必须设置 pass

3 运行结果:windows模拟端

有图有真相,环境配置和运行细节见图,图时间长度不到1分钟

4 运行结果:centos

工具已经移动到linux, 非常方便,有兴趣的朋友可以在以下链接详细了解

番外篇: 在linux上使用hql执行工具

5 小节

时间很快,就到了本系列的第二篇文章,从另外一个角度理解数据仓库工具的xml解析和查询命令的触发过程。

6 后记

至此,程序都可以在windows模拟端和linux真机上进行,如果有了数据库和hive,理解将会更加贴切,下面一节将会详细展开。

转载请注明原文地址: https://www.6miu.com/read-36229.html

最新回复(0)