Hive3 on Spark3配置

1、软件环境

1.1 大数据组件环境

大数据组件版本
Hive3.1.2
Sparkspark-3.0.0-bin-hadoop3.2

1.2 操作系统环境

OS版本
MacOSMonterey 12.1
Linux - CentOS7.6

2、大数据组件搭建

2.1 Hive环境搭建

1)Hive on Spark说明

Hive引擎包括:默认 mrsparkTez
Hive on Spark:Hive既作为存储元数据又负责SQL的解析优化,语法是HQL语法,执行引擎变成了Spark,Spark负责采用RDD执行。
Spark on Hive : Hive只作为存储元数据,Spark负责SQL解析优化,语法是Spark SQL语法,Spark负责采用RDD执行。

2)Hive on Spark配置

(1)兼容性说明

注意:官网下载的Hive3.1.2和Spark3.0.0默认是不兼容的。因为Hive3.1.2支持的Spark版本是2.4.5,所以需要我们重新编译Hive3.1.2版本。

编译步骤:官网下载Hive3.1.2源码,修改pom文件中引用的Spark版本为3.0.0,如果编译通过,直接打包获取jar包。如果报错,就根据提示,修改相关方法,直到不报错,打包获取jar包。

(2)在Hive所在节点部署Spark

如果之前已经部署了Spark,则该步骤可以跳过。

Spark官网下载jar包地址
http://spark.apache.org/downloads.html

上传并解压解压spark-3.0.0-bin-hadoop3.2.tgz
[postman@cdh01 software]$ tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/module/

[postman@cdh01 software]$ mv /opt/module/spark-3.0.0-bin-hadoop3.2 /opt/module/spark

(3)配置SPARK_HOME环境变量

[postman@cdh01 software]$ sudo vim /etc/profile.d/my_env.sh
添加如下内容。

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

使其生效:
source ${环境变量文件}

# For MacOS
[postman@cdh01 software]$ source ~/.zshrc

# For CentOS
[postman@cdh01 software]$ source /etc/profile.d/my_env.sh

(4)在hive中创建spark配置文件

[postman@cdh01 software]$ vim /opt/module/hive/conf/spark-defaults.conf

添加如下内容(在执行任务时,会根据如下参数执行)。

spark.master                             yarn
spark.eventLog.enabled                   true
spark.eventLog.dir                       hdfs://cdh01:8020/spark-history
spark.executor.memory                    1g
spark.driver.memory					     1g

在HDFS创建如下路径,用于存储历史日志。

[postman@cdh01 software]$ hadoop fs -mkdir /spark-history

(5)向HDFS上传Spark无 hadoop+hive 依赖的纯净jar包

  • 说明1:由于Spark3.0.0非纯净版默认支持的是hive2.3.7版本,直接使用会和安装的Hive3.1.2出现兼容性问题。所以采用Spark纯净版jar包,不包含hadoop和hive相关依赖,避免冲突。
  • 说明2:Hive任务最终由Spark来执行,Spark任务资源分配由Yarn来调度,该任务有可能被分配到集群的任何一个节点。所以需要将Spark的依赖上传到HDFS集群路径,这样集群中任何一个节点都能获取到。

上传并解压spark-3.0.0-bin-without-hadoop.tgz

[postman@cdh01 software]$ tar -zxf /opt/software/spark-3.0.0-bin-without-hadoop.tgz

上传Spark纯净版jar包到HDFS

