sparkonhive(sparkonhive兼容hive)
本篇文章给大家谈谈sparkonhive,以及sparkonhive兼容hive对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、【数仓】对比spark-hive的两种分布式计算模式
- 2、hive on spark Timed out waiting for client connection. (state=08S01,code=1)
- 3、Hive on Spark
- 4、什么是Hive on Spark
- 5、Spark应用 | Hive On Spark性能调优
【数仓】对比spark-hive的两种分布式计算模式
最近在学习过程中发现SparkSQL、Hive on Spark、Spark on Hive是非常容易混淆的的概念。了解慧友三者的关系前,先要先明白几个概念。
相对于HIve on MapReduce,本质上来说,Hive on Spark是Hive把自己的引擎从MapReduce替换为更高效的SparkRDD。数据源是hive本身,当我们执行HQL时底层已经不再是将HQL转换为MapReduce任务,而是跑SparkRDD任务。
在hive-site-xml中把hive.execution.engine配置换成spark,在hive所在节点安装Spark并配置环境变量。外部远程登录或者hive命令行模式就会执行spark任务了。
即:Hive on Spark = HQL解析 + SparkRDD引擎
Spark on Hive是以Spark角度看Hive是数据源,在Spark中配置Hive,并获取Hive中的元数据,然后用SparkSQL操作hive表的数据并直接翻译成SparkRDD任务。Hive只哗滑是作为一个Spark的数据源。
bin/spark-sql、bin/spark-submit采用的是这种方式。提交任乱碧腊务的jar必须带着hive-site.xml的配置。
即:Spark on Hive = SparkSql解析 + SparkRDD引擎
Spark on Hive的模式更加丝滑,性能更好。
HIve on Spark的模式对大数据周边组件的支持兼容性更好。
hive on spark Timed out waiting for client connection. (state=08S01,code=1)
在beeline中使用hive on spark ,报错
由于培拿差hive程序的是通过yarn 去跑spark的,到Hadoop目录下查看resourcemanager日志
问配皮题分析:spark on hive本质是spark-shell.sh,spark-shell.sh会一直占敏腊用进程,这样后面提交的hive on spark任务就不需要重复上传spark依赖,加速任务执行速度
Hive on Spark
版本: 2.3.3
Hive on Spark为Hive提供了 Apache Spark 作为执行引擎。
set hive.execution.engine=spark;
Hive 1.1+以上版本提供Hive on Spark 。它在“ spark ”和“spark2”分支中仍处于发展阶段,并且定期合并到Hive的“主”分支中。
参见 HIVE-7292 及其子任务和相关问题。
Hive on Spark仅用特定版本的Spark进行测试,因此给定版本的Hive只能保证与Spark的特定版本兼容。Spark的其他版本可能与给定版本的Hive一起使用,但不能保证。以下是Hive版本及其相应兼容Spark版本的列表。
按照说明安装Spark:
YARN模式: http : //spark.apache.org/docs/latest/running-on-yarn.html
独立模式: https : //spark.apache.org/docs/latest/spark-standalone.html
Hive on Spark 默认支持 Spark on YARN 模式。
对于安装执行以下任务:
在Spark 2.0.0之前:
从Spark 2.0.0起:
由Spark 2.3.0起:
公平调度程序 是必需的,而不是 容量调度 程序 。这在YARN集群中公平地分配了相同份额的资源。
有关配置Hive和远程Spark驱动程序的其他属性,请参阅 Hive配置属性 的 Spark部分 。
设置执行程序的内存大小要比简单地设置为尽可能大要复杂。有几件事情需要考虑:
以下设置需要针对群集进行调整,这些设置也可能适用于在Spark之外的Hive上提交Spark作业:
在Spark on YARN 时, 我们通常建议将spark.executor.cores设置 为5,6或7,具体取决于可以被节点整除。例如,如果 yarn.nodemanager.resource.cpu-vcores是19,那么6是更好的选择(所有执行者只能拥有相同数量的内核,如果我们选择5,那么每个执行者只能获得3个内核;如果我们选择了7,那么只有2个执行者被使用,5个核心将被浪费)。如果是20,那么5是更好的选择(因为这样你会得到4个执行者,并且没有核心被浪费)。
对于 spark.executor.memory ,我们推荐计算 yarn.nodemanager.resource.memory-mb *(spark.executor.cores / yarn.nodemanager.resource.cpu-vcores), 然后拆分spark.executor.memory和。根据我们的实验,我们建议设置 为总内存的15-20%左右。 spark.yarn.executor.memoryOverhead``spark.yarn.executor.memoryOverhead
在决定每个执仔启行程序接姿嫌收多少内存之后,您需要决定将多少执行程序分配给查询。在GA版本中,将支持Spark动态执行程序分配。但是,对于这个测试版,只能使用静态资源分配。根据每个节点的物理内存的配置 spark.executor.memory 和 spark.yarn.executor.memoryOverhead ,你需要选择实例和组的数量 spark.executor.instances 。
现在是一个真实世界的例子 假设每个节点念册如具有12个虚拟内核的10个节点具有64GB的内存,例如, yarn.nodemanager.resource.cpu-vcores=12 。一个节点将被用作主节点,因此集群将有9个从节点。我们将配置 spark.executor.cores 为6.鉴于64GB的内存 yarn.nodemanager.resource.memory-mb 将为50GB。我们将确定每个执行程序的内存量如下:50GB *(6/12)= 25GB。我们将分配20% spark.yarn.executor.memoryOverhead ,或5120和80% spark.executor.memory ,或20GB。
在这个9节点集群上,每个主机都有两个执行者。因此,我们可以配置 spark.executor.instances 2到18之间的某个值。值为18将利用整个群集。
有关这些设置的详细信息,请参阅 HIVE-9153 。
有关其他属性,请参阅 配置页面的Spark部分 。
什么是Hive on Spark
hive默认计算引顷拦扰擎雀旦衡做是mapreduce,hive on spark是搞hive的开发者将计算引擎换成spark
对应的有spark sql,这是spark的开发者写的访问hive数据的sql引擎。两者开发者不同。
如果你搞hive的话,建议可以再了解下hive on tez,又叫Stinger
Spark应用 | Hive On Spark性能调优
我们迹岩公司yarn node节点的可用资源配置为:单台node节点可用资源数:核数33cores、内存110G。Hive on Spark任务的基础配置,主要配置对象包括:Executor和Driver内存,Executor配额,任务并行度。
配置参数为spark.executor.memory和spark.executor.cores。如果要最大化使用core,建议将core设置为4、5、6,且满足core的个数尽量可以整除yarn资源核数。yarn资源可用33核,建议spark.executor.cores设置为4,最多剩下一个core,如果设置为5,6都会有3个core剩余。 spark.executor.cores=4,由于总共有33个核,那么最大可以申请的executor数是8。总内存处以8,也即是 110/8,可以得到每个executor约13.75GB内存。
建议 spark.executor.memoryOverhead(spark的executor堆外内存)站总内大档存的 15%-20%。 那么最终 spark.executor.memoryOverhead=2.75 G 和spark.executor.memory=11 G
注意:默认情况下 spark.executor.memoryOverhead = max(executorMemory * 0.10, 384M),正常情况下不需要手动设置spark堆外内存,如果spark任务出现如下报错,可以手动提高堆外内存大小。
注意:默认情况下 spark.executor.memoryOverhead = max(executorMemory * 0.10, 384M),正常情况下不需要手动设置spark堆外内存,如果spark任务出现如下报错,可以手动提高堆外内存大小。
Container killed by YARN for exceeding memory limits. 16.9 GB of 16 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.
对于drvier的内存配置,主要有两个参数:
Driver的内存通常来说不设置,或者设置1G左右应该就够了。需要注意的是,如果需要使用collect算子将RDD的数据全部拉取到Driver端进行处理,那么必须确保Driver的内存足够大,否则会出现OOM内存溢出的问题。
配置参数为spark.executor.instances。该参数用于设置Spark作业总共要用多少个Executor进程来执行。
executor的数目是由每个节点运行的executor数目和集群的节点数共同决定。我们离线集群27个节点,那么离线spark任务使用的最大executor数就是 216(27*8). 最大数目可能比这个小点,因为driver也会消耗核数和内存。
该参数可以结合spark.executor.cores设置,默认单个spark任务最大不超过60cores,spark.executor.cores设置为4,则spark.executor.instances不超过15。
设置spark任务的并行度参数为spark.default.parallelism。spark任务每个stage的task个数=max(spark.default.parallelism, HDFS的block数量)。如滚州乱果不设置该参数,Spark自己根据底层HDFS的block数量来设置task的数量,默认是一个HDFS block对应一个task。spark默认spark.default.parallelism配置较少,如果task个数比较少的话,前面spark资源配置没有意义。官网建议:该参数设置为 num-executors * executor-cores的2~3倍较为合适。
当一个运行时间比较长的spark任务,如果分配给他多个Executor,可是却没有task分配给它,而此时有其他的yarn任务资源紧张,这就造成了很大的资源浪费和资源不合理的调度。动态资源调度就是为了解决这种场景,根据当前应用任务的负载情况,实时的增减Executor个数,从而实现动态分配资源,使整个Spark系统更加健康。
开启spark动态资源分配后,application会在task因没有足够资源被挂起的时候去动态申请资源。当任务挂起或等待spark.dynamicAllocation.schedulerBacklogTimeout(默认1s)的时间后,会开始动态资源分配;之后每隔spark.dynamicAllocation.sustainedSchedulerBacklogTimeout(默认1s)时间申请一次,直到申请到足够的资源。每次申请的资源量是指数增长的,即1,2,4,8等。
当application的executor空闲时间超过spark.dynamicAllocation.executorIdleTimeout(默认60s)后,就会被回收。
使用场景:同一个SQL语句需要同时更新多个分区,类似于如下SQL语句:
[img]关于sparkonhive和sparkonhive兼容hive的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。