當前位置: 首頁>>係統&架構>>正文


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/zh-tw/article/269.html,未經允許,請勿轉載。