Hive On Spark 概述、安装配置、计算引擎更换、应用、异常解决

这篇具有很好参考价值的文章主要介绍了Hive On Spark 概述、安装配置、计算引擎更换、应用、异常解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言: 本篇文章在已经安装 Hadoop 3.3.4Hive 3.1.3 版本的基础上进行,与笔者版本不一致也没有关系,按照步骤来就行了。

如果你不想使用低版本的 Spark(例如:Spark 2.x 系列),请直接跳转到本文目录【重编译源码】。

Hadoop 安装

详情查看我的这篇博客:Hadoop 完全分布式搭建(超详细)

Hive 安装

详情查看我的这篇博客:Hive 搭建(将 MySQL 作为元数据库)

Hive On Spark 与 Spark On Hive 区别

Hive On Spark

在 Hive 中集成 Spark,Hive 既作为元数据存储,又负责解析 HQL 语句,只是将 Hive 的运行引擎更换为 Spark,由 Spark 负责运算工作,而不再是默认的 MR 引擎,但部署较为复杂。

Spark On Hive

Hive 只负责元数据存储,由 Spark 来解析与执行 SQL 语句,其中的 SQL 语法为 Spark SQL,且部署简单。

Spark on Hive 的优点在于它提供了更灵活的编程接口,适用于各种数据处理需求,但性能可能不如 Hive on Spark,特别是在处理复杂查询时。

部署 Hive On Spark

查询 Hive 对应的 Spark 版本号

每个 Hive 版本适配的 Spark 都不相同,使用的 Spark 版本必须与 Hive 源码中指定的版本一致,或者重新编译源码,更换成需要的版本。

我这里使用的 Hive 版本为 3.1.3,现在通过官方网站 —— Index of /hive 获取对应版本的 Hive 源码。

Hive On Spark 概述、安装配置、计算引擎更换、应用、异常解决,hive,spark,hadoop,数据仓库,大数据

下载完成后,解压缩,在主目录下找到 pom.xml 文件:

Hive On Spark 概述、安装配置、计算引擎更换、应用、异常解决,hive,spark,hadoop,数据仓库,大数据

直接通过浏览器打开该文件,搜索 spark.version 即可查询到对应的 Spark 版本。

Hive On Spark 概述、安装配置、计算引擎更换、应用、异常解决,hive,spark,hadoop,数据仓库,大数据

可以看到 Hive 3.1.3 对应的 Spark 版本为 2.3.0,如果你不想使用该版本,那么使用 IDEA 打开该项目,在该 pom.xml 文件中修改你需要的 Spark 版本,然后使用 maven 重新打包,重新安装 Hive 即可。

我这里就不在重新编译了,该 Spark 版本已经可以满足我的使用需求。

下载 Spark

在 Spark 官方网站直接下载 —— Index of /dist/spark

找到对应版本进行下载,这里需要注意选择纯净版的包下载,如下所示:

Hive On Spark 概述、安装配置、计算引擎更换、应用、异常解决,hive,spark,hadoop,数据仓库,大数据

选择 without-hadoop 没有集成 Hadoop 的 Spark 版本进行下载,这样 Spark 就会使用集群系统中安装的 Hadoop。

将下载好的包上传到集群中,下面开始安装部署 Spark。

注意,请将下列提到的路径替换为你自己实际的存储路径!!!不一定需要和我一样。

解压 Spark

tar -xvf spark-2.3.0-bin-without-hadoop.tgz -C /opt/module/

顺手改个名字

cd /opt/module
mv spark-2.3.0-bin-without-hadoop/ spark-2.3.0

配置环境变量

vim /etc/profile

文件末尾添加:

#SPAKR_HOME
export SPARK_HOME=/opt/module/spark-2.3.0
export PATH=$PATH:$SPARK_HOME/bin

刷新环境变量:source /etc/profile

指定 Hadoop 路径

因为我们的版本选择的纯净版,所以需要在 Spark 环境文件中指定已经安装的 Hadoop 路径。

cd $SPARK_HOME/conf

mv spark-env.sh.template spark-env.sh

vim spark-env.sh

在该文件末尾添加,指定 Hadoop 路径:

export SPARK_DIST_CLASSPATH=$(hadoop classpath)

添加完成之后,保存并退出。

其中 $(hadoop classpath) 的作用是获取 Hadoop 类路径的值 (需要提前配置 Hadoop 的环境变量,否则获取不到) ,我们可以直接打印看看它存储的内容:

Hive On Spark 概述、安装配置、计算引擎更换、应用、异常解决,hive,spark,hadoop,数据仓库,大数据

在 Hive 配置 Spark 参数

