Spark大数据平台有使用一段时间了,但大部分都是用于实验而搭建起来用的,搭建过Spark完全分布式,也搭建过用于测试的伪分布式。现在是写一遍随笔,记录一下曾经搭建过的环境,免得以后自己忘记了。也给和初学者以及曾经挖过坑的人用作参考。

  Hive on Spark是Hive跑在Spark上,用的是Spark执行引擎,而不是默认的MapReduce。

  可以查阅官网的资源Hive on Spark: Getting Started

  但是我遇到了难题,Hive on Spark部署之后,因为Spark在编译的时候没有编译Hive、Thrift,出现了缺少依赖不能使用Spark on Hive的问题,在这里求助于各位大神,欢迎有解决这个问题的思路的大神留言,在这提前谢谢~

一 、安装基础环境

1.1 Java1.8环境搭建

  1) 下载jdk1.8并解压:

# tar -zxvf  jdk-8u201-linux-i586.tar.gz  -C /usr/local

  2) 添加Java环境变量,在/etc/profile中添加:

export JAVA_HOME=/usr/local/jdk1..0_201
export PATH=$PATH:$JAVA_HOME/bin
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib

  3) 保存后刷新环境变量:

# source /etc/profile

  4) 检查Java是否配置成功,成功配置会有如下图所示。

# java -version

1.2 Scala环境搭建

  1)下载Scala安装包并解压

# tar -zxf scala-2.11..tgz -C /usr/local

  2) 添加Scala环境变量,在/etc/profile中添加:

export SCALA_HOME=/usr/local/scala-2.11.
export PATH=${SCALA_HOME}/bin:$PATH

  3) 保存后刷新环境变量

# source /etc/profile

  4) 检查Scala是否配置成功,成功配置会有如下图所示

# scala -version

1.3 Maven安装

  1)下载安装Maven

# tar -zxf  apache-maven-3.6.-bin.tar.gz -C /usr/local

  2)添加到环境变量中

export MAVEN_HOME=/usr/local/maven-3.6.
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH 

  3) 保存后刷新环境变量

# source /etc/profile

  4)检查Maven是否配置成功,成功配置会有如下图所示

# mvn -version

  5)更换中央仓库镜像为阿里云中央仓库镜像

# vim /usr/local/maven-3.6./conf/settings.xml

  找到mirrors元素, 在它里面添加子元素mirror:

   <!-- 阿里云中央仓库 -->
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

  添加结果如下:

二、Spark2.3.3源码编译

  由官方文档可知Hive on Spark只使用特定版本的Spark进行测试,所以给定版本的Hive只能保证使用特定版本的Spark。其他版本的Spark可能适用于给定版本的Hive,但这并不能保证。下面是Hive版本及其相应的兼容Spark版本的列表。

  在本文中,小编搭建的版本为:Hive 3.1.1,Spark 2.3.3,在这里默认Hive已经成功安装好。

  1)下载并解压Spark源码

# wget https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-2.3.3/spark-2.3.3.tgz
# tar -zxf spark-2.3..tgz

  2)编译Spark源码

  下面是参考Spark官方文档给出的教程而定制的命令,因为Spark要结合Hadoop(伪分布式Hadoop部署可以参考我之前的文档)与Hive一起使用,下面命令是Spark自带的Maven编译的脚本:

# ./dev/make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoop-provided,hadoop-2.7"

  也可以直接通过Maven命令进行编译:

# ./build/mvn -Pyarn -Phadoop-2.7 -Dhadoop.version=2.7. -DskipTests clean package

  出现下图所示也就代表着编译成功:

  将编译后的Spark压缩包解压到/usr/local路径并改名:

# tar -zxf spark-2.3.-bin-hadoop2-without-hive.tgz -C  /usr/local
# mv spark-2.3.3-bin-hadoop2-without-hive spark-2.3.3

  3)配置伪分布式Spark

  配置SPARK_HOME环境变量后并刷新:

export SPARK_HOME=/usr/local/spark-2.3.
export PATH=$PATH:$SPARK_HOME/bin

  进入Spark根目录下conf目录并生成slaves文件:

