百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

大数据之hive on spark vs hive on mr 性能对比

bigegpt 2024-09-14 00:14 9 浏览

本文主要是针对Hive 基于Spark 和MapReduce 驱动引擎,进行一些测试对比验证,其目的是让初步接触大数据批量处理的朋友有一个初步的直观认识。

测试环境:

  • 服务器架构配置:
  • 数据素材:

结构化数据,16个字段,总计108469690(约1亿800万)

  • 节点部署详情

效率对比

1. select count(1 ) from t_sta_day_basic_2018_10_11;

小结:

hive on spark:执行 第一次查询结果时需要初始化环境和分配资源,因此查询速度较慢 78 s, 第二次查询时 46 s

hive on mr : 执行时间87 s,接近前者2倍。

2. insert overwrite local directory "/tmp/out" select ddate,channelid,modelid,version,orderno,scheduleid,spacecode,materialid,regionid,cityid,ip,count(distinct mac) from t_sta_day_basic_2018_10_11 group by ddate,channelid,modelid,version,orderno,scheduleid,spacecode,materialid,regionid,cityid,ip;

小结:

hive on spark:执行时间是80 s,

hive on mr : 执行时间 510 s,对于mr 来说,count(distinct mac)极易引起数据倾斜引起内存溢出,但是相比于直接group by mac 来说其效率(519 s)稍高些,但是相比于hive on spark 执行效率却慢了很多

3.insert overwrite local directory "/tmp/out" select ddate,channelid,modelid,version,orderno,scheduleid,spacecode,materialid,regionid,cityid,count(distinct mac,ip) from t_sta_day_basic_2018_10_11 group by ddate,channelid,modelid,version,orderno,scheduleid,spacecode,materialid,regionid,cityid;

小结:

hive on spark:执行时间是136 s,

hive on mr : 执行时间 988 s,对于mr 来说,count(distinct mac,ip)更加容易引起数据倾斜引起内存溢出


Hive on Spark 配置

  1. 准备工作

在配置hive on spark 之初的准备工作就是确认hive / spark /hadoop 的版本兼容问题,请参考官网:Hive on Spark: Getting Started

https://cwiki.apache.org/confluence/display/Hive/Hive+on+Spark%3A+Getting+Started

关于hive on spark 配置 其实就是将hive 执行引擎换为spark 即可,如下图,hive 的执行引擎默认是mr,我们可以人为配置为spark或是tez,

2.hive on spark 环境搭建

hive 、spark、 hadoop 版本确认好以后即可开始具体配置,例如选择hive 2.3.4、spark 2.0.2 、hadoop 2.75 。需要注意的是spark 的安装需要自己下载源码,然后自己编译安装(主要是不要依赖spark本身所带的hive 包),之前文章已经讲过如何搭建spark 和 hadoop集群,此处讲一下如何自己编译spark 包,并且搭建集群

  • 官网下载spark 2.0.2源码
  • 编译

将下载的spark 2.0.2 源码上传到服务器并且解压

执行编译脚本 ./make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoop-provided,hadoop-2.7,parquet-provided"

其中,-Pyarn,hadoop-provided,hadoop-2.7,parquet-provided 表示将对应版本的yarn 、hadoop 打包在内,由于我们不需要带有hive 的包,因此不能加上 -Phive

编译成功后会在根目录生成 spark-2.2.0-bin-hadoop2.7-without-hive.tgz 包

将编译好的 spark-2.0.2-bin-hadoop2.7-without-hive.tgz 拷贝到/opt下,解压并且重名名为 spark2.0_noHive

mv spark-2.0.2-bin-hadoop2.7-without-hive spark2.0_noHive

设置环境变量 export SPARK_HOME=/opt/spark2.0_noHive

PS:如果想了解更多的 依赖包版本关系,亲参考源码包下的pom 文件

  • 配置hive
  • 添加jar包

spark 官网指出,hive 2.2 前兼容spark 1.6 及以下版本,因此只需将编译好的spark-assembly jar 包拷贝到 ${HIVE_HOME}/lib 目录下即可,

对于2.2 以后的版本,兼容spark2.0 以上版本没有assembly jar,因此需要将${SPARK_HOME}/jars 下scala-library、spark-core、spark-network-common 拷贝到${HIVE_HOME}/lib

  • 配置hive-site.xml,关于hive 的详细配置例如元数据库的安装配置等,请参考上篇文章。
 <property>
 <name>javax.jdo.option.ConnectionDriverName</name>
 <value>com.mysql.jdbc.Driver</value>
 </property>
