声明:

此博客参考了官网的配置方式,并结合笔者在实践网上部分帖子时的踩坑经历整理而成

这里贴上官方配置说明:

[官方]: https://cwiki.apache.org//confluence/display/Hive/Hive+on+Spark:+Getting+Started

大前提:

从Hive1.1开始支持使用Spark作为执行引擎,我们配置使用Spark On Yarn时,一定要注意

  • Hive版本与Spark版本的适配,不适配的需要自己重新编译使其适配

    这里贴上官方推荐的对应版本

    Hive Version Spark Version
    master 2.3.0
    3.0.x 2.3.0
    2.3.x 2.0.0
    2.2.x 1.6.0
    2.1.x 1.6.0
    2.0.x 1.5.0
    1.2.x 1.3.1
    1.1.x 1.2.0

    笔者这里使用的是hive-3.1.2,按理说应该使用spark-2.3.0作为对应,但出于业务要求需使用spark-3.1.2,故重新编译hive-3.1.2源码使其适配spark-3.1.2

  • Spark使用的jar包必须是没有集成Hive的

    因spark包自带hive,其支持的版本与我们使用的版本冲突(如spark-3.1.2默认支持的hive版本为2.3.7),故我们只需spark自身即可,不需其自带的hive模块



    两种方式去获得去hive的jar包

    • 从官网下载完整版的jar包,解压后将其jars目录下的hive相关jar包全部删掉(本文即使用此种方法)
    • 重新编译spark,但不指定-Phive

    注:网上部分帖子中所说使用“纯净版”,其实指的就是去hive版,而不是官方提供的without-hadoop版

下面进入正题

部署环境:CentOS 7.4 x86_64

Hive版本:3.1.2(重新编译过,修改了Spark版本和Scala版本,替换修改了部分源码,如有需要后续会出编译指导)

Spark版本:3.1.2(spark-3.1.2-bin-hadoop3.2.tgz,官网直接下载)

Hadoop版本:3.1.3(与Spark3.1.2自带hadoop版本3.2只差一个小版本,可直接使用,不用重新编译)

JDK版本:1.8.0_172

myql版本:5.7.32

步骤:

  1. 在机器上部署spark

解压

tar -zxvf spark-3.1.2-bin-hadoop3.2.tgz

设置环境变量

echo '#SPARK_HOME' >> /etc/profile
echo 'export SPARK_HOME=/data/apps/spark-3.1.2-bin-hadoop3.2' >> /etc/profile
echo 'export PATH=$PATH:$SPARK_HOME/bin' >> /etc/profile

准备去hive版本的spark-jars(!!!除了hive-storage-api-2.7.2.jar这个包!!!,如果用的spark是重新编译的且没有指定-Phive,这步可以省略)

