郑州网站建设招标,网站的通栏怎么做,自建网站如何在百度上查到,电子商务网站如何设计配置Hive使用Spark执行引擎 Hive引擎概述兼容问题安装SparkSpark配置Hive配置HDFS上传Spark的jar包执行测试速度对比 Hive引擎
概述 在Hive中#xff0c;可以通过配置来指定使用不同的执行引擎。Hive执行引擎包括#xff1a;默认MR、tez、spark MapReduce引擎#xff1a; 早… 配置Hive使用Spark执行引擎 Hive引擎概述兼容问题安装SparkSpark配置Hive配置HDFS上传Spark的jar包执行测试速度对比 Hive引擎
概述 在Hive中可以通过配置来指定使用不同的执行引擎。Hive执行引擎包括默认MR、tez、spark MapReduce引擎 早期版本Hive使用MapReduce作为执行引擎。MapReduce是Hadoop的一种计算模型它通过将数据划分为小块并在集群上并行处理来完成计算任务。在MapReduce引擎中Hive将HiveQL查询转换为一系列Map和Reduce阶段的操作然后由Hadoop的MapReduce框架执行。 Tez引擎 从Hive 0.13版本开始引入了Tez作为新的执行引擎。Tez是Hadoop上的一种高性能的数据处理框架它提供了更低的延迟和更高的吞吐量。Tez引擎通过以更高效的方式执行HiveQL查询比传统的MapReduce引擎更快速。Tez引擎将HiveQL查询转换为一种称为有向无环图(Directed Acyclic Graph, DAG)的形式然后通过并行执行任务来实现查询。 Spark引擎 将Spark作为Hive的执行引擎以替代Hive默认的MapReduce执行引擎。通过将Spark作为执行引擎Hive能够利用Spark的并行处理能力和内存计算优势从而提高查询性能和处理速度。 Hive on SparkHive既作为存储元数据又负责SQL的解析优化语法是HQL语法 Spark on HiveHive只作为存储元数据Spark负责SQL解析优化语法是Spark SQL语法 使用Spark作为Hive的执行引擎可以带来以下好处
更快的执行速度Spark具有内存计算的能力可以在执行过程中缓存数据加快查询速度更高的交互性Spark支持迭代式查询和实时数据处理适用于需要更快响应时间的应用场景更好的资源管理Spark可以与其他Spark应用程序共享资源实现更好的资源管理和利用兼容问题 通常Hive与Spark间存在兼容性需处理该兼容问题 在Hive解压目录查看Hive支持的Spark版本 当前Hive版本使用的Spark版本为2.3.0 [rootnode01 hive]# ls lib/spark-*
lib/spark-core_2.11-2.3.0.jar lib/spark-launcher_2.11-2.3.0.jar lib/spark-network-shuffle_2.11-2.3.0.jar lib/spark-unsafe_2.11-2.3.0.jar
lib/spark-kvstore_2.11-2.3.0.jar lib/spark-network-common_2.11-2.3.0.jar lib/spark-tags_2.11-2.3.0.jar解决方案
1.下载与当前Hive版本使用的Spark版本2.重新编译Hive使其支持更高的Spark版本安装Spark
下载Spark
https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-3.4.0/spark-3.4.0-bin-without-hadoop.tgz解压及重命名
tar -zxvf spark-3.4.0-bin-without-hadoop.tgzmv spark-3.4.0-bin-without-hadoop sparkSpark配置 在Spark中配置spark-env.sh 修改文件名
mv conf/spark-env.sh.template conf/spark-env.shvim conf/spark-env.sh添加配置
export SPARK_DIST_CLASSPATH$(hadoop classpath)配置SPARK_HOME环境变量
# Spark
export SPARK_HOME/usr/local/program/spark
export PATH$PATH:$SPARK_HOME/bin使配置生效
source /etc/profileHive配置 注意在Hive正常运行的基础之上进行如下额外配置 在hive中创建spark配置文件
vim conf/spark-defaults.conf参数代表在执行任务时会根据如下参数执行
spark.master yarn
spark.eventLog.enabled true
spark.eventLog.dir hdfs://node01:9000/spark/history
spark.executor.memory 1g
spark.driver.memory 1g在HDFS创建目录用于存储历史日志
hadoop fs -mkdir -p /spark/historyHDFS上传Spark的jar包
为什么要HDFS上传Spark的jar包 使用的是spark-3.4.0-bin-without-hadoop.tgz版本不带hadoop和hive相关依赖 Hive任务由Spark执行Spark任务资源分配由Yarn来调度该任务有可能被分配到集群的任何一个节点 因此需要将Spark的依赖上传到HDFS集群路径让集群中任何一个节点都能获取到
hadoop fs -mkdir -p /spark/jarshadoop fs -put spark/jars/* /spark/jars修改hive-site.xml文件
!--Spark依赖位置 注意端口号9000必须和namenode的端口号一致 --
propertynamespark.yarn.jars/namevaluehdfs://node01:9000//spark/jars/*/value
/property!--Hive执行引擎--
propertynamehive.execution.engine/namevaluespark/value
/property!--Hive和Spark连接超时时间--
propertynamehive.spark.client.connect.timeout/namevalue10000ms/value
/property执行测试
hive (default) create table tb_user(id int,name string,age int);hive (default) insert into tb_user values(2,hive,20);查看Yarn控制台
注意 1.yarn的容量调度器对每个资源队列中同时运行的Application Master占用的资源进行了限制防止大部分资源都被Application Master占用导致Map/Reduce Task无法执行 2.如果资源不够可能造成同一时刻只能运行一个Job的情况。 3.通过hadoop/etc/hadoop/capacity-scheduler.xml参数控制默认值是0.1即每个资源队列上Application Master最多可使用的资源为该队列总资源的10% 配置示例
propertynameyarn.scheduler.capacity.maximum-am-resource-percent/namevalue0.5/value
/property速度对比
MapReduce引擎
2023-08-07 20:11:22,834 INFO [2704e498-c1b3-4dd5-8658-1f0a1393a3bb main] ql.Driver (SessionState.java:printInfo(1227)) - MapReduce Jobs Launched:
Stage-Stage-1: Map: 1 Reduce: 1 Cumulative CPU: 3.51 sec HDFS Read: 16233 HDFS Write: 276 SUCCESS
2023-08-07 20:11:22,834 INFO [2704e498-c1b3-4dd5-8658-1f0a1393a3bb main] ql.Driver (SessionState.java:printInfo(1227)) - Stage-Stage-1: Map: 1 Reduce: 1 Cumulative CPU: 3.51 sec HDFS Read: 16233 HDFS Write: 276 SUCCESS
Total MapReduce CPU Time Spent: 3 seconds 510 msec
2023-08-07 20:11:22,834 INFO [2704e498-c1b3-4dd5-8658-1f0a1393a3bb main] ql.Driver (SessionState.java:printInfo(1227)) - Total MapReduce CPU Time Spent: 3 seconds 510 msec
2023-08-07 20:11:22,834 INFO [2704e498-c1b3-4dd5-8658-1f0a1393a3bb main] ql.Driver (Driver.java:execute(2531)) - Completed executing command(queryIdroot_20230807200946_06634674-a1f5-4cfa-ae34-166bfda3d90e); Time taken: 92.685 seconds
OK
2023-08-07 20:11:22,834 INFO [2704e498-c1b3-4dd5-8658-1f0a1393a3bb main] ql.Driver (SessionState.java:printInfo(1227)) - OK
2023-08-07 20:11:22,834 INFO [2704e498-c1b3-4dd5-8658-1f0a1393a3bb main] ql.Driver (Driver.java:checkConcurrency(285)) - Concurrency mode is disabled, not creating a lock manager
col1 col2 col3
Time taken: 96.059 secondsYarn引擎
--------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------STAGES ATTEMPT STATUS TOTAL COMPLETED RUNNING PENDING FAILED
--------------------------------------------------------------------------------------STAGES ATTEMPT STATUS TOTAL COMPLETED RUNNING PENDING FAILED
--------------------------------------------------------------------------------------
Stage-0 ........ 0 FINISHED 1 1 0 0 0
Stage-1 ........ 0 FINISHED 1 1 0 0 0
--------------------------------------------------------------------------------------
STAGES: 02/02 [] 100% ELAPSED TIME: 10.24 s
--------------------------------------------------------------------------------------由此可大概粗略得知 在Hive执行引擎中Yarn引擎的执行效率大概是MapReduce引擎的10倍。 注意 具体的性能差异取决于多种因素如数据量的大小、查询的复杂程度、集群的配置等。