Spark框架学习:Spark Local模式安装、Standalone伪分布模式安装、Scala开发插件安装

Spark Local模式安装

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

1.Spark运行模式概述

在实际应用中,Spark应用程序的运行模式取决于传递给SparkContext的MASTER环境变量的值,个别模式还需要依赖辅助的程序接口来配合使用,目前所支持的MASTER环境变量由特定的字符串或URL所组成,如下所示。

  • (1)Local[N]:本地模式,使用多个线程。
  • (2)Local cluster[worker, core, Memory]:伪分布式模式,可以配置所需要启动的虚拟工作节点的数量,以及每个工作节点所管理的CPU数量和内存尺寸。
  • (3)Spark://hostname:port:Standalone模式,需要部署Spark到相关节点,URL为Spark Master主机地址和端口。
  • (4)Mesos://hostname:port:Mesos模式,需要部署Spark和Mesos到相关节点,URL为Mesos主机地址和端口。
  • (5)YARN standalone/Yarn cluster:YARN模式一,主程序逻辑和任务都运行在YARN集群中。
  • (6)YARN client:YARN模式二,主程序逻辑运行在本地,具体任务运行在YARN集群中。

此外还有一些用于调试的URL,因为和应用无关,我们在这里就不列举了。

2.Local模式部署及程序运行

Local模式,顾名思义就是在本地运行,如果不加任何配置,Spark默认设置为Local模式。以SparkPi为例,Local模式下的应用程序的启动命令如下:

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

在SparkPi代码的具体实现中,是根据用户传入的参数来选择运行模式的,如果需要自己在代码中指定运行模式,可以通过在代码中配置Master为Local来实现,如以下程序所示。

import org.apache.spark.{SparkConf, SparkContext}

val conf = new SparkConf().setMaster("local").setAppName("My application").set("spark.executor.memory", "1g")

val sc = new SparkContext(conf)

当然,为了使应用程序能够更灵活地在各种部署环境下使用,不建议把与运行环境相关的设置直接在代码中写死。

3.Local本地模式内部实现原理

Local本地模式使用LocalBackend配合TaskSchedulerImpl,内部逻辑结构如下图所示:

LocalBackend响应Scheduler的receiveOffers请求,根据可用的CPU核的设定值[N]直接生成CPU资源返回给Scheduler,并通过Executor类在线程池中依次启动和运行Scheduler返回的任务列表,其核心事件循环由内部类LocalActor以Akka Actor的消息处理形式来实现。

安装步骤:

1.Spark的运行依赖jdk以及scala环境。在此已默认安装jdk1.7。

2.首先在linux上创建目录/data/spark1,用于存储所需文件。

mkdir -p /data/spark1

切换目录到/data/spark1目录,使用wget命令,下载所需的Spark安装包spark-1.6.0-bin-hadoop2.6.tgz以及Scala安装包scala2.10.4.tgz。

cd /data/spark1/
wget http://
wget http://

此处建议使用scala-2.10.4版本。官网中指出,若使用scala2.11.x版本,需要重新编译Spark,并且编译时,需要指定Scala版本的类型。

关于Spark版本,没有严格要求。所以我们使用Spark1.6版本。

3.安装scala。切换目录到/data/spark1目录下,将scala-2.10.4.tgz解压缩到/apps目录下,并将解压后的目录名改为/apps/scala。

cd /data/spark1/
tar -xzvf /data/spark1/scala-2.10.4.tgz -C /apps/
cd /apps
mv /apps/scala-2.10.4/ /apps/scala

使用vim打开用户环境变量~/.bashrc。

vim ~/.bashrc

将scala的bin目录,追加到用户环境变量中,然后保存退出。

#scala
export SCALA_HOME=/apps/scala
export PATH=$SCALA_HOME/bin:$PATH

执行source命令,使系统环境变量生效。

source ~/.bashrc

4,切换目录到/data/spark1目录下,将spark的安装包spark-1.6.0-bin-hadoop2.6.tgz,解压缩到/apps目录下,并将解压后的目录名重命名为spark。

