1 安装环境
Spark 1.3.1需要JDK1.6或更高版本,我们这里采用jdk 1.7.0_67
Spark 1.3.1需要Scala 2.10或更高版本,我们这里采用scala 2.11.6
2 部署Hadoop
Spark目前支持多种分布式部署方式:
1、Standalone Deploy Mode
2、Amazon EC2
3、Apache Mesos
4、Hadoop YARN
第一种方式是单独部署(可单机或集群),不需要有依赖的资源管理器,其它三种都需要将spark部署到对应的资源管理器上。本文采用基于Hadoop YARN的部署方式。
Hadoop部署方式参考:http://blog.youkuaiyun.com/wenjian68/article/details/37541689
3 安装scala
3.1 下载scala
wget http://downloads.typesafe.com/scala/2.11.6/scala-2.11.6.tgz
3.2 解压文件
tar -zxvf scala-2.11.6.tgz
3.3 配置环境变量
$vim /etc/profile
SCALA_HOME=/usr/local/scala-2.11.6
PATH=$PATH:$SCALA_HOME/bin
echo SACLA_HOMEPATH
$ source/etc/profile
3.4 验证scala
$ scala -version
Scala code runnerversion 2.11.6 -- Copyright 2002-2013, LAMP/EPFL
$ scala
Welcome to Scalaversion 2.11.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_67).
Type inexpressions to have them evaluated.
Type :help formore information.
4 安装spark
4.1 下载解压
wget http://mirror.bit.edu.cn/apache/spark/spark-1.3.1/spark-1.3.1-bin-hadoop2.6.tgz
tar -zxvfspark-1.3.1-bin-hadoop2.6.tgz
4.2 配置profile
$vim /etc/profile
export SPARK_HOME=usr/local/jediael/spark-1.3.1
export PATH=$PATH:$SPARK_HOME/bin
echo SPARK_HOMEPATH
$source/etc/profile
4.3 配置spark-env.sh
$vim $JAVA_HOME/conf/spark-env.sh
export JAVA_HOME=/usr/local/jdk1.7.0_67
exportSCALA_HOME=/usr/lib/scala-2.11.6
exportSPARK_MASTER_IP=master
exportSPARK_WORKER_INSTANCES=1
exportSPARK_WORKER_MEMORY=1024m
exportSPARK_MASTER_PORT=8090
exportSPARK_MASTER_WEBUI_PORT=8091
exportSPARK_WORKER_PORT=8092
exportSPARK_WORKER_WEBUI_PORT=8093
4.4 配置slaves
$vim $JAVA_HOME/conf/slaves
slave1
4.5 配置spark-defaults.conf
$vim conf/spark-defaults.conf
spark.master spark://master:8090
spark.eventLog.enabled true
spark.eventLog.dir hdfs://master:9000/spark_log
4.6 启动集群
$./sbin/start-all.sh
如果start-all方式无法正常启动相关的进程,可以在$SPARK_HOME/logs目录下查看相关的错误信息。其实,你还可以像Hadoop一样单独启动相关的进程,在master节点上运行下面的命令:
在Master上执行:
./sbin/start-master.sh
在Worker上执行:
./sbin/start-slave.sh 3 spark://master:8090 --webui-port 8091
然后检查进程是否启动,执行jps命令,可以看到Worker进程或者Master进程。然后可以在WEB UI上查看http://masterSpark:8091/可以看到所有的work 节点,以及他们的 CPU 个数和内存等信息。
4.7 Local模式运行demo
比如:
./bin/run-exampleSparkLR 2 local
或者
./bin/run-exampleSparkPi 2 local
这两个例子前者是计算线性回归,迭代计算;后者是计算圆周率
4.8 shell 交互式模式
./bin/spark-shell--master spark://master:8090
如果在conf/spark-env.sh中配置了MASTER:
exportMASTER=spark://${SPARK_MASTER_IP}:${SPARK_MASTER_PORT}
就可以直接用 ./bin/spark-shell启动了。
spark-shell作为应用程序,是将作业提交给spark集群,然后spark集群分配到具体的worker来处理,worker在处理作业的时候会读取本地文件。
这个shell是修改了的scala shell,打开一个这样的shell会在WEB UI中可以看到一个正在运行的Application
5 一个 scala & spark 例子
这个例子首先用shell 生成 150,000,000 个随机数,然后用spark 统计每个随机数频率,以观察随机数是否均匀分布。
shell:
generateNum(){
c=1
while [[ $c -le 5000000 ]]
do
echo $(($RANDOM/500))
((c++))
done
}
for i in `seq 3`
do
generateNum> ${i}.txt &
done
wait
echo "--------------- DONE -------------------"
cat [0-9]*.txt > num.txt
hadoop fs -put/usr/local/hadoop-2.2.0/data/num.txt /spark
scala:
val file =sc.textFile("hdfs://master:9000//spark//num.txt")
val count = file.flatMap(line => line.split("")).map(word => (word, 1)).reduceByKey(_+_)
count.sortBy(_._2).map(x => x._1 + "\t" +x._2).saveAsTextFile("hdfs://master:9000//spark//result")
shell:
hadoop fs -cat /spark/result/p* | sort -k2n