[postman@cdh01 software]$ hadoop fs -mkdir -p /spark-jars
[postman@cdh01 software]$ hadoop fs -put spark-3.0.0-bin-without-hadoop/jars/* /spark-jars

(6)修改hive-site.xml文件

[postman@cdh01 ~]$ vim /opt/module/hive/conf/hive-site.xml

添加如下内容。

<!--Spark依赖位置(注意:端口号8020必须和namenode的端口号一致)-->
<property>
    <name>spark.yarn.jars</name>
    <value>hdfs://cdh01:8020/spark-jars/*</value>
</property>
  
<!--Hive执行引擎-->
<property>
    <name>hive.execution.engine</name>
    <value>spark</value>
</property>

7)修改 $SPARK_HOME/conf/spark-env.sh 文件

[postman@cdh01 ~]$ vim $SPARK_HOME/conf/spark-env.sh

添加如下内容。

export SPARK_DIST_CLASSPATH=$(hadoop classpath)

否则将报各类hadoop依赖包缺失的异常,如log4j、Hadoop的Configuration等包缺失。

2.2 Hive on Spark测试

(1)启动hive客户端

[postman@cdh01 hive]$ bin/hive

(2)创建一张测试表

hive (default)> create table user(id int, name string);

(3)通过insert测试效果

hive (default)> insert into table user values(1001,'zhangsan');

若结果如下,则说明配置成功。

hive (default)> insert into table user values(1001,'zhangsan');
Query ID = user_20231108165919_9908b655-96a7-4ccb-bb62-4dde28df9394
Total jobs = 1
Launching Job 1 out of 1
In order to change the average load for a reducer (in bytes):
  set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
  set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
  set mapreduce.job.reduces=<number>
Running with YARN Application = application_1699425455296_0013
Kill Command = /opt/module/hadoop-3.1.3/bin/yarn application -kill application_1699425455296_0013
Hive on Spark Session Web UI URL: http://192.168.1.1:60145

Query Hive on Spark job[0] stages: [0, 1]
Spark job[0] status = RUNNING
Job Progress Format
CurrentTime StageId_StageAttemptId: SucceededTasksCount(+RunningTasksCount-FailedTasksCount)/TotalTasksCount
2023-11-08 16:59:35,314 Stage-0_0: 0/1  Stage-1_0: 0/1
2023-11-08 16:59:37,331 Stage-0_0: 1/1 Finished Stage-1_0: 0/1
2023-11-08 16:59:39,363 Stage-0_0: 1/1 Finished Stage-1_0: 1/1 Finished
Spark job[0] finished successfully in 6.09 second(s)
Loading data to table default.user
OK
col1    col2
Time taken: 20.569 seconds
hive (default)> select * from user;
OK
user.id      user.name
1001         zhangsan

3、安装过程中的错误

3.1 M1芯片下 zstd 库文件错误

当执行 MR 类 sql 如 ”insert into table user values(1001,‘zhangsan’); “ 时,程序在 Console 上长时间卡住,但无错误日志输出,此时日志格式为:

hive (default)> insert into table student values(1,'abc');
Query ID = davidliu_20231108163620_eb8fabe4-b615-4d12-9dba-56ead5946a98
Total jobs = 1
Launching Job 1 out of 1
In order to change the average load for a reducer (in bytes):
  set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
  set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
  set mapreduce.job.reduces=<number>
Running with YARN Application = application_1699425455296_0010
Kill Command = /opt/module/hadoop-3.1.3/bin/yarn application -kill application_1699425455296_0010
Hive on Spark Session Web UI URL: http://192.168.154.240:56101

Query Hive on Spark job[0] stages: [0, 1]
Spark job[0] status = RUNNING
Job Progress Format
CurrentTime StageId_StageAttemptId: SucceededTasksCount(+RunningTasksCount-FailedTasksCount)/TotalTasksCount
2023-11-08 16:36:36,031 Stage-0_0: 0/1  Stage-1_0: 0/1
2023-11-08 16:36:39,089 Stage-0_0: 1/1 Finished Stage-1_0: 0(+1)/1
2023-11-08 16:36:42,148 Stage-0_0: 1/1 Finished Stage-1_0: 0(+1)/1
2023-11-08 16:36:45,201 Stage-0_0: 1/1 Finished Stage-1_0: 0(+1)/1
2023-11-08 16:36:48,270 Stage-0_0: 1/1 Finished Stage-1_0: 0(+1)/1
2023-11-08 16:36:51,331 Stage-0_0: 1/1 Finished Stage-1_0: 0(+1)/1
2023-11-08 16:36:54,385 Stage-0_0: 1/1 Finished Stage-1_0: 0(+1)/1
2023-11-08 16:36:57,435 Stage-0_0: 1/1 Finished Stage-1_0: 0(+1)/1
2023-11-08 16:37:00,478 Stage-0_0: 1/1 Finished Stage-1_0: 0(+1)/1
2023-11-08 16:37:03,517 Stage-0_0: 1/1 Finished Stage-1_0: 0(+1)/1
2023-11-08 16:37:06,572 Stage-0_0: 1/1 Finished Stage-1_0: 0(+1)/1
2023-11-08 16:37:09,606 Stage-0_0: 1/1 Finished Stage-1_0: 0(+1)/1
2023-11-08 16:37:12,653 Stage-0_0: 1/1 Finished Stage-1_0: 0(+1)/1
2023-11-08 16:37:15,700 Stage-0_0: 1/1 Finished Stage-1_0: 0(+1)/1
2023-11-08 16:37:18,737 Stage-0_0: 1/1 Finished Stage-1_0: 0(+1)/1
2023-11-08 16:37:21,790 Stage-0_0: 1/1 Finished Stage-1_0: 0(+1)/1
2023-11-08 16:37:24,832 Stage-0_0: 1/1 Finished Stage-1_0: 0(+1)/1
2023-11-08 16:37:27,874 Stage-0_0: 1/1 Finished Stage-1_0: 0(+1)/1
2023-11-08 16:37:30,914 Stage-0_0: 1/1 Finished Stage-1_0: 0(+1)/1
...
...
2023-11-08 16:37:33,974 Stage-0_0: 1/1 Finished Stage-1_0: 0(+1)/1
Interrupting... Be patient, this might take some time.
Press Ctrl+C again to kill JVM
Exiting the JVM

在“Ctrl + C”取消 sql 执行之前,去 yarn 控制页面查看了一下程序运行的结果:

在这里插入图片描述

在WebUI 页面上从某次失败 Application 的某次 MR 任务的执行 log 中,发现有如下错误:

Caused by: java.lang.UnsatisfiedLinkError: no zstd-jni in java.library.path
Unsupported OS/arch, cannot find /darwin/aarch64/libzstd-jni.dylib or load zstd-jni from system libraries. Please try building from source the jar or providing libzstd-jni in your system.
       at java.lang.Runtime.loadLibrary0(Runtime.java:1011)
       at java.lang.System.loadLibrary(System.java:1657)
       at com.github.luben.zstd.util.Native.load(Native.java:85)
       at com.github.luben.zstd.util.Native.load(Native.java:55)
       at com.github.luben.zstd.Zstd.<clinit>(Zstd.java:13)
       at com.github.luben.zstd.Zstd.decompressedSize(Zstd.java:579)

同时在 Hadoop ResourceManager 的运行日志中也发现了关于这块的报错日志。

从上述 log 中可以看出zstd 软件库包(作用:文件压缩)在 M1 芯片下 不能很高的被支持,结合 Hive On Spark 运行的库包路径查找比对,最终在上传到HDFS集群路径/spark-jars 下 Hive on Spark的依赖jar 包中发现了 zstd jar 包:

  • zstd-jni-1.4.4-3.jar

经查,此前已有开发者在 zstd 的github项目 下上报过这个问题,且有网友反馈在"1.4.9-1"版本中已修复了该问题。
于是在 mvnrepository 网站 上下载版本的 jar 包:

  • zstd-jni-1.4.9-1.jar

在这里插入图片描述
之后,将 HDFS 路径“hdfs://cdh01:8020/spark-jars/*”下的原始 “zstd-jni-1.4.4-3.jar” 删除,并替换为 “zstd-jni-1.4.9-1.jar” 后(如上图所示),经再度测试,该问题就解决了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: CDH(Cloudera's Distribution for Hadoop)是Cloudera公司针对Hadoop生态系统进行的一系列软件包和工具的集成,其中包括Hive on Spark配置Hive是一个建立在Hadoop之上的数据仓库基础架构,它提供了类似于SQL的查询语言HiveQL,方便用户使用SQL语言对存储在Hadoop中的大型数据集进行查询和分析。Spark是一个快速、通用的数据处理引擎,具有内存计算的特性,能在内存中高效地处理大规模数据。 在CDH中配置Hive on Spark需要进行以下步骤: 1. 确保CDH集群已经正确安装和配置,并且已经启动了Hive服务和Spark服务。 2. 在CDH管理界面中,选择Hive服务,然后点击“配置”选项卡。 3. 在配置页面中,找到“Hive 服务”下的“Ancillary Service Configuration”部分。在“Spark”部分中,填写正确的Spark主节点地址和端口号。 4. 点击“保存并重启”以应用配置更改。 5. 在CDH管理界面中,选择Spark服务,然后点击“配置”选项卡。 6. 在配置页面中,找到“Spark 特定”的部分。在“Spark 实例模式”中选择“Standalone”,表示将使用独立的Spark集群。 7. 在“Spark 主节点地址”中填写正确的Spark主节点的地址。 8. 点击“保存并重启”以应用配置更改。 9. 配置完成后,可以使用HiveQL语句在Hive中使用Spark进行查询和分析数据。在Hive命令行或Hue界面中,编写需要的查询语句并执行。 通过以上步骤,就可以在CDH上成功配置Hive on Spark。这样就可以同时利用HiveSpark的强大功能,实现对大规模数据的高效分析和处理。 ### 回答2: CDH配置Hive on Spark是指在CDH平台上配置使用Spark作为Hive的计算引擎。下面是具体的步骤: 1. 首先,确保已经在CDH平台上安装了HiveSpark组件。 2. 在Hive配置文件中,需要添加以下参数来启用Hive on Sparkhive.execution.engine = spark hive.spark.client.connect.timeout = 300s hive.spark.client.server.connect.timeout = 300s 3. 在Spark配置文件中,需要增加以下参数来支持Hive on Sparkspark.master = yarn-client spark.deploy.mode = client spark.submit.deployMode = client spark.yarn.queue = default spark.executor.instances = 10 spark.executor.memory = 4G spark.executor.cores = 2 spark.driver.memory = 4G 4. 然后,重启HiveSpark的服务。 5. 运行Hive脚本或者Hive命令时,可以在Hive中使用"hive.execution.engine=spark"设置为Spark引擎,或者在命令行中使用"--engine=spark"参数。 配置完成后,Hive会将相应的作业提交给Spark来执行,利用Spark的分布式计算能力加速Hive查询的执行速度。需要注意的是,配置Hive on Spark需要确保CDH平台中的HiveSpark是兼容的,并且调整Spark的资源配置以满足计算需求。 总之,通过CDH配置Hive on Spark可以充分发挥Spark的并行处理能力,提高Hive查询的执行效率和性能。 ### 回答3: CDH是一种大数据解决方案,用于配置Hive on Spark的步骤如下: 1. 首先,确保已安装CDH集群并启动了HiveSpark组件。如果还没有安装,请按照CDH文档进行安装和配置。 2. 检查HiveSpark的版本兼容性。Hive on Spark需要HiveSpark版本之间的兼容性,查看CDH文档以了解哪些版本适用于您的集群。 3. 在Hive配置文件中启用HiveSpark支持。打开Hive配置文件(hive-site.xml),设置hive.execution.engine为spark。 4. 配置Spark属性。在Spark配置文件(spark-defaults.conf)中,设置spark.master为yarn-client或yarn-cluster,这取决于您的CDH集群配置。还可以通过设置其他属性来优化Spark执行引擎的性能。 5. 启动Hive服务。重启Hive服务以使配置更改生效。您可以使用以下命令重新启动Hive服务: sudo service hive-server2 restart 6. 测试Hive on Spark。使用Hive命令行或其他Hive客户端,运行一些Hive查询并确认它们是否在Spark上执行。 配置Hive on Spark可以提供更好的性能和资源利用率。而且,使用Spark作为执行引擎还可以充分利用Spark提供的丰富的数据处理功能和API。通过使用CDH的Hive on Spark配置,您可以更好地处理和分析大规模的数据集。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值