Spark开发环境的配置

软件版本:Spark 0.9

配置Spark开发环境,其实分为三个层次,一种是针对运维人员,把Spark安装部署到集群;一种是针对普通开发者,引入Spark的jar包,调用Spark提供的接口,编写分布式程序,写好后编译成jar,就可以提交到Spark集群去运行了;第三种是针对Spark开发者,为了给Spark贡献代码,需要git clone Spark的代码,然后导入IDE,为Spark开发代码。

1 部署Spark集群

这种是运维人员在生产环境下,搭建起一个Spark集群。

(可选)创建新用户 Spark

一般我倾向于把需要启动daemon进程,对外提供服务的程序,即服务器类的程序,安装在单独的用户下面。这样可以做到隔离,运维方面,安全性也提高了。

创建一个新的group,

$ sudo groupadd spark

创建一个新的用户,并加入group,

$ sudo useradd -g spark spark

给新用户设置密码,

$ sudo passwd spark

在每台机器上创建 spark 新用户,并配置好SSH无密码,参考我的另一篇博客,SSH无密码登录的配置

假设有三台机器,hostname分别是 master, worker01, worker02。

1.1 下载 Spark 预编译好的二进制包

如果你需要用到HDFS,则要针对Hadoop 1.x 和Hadoop 2.x 选择不同的版本。这里我选择 Hadoop 2.x 版。

spark@master $ wget http://d3kbcqa49mib13.cloudfront.net/spark-0.9.0-incubating-bin-hadoop1.tgz
spark@master $ tar zxf spark-0.9.0-incubating-bin-hadoop1.tgz -C ~/local/opt

1.2 将tgz压缩包scp到所有机器,解压到相同的路径

spark@master $ scp spark-0.9.0-incubating-bin-hadoop1.tgz spark@worker01:~
spark@master $ ssh worker01
spark@worker01 $ tar zxf spark-0.9.0-incubating-bin-hadoop1.tgz -C ~/local/opt
spark@worker01 $ exit
spark@master $ scp spark-0.9.0-incubating-bin-hadoop1.tgz spark@worker02:~
spark@master $ ssh worker02
spark@worker02 $ tar zxf spark-0.9.0-incubating-bin-hadoop1.tgz -C ~/local/opt
spark@worker02 $ exit

1.3 修改配置文件

Spark 0.9 以后,配置文件简单多了,只有一个必须要配置,就是 conf/slaves 这个文件。在这个文件里添加slave的hostname。

1.4 拷贝配置文件到所有slave

spark@master $ spark@master $ scp ./conf/slaves spark@worker01:~/local/opt/spark-0.9.0-incubating-bin-hadoop1/conf
spark@master $ spark@master $ scp ./conf/slaves spark@worker02:~/local/opt/spark-0.9.0-incubating-bin-hadoop1/conf

1.5 启动Spark集群

spark@master $ ./sbin/start-all.sh

也可以一台一台启动,先启动 master

spark@master $ ./sbin/start-master.sh

启动两台 slave,

spark@worker01 $ ./sbin/start-slave.sh 1 spark://master:7077
spark@worker02 $ ./sbin/start-slave.sh 2 spark://master:7077

其中,12 是 worker的编号,可以是任意数字,只要不重复即可,spark://master:7077 是 master 的地址。以后向集群提交作业的时候,也需要这个地址。

1.6 测试一下,向集群提交一个作业

spark@master $ ./bin/run-example org.apache.spark.examples.SparkPi spark://master:7077

2 配置普通开发环境

TODO

3 配置Spark开发环境

当你需要修改Spark的代码,或给Spark添加代码,就需要阅读本节了。

3.1 git clone 代码

git clone git@github.com:apache/incubator-spark.git

3.2 编译

Spark脚本会自动下载对应版本的sbt和scala编译器,因此机器事先不需要安装sbt和scala

按照 github 官方repo首页的文档,输入如下一行命令即可开始编译,

./sbt/sbt assembly

3.3 运行一个例子

./run-example org.apache.spark.examples.SparkPi local

说明安装成功了。

3.4 试用 spark shell

./spark-shell

会出现scala>提示符号,可见spark脚本自动下载了scala编译器,其实就是一个jar,例如scala-compiler-2.10.3.jar

3.5 安装scala

开发Spark的时候,由于Intellij Idea 需要调用外部的sbt和scala,因此机器上还是需要安装scala和sbt。

打开 projects/SparkBuild.scala,搜索scalaVersion,获得spark所使用的scala编译器版本,然后去scala官网http://www.scala-lang.org/,下载该版本的scala编译器,并设置SCALA_HOME环境变量,将bin目录加入PATH。例如下载scala-2.10.3.tgz,解压到/opt,设置环境变量如下:

