【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

<!--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

export SPARK_DIST_CLASSPATH=$(/opt/hadoop-2.10.2/bin/hadoop classpath)

修改 spark-defaults.conf,添加:

spark.sql.hive.metastore.version 2.1.1
spark.sql.hive.metastore.jars /opt/hive-2.1.1/lib/*

配置linux环境变量:

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 下:

# 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 下

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目录结构

mvn package "-Dmaven.test.skip=true" "-Pdist"

具体spark install:
spark可能不支持win环境编译出完整bin目录结构
通过-P指定profile,具体profile可在pom.xml <profile><id> profile的id </id></profile>查看。

# 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下需要自己创建。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/636728.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android应用URI调起百度地图、高德地图 和 腾讯地图

1、百度地图 地图调起API | 百度地图API SDKhttps://lbs.baidu.com/faq/api?titlewebapi/uri/andriod例&#xff1a;反向地址解析 //反向地址解析URI private final String BAIDU_MAP_NAVI_URI "baidumap://map/geocoder?location";/*** 跳转百度地图*/ private…

消息号 KI261 成本中心 XXXX/123123 冻结而不能直接对 2020.10.08 收入记帐

做AR凭证遇到如上图所示的报错&#xff0c;检查之后发现是科目的成本要素类别与成本中心的控制面板-锁定中的类型不匹配&#xff0c;现在科目的成本要素类别是11&#xff0c;控制面板中锁定了“实际销售收入”与“计划收入”。 成本要素类别“11”代表主营收入或者库存收入&…

新手第一次做抖店,应该注意什么?知道这些技巧让你更快拿到结果

大家好&#xff0c;我是电商花花。 新手第一次刚开始接触抖音小店&#xff0c;都会担心自己做不好&#xff0c;操作不到位的想法&#xff0c;怕自己做店长时间不出单。 其实做店担心不出单是很正常的&#xff0c;但是只要我们掌握正确的做店方法和技巧也能很快就做好抖音小店…

大语言模型下的JSON数据格式交互

插&#xff1a; AI时代&#xff0c;程序员或多或少要了解些人工智能&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家(前言 – 人工智能教程 ) 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家…

【动态规划七】背包问题

目录 0/1背包问题 一、【模板】01背包 二、分割等和子集 三、目标和 四、最后一块石头的重量 II 完全背包问题 一、【模板】完全背包 二、零钱兑换 三、零钱兑换 II 四、完全平方数 二维费用的背包问题 一、一和零 二、盈利计划 似包非包 组合总和 卡特兰数 不…

“Excel+中文编程”衍生新型软件,WPS用户:自家孩子

你知道吗&#xff0c;我们中国人有时候真的挺有创新精神的。 你可能熟悉Excel表格&#xff0c;也可能听说过中文编程&#xff0c;但你有没有脑洞大开&#xff0c;想过如果把这两者结合起来&#xff0c;会碰撞出什么样的火花呢&#xff1f; 别不信&#xff0c;跟着我来看看吧&a…

惠普电脑怎么进入bios?图文教程助你轻松上手!

进入BIOS&#xff08;基本输入/输出系统&#xff09;是在电脑启动时进行硬件初始化和设置的重要步骤之一。对于惠普&#xff08;HP&#xff09;电脑用户来说&#xff0c;了解如何进入BIOS是解决一些硬件和系统问题的关键。本文将介绍惠普电脑怎么进入bios的三种方法&#xff0c…

Wireshark抓取PROFINET包问题总结

1.如何导入GSD文件 ? 打开Wireshark在【编辑】->【首选项】->【Protocols】->【PNIO】&#xff0c;设置GSD文件的路径。 添加完成后&#xff0c;就可以解析报文了 2.Frame check sequence和FCS Status显示 unverified ? 【编辑】->【首选项】->【Protocols】…

Kafka-集群管理者(Controller)选举机制、任期(epoch)机制

Kafka概述 Kafka-集群管理者&#xff08;Controller&#xff09;选举机制 Kafka中的Controller是Kafka集群中的一个特殊角色&#xff0c;负责对整个集群进行管理和协调。Controller的主要职责包括分区分配、副本管理、Leader选举等。当当前的Controller节点失效或需要进行重新…

Redis常见数据类型(3)-String, Hash