# cd $SPARK_HOME/conf
# cp slaves.template slaves //复制模板生成slaves文件,伪分布式不用修改该文件

  接下来修改spark-env.sh文件,修改前先复制后重命名:

# cp spark-env.sh.template spark-env.sh
# vim spark-env.sh

  添加如下内容:

export JAVA_HOME=/usr/local/jdk1..0_201
export SCALA_HOME=/usr/local/scala-2.11.
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
export SPARK_WORKER_MEMORY=2048m
export SPARK_MASTER_IP=hadoop
export SPARK_WORKER_CORES=
export SPARK_HOME=/usr/local/spark-2.3.
export SPARK_LIBRARY_PATH=/usr/local/spark-2.3./lib
export SPARK_DIST_CLASSPATH=${hadoop classpath} //hadoop classpath在终端上输入即可查看

  

  4)启动Spark

  第一步,启动之前要保证Hadoop启动成功,先使用jps看下进程信息:

  

  五个进程都启动并没有自动断开,说明Hadoop启动成功。

  第二步,启动Spark:

    进入Spark的sbin目录下执行start-all.sh启动Spark,启动后,通过jps查看最新的进程信息:

  

  访问http://ip:8080

  

  从页面可以看到一个Worker节点信息。

  通过访问http://ip:4040进入spark-shell web控制台页面(需先使用命令./bin/spark-shell启动SparkContext),出现下面的Web界面信息:

  

  如果某台机器上运行多个SparkContext,它的Web端口会自动连续加一,例如4041,4042,4043等。为了浏览持久的事件日志,设置spark.eventLog.enabled就可以了。

  5)验证Spark是否配置成功

  注意:在启动Spark之前,要确保Hadoop集群和YARN均已启动

    • 在$SPARK_HOME目录下启动Spark:
# $SPARK_HOME/sbin/start-all.sh
    • 在$SPARK_HOME目录下,提交计算Pi的任务,验证Spark是否能正常工作,运行如下命令:
# ./bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode client ./examples/jars/spark-examples_2.-2.3..jar 

  若无报错,并且算出Pi的值,说明Spark集群能正常工作。

  

  6)关闭Spark

  进入Spark目录,执行:

# cd $SPARK_HOME
# ./sbin/stop-all.sh

  7)关闭Hadoop

  进入Hadoop目录,执行:

# cd $HADOOP_HOME
# ./sbin/stop-yarn.sh
# ./sbin/stop-dfs.sh

  (./sbin/stop-all.sh也可以执行上述的操作,但有警告该命令已被丢弃,应使用上面的两个命令代替)

三、Hive on Spark

  1)将编译好的Spark依赖添加到$HIVE_HOME/lib目录下

# cp $SPARK_HOME/jars/* $HIVE_HOME/lib

  2)配置hive-site.xml

  配置的内容与spark-defaults.conf相同,只是形式不一样,以下内容是追加到hive-site.xml文件中的,并且注意前两个配置,如果不设置hive的spark引擎用不了,在后面会有详细的错误说明。

<property>
<name>hive.execution.engine</name>
<value>spark</value>
</property> <property>
<name>hive.enable.spark.execution.engine</name>
<value>true</value>
</property>
<property>
<name>spark.home</name>
<value>/usr/local/spark-2.3.3</value>
</property>
<property>
<name>spark.master</name>
<value>yarn-client</value>
</property>
<property>
<name>spark.eventLog.enabled</name>
<value>true</value>
</property>
<property>
<name>spark.eventLog.dir</name>
<value>hdfs://hadoop:8020/spark-log</value>
</property>
<property>
<name>spark.serializer</name>
<value>org.apache.spark.serializer.KryoSerializer</value>
</property>
<property>
<name>spark.executor.memeory</name>
<value>1g</value>
</property>
<property>
<name>spark.driver.memeory</name>
<value>1g</value>
</property>
<property>
<name>spark.executor.extraJavaOptions</name>
<value>-XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"</value>
</property>

  3)验证Hive on Spark是否可用

  命令行输入hive,进入hive CLI:

  

  set hive.execution.engine=spark; (将执行引擎设为Spark,默认是mr,退出hive CLI后,会回滚到默认设置。若想让执行引擎默认为Spark,需要在hive-site.xml里设置)

  接下来执行一条创建测试表语句:

