Spark 伪分布式 & 全分布式 安装指南

0、前言

3月31日是 Spark 五周年纪念日,从第一个公开发布的版本开始,Spark走过了不平凡的5年:从刚开始的默默无闻,到13年的鹊起,14年的大爆发。Spark核心之上有分布式的机器学习,SQL,streaming和图计算库。

4月1日 spark 官方正式宣布 Spark 2.0 对Spark重构,更好支持手机等移动终端。Databricks创始人之一hashjoin透漏了相关的重构方法:利用Scala.js项目把Spark代码编译成JavaScript,然后利用Safari / Chrome在手机上执行。一个代码可以支持Android / iOS。但是考虑到性能关系,可能需要重写底层的网络模块来支持zero-copy。(确定是否愚人节玩笑呢 :)  )

ok,言归正传。Spark目前支持多种分布式部署方式:一、Standalone Deploy Mode;二、Amazon EC2 ;三、Apache Mesos;四、Hadoop YARN。第一种方式是单机部署,不需要有依赖的资源管理器,其它三种都需要将spark部署到对应的资源管理器上。

除了部署的多种方式之外,较新版本的Spark支持多种hadoop平台,比如从0.8.1版本开始分别支持Hadoop 1 (HDP1, CDH3)、CDH4、Hadoop 2 (HDP2, CDH5)。目前Cloudera公司的CDH5在用CM安装时,可直接选择Spark服务进行安装。

目前Spark最新版本是1.3.0,本文就以1.3.0版本,来看看如何实现Spark 单机伪分布式以及分布式集群的安装。

1、安装环境

Spark 1.3.0需要JDK1.6或更高版本,我们这里采用jdk 1.6.0_32;
Spark 1.3.0需要Scala 2.10或更高版本,我们这里采用scala 2.11.6;

记得配置下 scala 环境变量:

vim /etc/profile
export SCALA_HOME=/home/hadoop/software/scala-2.11.4
export PATH=$SCALA_HOME/bin:$PATH

2、伪分布式安装

2.1 解压缩、配置环境变量即可

直接编辑 /etc/profile 或者 ~/.bashrc 文件,然后加入如下环境变量:

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SCALA_HOME=/home/hadoop/software/scala-2.11.4
export JAVA_HOME=/home/hadoop/software/jdk1.7.0_67
export SPARK_MASTER=localhost
export SPARK_LOCAL_IP=localhost
export HADOOP_HOME=/home/hadoop/software/hadoop-2.5.2
export SPARK_HOME=/home/hadoop/software/spark-1.2.0-bin-hadoop2.4
export SPARK_LIBARY_PATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$HADOOP_HOME/lib/native
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$SCALA_HOME/bin:$SPARK_HOME/bin

2.2 让配置生效

source /etc/profile

source ~/.bashrc

2.3 启动spark

进入到SPARK_HOME/sbin下,运行:
start-all.sh
[root@centos local]# jps
7953 DataNode
8354 NodeManager
8248 ResourceManager
8104 SecondaryNameNode
10396 Jps
7836 NameNode
7613 Worker
7485 Master
有一个Master跟Worker进程 说明启动成功
可以通过http://localhost:8080/查看spark集群状况

2.4 两种模式运行Spark例子程序

2.4.1 Spark-shell

此模式用于interactive programming,具体使用方法如下(先进入bin文件夹)

./spark-shell
...
scala> val days = List("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday")
days: List[String] = List(Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday)

scala> val daysRDD =sc.parallelize(days)
daysRDD: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[0] at parallelize at <console>:14

scala>daysRDD.count()
scala>res0:Long =7

2.4.2 运行脚本

运行Spark自带的example中的SparkPi,在
这里要注意,以下两种写法都有问题
./bin/run-example org.apache.spark.examples.SparkPi spark://localhost:7077
./bin/run-example org.apache.spark.examples.SparkPi local[3]
local表示本地,[3]表示3个线程跑
这样就可以:

./bin/run-example org.apache.spark.examples.SparkPi 2 spark://192.168.0.120:7077

15/03/17 19:23:56 INFO scheduler.DAGScheduler: Completed ResultTask(0, 0)
15/03/17 19:23:56 INFO scheduler.DAGScheduler: Stage 0 (reduce at SparkPi.scala:35) finished in 0.416 s
15/03/17 19:23:56 INFO spark.SparkContext: Job finished: reduce at SparkPi.scala:35, took 0.501835986 s
Pi is roughly 3.14086

3、全分布式集群安装

其实集群安装方式也很简单。

3.1 添加环境变量

cd spark-1.3.0
cp ./conf/spark-env.sh.template ./conf/spark-env.sh
vi ./conf/spark-env.sh 添加以下内容:
export SCALA_HOME=/usr/lib/scala-2.10.3
export JAVA_HOME=/usr/java/jdk1.6.0_31
export SPARK_MASTER_IP=10.32.21.165
export SPARK_WORKER_INSTANCES=3
export SPARK_MASTER_PORT=8070
export SPARK_MASTER_WEBUI_PORT=8090
export SPARK_WORKER_PORT=8092
export SPARK_WORKER_MEMORY=5000m

