赞
踩
Hive是一个Sql解析引擎,其不具备计算能力,Hive将Sql解析为物理执行计划,将物理执行计划转换为计算任务,交由计算引擎执行,默认的引擎是MapReduce,但MapReduce执行速度慢,随着Spark的崛起,Hive支持Spark作为计算引擎,这就是HiveOnSpark
比较容易混淆,二者差距还是很大的,SparkOnHive只是使用了Hive的元数据服务,Sql解析由Spark完成、计算也由Spark完成。
Hive3.1.2默认支持Spark2.3.0,默认支持的意思是Hive在调用Spark的Api时,使用的是2.3.0版本的Api,这些Api在Spark3时可能已经被移除了,或者签名变了。如果Hive运行在Spark3的环境中,必然出现ClassNotFound或者NoMethodDef之类的异常。
解决办法是修改Hive源码。
1,将Hadoop的压缩包上传到服务器,解压
2,配置core-site.xml,其中最重要的两个配置如下
<property>
<!-- namenode的端口,对hdfs的访问要通过该端口进行 -->
<name>fs.defaultFS</name>
<value>hdfs://node1:8080</value>
</property>
<!-- hdfs文件在本地磁盘的存储位置 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/export/atguigu/soft/hadoop-3.1.3/data</value>
</property>
3,配置hdfs-site.xml文件
配置hdfs web服务的服务器和访问端口
配置副本数
<property>
<name>dfs.namenode.http-address</name>
<value>node1:9870</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node3:9686</value>
</property>
4,配置yarn-site.xml
配置ResourceManager的位置
配置日志聚合
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node2</value>
</property>
<property>
<name>yarn.log.server.url</name>
<value>http://node2:19888/jobhistory/logs</value>
</property>
<property>
<name>mapreduce.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
5,/etc/profile中配置Hadoop的环境变量
export HADOOP_HOME=/export/soft/hadoop-3.1.3
export PATH=:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_CLASSPATH=`hadoop classpath`
6,将hadoop根目录和环境变量在hadoop集群所有节点上按如上步骤配置,可以通过scp分发的方式快速完成。
1,上传、解压Spark3.0.0安装包
2,配置spark环境变量
export SPARK_HOME=/export/soft/spark-3.0.0-bin-hadoop3.2/
export PATH=:$PATH:$SPARK_HOME/bin
PS:spark的作用是提供spark任务的执行环境,Hive会通过spark-submit提交spark任务,spark将任务分发到spark集群各个节点。
3,在集群所有节点上安装spark,配置环境变量。
1,上传、解压Hive安装包
2,配置环境变量:
export SPARK_HOME=/opt/module/spark
export PATH=$PATH:$SPARK_HOME/bin
3,hive安装目录下,创建如下文件
hive/conf/spark-defaults.conf
内容如下,指定提交spark任务的各种参数:
spark.master yarn
spark.eventLog.enabled true
spark.eventLog.dir hdfs://node1:8080/spark-history
spark.executor.memory 1g
spark.driver.memory 1g
4,创建上一步配置中的hdfs文件夹,存储历史日志
hadoop fs -mkdir /spark-history
5,将纯净版的spark3.0.0的jar上传到hdfs,所谓纯净版,就是没有掺杂hadoop和hive的jar包。主要原因是spark3.0.0默认支持的hadoop和hive都是2.x.x,hive3在将物理执行计划转换为spark任务时会使用到spark的jar包,如果这里的jar包含了hive2的jar包,会出现冲突,所以不适用集群上安装的spark自带的jar包,而是将纯净版的sparkjar包上传到hdfs上,作为hive的专用包。
先创建hdfs文件夹:
hadoop fs -mkdir /spark-jars
6,上传纯净版spark jar到hdfs
hadoop fs -put spark-3.0.0-bin-without-hadoop/jars/* /spark-jars
7,hive配置文件指定使用spark引擎和spark jar包位置
vim /opt/module/hive/conf/hive-site.xml
<property>
<name>spark.yarn.jars</name>
<value>hdfs://hadoop102:8020/spark-jars/*</value>
</property>
<property>
<name>hive.execution.engine</name>
<value>spark</value>
</property>
bin/hive
hive (default)> create table student(id int, name string);
hive (default)> insert into table student values(1,'abc');
出现如下界面表示整合成功:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。