随着Hadoop的深入学习,渐渐用到了Hadoop相关的家族成员Hive、Spark、Sqoop等,其中Hive主要是为了使我们在进行大数据开发的时候更加快捷高效,而且又因为它的类SQL的特性使我们很容易上手;而Spark这个工具是极为高效的大数据的处理引擎,据说是可以达到Hadoop的MapReduce处理速度的几十倍,但是由于它不像Hive使用类SQL的语法,因此学习的成本要高很多,因此在Hadoop社区中开发人员开发引进了基于Spark数据处理引擎的Hive,称为Hive On Spark。下面我们来学习下如何把Spark作为数据处理引擎集成到Hive中。
1、源码编译Spark
Spark源码下载地址:http://spark.apache.org/downloads.html
在官方网站上我们可以下载任意版本的Spark源码,在这里我们选择Spark-1.3.1.
wget http://www.apache.org/dyn/closer.lua/spark/spark-1.3.1/spark-1.3.1.tgz
tar -zxvf spark-1.3.1.tgz
cd spark-1.3.1
文件目录结构大致为
目录下有一个pom.xml的文件,这个文件中包含了我们在编译源码时所需要的依赖和条件,我们需要根据自己的条件来修改这个文件
修改完毕后保存
然后,执行以下命令
./make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoop-provided,hadoop-2.2,parquet-provided"
注意,这里是编译不含hive 相关jar包的spark安装包,在编译期间一定要处于联网的情况下并且最好是把防火墙关掉。
编译成功后
源码目录下就多了这样一个二进制文件了,并且在assembly/target/scale-2.10文件夹下就多了spark-assembly-1.3.1-hadoop2.2.0.jar 这个文件
2、安装Spark
解压安装包
tar -zxvf spark-1.3.1-bin-hadoop2-without-hive.tgz
mv spark-1.3.1-bin-hadoop2-without-hive spark-1.3.1
配置环境变量
SPARK_HOME=/mnt/sdd/spark-1.3.1
export PATH=$SPARK_HOME/bin:$PATH
export SPARK_HOME=$SPARK_HOME
编辑配置文件
vim spark-env.sh
增加以下配置
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HIVE_CONF_DIR=${HIVE_HOME}/conf
export SPARK_LOCAL_IP=master
安装测试
cd /mnt/sdd/spark-1.3.1
./bin/run-example SparkPi 10
出现上面的内容且无报错,则证明安装成功!
3、配置Hive On Spark
Hive On Spark 是指把Hive默认的数据处理引擎改为Spark,我们这里使用的是Hive-1.2.1版本的Spark,但是在配置过程中发现只有Spark-1.3.1才能与之集成成功,其他版本的Spark均失败了。可能是应为版本兼容性的问题吧。
配置hive-site.xml
更改默认数据执行引擎为spark
cp spark-1.3.1/conf/spark-defaults.conf hive-1.2.1/conf/
vim spark-defaults.conf
配置spark-defaults.conf
spark.home /mnt/sdd/spark-1.3.1
spark.master spark://master:7077
spark.eventLog.enabled true
spark.eventLog.dir /mnt/sdd/hive-1.2.1/sparkLog
spark.serializer org.apache.spark.serializer.KryoSerializer
spark.driver.memory 512m
spark.executor.memory 512m
spark.executor.cores 1
spark.yarn.app.name "Spark 1.3.1"
spark.executor.extraJavaOptions -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"
注意:设置的spark.driver.memory和spark.executor.memory的值要小于当前内存可用大小,否则执行动作不会执行
4、安装测试
测试是否加载spark-assembly-1.3.1-hadoop2.2.0.jar
如果出现上图则证明已经加载成功,注意我们是在第二步中配置的SPARK_HOME的安装目录/lib/
测试运行成功
OK,配置完成。