实战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, 非常方便,有兴趣的朋友可以在以下链接详细了解
5 小节
时间很快,就到了本系列的第二篇文章,从另外一个角度理解数据仓库工具的xml解析和查询命令的触发过程。
6 后记
至此,程序都可以在windows模拟端和linux真机上进行,如果有了数据库和hive,理解将会更加贴切,下面一节将会详细展开。