cd /data/spark1
tar -xzvf /data/spark1/spark-1.6.0-bin-hadoop2.6.tgz -C /apps/
cd /apps/
mv /apps/spark-1.6.0-bin-hadoop2.6/ /apps/spark

使用vim打开用户环境变量~/.bashrc。

vim ~/.bashrc

将Spark的配置信息追加到用户环境变量中,然后保存退出。

#spark  
export SPARK_HOME=/apps/spark  
export PATH=$SPARK_HOME/bin:$PATH  

执行source命令,使用户环境变量生效。

source ~/.bashrc

5,下面不需要对spark进行任何配置,就可以启动spark-shell进行任务处理了。

切换目录到/apps/spark/bin目录下,启动spark shell,验证安装完的spark是否可用。执行:

cd /apps/spark/bin/
spark-shell

或执行以下命令可以启动本地模式:

spark-shell local

6,执行测试。在Spark Shell中,使用Scala加载Spark安装目录下,文件README.md,并转变为rdd。

val rdd = sc.textFile("/apps/spark/README.md")

对rdd进行算子操作,统计文件的行数。

rdd.count()

可以看到输出为:

res3: Long = 95

表明安装正确。

完整效果为:

scala> val rdd = sc.textFile("/apps/spark/README.md")
rdd: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[1] at textFile at <console>:27
scala> rdd.count
res0: Long = 95
scala>

到此Spark Local模式已经安装完成!

Spark Standalone伪分布模式安装

Local cluster伪分布式模式,实际是在SparkContext初始化的过程中,在本地启动一个所有服务都在单机上运行的伪分布Spark集群,所以从部署的角度来说无须做任何准备工作。以SparkPi为例,伪分布式模式下的应用程序的启动命令的示例如下:

./bin/run-example org.apache.spark.examples.SparkPi local-cluster[2,2,1024]

上面的伪分布式模式启动两个Worker,每个Worker管理两个CPU和1024MB的内存。

Local cluster伪分布式模式是基于Standalone模式来实现的,所以也叫Standalone伪分布模式,除了启动Master和Worker的位置不同,在集群启动完毕后,后续应用程序的工作流程及资源的调度流程与Standalone集群模式完全相同。

Standalone伪分布模式内部逻辑结构如下图所示:

1.Spark的运行依赖jdk,Hadoop,Scala。在这里默认已安装jdk以及Hadoop伪分布模式。

2.在Linux上,创建目录/data/spark2,用于存储spark安装所需的文件。

  1. mkdir -p /data/spark2  

切换目录到/data/spark2下,使用wget命令,下载所需的Spark的安装包spark-1.6.0-bin-hadoop2.6.tgz及scala安装包scala2.10.4.tgz。

  1. cd /data/spark2/  
  2. wget http://59.64.78.41:60000/allfiles/spark2/scala-2.10.4.tgz  
  3. wget http://59.64.78.41:60000/allfiles/spark2/spark-1.6.0-bin-hadoop2.6.tgz  

此处建议使用scala-2.10.4版本。官网中指出,若使用scala2.11.x,则需要重新编译spark,并且编译时,需要指定scala版本的类型。

关于spark版本,没有严格要求。所以我们使用spark1.6版本。

3.安装Scala。切换目录到/data/spark2下,将目录下的scala-2.10.4.tgz解压缩到/apps目录下,并将解压后的目录名改为/apps/scala。

  1. cd /data/spark2/  
  2. tar -xzvf /data/spark2/scala-2.10.4.tgz -C /apps/  
  3. cd /apps  
  4. mv /apps/scala-2.10.4/ /apps/scala  

使用vim打开用户环境变量~/.bashrc。

  1. vim ~/.bashrc  

将scala的bin目录,追加的用户环境变量中。

  1. #scala  
  2. export SCALA_HOME=/apps/scala  
  3. export PATH=$SCALA_HOME/bin:$PATH  