sudo vim /etc/profile
export SCALA_HOME=/opt/scala-2.10.3
export PATH=$PATH:$SCALA_HOME/bin

3.6 安装sbt

打开projects/build.properties,可以看到spark所使用的sbt版本号,去 官网http://www.scala-sbt.org/下载该版本的sbt,双击安装。并设置SBT_HOME环境变量,将bin目录加入PATH。

3.7 下载并安装idea

Spark核心团队的hashjoin曾在我博客上留言,说他们都使用idea在开发spark,我用过Scala IDE和idea,两者各有优劣,总的来说,idea要好用一些,虽然我是老牌eclipse用户,但我还是转向了idea。

去idea官网下载idea的tar.gz包,解压就行。运行idea,安装scala插件。

3.8 生成idea项目文件

在源码根目录,使用如下命令

./sbt/sbt gen-idea

就生成了idea项目文件。

3.9 Open Project

使用 idea,点击File->Open project,浏览到 incubator-spark文件夹,打开项目,就可以修改Spark代码了。

spark版本:spark-0.9.1-bin-hadoop2  下载地址http://spark.apache.org/downloads.html
这里的spark有三个版本:

    For Hadoop 1 (HDP1, CDH3): find an Apache mirror or direct file download
    For CDH4: find an Apache mirror or direct file download
    For Hadoop 2 (HDP2, CDH5): find an Apache mirror or direct file download
我的hadoop版本是hadoop2.2.0的,所以下载的是for hadoop2

关于spark的介绍可以参看http://spark.apache.org/
Apache Spark is a fast and general engine for large-scale data processing. 

spark运行时需要scala环境,这里下载最新版本的scala  http://www.scala-lang.org/

scala是一种可伸缩的语言是一种多范式的编程语言,一种类似java的编程,设计初衷是要集成面向对象编程和函数式编程的各种特性。Scala是在JVM上运行,Scala是一种纯粹的面向对象编程语言,而又无缝地结合了命令式和函数式的编程风格


ok 开始配置spark:

我是在hadoop的安装用户下面安装的,所以这里直接编辑/home/hadoop/.bashrc

[hadoop@localhost ~]$ cat .bashrc 
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi


# User specific aliases and functions
export HADOOP_HOME=/home/hadoop/hadoop
export HBASE_HOME=/home/hadoop/hbase
export HIVE_HOME=/home/hadoop/hive
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_HOME=/etc/home/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SCALA_HOME=/home/hadoop/scala
export SPARK_HOME=/home/hadoop/spark

export PATH=${PATH}:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HBASE_HOME/bin:$HIVE_HOME/bin:$SCALA_HOME/bin:$SPARK_HOME/bin
export CLASSPATH=$CLASSPATH:$HADOOP/lib:$HBASE_HOME/lib

1.scala安装:
将scala解压到hadoop根目录下 
ln -ls scala-2.11.0 scala#建立软链接 
lrwxrwxrwx.  1 hadoop hadoop        12 May 21 09:15 scala -> scala-2.11.0
drwxrwxr-x.  6 hadoop hadoop      4096 Apr 17 16:10 scala-2.11.0

编辑.bashrc  加入  export SCALA_HOME=/home/hadoop/scala
export PATH=${PATH}:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HBASE_HOME/bin:$HIVE_HOME/bin:$SCALA_HOME/bin:$SPARK_HOME/bin
保存 并使环境变量生效  source  .bashrc  
验证安装:
[hadoop@localhost ~]$ scala -version
Scala code runner version 2.11.0 -- Copyright 2002-2013, LAMP/EPFL
能够正常显示版本说明安装成功

2:spark配置:
tar -xzvf  spark-0.9.1-bin-hadoop2.tgz
ln -s spark-0.9.1-bin-hadoop2 spark
然后配置.bashrc  
export SPARK_HOME=/home/hadoop/spark
export PATH=${PATH}:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HBASE_HOME/bin:$HIVE_HOME/bin:$SCALA_HOME/bin:$SPARK_HOME/bin

编辑完成source .bashrc 使环境变量生效

spark-env.sh配置:
spark-env.sh是不存在的 需要从 cat spark-env.sh.template >> spark-env.sh 生成

然后编辑spark-env.sh

加入一下内容
export SCALA_HOME=/home/hadoop/scala
export JAVA_HOME=/usr/java/jdk
export SPARK_MASTER=localhost
export SPARK_LOCAL_IP=localhost
export HADOOP_HOME=/home/hadoop/hadoop
export SPARK_HOME=/home/hadoop/spark
export SPARK_LIBARY_PATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$HADOOP_HOME/lib/native
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

