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

文章目录

    • Hadoop 安装
    • Hive 安装
    • Hive On Spark 与 Spark On Hive 区别
      • Hive On Spark
      • Spark On Hive
    • 部署 Hive On Spark
      • 查询 Hive 对应的 Spark 版本号
      • 下载 Spark
      • 解压 Spark
      • 配置环境变量
      • 指定 Hadoop 路径
      • 在 Hive 配置 Spark 参数
      • 上传 Jar 包并更换引擎
    • 测试 Hive On Spark
    • 解决依赖冲突问题

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

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 源码。

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

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

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

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

下载 Spark

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

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

选择 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/confmv spark-env.sh.template spark-env.shvim spark-env.sh

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

export SPARK_DIST_CLASSPATH=$(hadoop classpath)

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

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

在 Hive 配置 Spark 参数

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

cd $HIVE_HOME/confvim 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-jarscd $SPARK_HOMEhadoop fs -put ./jars/* /spark-jars

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

cd $HIVE_HOME/confvim 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');

在这里插入图片描述

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

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

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

在这里插入图片描述

查询结果:

select * from books;

在这里插入图片描述

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

解决依赖冲突问题

当我们在使用 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.FileInputFormatat 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 终端就可以生效啦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/125254.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

thinkphp链接mqtt服务器,然后在订阅下发布消息

cmd打开项目根目录&#xff0c;安装插件&#xff0c;执行下面的命令 composer require php-mqtt/client执行完成之后会在vendor 目录下有php-mqtt 文件 然后在你的 extend文件下 新建mqtt文件 在文件中新建 Mqtt.php 下面是代码 <?php /** S: * Name: 控制器: * Autho…

安防视频汇聚平台EasyCVR调用播放接口的详细流程

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云存储…

用 docker 创建 jmeter 容器, 实现性能测试

我们都知道&#xff0c;jmeter 可以做接口测试&#xff0c;也可以用于性能测试&#xff0c;现在企业中性能测试也大多使用 jmeter。docker 是最近这些年流行起来的容器部署工具&#xff0c;可以创建一个容器&#xff0c;然后把项目放到容器中&#xff0c;就可以构建出一个独立的…

excel技巧

excel技巧 &#x1f353;选中&#x1f353;填充&#x1f353;日期&#x1f352;&#x1f352; 日期快捷方式&#x1f352;&#x1f352; 日期计算&#x1f352;&#x1f352;时间相减 &#x1f353;求和&#x1f353;去除小数点&#x1f353;美化表格&#x1f352;&#x1f352…

Spring Cloud 之RabbitMQ的学习【详细】

服务通信 分布式系统通信两种方式&#xff1a; 直接远程调用&#xff08;同步&#xff09;借助第三方间接通信&#xff08;异步&#xff09; 同步通讯的问题 Feign就属于同步通讯。存在的如下问题 耦合度高&#xff0c;每次添加新的模块就要修改原有模块的代码性能下降&am…

[论文阅读]Voxel R-CNN——迈向高性能基于体素的3D目标检测

Voxel R-CNN Voxel R-CNN: Towards High Performance Voxel-based 3D Object Detection 迈向高性能基于体素的3D目标检测 论文网址&#xff1a;Voxel R-CNN 论文代码&#xff1a;Voxel R-CNN 简读论文 该论文提出了 Voxel R-CNN&#xff0c;这是一种基于体素的高性能 3D 对象…

Go 语言gin框架的web

节省时间与精力&#xff0c;更高效地打造稳定可靠的Web项目&#xff1a;基于Go语言和Gin框架的完善Web项目骨架。无需从零开始&#xff0c;直接利用这个骨架&#xff0c;快速搭建一个功能齐全、性能优异的Web应用。充分发挥Go语言和Gin框架的优势&#xff0c;轻松处理高并发、大…

Qt实现卡牌对对碰游戏

效果 闲来无事&#xff0c;实现一个对对碰游戏&#xff0c;卡牌样式是火影动漫。 先上效果&#xff1a; 卡牌对对碰_火影主题 玩法 启动游戏&#xff0c;进入第一关卡&#xff0c;所有卡牌都为未翻开状态&#xff0c;即背面朝上&#xff1b;点击卡牌&#xff0c;则将卡牌翻开…

jenkins工具系列 —— 删除Jenkins JOB后清理workspace

文章目录 问题现象分析解决思路脚本实现问题现象分析 Jenkins使用过程中,占用空间最大的两个位置: 1 、workspace: 工作空间,可以随便删除,删除后再次构建时间可能会比较长,因为要重新获取一些资源。 2 、job: 存放的是项目的配置、构建结果、日志等。不建议手动删除,…

双亲委派模式

双亲委派模型 双亲委派的工作过程 一个类加载器收到类加载的请求时&#xff0c;它不会马上加载该类&#xff0c;而是把这个请求委托给父加载器去完成&#xff0c;每一个层次的类加载器都是如此&#xff0c;因此所有的类加载请求都必须先通过启动类加载器尝试加载&#xff0c;只…

【快报】正在把教学视频搬运到B站和油管

hello 大家好&#xff0c;我是老戴。 熟悉我的同学知道&#xff0c;我从14年开始录制GIS相关的教学视频&#xff0c;之前是放到优酷上给大家下载&#xff0c;后期发现很多人把视频弄下来淘宝上卖&#xff0c;然后我就把视频整体放到了我自己的网站上。 随着视频录制的数量越来…

HBuilderX实现安卓真机调试

1. 简介 HBuilderX 简称 HX&#xff0c;HBuilder&#xff0c;H 是 HTML 的缩写&#xff0c;Builder 是建设者。是为前端开发者服务的通用 IDE&#xff0c;或者称为编辑器。与 vscode、sublime、webstorm 类似。 它可以开发普通 web 项目&#xff0c;也可以开发 DCloud 出品的 u…

nodejs+vue+python+php基于微信小程序的在线学习平台设计与实现-计算机毕业设计

困扰管理层的许多问题当中,在线学习也是不敢忽视的一块。但是管理好在线学习又面临很多麻烦需要解决,例如&#xff1a;如何在工作琐碎,记录繁多的情况下将在线学习的当前情况反应给课程问题管理员决策,等等。 流,开发一个在线学习平台小程序一方面的可能会更合乎时宜,另一方面来…

Java IDEA设置环境变量 以及代码获取

IDEA 设置环境变量 1.进入如图设置&#xff0c;一般的 java 程序和 spring Boot &#xff0c;还是tomcat 都可以从这里进入 2.可以在如下地方手动添加 3. tomcat 类 4.spring boot 类 代码获取指定值 假定我设置如下 代码则如下获取&#xff08;类均为JDK 自带类&…

代理模式代理模式

目录 1、使用场景 2、静态代理 3、动态代理 JDK动态代理 CGlib 动态代理实现 1、使用场景 使用代理模式主要有两个目的&#xff1a;一是保护目标对象&#xff0c;二是增强目标对象。 2、静态代理 NO.1 抽象接口&#xff1a;定义视频播放器接口Player public interface P…

http1,https,http2,http3总结

1.HTTP 当我们浏览网页时&#xff0c;地址栏中使用最多的多是https://开头的url&#xff0c;它与我们所学的http协议有什么区别&#xff1f; http协议又叫超文本传输协议&#xff0c;它是应用层中使用最多的协议&#xff0c; http与我们常说的socket有什么区别吗&#xff1f; …

怎么在电脑桌面上添加待办事项?

在电脑桌面上选择一款待办事项工具&#xff0c;可以高效率地督促各项任务的按时完成&#xff0c;大大地提高工作的效率&#xff0c;支持在电脑上安装待办事项的工具类型是比较多的&#xff0c;为更好的辅助日常办公&#xff0c;建议大家可以选择高效率辅助办公的电脑便签工具&a…

网络协议--TCP的未来和性能

24.1 引言 TCP已经在从1200 b/s的拨号SLIP链路到以太数据链路上运行了许多年。在80年代和90年代初期&#xff0c;以太网是运行TCP/IP最主要的数据链路方式。虽然TCP在比以太网速率高的环境&#xff08;如T2电话线、FDDI及千兆比网络&#xff09;中也能够正确运行&#xff0c;但…

高并发和存储之间的关系是什么?

文章目录 &#x1f50a;博主介绍&#x1f916;博主的简介&#x1f4e5;博主的目标 &#x1f964;本文内容&#x1f34a; 一、高并发对存储的压力&#x1f34a; 二、存储的性能和可扩展性 &#x1f4e2;总结 &#x1f50a;博主介绍 &#x1f4d5;我是廖志伟&#xff0c;一名Java…

[Unity+智谱AI开放平台]调用ChatGLM Tuobo模型驱动AI小姐姐数字人

1.简述 本篇文章主要介绍一下&#xff0c;在Unity端&#xff0c;集成智谱AI开放平台提供的chatglm模型api&#xff0c;实现AI聊天互动相关的功能。从智谱AI官方站点上看到&#xff0c;提供有chatglm turbo的公共模型服务&#xff0c;能够实现32K超长上下文&#xff0c;应用到我…