cd $SPARK_HOME                         //进目录
mv jars/hive-storage-api-2.7.2.jar . //把这包先移出去
rm -rf jars/*hive* //删
mv hive-storage-api-2.7.2.jar jars/ //再移回去

将刚做好的spark-jars上传到hdfs

hdfs dfs -mkdir -p /spark-jars
hdfs dfs -put jars/* /spark-jars/

hdfs上创建spark-history存日志

hdfs dfs -mkdir -p /spark-history

  1. 在机器上部署hive

解压

tar -zxvf apache-hive-3.1.2-bin.tar.gz

注:解压后的hive还需要一些额外的包放在lib下,比如因元数据库换为mysql需要一个mysql-connector-java-5.1.48.jar,比如为了处理hive-3.1.2和hadoop-3.1.3中guava包版本冲突的问题需要把原lib下的guava19删了放一个guava27,再比如为了处理slf4j包冲突问题将lib下面log4j-slf4j-impl-2.10.0.jar删喽,这里都不做详细说明(已经够详细了吧/doge);且这些问题都可以通过重新编译hive解决,不过要费一番功夫

改名(非必要)

mv apache-hive-3.1.2-bin hive-3.1.2

设置环境变量

echo '#HIVE_HOME' >> /etc/profile
echo 'export HIVE_HOME=/data/apps/hive-3.1.2' >> /etc/profile
echo 'export PATH=$PATH:$HIVE_HOME/bin' >> /etc/profile

修改配置文件

  • hive-site.xml

注:该文件首先需要从hive-default.xml.template复制一份出来,里面参数根据自己需要调整,这里只讲hive-on-spark需要修改或新增的参数

  <!--Spark依赖位置,上面上传jar包的hdfs路径-->
<property>
<name>spark.yarn.jars</name>
<value>hdfs://bdp3install:8020/spark-jars/*</value>
</property> <!--Hive执行引擎,使用spark-->
<property>
<name>hive.execution.engine</name>
<value>spark</value>
</property> <!--Hive连接spark-client超时时间-->
<property>
<name>hive.spark.client.connect.timeout</name>
<value>30000ms</value>
</property>

  • hive-env.sh

注:该文件首先需要从hive-env.sh.template复制一份出来,里面参数根据自己需要调整,这里只讲hive-on-spark需要修改或新增的参数

# Set HADOOP_HOME to point to a specific hadoop install directory
HADOOP_HOME=${HADOOP_HOME:-/data/apps/hadoop-3.1.3} export HIVE_HOME=${HIVE_HOME:-/data/apps/hive-3.1.2} # Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=${HIVE_CONF_DIR:-/data/apps/hive-3.1.2/conf} export METASTORE_PORT=9083
export HIVESERVER2_PORT=10000

  • spark-default.conf

注:直接vim生成吧,不用从spark目录再拷过来,更多的参数可以参考最上面的官方地址

spark.master             yarn
spark.eventLog.enabled true
spark.eventLog.dir hdfs://bdp3install:8020/spark-history
spark.executor.memory 4g
spark.driver.memory 4g
spark.serializer org.apache.spark.serializer.KryoSerializer
spark.executor.cores 2
spark.yarn.driver.memoryOverhead 400m

  1. 启动hive
cd $HIVE_HOME
nohup bin/hive --service metastore &
等metastore启完(9083端口被监听了) nohup bin/hive --service hiveserver2 &
等hiveserver2启完(10000端口被监听了)



4. 客户端连接测试

beeline
!connect jdbc:hive2://localhost:10000 hive ""

执行一些insert,同时观察下yarn,如果任务成功了,yarn上也有相应的application成功了,那就妥了





注:hive on spark任务是以每个spark session为单位提交到yarn的,每个yarn任务都有一次从hdfs加载spark-jars到容器中的过程,所以每次通过客户端执行命令时,第一次执行的速度会比较慢(因为加载jars,大约有200M),后续就很快了。

常见问题:

  1. java.lang.NoClassDefFoundError: org/apache/hadoop/hive/ql/exec/vector/ColumnVector

原因:spark-jars里少hive-storage-api-2.7.2.jar这个包



2. Could not load YARN classes. This copy of Spark may not have been compiled with YARN support.

原因:hiveserver2所在机器没有部署spark或spark非完整版,或spark版本与hive版本不对应



3. 各种各样的ClassNotFound,NoClassDefFoundError

原因:spark-jars不完整,一定要是去hive的完整版jar包(一般都是少hadoop的包)

此文章首发于博客园,希望能对大家有所帮助,如有遗漏或问题欢迎补充指正。

Hive On Spark保姆级攻略的更多相关文章

  1. 废弃fastjson!大型项目迁移Gson保姆级攻略

    前言 大家好,又双叒叕见面了,我是天天放大家鸽子的蛮三刀. 在被大家取关之前,我立下一个"远大的理想",一定要在这周更新文章.现在看来,flag有用了... 本篇文章是我这一个多月 ...

  2. Pyspark spark-submit 集群提交任务以及引入虚拟环境依赖包攻略

    网上提交 scala spark 任务的攻略非常多,官方文档其实也非常详细仔细的介绍了 spark-submit 的用法.但是对于 python 的提交提及得非常少,能查阅到的资料非常少导致是有非常多 ...

  3. 【转】Hive安装及使用攻略

    Posted: Jul 16, 2013 Tags: HadoophiveHiveQLsql分区表 Comments: 18 Comments Hive安装及使用攻略 让Hadoop跑在云端系列文章, ...

  4. 微信小程序——【百景游戏小攻略】

    微信小程序--[百景游戏小攻略] 本次课程小项目中的图片以及文章还未获得授权!请勿商用!未经授权,请勿转载! 博客班级 https://edu.cnblogs.com/campus/zjcsxy/SE ...

  5. 【C#代码实战】群蚁算法理论与实践全攻略——旅行商等路径优化问题的新方法

    若干年前读研的时候,学院有一个教授,专门做群蚁算法的,很厉害,偶尔了解了一点点.感觉也是生物智能的一个体现,和遗传算法.神经网络有异曲同工之妙.只不过当时没有实际需求学习,所以没去研究.最近有一个这样 ...

  6. Windows下LATEX排版论文攻略—CTeX、JabRef使用介绍

    Windows下LATEX排版论文攻略—CTeX.JabRef使用介绍 一.工具介绍 TeX是一个很好排版工具,在学术界十分流行,特别是数学.物理学和计算机科学界. CTeX是TeX中的一个版本,指的 ...

  7. Python环境下NIPIR(ICTCLAS2014)中文分词系统使用攻略

    一.安装 官方链接:http://pynlpir.readthedocs.org/en/latest/installation.html 官方网页中介绍了几种安装方法,大家根据个人需要,自行参考!我采 ...

  8. Apache Spark源码走读之12 -- Hive on Spark运行环境搭建

    欢迎转载,转载请注明出处,徽沪一郎. 楔子 Hive是基于Hadoop的开源数据仓库工具,提供了类似于SQL的HiveQL语言,使得上层的数据分析人员不用知道太多MapReduce的知识就能对存储于H ...

  9. 30天,O2O速成攻略【8.16武汉站】

    活动概况 时间:2015年08月16日13:30-16:30 地点:光谷创业咖啡(光谷广场资本大厦一楼停车场内) 主办:APICloud.爱立示.MBA移动业务助理 网址:www.apicloud.c ...

随机推荐

  1. SpringBoot整合ActiveMq实现Queue和Topic两种模式(看不懂你来打我)

    目录 一.前言 二.ActiveMq的下载和使用 三.依赖准备 四.yml文件配置 五.配置Bean 六.创建生产者(Queue+Topic) 七.创建消费者(Topic模式下) 八.测试结果(Top ...

  2. 简单介绍无限轮播图,js源代码

    无限轮播图js源代码,今天介绍一下用js简单的编写无限轮播图 <!DOCTYPE html> <html>   <head>     <meta charse ...

  3. GIT基础篇,配置账号及命令查看以及帮助命令

    提交用户名和邮件地址   1 安装完Git首先要设置你的用户名称与邮件地址.每一个Git的提交都会使用这些信息,并且它会写入到你的每一次提交中. 2 git config --global user. ...

  4. uwp 自定义语音识别规则

    xml  code ---------------------------------------------------- <Page x:Class="MyApp.MainPage ...

  5. 线程间协作的两种方式:wait、notify、notifyAll和Condition

    转载自海子: 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者 ...

  6. jQuery中的内容、可见性过滤选择器(四、四)::contains()、:empty、:has()、:parent、:hidden、:visible

    <!DOCTYPE html> <html> <head> <title>内容.可见性过滤选择器</title> <meta http ...

  7. 痞子衡嵌入式:简析i.MXRT1170 XECC功能特点及其保护串行NOR Flash和SDRAM之道

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170 XECC功能特点及其保护串行NOR Flash和SDRAM之道. ECC 是 "Error Correc ...

  8. 利用元数据提高 SQLFlow 血缘分析结果准确率

    利用元数据提高 SQLFlow 血缘分析结果准确率 一.SQLFlow--数据治理专家的一把利器 数据血缘属于数据治理中的一个概念,是在数据溯源的过程中找到相关数据之间的联系,它是一个逻辑概念.数据治 ...

  9. 高性能利器:CDN我建议你好好学一下!

    硬核干货分享,欢迎关注[Java补习课]成长的路上,我们一起前行 ! <高可用系列文章> 已收录在专栏,欢迎关注! CDN 概述 CDN 全称 Content Delivery Netwo ...

  10. .Net Core 中的选项Options

    .NetCore的配置选项建议结合在一起学习,不了解.NetCore 配置Configuration的同学可以看下我的上一篇文章 [.Net Core配置Configuration源码研究] 由代码开 ...