SPARK_MASTER_IP这个指的是master的IP地址;SPARK_MASTER_PORT这个是master端口;SPARK_MASTER_WEBUI_PORT这个是查看集群运行情况的WEB UI的端口号;SPARK_WORKER_PORT这是各个worker的端口号;SPARK_WORKER_MEMORY这个配置每个worker的运行内存。

  • vi ./conf/ slaves  每行一个worker的主机名,内容如下:

10.32.21.165

  10.32.21.166

  10.32.21.167

  • 设置 SPARK_HOME 环境变量,并将 SPARK_HOME/bin 加入 PATH:

vi /etc/profile ,添加内容如下:

export SPARK_HOME=/usr/lib/spark-1.3.0

export PATH=$SPARK_HOME/bin:$PATH

然后将配置以及安装文件同步到各节点上,并让环境变量生效。

3.2 启动spark集群

执行   ./sbin/start-all.sh    
  如果start-all方式无法正常启动相关的进程,可以在$SPARK_HOME/logs目录下查看相关的错误信息。其实,你还可以像Hadoop一样单独启动相关的进程,在master节点上运行下面的命令:
  在Master上执行:./sbin/start-master.sh
  在Worker上执行:./sbin/start-slave.sh 3 spark://10.32.21.165:8070 --webui-port 8090
然后检查进程是否启动,执行jps命令,可以看到Worker进程或者Master进程。然后可以在WEB UI上查看http://masterSpark:8090/可以看到所有的work 节点,以及他们的 CPU 个数和内存等信息。

3.3 Local模式运行demo

  比如:./bin/run-example SparkLR 2 local   或者  ./bin/run-example SparkPi 2 local
  这两个例子前者是计算线性回归,迭代计算;后者是计算圆周率

3.4 shell 交互式模式

./bin/spark-shell --master spark://10.32.21.165:8070 , 如果在conf/spark-env.sh中配置了MASTER(加上一句export MASTER=spark://${SPARK_MASTER_IP}:${SPARK_MASTER_PORT}),就可以直接用  ./bin/spark-shell启动了。
spark-shell作为应用程序,是将提交作业给spark集群,然后spark集群分配到具体的worker来处理,worker在处理作业的时候会读取本地文件。
这个shell是修改了的scala shell,打开一个这样的shell会在WEB UI中可以看到一个正在运行的Application

4、一个 scala & spark 例子

这个例子首先用 shell 生成 150,000,000 个随机数,然后用 spark 统计每个随机数频率,以观察随机数是否均匀分布。

getNum(){
    c=1
    while [[ $c -le 5000000 ]]
    do
        echo $(($RANDOM/500))
        ((c++))
    done
}
for i in `seq 30`
do
    getNum > ${i}.txt &
done
wait
echo "--------------- DONE -------------------"
cat [0-9]*.txt > num.txt
val file = sc.textFile("hdfs://10.9.17.100:8020/tmp/lj/num.txt")
val count = file.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_+_)
//count.collect().sortBy(_._2)
//count.sortBy(-_._2).saveAsTextFile("hdfs://10.9.17.100:8020/tmp/lj/spark/numCount")
count.sortBy(_._2).map(x => x._1 + "\t" + x._2).saveAsTextFile("hdfs://10.9.17.100:8020/tmp/lj/spark/numCount")
hadoop fs -cat hdfs://10.9.17.100:8020/tmp/lj/spark/numCount/p*|sort -k2n
65      1228200
55      2285778
59      2285906
7       2286190
24      2286344
60      2286554
37      2286573
22      2286719
...
13      2291903
43      2292001

5、题外话:拥抱 Scala

scala 如下几个特性,或许值得你去学习这门新语言:

  • 它最终也会编译成Java VM代码,看起来象不象Java的壳程序?- 至少做为一个Java开发人员,你会松一口气
  • 它可以使用Java包和类 - 又放心了一点儿,这样不用担心你写的包又得用另外一种语言重写一遍
  • 更简洁的语法和更快的开发效率 - 比起java臃肿不堪的指令式语言,scala 函数式风格会让你眼前一亮
  • spark 在 scala shell 基础之上提供交互式 shell 环境让 spark 调试方便,比起笨重的 Java MR,一念天堂一念地狱。

6、Refer:

[1] 在Hadoop2.2基础上安装Spark(伪分布式)

http://www.cnblogs.com/kxdblog/p/4345356.html

[2] Spark一:Spark伪分布式安装

http://bit1129.iteye.com/blog/2171761

[3] Spark-1.0.0 standalone分布式安装教程

http://www.cnblogs.com/lxf20061900/p/3819499.html

[4] namenode元数据管理进程端口号获取:
http://10.9.17.100:50070/dfshealth.html#tab-overview
http://blog.cloudera.com/blog/2009/08/hadoop-default-ports-quick-reference/
http://docs.hortonworks.com/HDPDocuments/HDP1/HDP-1.3.7/bk_using_Ambari_book/content/reference_chap2_2x.html

