1.简介
Hive是数据仓库平台,构建在Hadoop之上用来处理结构化数据。Hive是一个SQL解析引擎,能够将SQL语句转化成MapReduce作业并在Hadoop上执行,从而使得查询和分析更加方便。
Hive是Facebook开发。2008年贡献给Apache,成为开源项目。
2.应用
由上图可见,hive的诞生可以很降低开发人员运用mapreduce计算框架的门槛,通过熟悉的SQL语句来实现复杂的mapreduce代码的编写,从而降低开发难度提高开发效率。
Hive适用于海量结构化数据的离线分析,如果有需求是是需要统计计算大数据量而且对于时效性没有过高要求的情况下,建议采用Hive来做处理。不适用于复杂的机器学习算法,因为机器学习算法大多涉及大量的迭代计算,而hive默认情况下底层封装的计算框架是MapReduce,计算效率比较低下不适合复杂的计算,(Hive on Spark另议),因为底层的计算框架是mapreduce 所以也不适合交互式实时查询,有交互式实时查询建议使用Impala。
3.使用方法及技巧
1)使用hive -e 将SQL写入shell脚本进行调用,如进行一些数据的定时汇总。使用定时器进行shell脚本的调用,可以使用oozie或者crontab调用hive脚本
2)当多个SQL并发执行占用资源过多时,可以通过设置HiveQL语句的优先级来告诉yarn优先给那个MapReduce分配资源(HiveQL底层转化成MapReduce执行),使用语句 SET mapreduce.job.priority=HIGH;设定任务的优先级是高,总共有四个级别,此处不再赘述。
3)HiveQL书写时遇到Join语句,当尽量遵循先过滤后Join
4)避免使用in ,not in语句
5)当多表join时。应当选择合适的表作为主表。
4.建议使用方式
在项目做技术选型时,如果有大量结构化数据进行离线计算,可以采用Hive来做计算,原因如下:
1)既然是离线分析,就不会太在乎时效性,所以不必使用SparkSQL,impala这种消耗内存来更快计算的技术,当有需求是需要短时间内返回计算结果的,hive不适用。
2)对于结构化数据处理使用SQL代替繁琐的mapreduce代码省时省力。
3)支持udf,udaf,udtf。对于复杂逻辑可以写Java代码实现作为自定义函数去调用
个人在使用hive仍存在问题希望各位能够给予解答将不胜感激:
在使用hive与hbase表建立映射关系时,可以实现hive分区吗?如何实现?