分享

Hive on Spark简介


问题导读

1.在Hive on Spark设计原则是什么?
2.Hive on Spark,hive,Spark都做了哪些修改?
3.在Hive on Spark下,表格建立本质是什么?






Hadoop由Doug Cutting根据Google论文编写,当下已成为大数据处理的主流平台。Doug于2008年Cloudera成立时离开雅虎,其后便一直担任Cloudera的首席架构师。同时,Doug也一直是Apache软件基金会主席,带领着Hadoop的发展。当下,Hadoop代表的已不仅仅是一个计算框架,而是一个庞大的生态圈,拥有大量的计算单元,而Spark加入这个大家庭则是这两年非常重要的一点。Spark拥有很多优势,其最大的两个特点就是简单和快。从Cloudera来看,Spark并不是Hadoop的取代,而是天然的结合,互为补充。在取代MapReduce的同时,与YARN、Impala等组件共存,带来很多功能上的增补,比如机器学习。Cloudera在Spark社区中一直非常积极,同时也是Spark最大的贡献者之一,拥有大量的资源和提交者。
在提到合作伙伴Intel时,苗凯翔将之称为“Hadoop的黄埔军校”,从09年开始研究Hadoop,Intel的起步非常早,从而有着非常深的积累。同时,着眼中国区的Cloudera,其中很多研究者来自Intel,而Intel在Spark社区贡献上也排行第三。因此,站在大数据实时计算的角度,由Cloudera和Intel一起举办的Spark Meetup也非常有意义。
陈建忠:Advanced Analytics with Spark
1.jpg
Cloudera高级解决方案架构师 陈建忠
在陈建忠开场两个简单的调查中我们发现,与会者中几乎所有人都尝试过Spark,其中更有一些用户已经投入生产环境使用,而SQL on Spark则成为大家最期望了解的方面。为此,陈建忠从Hive on Spark和如何使用Spark加速业务两个方面进行了讲解。
在演讲开始,陈建忠首先介绍了Cloudera对Spark的贡献。陈建忠表示,Spark在2013年成为ASF的顶级项目,而Cloudera在2014年初已经开始拥抱Spark,将其加入CDH 5.0发行版。而在生态系统上,Cloudera主要和Intel合作参与了以下几个方向的建设:Hive on Spark,一些代码和优化基本已经在Hive上实现;Pig on Spark,主要服务于Hadoop生态圈一些已有的Pig用户;Spark over YARN;Spark Streaming可靠性,主要针对一些数据丢失和驱动出错等问题;通用的Spark优化,比如Shuffle低效性等。限于篇幅问题,下面重点探讨一下Hive on Spark。
Hive on Spark
在许多已有Hadoop企业中,Hive担当着非常重要的角色,为Hadoop注入了使用SQL的能力,已经成为SQL on Hadoop上的事实标准。基于这些原因,Cloudera选择继续拥抱Hive,主要的精力则放在性能和最小化特性差异上,造福大量期望利用Spark引擎高效性的Hive重度用户。
Hive上的修改
在Hive on Spark设计原则上,工程师主要尊重以下几点:
首先,尽量少的改动Hive已有代码;
其次,最大化代码重用;
再次,最小化feature的改动,带来更多的兼容性,也减少了后续的维护开销。

2.jpg
如上图所示,在类层次结构中并无太大的变动,通过加入SparkCompiler、SparkTask和SparkWork形成完整的计算体系。
Work真正拥有包装的是MapReduce或者Spark Job,类似“select name,sum(value) as v from dec group by name order by v;”这样的查询,在之前我们需要两个MR作业,而现在一个Spark作业(一个Map作业和两个Reduce作业)就可以完成。
Spark上的修改
Spark Client:首先,负责与Spark cluster通信;其次,需要支持多种部署类型,local(单节点模式)、local-cluster(伪分布式)、standalone(Spark自己负责resource allocation)、yarn-cluster(Spark Driver会在YARN的Container中运行)以及yarn-client(Spark Driver以客户端的方式运行);最后,还会做作业提交、监视、错误报告、统计、度量、计数等任务。
Spark Context,需要注意的是它不仅是一个广义上的Driver,而且是非常重量级的组件,很多计算都在其中进行。同时需要注意的是,Spark Context是thread-unsafe的,因此同一个JVM中不能建立两个Spark Context;最后,Spark Context设计之初就是建立在单用户应用程序之上,因此不能有多session存在。因此,这里引入了Remote Spark Context,详见下图。Remote Spark Context会在独立的JVM进程中运行,Hive Server 2的进程中可以运行多个用户的Session,每一个Session含有一个Remote Spark Context的客户端,此客户端已RPC方式向Remote Spark Context发送命令。这样就有效解决了在同一个Hive Server 2中不能运行多个Spark Context的问题。
3.jpg

Spark中的数据处理逻辑
在Hive on Spark下,表格的建立即是生成一个HadoopRDD。同时,Map端的数据处理task即被转换为Spark中的函数。而对于shuffle来说,一些转换则可以调用Spark中的操作,比如groupByKey、sortByKey等。最后,提供了Reduce端处理的一些函数。
4.jpg
Hive on Spark当前状态
目前,基本上Hive的所有功能已被实现,会在Hive 1.1被添加到Trunk里。同时,第一轮优化已经结束,其中包括Map join、SMB、Split generation and grouping、CBO、vectorization等。当然,未来还会有更多优化被添加。
总结
陈建忠表示,在现实世界中,有很多业务涉及到大数据的处理,比如检测信用卡欺诈、智能商品推荐、金融风险评估、基因分析等。而在所有场景中,数据科学家往往面对众多挑战:随着数据体积、数据源的增多,传统R等工具已经无法满足需求;其次,数据科学家的使用场景通常都会碰到迭代操作,然而传统基于磁盘的工具(比如MapReduce)很显然无法满足快速处理的需求;最后,还有实时处理的需求,传统的数据挖掘工具着重于模型的建立,而当下模型需要部署在生产环境中进行实时数据分析,且需要对模型进行实时调整。演讲的最后,陈建忠通过VaR(Value at Risk,风险价值或者风险收益)用例简单地演示了如何通过Spark加速业务的发展。

已有(6)人评论

跳转到指定楼层
feng01301218 发表于 2015-4-2 22:29:29
回复

使用道具 举报

mingguiboy 发表于 2015-4-15 14:32:38
回复

使用道具 举报

雷夫23 发表于 2016-8-8 11:24:11
好棒的文章
回复

使用道具 举报

玉溪 发表于 2016-9-18 02:08:27
spark-sql 支持分区表吗,我建了分区表 但是插入数据的时候都自动分成了part-0001 。。。。。
回复

使用道具 举报

kinglee_zs 发表于 2018-4-28 21:09:49
Remote Spark Context会在独立的JVM进程中运行,Hive Server 2的进程中可以运行多个用户的Session,每一个Session含有一个Remote Spark Context的客户端,此客户端已RPC方式向Remote Spark Context发送命令。这样就有效解决了在同一个Hive Server 2中不能运行多个Spark Context的问题。

我就是需要这个啊,同一个hs2中运行多个spark
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条