一、安装JDK、Hadoop、 Spark、Scala等,搭建spark集群
环境:CentOS 6.4, Hadoop 1.1.2, JDK 1.7, Spark 0.7.2, Scala 2.9.3
折腾了几天,终于把Spark 集群安装成功了,其实比hadoop要简单很多,由于网上搜索到的博客大部分都还停留在需要依赖mesos的版本,走了不少弯路。
1. 安装 JDK 1.7
yum search openjdk-devel
sudo yum install java-1.7.0-openjdk-devel.x86_64
/usr/sbin/alternatives --config java
/usr/sbin/alternatives --config javac
sudo vim /etc/profile
# add the following lines at the end
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.19.x86_64
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# save and exit vim
# make the bash profile take effect immediately
$ source /etc/profile
# test
$ java -version
参考我的另一篇博客,安装和配置CentOS服务器的详细步骤。
2. 安装 Scala 2.9.3
Spark 0.7.2 依赖 Scala 2.9.3, 我们必须要安装Scala 2.9.3.
下载scala-2.9.3.tgz并保存到home目录.
$ tar -zxf scala-2.9.3.tgz
$ sudo mv scala-2.9.3 /usr/lib
$ sudo vim /etc/profile
# add the following lines at the end
export SCALA_HOME=/usr/lib/scala-2.9.3
export PATH=$PATH:$SCALA_HOME/bin
# save and exit vim
#make the bash profile take effect immediately
source /etc/profile
# test
$ scala -version
3. 下载预编译好的Spark
下载预编译好的Spark, spark-0.7.2-prebuilt-hadoop1.tgz.
如果你想从零开始编译,则下载源码包,但是我不建议你这么做,因为有一个Maven仓库,https://www.sodocs.net/doc/a99389101.html,, 被墙了,导致编译时需要翻墙,非常麻烦。如果你有DIY精神,并能顺利翻墙,则可以试试这种方式。
4. 本地模式
4.1 解压
$ tar -zxf spark-0.7.2-prebuilt-hadoop1.tgz
4.2 设置SPARK_EXAMPLES_JAR 环境变量
$ gedit /etc/profile
# add the following lines at the end
export
SPARK_EXAMPLES_JAR=/home/jay/spark-0.7.2/examples/target/scala-2.9.3/spark-exam ples_2.9.3-0.7.2.jar
# save and exit vim
#make the bash profile take effect immediately
$ source /etc/profile
这一步其实最关键,很不幸的是,官方文档和网上的博客,都没有提及这一点。我是偶然看到了这两篇帖子,Running SparkPi, Null pointer exception when running ./run spark.examples.SparkPi local,才补上了这一步,之前死活都无法运行SparkPi。
4.3 (可选)设置 SPARK_HOME环境变量,并将
SPARK_HOME/bin加入PATH
$ gedit /etc/profile
# add the following lines at the end
export SPARK_HOME=/home/jay/spark-0.7.2
export PATH=$PATH:$SPARK_HOME/bin
# save and exit vim
#make the bash profile take effect immediately
$ source /etc/profile
4.4 现在可以运行SparkPi了
$ cd ~/spark-0.7.2
$ ./run spark.examples.SparkPi local
5. 集群模式
5.1 安装Hadoop
用VMware Workstation 创建三台CentOS 虚拟机,hostname分别设置为 master, slave01, slave02,设置SSH无密码登陆,安装hadoop,然后启动hadoop集群。参考我的这篇博客,在CentOS上安装Hadoop.
5.2 Scala
在三台机器上都要安装 Scala 2.9.3 , 按照第2节的步骤。JDK在安装Hadoop时已经安装了。
5.3 在master上安装并配置Spark
解压
$ tar -zxf spark-0.7.2-prebuilt-hadoop1.tgz
设置SPARK_EXAMPLES_JAR 环境变量
$ gedit /etc/profile
# add the following lines at the end
SPARK_EXAMPLES_JAR=/home/jay/spark-0.7.2/examples/target/scala-2.9.3/spark-exam ples_2.9.3-0.7.2.jar
# save and exit vim
#make the bash profile take effect immediately
$ source /etc/profile
在 in conf/spark-env.sh中设置SCALA_HOME
$ cd ~/spark-0.7.2/conf
$ mv spark-env.sh.template spark-env.sh
$ vim spark-env.sh
# add the following line
export SCALA_HOME=/usr/lib/scala-2.9.3
# save and exit
在conf/slaves, 添加Spark worker的hostname, 一行一个。
$ vim slaves
slave01
slave02
# save and exit
(可选)设置 SPARK_HOME环境变量,并将SPARK_HOME/bin加入PATH
$ gedit /etc/profile
# add the following lines at the end
export SPARK_HOME=/home/jay/spark-0.7.2
export PATH=$PATH:$SPARK_HOME/bin
# save and exit vim
#make the bash profile take effect immediately
$ source /etc/profile
5.4 在所有worker上安装并配置Spark
既然master上的这个文件件已经配置好了,把它拷贝到所有的worker。注意,三台机器spark所在目录必须一致,因为master会登陆到worker上执行命令,master认为worker的spark路径与自己一样。
$ scp -r spark-0.7.2 dev@slave01:~
$ scp -r spark-0.7.2 dev@slave02:~
按照第5.3节设置SPARK_EXAMPLES_JAR环境变量,配置文件不用配置了,因为是直接从master复制过来的,已经配置好了。
5.5 启动 Spark 集群
在master上执行
$ cd ~/spark-0.7.2
$ bin/start-all.sh
检测进程是否启动
$ jps
11055 Jps
2313 SecondaryNameNode
2409 JobTracker
2152 NameNode
4822 Master
浏览master的web UI(默认http://localhost:8080). 这是你应该可以看到所有的word节点,以及他们的CPU个数和内存等信息。 ##5.6 运行SparkPi例子
$ cd ~/spark-0.7.2
$ ./run spark.examples.SparkPi spark://fang:7077
(可选)运行自带的例子,SparkLR 和 SparkKMeans.
#Logistic Regression
#./run spark.examples.SparkLR spark://fang:7077
#kmeans
$ ./run spark.examples.SparkKMeans spark://fang:7077 ./kmeans_data.txt 2 1 5.7 从HDFS读取文件并运行WordCount
$ cd ~/spark-0.7.2
$ hadoop fs -put README.md .
$ MASTER=spark://fang:7077 ./spark-shell
scala> val file = sc.textFile("hdfs://master:9000/user/dev/README.md")
scala> val count = file.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_+_)
scala> count.collect()
5.8 停止 Spark 集群
$ cd ~/spark-0.7.2
$ bin/stop-all.sh
二、安装工具sbt,来运行Scala程序
1、下载sbt通用平台压缩包:sbt-0.13.5.tgz
https://www.sodocs.net/doc/a99389101.html,/download.html
2、建立目录,解压文件到所建立目录
$ sudo mkdir /opt/scala/sbt
$ sudo tar zxvf sbt-0.13.5.tgz -C /opt/scala/
3、建立启动sbt的脚本文件
/*选定一个位置,建立启动sbt的脚本文本文件,如/opt/scala/sbt/ 目录下面新建文件名为sbt的文本文件*/
$ cd /opt/scala/sbt/
$ vim sbt
/*在sbt文本文件中添加
BT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
java $SBT_OPTS -jar bin/sbt-launch.jar "$@"
然后按esc键输入 :wq 保存退出,注意红色字体中的路径可以是绝对路径也可以是相对路径,只要能够正确的定位到解压的sbt文件包中的sbt-launch.jar文件即可*/
/×修改sbt文件权限×/
$ chmod u+x sbt
4、配置PATH环境变量,保证在控制台中可以使用sbt命令
$ vim ~/.bashrc
/*在文件尾部添加如下代码后,保存退出*/
export PATH=/opt/scala/sbt/:$PATH
/*使配置文件立刻生效*/
$ source ~/.bashrc
5、测试sbt是否安装成功
/*第一次执行时,会下载一些文件包,然后才能正常使用,要确保联网了,安装成功后显示如下*/
$ sbt sbt-version
[info] Set current project to sbt (in build file:/opt/scala/sbt/) [info] 0.13.5
6、sbt命令下运行Scala程序
编写好Scala程序,保存为.scala形式,拷贝程序文件到安装目录下,命令行下进入安装目录,运行sbt命令,显示出info信息,之后运行run命令,即可运行写好的Scala 程序。
三、Scala程序也可在eclipse中编写运行,只需安装一个Scala-IDE插件
1、安装完eclipse后,直接安装Scala-IDE即可,
2、重启eclipse,运行Scala程序。
Go to “File” - “New” - “Other…” and select “Scala Project” from the folder “Scala Wizards”
Chose a project name and select “Finish”
Select “File” - “New” - “Scala Object” to create a new object,Enter Hello as the name for the object and put greeter as the package name above
Save the file and select “Run” - “Run” from the menu. Chose to run as “Scala Application”
四、使用sbt工具将Scala程序打包,在spark集群环境下运行
如下Scala程序代码:
此段程序主要功能通过两个job并行分析spark自带的README.md文件中包含a和b 字母分别有多少行。
一、我们还需要建立一个simple.sbt文件,来加入spark 库依赖,scala程序执行的时候便可以调用spark库。
建立好simple.sbt文件后,由于需要对整个工程进行打包成jar文件才能执行,官网建议使用sbt(simple buildtool)这个工具对整个工程进行打包,而sbt对工程的目录有一定的要求,二、如下图所示建立好工程目录。
由于sbt工具并不是linux自带的软件,因此还需要安装,安装好了sbt工具后,运行sbt package命令(电脑需要联网),电脑会分析工程自行下载一些其他需要的文件,然后将文件打包,在我的电脑上在下图所示的目录中会生成simple-project_2.10-1.0.jar的包。
三、这个时候进入spark安装目录下,运行spark-submit命令并附带一些参数便可得到结果。
我们看到包含a的行数为73行,包含b的行数为35行。