进入 Hive 的 conf 目录中,创建 Spark 配置文件,指定相关参数。

cd $HIVE_HOME/conf

vim spark-default.conf

添加如下配置内容:

# 指定提交到 yarn 运行
spark.master                             yarn
# 开启日志并存储到 HDFS 上
spark.eventLog.enabled                   true
spark.eventLog.dir                       hdfs://hadoop120:8020/spark-logDir
# 指定每个执行器的内存
spark.executor.memory                    1g
# 指定每个调度器的内存
spark.driver.memory					     1g

配置文件创建完成后,在 HDFS 上创建 Spark 的日志存储目录。

hadoop fs -mkdir /spark-logDir

上传 Jar 包并更换引擎

因为只在一台机器上安装了 Hive 和 Spark,所以当我们将任务提交到 Yarn 上进行调度时,可能会将该任务分配到其它节点,这就会导致任务无法正常运行,所以我们需要将 Spark 中的所有 Jar 包到 HDFS 上,并告知 Hive 其存储的位置。

上传文件

hadoop fs -mkdir /spark-jars

cd $SPARK_HOME

hadoop fs -put ./jars/* /spark-jars

在 Hive 的配置文件中指定 Spark jar 包的存放位置:

cd $HIVE_HOME/conf

vim hive-site.xml

在其中添加下列三项配置:

<!--Spark依赖位置-->
<property>
    <name>spark.yarn.jars</name>
    <value>hdfs://hadoop120:8020/spark-jars/*</value>
</property>
  
<!--Hive执行引擎-->
<property>
    <name>hive.execution.engine</name>
    <value>spark</value>
</property>

<!--提交任务超时时间,单位ms-->
<property>
    <name>hive.spark.client.connect.timeout</name>
    <value>5000</value>
</property>

配置项添加完成后,我们就配置好了 Hive On Spark,下面对其进行测试。

测试 Hive On Spark

进入 Hive 中创建测试表:

drop table if exists books;
create table books(id int,book_name string);

写入测试数据:

insert into books values (1,'bigdata');
insert into books values (2,'hive');
insert into books values (3,'spark');

Hive On Spark 概述、安装配置、计算引擎更换、应用、异常解决,hive,spark,hadoop,数据仓库,大数据

注意,每次打开终端的首次 MR 操作会消耗比较多的时间,要去与 Yarn 建立连接、分配资源等,大概 30s1m 左右。

程序运行时,可以访问其给出的 WEB URL 地址(http://hadoop120:45582 不固定),访问后如下所示:

Hive On Spark 概述、安装配置、计算引擎更换、应用、异常解决,hive,spark,hadoop,数据仓库,大数据

可以看到运行速度还是嘎嘎快的(真是受够了 MR!):

Hive On Spark 概述、安装配置、计算引擎更换、应用、异常解决,hive,spark,hadoop,数据仓库,大数据

查询结果:

select * from books;

Hive On Spark 概述、安装配置、计算引擎更换、应用、异常解决,hive,spark,hadoop,数据仓库,大数据

数据插入完成,测试成功。

Yarn 资源分配设置

当我们在 Hive On Spark 模式下同时启用多个 Hive 客户端进行操作时,会发现,后启动的多个 Hive 执行任务时(可能)会卡住,如下所示:

Hive On Spark 概述、安装配置、计算引擎更换、应用、异常解决,hive,spark,hadoop,数据仓库,大数据

进入历史服务器,查看该任务的执行详情,会发现如下提示:

Hive On Spark 概述、安装配置、计算引擎更换、应用、异常解决,hive,spark,hadoop,数据仓库,大数据

提示任务已经添加但是未激活,原因是 AM 资源溢出。

Yarn 默认使用的是容量调度器 Capacity Scheduler(队列),该队列的总容量默认为 Yarn 总资源的 %101024的倍数),当前我的 Yarn 集群环境分配的总资源为 18G,所以这里队列的最大容量为 2048MB,也就是 2G

我启动第一个 Hive 客户端运行程序后,Yarn 成功的为其分配了 AM 资源,当我又启动了其它的 Hive 客户端运行程序时,就会导致 AM 资源分配失败,因为两个 AM 的总资源相加已经达 3G 左右,所以会导致任务卡顿或失败。

解决方法:提高 Yarn 为队列分配的总资源,修改 Hadoop 配置文件目录下的 capacity-scheduler.xml 文件,调整资源分配比例,默认为 0.1,对学习环境不太友好,建议调整为 0.8

cd $HADOOP_HOME/etc/hadoop

vim capacity-scheduler.xml
Hive On Spark 概述、安装配置、计算引擎更换、应用、异常解决,hive,spark,hadoop,数据仓库,大数据

修改完成后,注意将该文件同步到集群中的其它机器,然后重启 Yarn 即可。

解决依赖冲突问题

当我们在使用 Hive On Spark 时,可能会发生如下依赖冲突问题:

Job failed with java.lang.IllegalAccessError: tried to access method com.google.common.base.Stopwatch.<init>()V from class org.apache.hadoop.mapreduce.lib.input.FileInputFormat
	at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus(FileInputFormat.java:262)
	at org.apache.hadoop.hive.shims.Hadoop23Shims$1.listStatus(Hadoop23Shims.java:134)
	at org.apache.hadoop.mapreduce.lib.input.CombineFileInputFormat.getSplits(CombineFileInputFormat.java:217)
	at org.apache.hadoop.mapred.lib.CombineFileInputFormat.getSplits(CombineFileInputFormat.java:75)
	at org.apache.hadoop.hive.shims.HadoopShimsSecure$CombineFileInputFormatShim.getSplits(HadoopShimsSecure.java:321)
	at org.apache.hadoop.hive.ql.io.CombineHiveInputFormat.getCombineSplits(CombineHiveInputFormat.java:444)
	at org.apache.hadoop.hive.ql.io.CombineHiveInputFormat.getSplits(CombineHiveInputFormat.java:564)
	at org.apache.spark.rdd.HadoopRDD.getPartitions(HadoopRDD.scala:200)
	at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:253)
	at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:251)
	at scala.Option.getOrElse(Option.scala:121)
	at org.apache.spark.rdd.RDD.partitions(RDD.scala:251)
	at org.apache.spark.rdd.RDD.getNumPartitions(RDD.scala:267)
	at org.apache.spark.api.java.JavaRDDLike$class.getNumPartitions(JavaRDDLike.scala:65)
	at org.apache.spark.api.java.AbstractJavaRDDLike.getNumPartitions(JavaRDDLike.scala:45)
	at org.apache.hadoop.hive.ql.exec.spark.SparkPlanGenerator.generateMapInput(SparkPlanGenerator.java:215)
	at org.apache.hadoop.hive.ql.exec.spark.SparkPlanGenerator.generateParentTran(SparkPlanGenerator.java:142)
	at org.apache.hadoop.hive.ql.exec.spark.SparkPlanGenerator.generate(SparkPlanGenerator.java:114)
	at org.apache.hadoop.hive.ql.exec.spark.RemoteHiveSparkClient$JobStatusJob.call(RemoteHiveSparkClient.java:359)
	at org.apache.hive.spark.client.RemoteDriver$JobWrapper.call(RemoteDriver.java:378)
	at org.apache.hive.spark.client.RemoteDriver$JobWrapper.call(RemoteDriver.java:343)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)

FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Spark job failed during runtime. Please check stacktrace for the root cause.

这是由于 Hive 中的 guava 包版本比较高,与 Spark 不太兼容,所以我们需要更换为低一点的版本,建议使用 guava-13.0.jar 版本。

Jar 包获取地址:Maven 仓库

# 备份 Hive 的高版本
cd $HIVE_HOME/lib
mv guava-19.0.jar guava-19.0.jar.bak

# 将低版本放入 Hive 与 Spark 中
cp guava-13.0.jar $HIVE_HOME/lib
cp guava-13.0.jar $SPARK_HOME/jars

# 还需上传到 HDFS 中存储 Spark Jars 的目录下
hadoop fs -put guava-13.0.jar /spark-jars

重新启动 Hive 终端就可以生效啦。

重编译源码

如果你不想使用 Hive 目前指定的 Spark 版本,想要更换更高或者更低的版本,则需要去修改 Hive 源码,手动指定其版本,然后重新进行打包,重新安装 Hive。

具体操作可以参考这篇博客:从源代码编译构建Hive3.1.3

如果你不想手动重新编译,可以使用下列已经编译好的 Hive 版本:

  • hive-3.1.3-with-spark-3.3.1.tar.gz

  • spark-3.3.1-bin-without-hadoop.tgz

Hive 版本为 3.1.3,重编译后支持 Spark 3.3.1 版本,与 Hadoop 3.3.4 系列兼容良好,亲测有效。

Hive On Spark 概述、安装配置、计算引擎更换、应用、异常解决,hive,spark,hadoop,数据仓库,大数据文章来源地址https://www.toymoban.com/news/detail-729084.html

到了这里,关于Hive On Spark 概述、安装配置、计算引擎更换、应用、异常解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spark On Hive配置测试及分布式SQL ThriftServer配置

    Spark本身是一个执行引擎,而没有管理metadate的能力,当我们在执行SQL的时候只能将SQL转化为RDD提交。而对于一些数据中的元数据Spark并不知道,而Spark能写SQL主要是通过DataFrame进行注册的。 这时候我们就可以借助Hive中的MetaStore进行元数据管理。也就是说把Hive中的metastore服务

    2024年01月21日
    浏览(46)
  • Hive312的计算引擎由MapReduce(默认)改为Spark(亲测有效)

    一、Hive引擎包括:默认MR、tez、spark 在低版本的hive中,只有两种计算引擎mr, tez 在高版本的hive中,有三种计算引擎mr, spark, tez 二、Hive on Spark和Spark on Hive的区别 Hive on Spark:Hive既存储元数据又负责SQL的解析,语法是HQL语法,执行引擎变成了Spark,Spark负责采用RDD执行。 Spark o

    2024年02月02日
    浏览(42)
  • 一百零六、Hive312的计算引擎由MapReduce(默认)改为Spark(亲测有效)

    一、Hive引擎包括:默认MR、tez、spark 在低版本的hive中,只有两种计算引擎mr, tez 在高版本的hive中,有三种计算引擎mr, spark, tez 二、Hive on Spark和Spark on Hive的区别 Hive on Spark:Hive既存储元数据又负责SQL的解析,语法是HQL语法,执行引擎变成了Spark,Spark负责采用RDD执行。 Spark o

    2024年02月05日
    浏览(46)
  • CDH-6.3.2从零到一的详细安装教程&hive on Spark性能测试教程

    注意:需要使用官网提供的jdk。 1.1 在hadoop101的/opt目录下创建module 1.2 上传oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm并安装 1.3 分发 注意:分发脚本在附录里面的分发脚本 集群ssh脚本在附录里面的编写集群ssh脚本 执行sshall脚本结果如下 注意:一定要用root用户操作如下步骤;先卸载

    2024年02月16日
    浏览(53)
  • hive 3.1.3 on spark 3.0.0 安装教程 (内附重新编译好的jar包)

    首先,如果想要在hive 3.1.3上使用spark 3.0.0,不可避免地要重新编译hive 如果只是配置了hive-site.xml和spark-defaults.conf,那么在插入测试的时候会报如下错误: FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Spark job failed during runtime. Please check stacktrace for the

    2024年01月21日
    浏览(41)
  • 了解hive on spark和spark on hive

            大数据刚出来的时候,并不是很完善。发展的不是很快,尤其是在计算服务上,当时使用的是第一代mr计算引擎,相对来说计算并不是那么快。让大数据快速发展的是2009年伯克利大学诞生的spark,并在2013年成为Aparch的顶级开源项目。使大数据发展比较迅速、但是随着

    2024年02月14日
    浏览(67)
  • 【大数据技术】Hive on spark 与Spark on hive 的区别与联系

    【大数据技术】Hive on spark 与Spark on hive 的区别与联系 Hive on Spark Hive 既作为存储元数据又负责sql的解析优化,遵守HQL语法,执行引擎变成了spark,底层由spark负责RDD操作 Spark on Hive Hive只作为存储元数据,Spark负责sql的解析优化,遵守spark sql 语法,底层由spark负责RDD操作

    2024年02月15日
    浏览(64)
  • (超详细)Spark on Yarn安装配置

    1,前期准备 使用 root 用户完成相关配置,已安装配置Hadoop 及前置环境 2,spark上传解压到master服务器 3,修改环境变量  /etc/profile末尾添加下面代码 4,环境变量生效 5,运行spark-submit --version 显示如下 6,修改saprk-env.sh文件   在.../spark-3.1.1-bin-hadoop3.2/conf目录下,将下面两行

    2024年03月21日
    浏览(44)
  • Hive3第六章:更换引擎

    Hive3第一章:环境安装 Hive3第二章:简单交互 Hive3第三章:DML数据操作 Hive3第三章:DML数据操作(二) Hive3第四章:分区表和分桶表 Hive3第五章:函数 Hive3第六章:更换引擎 这个博客主要是作为数仓项目的一次补充,主要是更换hive引擎,传统的MR引擎在hive2之后就不推荐了,我们

    2024年02月11日
    浏览(32)
  • spark on hive

    注意:需要提前搭建好hive,并对hive进行配置。并将spark配置成为spark on yarn模式。 提前创建好启动日志存放路径 mkdir $HIVE_HOME/logStart 注意:其实还是hive的thirftserver服务,同时还需要启动spark集群 连接thirftserver服务后,就可以使用hive的元数据(hive在hdfs中的数据库和表),并且

    2024年02月07日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包