【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的安装包 apachehive ,官网中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.jarparquet-hadoop-bundle-1.8.0.jarparquet-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

相关推荐
Q26433650233 小时前
【有源码】基于大数据的药品多维度属性分析可视化系统 基于Spark的药品属性聚类与关联规则可视化分析系统
hadoop·机器学习·数据挖掘·spark·毕业设计·课程设计·大数据项目
网络豆3 小时前
Apache Hive 鸿蒙 PC 适配全记录:以 Qt 客户端打通 HiveQL、监控与元数据访问
hive·apache·harmonyos
Q26433650233 小时前
【有源码】基于大数据的零售交易者行为特征与生存状况数据分析及可视化 Hadoop+Spark大数据项目
大数据·hadoop·信息可视化·数据挖掘·数据分析·spark·毕业设计
Q26433650236 小时前
【有源码】基于 Hadoop 生态的化妆品销售数据存储分析与可视化 面向化妆品行业的用户画像构建与销售机会识别研究
大数据·hadoop·python·机器学习·spark·毕业设计·课程设计
计算机编程-吉哥1 天前
基于机器学习的城市交通拥堵分析与预测平台【计算机毕业设计选题·机器学习·随机森林算法】
hadoop·算法·随机森林·机器学习·课程设计·计算机毕业设计选题·大数据毕业设计选题推荐
fastjson_1 天前
Hive3.1.3 安装使用
hive
计算机源码社1 天前
基于Hadoop+Spark的黄金市场历史数据特征分析与可视化大屏 基于K-Means聚类算法的黄金历史价格阶段划分研究
大数据·hadoop·python·数据挖掘·数据分析·spark·毕业设计
2601_962300812 天前
机器学习贴士:使用Python编写MapReduce
hadoop·python·机器学习·mapreduce·数据处理
爱吃火鸡面呀2 天前
HDFS 架构深度解析:从核心组件到数据读写全流程
hadoop·hdfs·架构
AIsocial2 天前
Spark Ads怎么用?自然流量测试内容,再用付费流量放大
spark·tiktok