hive> create table test(ts BIGINT,line STRING); 

  然后执行一条查询语句:

hive> select count(*) from test;

  

  若上述整个过程都没有报错,并出现正确结果,则Hive on Spark搭建成功。

四、遇到的问题

1. get rid of POM not found warning for org.eclipse.m2e:lifecycle-mapping

  stackoverflow印度阿三们的解决方案已成功解决上述的问题:参考网址:https://stackoverflow.com/questions/7905501/get-rid-of-pom-not-found-warning-for-org-eclipse-m2elifecycle-mapping/

2. Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.2.2:testCompile

  这报错主要出现在Spark-SQL编译出错,原因在maven本地仓库中scala依赖冲突,第一次编译的时候没有配置scala版本,默认用了2.10版本,这次是编译成功的,但后面再编译的时候,我选择了2.11版本,然后在spark-sql模块编译失败,然后去google找解决方案,链接如下所示: https://github.com/davidB/scala-maven-plugin/issues/215

  通过以下命令删除maven本地仓库(默认路径)的scala依赖:

# rm -r ~/.m2/repository/org/scala-lang/scala-reflect/2.1*

  如果编译还无法成功,则在源码根目录pom.xml文件添加依赖:

<dependency>
<groupId>net.alchim31.maven</groupId>
  <artifactId>scala-maven-plugin</artifactId>
<version>3.2.2</version>
</dependency>

3. Error: A JNI error has occurred, please check your installation and try again

  原因:启动编译好的Spark,出现如上的错误,是因为没有在spark-env.sh导入hadoop classpath

  解决方案:在shell终端上输入hadoop classpath:

  然后再spark-env.sh添加上去:

