当前位置: 首页>>系统&架构>>正文


LINUX下快速安装Spark[原创]

Spark作为一种通用且高性能的计算框架,不仅在性能上相对于hadoop mapreduce有了很大的提升;在易用性上也运超hadoop, 不只提供了map/reduce计算接口,还提供了大量其他实用的接口,使得编写分布式程序更加迅速高效。

Spark目前提供了Standalone/Yarn/Mesos几种安装模式,其中Standalone模式最为方便快捷。在这种模式下,Spark使用自由资源管理框架而不是借助Yarn或者Mesos。

下面我们来看看如果快速安装Spark Standalone.

1. 假设我们有4台机器,都是centos系统,上面已经安装了jdk和hadoop, 其中一台用做Master, 另外三台用作Worker。相关系统版本如下:

  • Centos版本: 6.4, 假设安装在/opt/java
  • dk版本:jdk1.7.0_45
  • hadoop版本: CDH 5(hadoop 2.3)

2. 下载对应的spark prebuild版本到Master机器,假设我们放在/home/spark目录下。(文件有200M+,下载比较慢)。

wget http://d3kbcqa49mib13.cloudfront.net/spark-1.3.0-bin-hadoop2.3.tgz

注意, 下载链接选择的Direct Download,在Mirror模式直接wget貌似有点问题。

1

 

 

 

 

3.  在/home/spark/目录下解压spark-1.3.0-bin-hadoop2.3.tgz文件

tar xzvf spark-1.3.0-bin-hadoop2.3.tgz

4. 修改配置,到spark-1.3.0-bin-hadoop2.3/conf目录下,使用template创建配置文件(这里只考虑了最简配置)

cp spark-env.sh.template spark-env.sh
cp slaves.template slaves
  •  在spark-env.sh中设置JAVA环境变量(不设置这个在启动spark集群的时候可能会报错 JAVA_HOME is not set):export JAVA_HOME=/opt/java
  • 在slaves中设置三台worker机器的IP:
# A Spark Worker will be started on each of the machines listed below.
10.71.48.113
10.71.48.114
10.71.48.115

5.  将修改好配置的目录spark-1.3.0-bin-hadoop2.3打包成spark-1.3.0-bin-hadoop2.3.tgz

tar czvf spark-1.3.0-bin-hadoop2.3.tgz spark-1.3.0-bin-hadoop2.3

6. 将压缩包从master拷贝到三台worker机器的/home/spark目录并解压,可以使用下面的脚本批量操作:

#!/bin/bash
if [ $# -ne 0 ]
then
echo "Usage: $0"
exit 1
fi

username=root
dist_dir=/home/spark/
filename=spark-1.3.0-bin-hadoop2.3
ips=(10.71.48.113 10.71.48.114 10.71.48.115)
for ip in ${ips[@]}
do
echo "process ${ip} at ${dist_dir}"
ssh ${username}@${ip} "mkdir -p ${dist_dir}" 0</dev/null
scp ../${filename}.tgz ${username}@${ip}:${dist_dir}
ssh ${username}@${ip} "cd ${dist_dir} && tar xzvf ${filename}.tgz" 0</dev/null
done

exit 0

7. 到master机器的/home/spark/spark-1.3.0-bin-hadoop2.3

  • 执行./sbin/start-all.sh 启动集群。
  • 执行./sbin/stop-all.sh 关闭集群

8. 安装好之后,可以通过http://master-ip:8080/网页可视化查看集群状态。

1

9. 测试spark程序,有两种模式,以python语言为例(spark另外支持java/scala):

  • shell交互模式, 执行./bin/pyspark  进入交互执行模式
  • ./bin/spark-submit --master spark://nj106.vl:7077 test.py可以提交test.py程序到集群执行。[不设置master,默认是local[*]模式]
#!/usr/bin/python
#coding=utf8
import sys;
from pyspark import SparkContext;
if __name__ == "__main__":
	sc = SparkContext(appName="my-spark-test"); #创建SparkContext
	file = sc.textFile("hdfs://10.71.48.106/data/fuqingchuan/dat.10W.txt"); #读取hadoop文件
	result = file.flatMap(lambda line : line.split("\t")).map(lambda word : (word, 1)).reduceByKey(lambda a, b: (a + b)); #word count
	first_line = result.first();  #去RDD中的第一行
	total_num = result.count();  #统计行数
	print first_line;
	print total_num;
	result.saveAsTextFile("hdfs://10.71.48.106/data/fuqingchuan/spark-test/"); #保存结果数据到集群
	sys.exit(0);

【参考】http://spark.apache.org/docs/latest/spark-standalone.html

本文由《纯净天空》出品。文章地址: https://vimsky.com/article/269.html,未经允许,请勿转载。