全面探究Hive on Spark

目标

  • 在CDH集群的查询client中(包括webUI如HUE)使用Spark作为Hive-SQL的执行引擎。
  • 调研版本、使用方法、性能与适用范围、是否有语法差异、对parquet/orc等的支持、调优、稳定性、对集群压力等问题。
  • 基于调研结果深入背后的原理,理解现象的原因

资料

官方文档CDH5.13.x
官方文档CDH5.13.x相关配置
Hive on Spark解析
Hive使用Spark on Yarn作为执行引擎
Hive,Hive on Spark和SparkSQL区别
Hive on spark的架构与解析SQL的过程
Spark SQL你不得不知道的那些事儿

Hive on Spark与Spark SQL

  • MR是基于进程并行处理的,hive里面很多代码并没有注意线程安全问题,但spark基于线程,导致Shark得用一套单独维护打了补丁的hive的分支,没有办法合并到hive。之后停止维护,形成了两套方案,一个是从头开始的Spark SQL,一个是Hive on Spark。


    Shark->SparkSQL与HiveOnSpark.png
  • Hive执行引擎(Execution Backend)有MR、Tez,以及后来的Spark,即将Hive的Compiler生成的执行计划提交给Spark集群上运行,这是Hive的功能。

    tez和spark都是通用有向无环图DAG引擎,他们比MapReduce更加灵活,性能也更优越,比如,在使用MapReduce时,中间作业的输出会被物化储存到hdfs上,tez和spark则不同,他们可以根据hive规划器的请求,把中间结果写在本地磁盘,甚至是内存中缓存,以避免额外的复制开销

  • 在Spark程序中通过hiveContext.sql()查询Hive是Spark SQL的特性,让Spark SQL除了从TextFile中读取数据外还能直接读取Hive表。SparkSQL主要包括两个概念

    1. SQLContext:封装Spark中的所有关系型功能。
    2. DataFrame:可转换为RDD进行操作。
  • 小结

    1. Hive / SparkSQL做的是解析SQL,是翻译层;Spark/MapReduce在执行引擎层。所以SparkSQL存在部分语法与Hive不兼容:https://blog.csdn.net/zhoudetiankong/article/details/50295709

    2. 讨论的两者对应的就是Hive->Spark与SparkSQL->Spark。前者只需要编写SQL,后者可以结合spark写代码获得更灵活的操作.

    3. 基于Spark的Hive能提供Hive的所有功能,因为它本身隶属于Hive项目。

    4. SQL只是Spark SQL的一个功能而已,利用Dataframe来结合rdd操作会更加强大。

实验

  1. 集群环境

2、安装相关配置
很多教程中会让在hive-site.xml中做相关配置,但CDH5.13环境下不会看到这些配置(理解为被写死了,版本也固定为1.6,官方说尚未适配高版本spark)

3、使用方法

set hive.execution.engine=spark;
set hive.execution.engine;  //确认设置成功

简单配置后即可照常执行HiveSQL

性能与调优

  1. 开启新的Hive on Spark会话后首次查询缓慢
  • 现象:新Hive on Spark会话启动后的首次查询可能延迟,在Spark on Yarn集群上
    要启动时间。
  • 原因:查询需要等待Yarn containers初始化
  • 解决方法:无。接下来的查询会快。

大部分基于mr的调优设置在Spark下依然有效,这里说明一些特殊情况。

2、写入语句
对10000行某表进行create table 与insert overwrite操作,spark耗时20+秒,mr耗时30+秒

  1. 对在分区字段上的map join进行剪枝优化
SET hive.spark.dynamic.partition.pruning.map.join.only=true;
  1. 使用更多的executor
    测试一个包含大量join的复杂语句,分别使用不同引擎与不同的如下设置
set spark.executor.instances=n; // 默认值n=2 
mr spark n=2 spark n=4 spark n=8
6m10s 5m18s 2m52s 2m26s

基于目前集群资源情况,该值最高取32。
可以看到Spark在数据量大、join复杂情况下优势降低。并且该参数值有边际递减效应。

集群相关参数

目前分析师共用user队列,单个应用申请CPU与内存资源不宜超过队列资源的1/3。
目前符合官网推荐规则,不建议手动修改

  • spark.driver.cores=1 //即am核数
  • spark.driver.memory=3.6Gb
  • yarn.nodemanager.resource.cpu-vcores=16
  • spark.executor.cores=4
  • yarn.nodemanager.resource.memory-mb=24Gb
  • spark.executor.memory=4G
  • spark.yarn.driver.memoryOverhead=409Mb

语法与功能

因为SQL解析引擎依然是Hive,语法与功能完全与Hive兼容,这里做了如下测试。

  1. 能够照常使用平台公共的临时UDF
    create temporary function check_mobile as 'com.tal.hive.udf.CheckMobileNo';
    select check_mobile('150');

  2. 能够正常查询Parquet与Orc格式的表

  3. insert overwrite与create table as等写入语句可以执行。

问题

目前版本的cdh/HUE/Hive存在一个bug:为了让用户不用每次等待Spark Session的启动(7.1中所述),Session会保留非常长的时间,即使HUE页面关闭。
为了保证资源及时释放,请务必在关闭客户端页面前、长时间不使用时将当前session的执行引擎切换回mr:

set hive.execution.engine=spark;
...//用户正常业务SQL
set hive.execution.engine=mr;// 务必注意`

相同现象问题与官方issue:https://stackoverflow.com/questions/46676323/spark-on-hive-progress-bar-stuck-at-10
大神Fayson的论述:https://cloud.tencent.com/developer/article/1176754

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354