<property>
 <name>javax.jdo.option.ConnectionURL</name>
 <value>jdbc:mysql://master:3306/hive22?createDatabaseIfNotExist=true&characterEncoding=UTF-8</value>
 </property>
<property>
 <name>javax.jdo.option.ConnectionUserName</name>
 <value>hive</value>
 </property>
 <property>
 <name>javax.jdo.option.ConnectionPassword</name>
 <value>hadoop</value>
 </property>
<property>
 <name>hive.execution.engine</name>
 <value>spark</value>
 <description>
 </property>
<property>
 <name>spark.home</name>
 <value>/opt/spark2.0_noHive</value>
 </property>
 <property>
 <name>spark.master</name>
 <!--<value>spark://master:7077</value> -->
 <value>yarn-client</value>
 </property>
 <property>
 <name>spark.yarn.jars</name>
 <value>hdfs://master:9000/opt/spark/spark-jars/*</value>
 </property>
<property>
 <name>spark.executor.cores</name>
 <value>2</value>
 </property>
 <property>
 <name>spark.default.parallelism</name>
 <value>24</value>
 </property>
 <property>
 <name>spark.executor.memory</name>
 <value>2048m</value>
 </property>
 <property>
 <name>spark.serializer</name>
 <value>org.apache.spark.serializer.KryoSerializer</value>
 </property>
  • 上传spark.yarn.jar

对于hive 2.2 以前版本,将spark-assembly.jar 上传到hd 目录下,对于hive 2.2 以后版本将${SPARK_HOME}/jars 下jar 包上传到hdfs 目录,并且在hive-site.xml 文件中配置。

  • 配置spark

修改 ${SPARK_HOME}/conf/spark-env.sh ,添加相关的配置属性

export SCALA_HOME=/opt/scala-2.11.8

export JAVA_HOME=/usr/local/java

export SPARK_MASTER_IP=master

export SPARK_WORKER_MEMORY=6g

export HADOOP_CONF_DIR=/opt/hadoop/hadoop-2.7.5/etc/hadoop

export YARN_CONF_DIR=/opt/hadoop/hadoop-2.7.5/etc/hadoop

export SPARK_DIST_CLASSPATH=$(/opt/hadoop/hadoop-2.7.5/bin/hadoop classpath)

注意:配置SPARK_DIST_CLASSPATH 尤为重要,即将hadoop 的环境当做spark的classpath

修改${SPARK_HOME}/conf/slaves文件,将内容替换为

slave1

slave2

注意:前提是在每台机器的hosts文件中添加对应的host,如下

vim /etc/hosts

  • 配置spark_noHive 集群

截止目前所有的配置都是在master 机器上进行的,现将已经配置好的spark 分发到两台slave 机器中,然后回spark集群的master 机器启动spark 集群

cd ${SPARK_HOME}/

./sbin/start-all.sh

以防出错,检查两台slave 的启动情况。从web 端通过spark web UI查看整个saprk集群的部署情况,确认无误后表示spark 集群启动成功。

  • 验证hive on spark 安装情况

cd ${HIVE_HOME}/bin

初始化元数据库./schematool -initSchema -dbType mysql

执行成功后 启动hive

至此,测试安装成功。


3.hive on spark 过程中遇到的问题

  • 版本不兼容和重新编译不带hive 的spark包,上文中提到
  • org.apache.hadoop.ipc.RemoteException: User: root is not allowed to impersonate root

通过jdbc 连接hive时hdfs 系统下的root 账号不能执行其他group 下的账号权限,需要在每个hdfs 节点下修改core-site.xml 配置文件,添加如下属性

 <property>
 <name>hadoop.proxyuser.root.hosts</name>
 <value>*</value>
 </property>
 <property>
 <name>hadoop.proxyuser.root.groups</name>
 <value>*</value>
 </property>

本文只是简单介绍了hive on spark 基础,给读者有一个大概的认识。后续将分享下源码解读,如有意见或是建议请帮忙指出,共勉。

相关推荐

或者这些Joplin插件也可以帮助你的笔记应用再一次强大

写在前面距离上次分享《搭建私有全平台多端同步笔记,群晖NAS自建JoplinServer服务》已过去一段时间,大家是否开始使用起来了呢?如果你和我一样已经使用过Joplin有一段时间了,那或许你也会...

