【hive和spark】hive on spark和spark读取hive metastore配置

HIVE ON SPARK 和 SPARK READ HIVE METASTORE

具体hadoop 和 hive单机版本安装请参考单节点搭建hadoop和hive

此文是基与这篇基础上升级而来。

零、版本说明:

本例使用的版本,hive和spark版本对标Cloudera 公司的 cdh6.2.0 版本,hdfs图省事就没对标cdh的3.0.0版本:

hadoop: 2.10.2

hive: 2.1.1

spark: 2.4.0

从官网下载bin的安装包 apache 和 hive ,官网中spark的源码和安装包的版本比较全

hive的版本只有大版本最新的,需要其他版本的要去github上apache/hive仓库找需要版本对应的tag标签找是否有源码包或安装包下载。

官网中:

有bin的就是编译完整的安装文件,linux环境直接解压tar -xvf *.tar.gz即可。
spark-2.4.0-bin-without-hadoop.tgz (一般使用without-hadoop版本) apache-hive-3.1.3-bin.tar.gz

有src的就是源码了。

修改 hive-site.xml :

xml 复制代码
<!--Spark依赖位置(注意:端口号9000/8020必须和namenode的端口号一致)for hive on spark -->
<property>
    <name>spark.yarn.jars</name>
    <value>hdfs://hdp:9000/spark-jars/*</value>
</property>
<!--Hive执行引擎 for hive on spark -->
<property>
    <name>hive.execution.engine</name>
    <value>spark</value>
</property>
<!-- 元数据存储授权 for spark read hive metastore -->
<property>
   <name>hive.metastore.event.db.notification.api.auth</name>
   <value>false</value>
</property>

修改spark-env.sh,添加:

使spark可以使用hadoop

shell 复制代码
export SPARK_DIST_CLASSPATH=$(/opt/hadoop-2.10.2/bin/hadoop classpath)

修改 spark-defaults.conf,添加:

conf 复制代码
spark.sql.hive.metastore.version 2.1.1
spark.sql.hive.metastore.jars /opt/hive-2.1.1/lib/*

配置linux环境变量:

bash 复制代码
export HADOOP_HOME=...
export HADOOP_CONF_DIR=...
export HIVE_HOME=...
export HIVE_CONF_DIR=...
export SPARK_HOME=...
export PATH=HADOOP_HOME/bin:HIVE_HOME/bin:SPARK_HOME/bin

# 如果服务器之前配置过其他版本hadoop,请使用linux env命令检查是否有残余环境变量如下几个:
# 如果有残余 ,请使用unset命令,如 "unset HADOOP_COMMON_HOME",清除干扰的环境变量。
HADOOP_COMMON_HOME
HADOOP_HDFS_HOME
HADOOP_MAPRED_HOME
HADOOP_YARN_HOME

一、hive 和 spark 版本兼容方案(不编译源码),失败率低

spark使用的hive版本较复杂可以逐个查询官网,或者github查询源码。
spark文档

主要内容是检查jar包是否全面,是否有冲突。

查看HIVE_HOME/lib for hive on spark

将spark的jar包复制到 HIVE_HOME/lib 下:

bash 复制代码
# spark-client-2.1.1.jar  注:此包是hive的
spark-core_2.11-2.4.0.jar
spark-kvstore_2.11-2.4.0.jar
spark-launcher_2.11-2.4.0.jar
spark-network-common_2.11-2.4.0.jar
spark-network-shuffle_2.11-2.4.0.jar
spark-tags_2.11-2.4.0.jar
spark-unsafe_2.11-2.4.0.jar

将 HIVE_HOME/lib 包复制至 SPARK_HOME/jars 下

bash 复制代码
hive-beeline-2.1.1.jar
hive-cli-2.1.1.jar
hive-common-2.1.1.jar
hive-exec-2.1.1.jar
hive-jdbc-2.1.1.jar
hive-llap-client-2.1.1.jar
hive-llap-common-2.1.1.jar
hive-llap-tez-2.1.1.jar
hive-metastore-2.1.1.jar
hive-orc-2.1.1.jar
hive-serde-2.1.1.jar
hive-service-rpc-2.1.1.jar
hive-storage-api-2.1.1.jar
jline-2.14.6.jar # 不加会报错。

如果测试中出现类找不到,不兼容等错误就需要自己编译源码了,别无他法。

二、hive 和 spark 版本不兼容方案(需编译源码),编译失败率高

过程可能很痛苦,几个小时不一定就能搞定。

编译步骤:

  • 1、 分别下载 spark 和 hive 源码
  • 2、 清除本地maven仓库关于spark和hive的jar目录
  • 3、 修改 spark 和 hive 相互依赖的版本号,同时将parquet和orc的版本号也修改成一致的。
  • 4、 编译:
    注意:必须 mvn install 也就是必须将编译的包安装到本地maven仓库。
    spark和hive是相互依赖的,切记,可以参考如下顺序:hive install -> spark install -> hive install -> spark install 。反正多交叉install就对了。
    idea 编译bug多多,中间有编译错误但idea不显示错误,可清理idea缓存文件: idea 里file 下的 invalidate cacheches 。
    每次编译install前可将本地maven仓库中的hive/spark目录直接删掉再编译hive/spark,保证mvn install成功。
    此编译后spark和hive相互依赖的jar包都会包含在各自的lib/jars目录下。就不用手动复制了。
    parquet-hadoop-bundle-版本.jar 包中也含有parquet包,一定要注意版本和想要的版本一致。比如编译spark时候由于idea内存依旧加载的hive所依赖的parquet老版本信息,会出现parquet-hadoop-bundle-1.6.0.jar和parquet-hadoop-bundle-1.8.0.jar和parquet-hadoop-bundle-1.10.0.jar同时在SPARK_HOME/jars目录下的情况。

具体hive install:

hive可能支持win环境安装,即win下就能生成linux的bin目录结构

bash 复制代码
mvn package "-Dmaven.test.skip=true" "-Pdist"

具体spark install:

spark可能不支持win环境编译出完整bin目录结构

通过-P指定profile,具体profile可在pom.xml <profile><id> profile的id </id></profile>查看。

bash 复制代码
# win下编译:
# 在mvnrepository.com下载到同版本的spark-core-*.jar在此文件的根目录找到spark-version-info.properties。
# 添加spark-version-info.properties文件至:core/resources目录
mvn package "-Dmaven.test.skip=true" "-Phadoop-2.10" "-Pscala-2.11" "-Phive" "-Pyarn" "-Phive-thriftserver"

# linux下编译:
./dev/make-distribution.sh --name spark-2.4.0 --tgz -Pscala-2.11 -Pyarn -Phadoop-2.10 -Phive -Phive-thriftserver 

其中spark-version-info.properties文件linux编译由shell自动生成的,win下需要自己创建。

properties 复制代码
version=2.4.0
user=
revision=
branch=
date=2018-10-29T07:31:41Z
url=

注意:

spark 在 win 编译由于不会生成相应的目录结构,需要官网找到对应版本的安装包,解压到linux后,再将自己编译jar包 (在assembly模块下assembly/target/scala-2.11/jars)都复制过去。

spark 每次覆盖linux的jars,记得将spark.yarn.jars hdfs 目录所有文件都刷新下,最好hdfs rm -r -f 目录。

hive 也需要这注意linux下HIVE_HOME/hcatalog和jdbc也需要将jar覆盖下。

三、测试

3.1 先测试spark读取hive metastore

spark-sql:(1)创建表 (2)insert into 数据 (3)select key,count(1) from 表 group key;

此三项目基本可以确认是否ok。

3.2 再测试 hive on spark(报错可能性高)

beeline连接hive server2 后实际会启动一个任务运行在yarn上的。所以日志也都在yarn上。缺少类信息会在类中展示。

hive执行和spark相同的测试即可。

(1)Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/JavaSparkListener

如下报错,是因为hive 2.1.1使用spark 1.*编译的。即编译hive时候要确认spark 版本选择正确。

(2)出现spark RDD类如:JavaRDDLike incompatible 不兼容类问题

是hive编译使用的spark版本和实际放到 HIVE_HOME/lib 版本或者和spark.yarn.jars hdfs 目录jar包版本不一致造成的。hive编译import spark类的包都在spark-client-*.jar中。

四、参考文章

Hive on spark 已测,完美搭建
寻找hadoop、hive、spark对应版本
Neither spark.yarn.jars nor spark.yarn.archive is set

相关推荐
计算机毕业编程指导师1 小时前
【大数据毕设选题推荐】基于Spark的WTA职业网球赛事演变与竞技格局分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·python·计算机·spark·毕业设计·课程设计·wta网球
计算机毕业编程指导师3 小时前
大数据毕设怎么做?基于Hadoop的多源社交媒体心理健康情感分析与可视化系统从零到一指导 源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·计算机·数据分析·毕业设计·课程设计·媒体
计算机毕业编程指导师5 小时前
Python大数据毕设:基于Hadoop的病毒式社交媒体趋势和参与度分析系统怎么做 源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·毕业设计·课程设计·社交媒体
计算机毕业编程指导师5 小时前
【计算机毕设选题推荐】基于Spark与Hadoop的AI就业收入区域差异分析系统 源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·python·数据分析·spark·毕业设计·课程设计·ai就业收入
计算机毕业编程指导师8 小时前
【计算机毕设推荐】基于Hadoop+Django的LLM多维度性能评估分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·python·django·毕业设计·课程设计·llm性能
卷毛迷你猪8 小时前
快速实验篇(B12)异常流量与刷单识别(方法论演示)
大数据·hive·hadoop·数据挖掘·聚类
计算机毕业编程指导师8 小时前
【Python毕设选题推荐】基于Hadoop+Django的奥斯卡奖获奖数据可视化分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·python·计算机·毕业设计·课程设计·奥斯卡奖
计算机毕业编程指导师8 小时前
【大数据毕设选题】基于Spark的电信网络诈骗话术语义特征挖掘分析系统源码 毕业设计 选题推荐 数据分析 机器学习 深度学习
大数据·hadoop·python·spark·毕业设计·课程设计·网络诈骗
计算机毕业编程指导师8 小时前
计算机大数据毕设怎么选?基于Spark的个体肥胖健康风险评估的数据分析与可视化系统带你通关 源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·spark·毕业设计·肥胖风险
shjita8 小时前
几个hadoop中运行mapreduce的错误记录一下。
大数据·hadoop·eclipse