保存退出

3.启动spark
跟hadoop的目录结构相似 在spark下面的sbin里边放了启动和关闭的shell文件
-rwxrwxr-x. 1 hadoop hadoop 2504 Mar 27 13:44 slaves.sh
-rwxrwxr-x. 1 hadoop hadoop 1403 Mar 27 13:44 spark-config.sh
-rwxrwxr-x. 1 hadoop hadoop 4503 Mar 27 13:44 spark-daemon.sh
-rwxrwxr-x. 1 hadoop hadoop 1176 Mar 27 13:44 spark-daemons.sh
-rwxrwxr-x. 1 hadoop hadoop  965 Mar 27 13:44 spark-executor
-rwxrwxr-x. 1 hadoop hadoop 1263 Mar 27 13:44 start-all.sh
-rwxrwxr-x. 1 hadoop hadoop 2384 Mar 27 13:44 start-master.sh
-rwxrwxr-x. 1 hadoop hadoop 1520 Mar 27 13:44 start-slave.sh
-rwxrwxr-x. 1 hadoop hadoop 2258 Mar 27 13:44 start-slaves.sh
-rwxrwxr-x. 1 hadoop hadoop 1047 Mar 27 13:44 stop-all.sh
-rwxrwxr-x. 1 hadoop hadoop 1124 Mar 27 13:44 stop-master.sh
-rwxrwxr-x. 1 hadoop hadoop 1427 Mar 27 13:44 stop-slaves.sh
[hadoop@localhost sbin]$ pwd
/home/hadoop/spark/sbin

这里只需要运行start-all就可以了~~~
[hadoop@localhost sbin]$ ./start-all.sh 
rsync from localhost
rsync: change_dir "/home/hadoop/spark-0.9.1-bin-hadoop2/sbin/localhost" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]
starting org.apache.spark.deploy.master.Master, logging to /home/hadoop/spark/logs/spark-hadoop-org.apache.spark.deploy.master.Master-1-localhost.out
localhost: rsync from localhost
localhost: rsync: change_dir "/home/hadoop/spark-0.9.1-bin-hadoop2/localhost" failed: No such file or directory (2)
localhost: rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]
localhost: starting org.apache.spark.deploy.worker.Worker, logging to /home/hadoop/spark/logs/spark-hadoop-org.apache.spark.deploy.worker.Worker-1-localhost.out

通过jps查看启动是否成功:
[hadoop@localhost sbin]$ jps
4706 Jps
3692 DataNode
3876 SecondaryNameNode
4637 Worker
4137 NodeManager
4517 Master
4026 ResourceManager
3587 NameNode

可以看到有一个Master跟Worker进程 说明启动成功
可以通过http://localhost:8080/查看spark集群状况

4 运行spark自带的程序  
首先需要进入spark下面的bin目录 :
[hadoop@localhost sbin]$ ll ../bin/
total 56
-rw-rw-r--. 1 hadoop hadoop 2601 Mar 27 13:44 compute-classpath.cmd
-rwxrwxr-x. 1 hadoop hadoop 3330 Mar 27 13:44 compute-classpath.sh
-rwxrwxr-x. 1 hadoop hadoop 2070 Mar 27 13:44 pyspark
-rw-rw-r--. 1 hadoop hadoop 1827 Mar 27 13:44 pyspark2.cmd
-rw-rw-r--. 1 hadoop hadoop 1000 Mar 27 13:44 pyspark.cmd
-rwxrwxr-x. 1 hadoop hadoop 3055 Mar 27 13:44 run-example
-rw-rw-r--. 1 hadoop hadoop 2046 Mar 27 13:44 run-example2.cmd
-rw-rw-r--. 1 hadoop hadoop 1012 Mar 27 13:44 run-example.cmd
-rwxrwxr-x. 1 hadoop hadoop 5151 Mar 27 13:44 spark-class
-rwxrwxr-x. 1 hadoop hadoop 3212 Mar 27 13:44 spark-class2.cmd
-rw-rw-r--. 1 hadoop hadoop 1010 Mar 27 13:44 spark-class.cmd
-rwxrwxr-x. 1 hadoop hadoop 3184 Mar 27 13:44 spark-shell
-rwxrwxr-x. 1 hadoop hadoop  941 Mar 27 13:44 spark-shell.cmd


run-example org.apache.spark.examples.SparkLR spark://localhost:7077


run-example org.apache.spark.examples.SparkPi spark://localhost:7077



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值