服务器上搭建spark开发环境

1、安装相应的软件

(1)安装jdk

     下载地址:http://www.Oracle.com/technetwork/java/javase/downloads/index.html

(2)安装scala 

    下地地址: http://www.scala-lang.org/

(3)安装spark

     下载地址:http://spark.apache.org/downloads.html

(4)安装sbt

如果需要使用到scala独立应用编程,还需一个用来构建应用的工具,sbt或者maven

sbt的安装过程见:http://blog.csdn.net/wuzhilon88/article/details/46300491

其中:

chmod u+x sbt 

这一步,是把sbt文件的权限更改,表示给当前目录下sbt这个文件的所有者增加执行权限。

2、配置环境变量

    可以配置用户环境变量文件:

vim ~/.bash_profile

    添加如下几个环境变量:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-1.b15.el6_7.x86_64
export SCALA_HOME=/home/zengzc/scala-2.10.6
export SPARK_HOME=/home/zengzc/spark-1.6.0-bin-hadoop2.6
export SPARK_LOCAL_IP=localhost

其中,spark_local_ip这个变量可以在项目的启动脚本里面写。但是后来发现,到后面运行spark程序的时候,依然会出现

16/03/04 14:09:22 ERROR : hefei-log-84: hefei-log-84: unknown error
java.net.UnknownHostException: hefei-log-84: hefei-log-84: unknown error
    at java.net.InetAddress.getLocalHost(InetAddress.java:1505)
    at tachyon.util.network.NetworkAddressUtils.getLocalIpAddress(NetworkAddressUtils.java:355)
    at tachyon.util.network.NetworkAddressUtils.getLocalHostName(NetworkAddressUtils.java:320)

这样的错误,解决办法是在/etc/hosts里面添加正确的主机名和IP的映射。

3、使用spark shell

    在spark解压后的目录下,执行./bin/spark-shell,可以启动scala shell 并初始化一个sparkcontext对象。

                                      执行./bin/pyspark,则可以在python shell中使用spark。

4、用sbt建立spark scala独立应用程序

(1)写.scala应用程序文件;

(2)写.sbt配置依赖文件;

(3)bash: find . 核对目录结构:

# Your directory layout should look like this
$ find .
.
./simple.sbt
./src
./src/main
./src/main/scala
./src/main/scala/SimpleApp.scala

(4)bash: sbt package  打包;

(5)用spark中的spark-submit运行.jar:

$ YOUR_SPARK_HOME/bin/spark-submit 
  --class "SimpleApp" 
  --master local[4] 
  target/scala-2.10/simple-project_2.10-1.0.jar

上面的 local[4] 表示程序运行在4个核上面,如果是在集群上面提交任务,则master后面的参数应该是yarn,然后--deploy-mode的参数是cluster;因为--deploy-mode的参数默认是client。

注意:在build.sbt添加新的dependencies library之后,有时会出现classdefnotfoundException这样的错误,解决方法如:

http://*.com/questions/28459333/how-to-build-an-uber-jar-fat-jar-using-sbt-within-intellij-idea/28498443#28498443

主要是需要添加一个sbt assembly插件,用来合并依赖库之间定义类的冲突。添加完后,以后运行scala程序就用sbt assembly取代sbt package,然后再submit即可。

5、spark集群查看log命令:

yarn logs -applicationId application_1479387059004_174425 > a
 
spark集群kill掉自己任务的命令:
yarn --config /usr/local/hadoop-2.7.0/etc/hadoop-infosec-radar application -kill application_1479387059004_178692/