执行source命令,使系统环境变量生效。

  1. source ~/.bashrc  

4.切换目录到/data/spark2下,将Spark的安装包spark-1.6.0-bin-hadoop2.6.tgz,解压缩到/apps目录下,并将解压后的目录名,重命名为spark。

  1. cd /data/spark2  
  2. tar -xzvf /data/spark2/spark-1.6.0-bin-hadoop2.6.tgz -C /apps/  
  3. cd /apps/  
  4. mv /apps/spark-1.6.0-bin-hadoop2.6/ /apps/spark  

使用vim打开用户环境变量~/.bashrc。

  1. vim ~/.bashrc  

将spark的bin目录,追加到用户环境变量中。

  1. #spark  
  2. export SPARK_HOME=/apps/spark  
  3. export PATH=$SPARK_HOME/bin:$PATH  

执行source命令,使用户环境变量生效。

  1. source ~/.bashrc  

5.切换目录到/apps/spark/conf下,将conf目录下的配置文件slaves.template重命名为slaves。

  1. cd /apps/spark/conf  
  2. mv slaves.template  slaves  

在slaves中,存储了所有worker节点的的ip或主机名。使用文本编辑器vim打开slaves文件。

  1. vim slaves  

将所有worker节点的ip添加进去。由于目前只有一台节点,所以是。

  1. 127.0.0.1  

6.将/apps/spark/conf/spark-env.sh.template文件,重命名为/apps/spark/conf/spark-env.sh。

  1. mv /apps/spark/conf/spark-env.sh.template /apps/spark/conf/spark-env.sh  

使用vim,打开/apps/spark/conf/spark-env.sh文件。

  1. vim /apps/spark/conf/spark-env.sh  

添加如下配置:

HADOOP_CONF_DIR=/apps/hadoop/etc/hadoop
JAVA_HOME=/apps/java
SPARK_MASTER_IP=127.0.0.1
SPARK_MASTER_PORT=7077
SPARK_MASTER_WEBUI_PORT=8080
SPARK_WORKER_CORES=1
SPARK_WORKER_MEMORY=1g
SPARK_WORKER_PORT=7078
SPARK_WORKER_WEBUI_PORT=8081
SPARK_EXECUTOR_INSTANCES=1

此处需要配置JAVA_HOME以及HADOOP配置文件所在的目录HADOOP_CONF_DIR。

SPARK_MASTER_IP、SPARK_MASTER_PORT、SPARK_MASTER_WEBUI_PORT,分别指spark集群中,master节点的ip地址、端口号、提供的web接口的端口。

SPARK_WORKER_CORES、SPARK_WORKER_MEMORY:worker节点的内核数、内存大小。

此处可用根据自己机器情况调整配置项参数。

7.启动Hadoop,首先需要保证Hadoop相关进程为启动状态。

  1. cd /apps/hadoop/sbin  
  2. ./start-all.sh  

切换目录到/apps/spark/sbin目录下,启动Spark。

  1. cd /apps/spark/sbin  
  2. ./start-all.sh  

执行jps,查看进程变化。

8.执行测试

在HDFS上,创建/myspark2目录,并将Linux上/apps/spark/README.md文件,上传到HDFS。

  1. hadoop fs -mkdir /myspark2  
  2. hadoop fs -put /apps/spark/README.md /myspark2/  

切换目录到/apps/spark/bin目录下,使用Spark Shell客户端,访问服务端,验证安装完的Spark是否可用,进入命令行模式。

  1. cd /apps/spark/bin  
  2. ./spark-shell --master spark://localhost:7077  

在Spark Shell中,使用scala加载HDFS上的README.md文件,并转变为rdd。

  1. var mytxt = sc.textFile("hdfs://localhost:9000/myspark2/README.md");  

统计文件的行数。

  1. mytxt.count();  

可用看到输出为:

  1. res3: Long = 95  

表明安装正确。

9.在刚才执行统计过程中,由于Log4j的日志输出级别为info级别,所以会在屏幕上输出很多的log,很难定位程序的输出结果。