Three.JS教程4 threejs中的辅助类

一、辅助类简介Three.js提供了一些辅助类(Helpers)以帮助我们更容易地调试、可视化场景中的元素。ArrowHelepr:创建箭头辅助器;AxisHelper:创建坐标轴辅助器;BoxH...

第2章 还记得点、线、面吗(二)(第二章还能敲钟吗)

glbgltf模型(webvrmodel)-gltf模型下载定制,glb模型下载定制,三维项目电商网站在线三维展示,usdz格式,vr模型网,网页VR模型下载,三维模型下载,webgl网页模型下载我...

如何检查Linux系统硬件信息?从CPU到显卡,一网打尽!

你可能会问:“我为什么要关心硬件信息?”答案很简单:硬件是Linux系统的根基,了解它可以帮你解决很多实际问题。比如:性能调优:知道CPU核心数和内存大小,才能更好地调整程序运行参数。故障排查:系统卡...

SpriteJS:图形库造轮子的那些事儿

从2017年到2020年,我花了大约4年的时间,从零到一,实现了一个可切换WebGL和Canvas2D渲染的,跨平台支持浏览器、SSR、小程序,基于DOM结构和支持响应式的,高...

平时积累的FPGA知识点(6)(fpga经典应用100例)

平时在FPGA群聊等积累的FPGA知识点,第六期:1万兆网接口,发三十万包,会出现掉几包的情况,为什么?原因:没做时钟约束,万兆网接口的实现,本质上都是高速serdes,用IP的话,IP会自带约束。...

芯片逻辑调度框架设计 都需要那些那些软件工具

设计芯片逻辑调度框架通常需要使用以下软件工具:1.逻辑设计工具:例如Vivado、Quartus、SynopsysDesignCompiler等,用于设计和实现逻辑电路。2.仿真工具:例如Mo...

ZYNQ与DSP之间EMIF16通信(正点原子领航者zynq之fpga开发指南v3)

本文主要介绍说明XQ6657Z35-EVM高速数据处理评估板ZYNQ与DSP之间EMIF16通信的功能、使用步骤以及各个例程的运行效果。[基于TIKeyStone架构C6000系列TMS320C6...

好课推荐:从零开始大战FPGA(从零开始的冒险4399)

从零开始大战FPGA引子:本课程为“从零开始大战FPGA”系列课程的基础篇。课程通俗易懂、逻辑性强、示例丰富,课程中尤其强调在设计过程中对“时序”和“逻辑”的把控,以及硬件描述语言与硬件电路相对应的“...

业界第一个真正意义上开源100 Gbps NIC Corundum介绍

来源:内容由「网络交换FPGA」编译自「FCCM2020」,谢谢。FCCM2020在5月4日开始线上举行,对外免费。我们有幸聆听了其中一个有关100G开源NIC的介绍,我们对该文章进行了翻译,并对其中...

高层次综合:解锁FPGA广阔应用的最后一块拼图

我们为什么需要高层次综合高层次综合(High-levelSynthesis)简称HLS,指的是将高层次语言描述的逻辑结构,自动转换成低抽象级语言描述的电路模型的过程。所谓的高层次语言,包括C、C++...

Xilinx文档编号及其内容索引(部分)

Xilinx文档的数量非常多。即使全职从事FPGA相关工作,没有几年时间不可能对器件特性、应用、注意事项等等有较为全面的了解。本文记录了我自使用Xilinx系列FPGA以来或精读、或翻阅、或查询过的文...

Xilinx Vivado联合Modelsim软件仿真

引言:Xilinx公司Vivado开发软件自带仿真工具,可以实现一般性能的FPGA软件仿真测试,其测试执行效率以及性能都不如第三方专用仿真软件Modelsim强。本文我们介绍下如何进行Vivado20...

体育动画直播是怎么做出来的?从数据到虚拟赛场的科技魔法!

你是否见过这样的比赛直播?没有真实球员,却能看梅西带球突破?足球比赛变成动画版,但数据100%真实?电竞比赛用虚拟形象直播,选手操作实时同步?这就是体育动画直播——一种融合实时数据、游戏引擎和AI的...

Dialogue between CPC and political parties of neighboring countries held in Beijing

BEIJING,May26(Xinhua)--TheCommunistPartyofChina(CPC)inDialoguewithPoliticalPartiesof...