目录 String 命令小结 内部编码 典型的使用场景 缓存功能 计数功能 共享会话 手机验证码 Hash 哈希 命令 hset hget hexists hdel hkeys hvals hgetall hmget hlen hsetnx hincrby hincrbyfloat String 上一篇中介绍了了String里的基本命令, 接下来总结一…

什么是谷歌留痕?

其实它就是指你的网站在谷歌中留下的种种痕迹&#xff0c;无论你是在做外链&#xff0c;还是优化网站内容&#xff0c;或是改善用户体验&#xff0c;所有这些都会在谷歌的搜索引擎里留下一些“脚印”&#xff0c;用比较seo一点的说法&#xff0c;指的是网站在其构建和优化过程中…

5.22 R语言-正态性检验

正态性检验 正态性检验的目的是确定一组数据是否符合正态分布&#xff08;也称高斯分布&#xff09;。在统计分析和数据建模中&#xff0c;正态性假设是许多统计方法和模型的基础。了解数据是否符合正态分布有助于选择适当的统计方法和确保分析结果的有效性。 本文主要从概率…

安全牛专访美创CTO周杰:数据安全进入体系化建设阶段,数据安全管理平台应用正当时

在数字经济时代&#xff0c;数据作为生产要素发挥越来越重要的作用&#xff0c;数据安全也得到了前所未有的重视。而随着数据安全能力已经进入了相对体系化建设的阶段&#xff0c;更加智能化、协同化的新一代数据安全管理平台得到了各类企业组织的广泛关注。 本期牛人访谈邀请到…

java中写word换行符 poi 换行

省流&#xff1a; 表格外的文本&#xff0c;使用“\r”或者“(char)11”来换行&#xff0c;建议用"\r"。 表格内的文本&#xff0c;使用“(char)11”来换行。 正文&#xff1a; 测试用word文档&#xff1a; t1.doc内容如下&#xff1a; t2.doc内容如下&#xff…

芯片半导体研发公司的数据防泄漏解决方案

在当今信息化时代&#xff0c;半导体研发公司的数据防泄密工作显得尤为重要。半导体行业涉及大量的核心技术、研发文档和客户信息&#xff0c;一旦数据泄露&#xff0c;将给企业带来无法估量的损失。因此&#xff0c;建立一套有效的数据防泄密解决方案成为半导体研发公司的当务…

最新腾讯音乐人挂机脚本,号称日赚300+【永久脚本+使用教程】

项目介绍 首先需要认证腾讯音乐人&#xff0c;上传自己的歌曲&#xff0c;然后用小号通过脚本去刷自己的歌曲 &#xff0c;赚取播放量 &#xff0c;1万播放大概就是50到130之间 腾讯认证不需要露脸&#xff0c;不吞量&#xff0c;不封号 脚本&#xff0c;全自动无脑挂机&…

链表经典OJ问题【环形链表】

题目导入 题目一&#xff1a;给你一个链表的头节点 head &#xff0c;判断链表中是否有环 题目二&#xff1a;给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 NULL。 题目一 给你一个链表的头节点 head &#xff0c;…

【CTF Web】CTFShow web3 Writeup(SQL注入+PHP+UNION注入)

web3 1 管理员被狠狠的教育了&#xff0c;所以决定好好修复一番。这次没问题了。 解法 注意到&#xff1a; <!-- flag in id 1000 -->但是拦截很多种字符。 if(preg_match("/or|\-|\\|\*|\<|\>|\!|x|hex|\/i",$id)){die("id error"); }使用…

Hadoop+Spark大数据技术 实验7 Spark综合编程

删除字符串 package HelloPackageimport scala.io.StdInobject DeleteStr {def main(args: Array[String]): Unit {var str1 ""var str2 ""var i 0var j 0var flag 0print("请输入第一个字符串:")str1 StdIn.readLine()print("请输…

Docker简单使用

1.简单认识 软件的打包技术&#xff0c;就是将打乱的多个文件打包为一个整体&#xff0c;比如想使用nginx&#xff0c;需要先有一台linux的虚拟机&#xff0c;然后在虚拟机上安装nginx.比如虚拟机大小1G&#xff0c;nginx100M。当有了docker后我们可以下载nginx 的镜像文件&am…