Hive引擎替换为Spark(Hive on Spark)

1、背景

Hive on Spark是由Cloudera发起,由Intel、MapR等公司共同参与的开源项目,其目的是把Spark作为Hive的一个计算引擎,将Hive的 查询作为Spark的任务提交到Spark集群上进行计算。通过该项目,可以提高Hive查询的性能,同时为已经部署了Hive或者Spark的用户提供 了更加灵活的选择,从而进一步提高Hive和Spark的普及率。

2、Hive引擎选择

MapReduce是一种离线计算框架,将一个算法抽象成Map和Reduce两个阶段进行处理,每个阶段都是用键值对(key/value)作为输入和输出,非常适合数据密集型计算。Map/Reduce通过把对数据集的大规模操作分发给网络上的每个节点实现可靠性;每个节点会周期性地返回它所完成的工作和最新的状态。如果一个节点在设定的时间内没有进行心跳上报,主节点(可以理解为主服务器)就会认为这个节点down掉了,此时就会把分配给这个节点的数据发到别的节点上运算,这样可以保证系统的高可用性和稳定性。因此它是一个很好的计算框架。

TEZ:是基于Hadoop YARN之上的DAG(有向无环图,Directed Acyclic Graph)计算框架。核心思想是将Map和Reduce两个操作进一步拆分,即Map被拆分成Input、Processor、Sort、Merge和Output, Reduce被拆分成Input、Shuffle、Sort、Merge、Processor和Output等。这样,这些分解后的元操作可以任意灵活组合,产生新的操作,这些操作经过一些控制程序组装后,可形成一个大的DAG作业,从而可以减少Map/Reduce之间的文件存储,同时合理组合其子过程,也可以减少任务的运行时间。

SparkHive on Spark总体的设计思路是,尽可能重用Hive逻辑层面的功能;从生成物理计划开始,提供一整套针对Spark的实现,比如 SparkCompiler、SparkTask等,这样Hive的查询就可以作为Spark的任务来执行了

三者比较个人意见:

MR计算,会对磁盘进行多次的读写操作,这样启动多轮job的代价略有些大,不仅占用资源,更耗费大量的时间 <–相比较–>
TEZ计算,就会生成一个简洁的DAG作业,算子跑完不退出,下轮继续使用上一轮的算子,这样大大减少磁盘IO操作,从而计算速度更快。 TEZ比MR至少快5倍(约值,反正是快,不必较真0.0) <–相比较–>
Spark计算,DAG生成,Stage划分,比MR快10倍(约值,反正是快,不必较真0.0)与TEZ相比我选择Spark,一来快,二来奇葩问题比较少

3、三种引擎如何切换引擎?

1、配置mapreduce计算引擎
set hive.execution.engine=mr;
2、配置tez计算引擎
set hive.execution.engine=tez;
3、配置spark计算引擎
set hive.execution.engine=spark;

4、hive on spark配置集群模式

set hive.execution.engine=spark;
set spark.master=yarn-cluster;
set mapreduce.job.queuename=xxx;

5、hive on spark参数调优

  xxx依据集群规模配置,切合理配置

1、核数调优:yarn.nodemanager.resource.cpu-vcores=xxx
2、内存调优:yarn.nodemanager.resource.memory-mb=xxx*1024
3、executor调优:spark.executor.cores=xxx; spark.executor.memory=xxx;spark.executor.instances;
4、driver调优(作用不大):spark.driver.cores=xxx;spark.driver.memory=xxx;
5、并行度调优:保证核数是task数的2~3倍或以上,重复利用资源

6、结束语

不是意味着把MR放弃,MR依然是离线计算首选;
耗时长的SQL可以用set hive.execution.engine=spark来解决,鼓励尝试;
切换引擎后注意观察函数是否支持、执行结果是否成功、资源划分是否合理。
祝大家顺利,have a good day!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值