Spark 伪分布式 & 全分布式 安装指南

时间: 2024-10-03 22:54:37

Spark 伪分布式 & 全分布式 安装指南的相关文章

spark伪分布式安装与测试

1.下载scala2.11.5版本,下载地址为:http://www.scala-lang.org/download/2.11.5.html 2.安装和配置scala: 第一步:上传scala安装包 并解压 第二步 配置SCALA_HOME环境变量到bash_profile 第三步 source 使配置环境变量生效: 第四步 验证scala: 3.下载spark 1.2.0,具体下载地址:http://spark.apache.org/downloads.html 4.安装和配置spark: 第

搭建HBase的本地模式、伪分布式、全分布式和HA模式

一.安装HBase: 我这里选择的是hbase-1.3.1-bin.tar.gz版本解压HBase: tar -zxvf hbase-1.3.1-bin.tar.gz -C ~/training 配置HBase的环境变量: export HBASE_HOME=/root/training/hbase-1.3.1 ? export PATH=$HBASE_HOME/bin:$PATH 生效环境变量: source ~/.bash_profile 二.HBase的安装模式: 1.本地模式: 特点:只

hadoop2.7【单节点】单机、伪分布、分布式安装指导

问题导读 1.从本文部署实际部署,总结本地模式.伪分布.分布式的区别是什么?2.单机是否是伪分布?3.本地模式是否可以运行mapreduce? 来源:about云 http://www.aboutyun.com/thread-12798-1-1.html hadoop2.7发布,这一版不太适合用于生产环境,但是并不影响学习:由于hadoop安装方式有三种,并且三种安装方式都可以在前面的基础上继续配置,分别是: 本地模式 伪分布 分布式 ##############################

当Spark遇上TensorFlow分布式深度学习框架原理和实践

近年来,机器学习和深度学习不断被炒热,tensorflow 作为谷歌发布的数值计算和神经网络的新框架也获得了诸多关注,spark和tensorflow深度学习框架的结合,使得tensorflow在现有的spark集群上就可以进行深度学习,而不需要为深度学习设置单独的集群,为了深入了解spark遇上tensorflow分布式深度学习框架的原理和实践,飞马网于4月10日晚,邀请到先后就职于百度.腾讯,负责过多个大数据研发工作的李曙鹏老师进行线上直播,主要向我们介绍spark和深度学习的基本原理.sp

[Python] Spark平台下实现分布式AC自动机(一)

转载请注明出处:http://www.cnblogs.com/kirai/ 作者:Kirai 零.问题的提出 最近希望在分布式平台上实现一个AC自动机,但是如何在这样的分布式平台上表示这样的非线性数据结构就难住我了.因为一直在使用RDD提供的一些基本的操作,没有需要什么复杂的操作.所以突然想到了在分布式的平台上实现一个AC自动机一定很有趣.网上搜了下,发现没有人实现,因此决定尝试实现.或许就是一个玩具,不过也是能帮助自己更深理解分布式平台上进行编程和普通编程的区别吧. 这个问题对我来讲还是有一定

Spark的三种分布式部署

目前Apache Spark支持三种分布式部署方式: 分别是standalone.spark on mesos和 spark on YARN, 其中,第一种类似于MapReduce 1.0所采用的模式,内部实现了容错性和资源管理,后两种则是未来发展的趋势, 部分容错性和资源管理交由统一的资源管理系统完成:让Spark运行在一个通用的资源管理系统之上,这样可以与 其他计算框架,比如MapReduce,公用一个集群资源,最大的好处是降低运维成本和提高资源利用率(资源按需 分配).本文将介绍这三种部署

Hadoop全分布式集群环境配置

Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储. Hadoop实现了一个分布式系统(Hadoop Distributed File System),简称HDFS.HDFS有高容错的特点,并且设计用来部署在低廉的(low-cost)硬件上:而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序.HDFS

Linux系统zookeeper环境搭建(单机、伪分布式、分布式)

本人现在对zookeeper的环境搭建做一个总结,一般zookeeper的安装部署可以有三种模式,单机模式.伪分布式和分布式,这三种模式在什么时候应用具体看大家的使用场景,如果你只有一台机器且只是想自己开发测试时用,你可以安装个单机模式,简单又实用.如果想装逼但又没有足够的机器,那你可以选择伪分布式的方式搭建,这可以满足你内心高大上的分布式需求又可以满足没有机器的屌丝现状.如果手头有三台以上的服务器,那就可以大展高富帅的风采,直接上真的分布式,真的分布式部署一般是在系统的正式环境中应用.下面我来

hadoop全分布式安装

1.统一安装jdk 这里准备4台虚拟机,给其他三台都安装jdk 分别更改hostname为slave1.slave2.slave3. vim /etc/sysconfig/network hostname slave1 统一更改hosts文件vim /etc/hosts IP masterIP slave1IP slave2IP slave3 vim /etc/sysconfig/selinux 配置 关闭防火墙 /etc/init.d/iptables stop setenforce 0 ge