4. 启动Hive时报错,缺少spark-assembly-*.jar

  

  其主要的原因是:在hive.sh的文件中,发现了这样的命令,原来初始当spark存在的时候,进行spark中相关的JAR包的加载。而自从spark升级到2.0.0之后,原有的lib的整个大JAR包已经被分散的小JAR包的替代,所以肯定没有办法找到这个spark-assembly的JAR包。这就是问题所在。

  

  解决方案:将这个spark-assembly-*.jar`替换成jars/*.jar,就不会出现这样的问题。

  

参考资料:http://spark.apache.org/docs/2.3.3/building-spark.html

        https://www.cnblogs.com/xinfang520/p/7763328.html

        https://blog.csdn.net/m0_37065162/article/details/81015096

        https://cwiki.apache.org/confluence/display/Hive/Hive+on+Spark%3A+Getting+Started

伪分布式Spark + Hive on Spark搭建的更多相关文章

  1. 第七章 伪分布式安装hive,sqoop

    第一部分:先讲这么去安装hive.先去hive官网下载,我这里以hive-0.12.0为例子. 前面第二章讲了安装hadoop,hbase实例,我们继续讲这么安装hive,先说下hive配置文件 一, ...

  2. 本地搭建Hadoop伪分布式环境之四:开启搭建Hadoop2.4.0之旅

    1.准备软件  64位下载包下载:     hadoop-2.4.0-64bit.tar.gz 百度网盘: 链接: http://pan.baidu.com/s/1hqEDe2S password: ...

  3. hadoop伪分布式平台搭建(centos 6.3)

    最近要写一个数据量较大的程序,所以想搭建一个hbase平台试试.搭建hbase伪分布式平台,需要先搭建hadoop平台.本文主要介绍伪分布式平台搭建过程. 目录: 一.前言 二.环境搭建 三.命令测试 ...

  4. 007 linux环境下的伪分布式环境搭建

    本文的配置环境是VMware10+centos2.5. 在学习大数据过程中,首先是要搭建环境,通过实验,在这里简短粘贴书写关于自己搭建大数据伪分布式环境的经验. 如果感觉有问题,欢迎咨询评论. 零:下 ...

  5. Spark记录-源码编译spark2.2.0(结合Hive on Spark/Hive on MR2/Spark on Yarn)

    #spark2.2.0源码编译 #组件:mvn-3.3.9 jdk-1.8 #wget http://mirror.bit.edu.cn/apache/spark/spark-2.2.0/spark- ...

  6. kafka系列一:单节点伪分布式集群搭建

    Kafka集群搭建分为单节点的伪分布式集群和多节点的分布式集群两种,首先来看一下单节点伪分布式集群安装.单节点伪分布式集群是指集群由一台ZooKeeper服务器和一台Kafka broker服务器组成 ...

  7. 【每天五分钟大数据-第一期】 伪分布式+Hadoopstreaming

    说在前面 之前一段时间想着把 LeetCode 每个专题完结之后,就开始着手大数据和算法的内容. 想来想去,还是应该穿插着一起做起来. 毕竟,如果只写一类的话,如果遇到其他方面,一定会遗漏一些重要的点 ...

  8. hadoop一键安装伪分布式

    hadoop伪分布式和hive在openSUSE中的安装 在git上的路径为:https://github.com/huabingood/hadoop--------/tree/master 各个文件 ...

  9. [b0006] Spark 2.0.1 伪分布式搭建练手

    环境: 已经安装好: hadoop 2.6.4  yarn 参考: [b0001] 伪分布式 hadoop 2.6.4 准备: spark-2.0.1-bin-hadoop2.6.tgz 下载地址:  ...

随机推荐

  1. WordPress教程之初识WordPress

    你是否梦想过以极低的成本获得一个漂亮的网站,而无需聘请专业的开发和设计人员,也不必学习任何编程知识,并且网站功能可以无限扩展?对这些问题中的任何一个,如果你的答案是肯定的,那么 WordPress 将 ...

  2. django基础知识之Ajax:

    使用Ajax 使用视图通过上下文向模板中传递数据,需要先加载完成模板的静态页面,再执行模型代码,生成最张的html,返回给浏览器,这个过程将页面与数据集成到了一起,扩展性差 改进方案:通过ajax的方 ...

  3. C++学习书籍推荐《Inside the C++ Object Model》下载

    百度云及其他网盘下载地址:点我 作者简介 Stanley B. Lippman is Architect with the Visual C++ development team at Microso ...

  4. [NOIP2013]华容道 题解(搜索)

    [NOIP2013]华容道 [题目描述] 这道题根据小时候玩华容道不靠谱的经验还以为是并查集,果断扑街.考后想想也是,数据这么小一定有他的道理. 首先由于是最小步数,所以BFS没跑了.那么我们大可把这 ...

  5. 修改Windows10的host文件。

    一.Windows10中host地址. c:\windows\system32\drivers\etc\hosts 其他系统中的位置. Windows操作系统(Windows XP/7/8/10): ...

  6. STM32F0_HAL库驱动描述——HAL驱动程序概述

    HAL库文件结构: HAL驱动文件: 外设驱动API文件和头文件:包含了常见主要的通用API,其中ppp表示外设名称,如adc.usart.gpio.irda等: stm32f0xx_hal_ppp. ...

  7. Java连载6-变量的要求

    一.数据类型的作用 (1)不同的数据有不同的类型,不同的数据类型底层会分配不同的大小的空间 (2)数据类型是指程序在运行阶段应该分配多大的内存空间 二.变量要求 变量中存储的具体的“数据”必须和变量的 ...

  8. .md 文件格式

    # .md 文件怎么编写 > 整理一套常用操作,自己来使用 > ## 标题 >> 写法: \# 这是一个一级标题 \## 这是一个二级标题 \### 这是一个三级标题 \### ...

  9. JavaScript函数及闭包

    前面一片文章讲到过一点函数,了解到每声明一个函数就会产生一个作用域.而外面的作用域访问不了里面的作用域(把里面的变量和函数隐藏起来),而里面的可以访问到外面的.对于隐藏变量和函数是一个非常有用的技术. ...

  10. Baozi Leetcode Solution 205: Isomorphic Strings

    Problem Statement Given two strings s and t, determine if they are isomorphic. Two strings are isomo ...