输入exit,退出spark-shell,并切换目录到/apps/spark/sbin目录下,停止Spark。

  1. exit  
  2. cd /apps/spark/sbin  
  3. ./stop-all.sh  

再切换目录到/apps/spark/conf目录下,将目录下log4j.properties.template重命名为log4j.properties。

  1. cd /apps/spark/conf  
  2. mv /apps/spark/conf/log4j.properties.template /apps/spark/conf/log4j.properties  

使用vim打开log4j.properties文件。

  1. vim log4j.properties  

更改log4j的日志级别为WARN级别,修改log4j.rootCategory内容为:

  1. log4j.rootCategory=WARN, console  

再次启动Spark。

  1. cd /apps/spark/sbin  
  2. ./start-all.sh  

进入Spark-Shell。

  1. spark-shell --master spark://localhost:7077  

执行Spark-Shell命令。

  1. val mytxt = sc.textFile("hdfs://localhost:9000/myspark2/README.md")  
  2. mytxt.count()  

完整效果。

scala> val mytxt = sc.textFile("hdfs://localhost:9000/myspark2/README.md")
mytxt: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[1] at textFile at <console>:27
scala> mytxt.count()
    res0: Long = 95
scala>

可以看到输出的内容相对于调整log4j日志级别前,更加精简了。

Scala开发插件安装

Scala即可伸缩的语言(Scalable Language),是一种多范式的编程语言,类似于java的编程,设计初衷是要集成面向对象编程和函数式编程的各种特性。

1.Scala的特点

  • (1)Scala具有更广泛意义上的类重用。Scala允许定义新类的时候重用“一个类中新增的成员定义(即相较于其父类的差异之处)”。
  • (2)Scala还包含了若干函数式语言的关键概念,包括高阶函数(Higher-Order Function)、局部套用(Currying)、嵌套函数(Nested Function)、序列解读(Sequence Comprehensions)等等。
  • (3)Scala是静态类型的,这就允许它提供泛型类、内部类、甚至多态方法(Polymorphic Method)。
  • (4)Scala可以与Java互操作。它用scalac这个编译器把源文件编译成Java的class文件(即在JVM上运行的字节码)。你可以从Scala中调用所有的Java类库,也同样可以从Java应用程序中调用Scala的代码。

2.Scala与Spark的依赖关系

Spark内核是由Scala语言开发的,因此使用Scala语言开发Spark应用程序是自然而然的事情。所以当我们使用Eclipse工具编写Spark程序时,就必须先安装Scala插件方便在Eclipse中创建Scala项目。

Scala IDE是一个Eclipse插件,提供Scala集成开发工具。主要的功能包括:同一个项目中混合编辑Scala/Java文件;Scala 编辑器支持语法高亮显示,代码自动完成,错误标记,链接到定义处;代码调试;代码大纲视图等。

安装步骤:

1.默认已经将Hadoop,Spark,Scala环境搭建好了,Eclipse开发工具也已经安装完毕。

2.打开Eclipse界面,点击Help=>Install New Software选项。

3.在弹出的界面中,输入scala的插件的地址。

4.访问Scala网站的http://scala-ide.org/download/prev-stable.html 网址,可以查询到Scala的插件地址。

在网页中,可以看到官网推荐使用Eclipse Juno或Kepler版本,进行安装。

5.由于我们的Scala使用的2.10.4版本,Eclipse选择的juno版本,所以Scala插件的安装地址为:

http://download.scala-ide.org/sdk/helium/e38/scala210/stable/site

6.将上述地址,添加到Eclipse的弹出界面中的"Location"中,点击"ok"。

7.然后在“Select All”上面的空栏中右键点击copy,再点击“Select All”选中需要安装的内容,并点击Next下一步。

8.进入以下界面,选择同意接受协议。

然后再点击Finish。

 

9.等安装完成,点击yes,重启Eclipse。

就可以新建Scala项目了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值