spark伪分布standalone搭建

一.环境准备 
jdk 1.8.0 
hadoop2.7.3 伪分布式部署 
scala 2.11.8 支持spark2.0.1及以上版本 
spark2.1.1

二.Spark安装模式(本文伪分布式) 
spark有以下几种安装模式,每种安装模式都有自己不同的优点和长处。 
local(本地模式): 
常用于本地开发测试,本地还分为local单线程和local-cluster多线程; 
standalone(集群模式): 
典型的Mater/slave模式,Master可能有单点故障的;Spark支持ZooKeeper来实现 HA。 
on yarn(集群模式): 
运行在 yarn 资源管理器框架之上,由 yarn 负责资源管理,Spark 负责任务调度和计算。 
on mesos(集群模式): 
运行在 mesos 资源管理器框架之上,由 mesos 负责资源管理,Spark 负责任务调度和计算。 
on cloud(集群模式): 
比如 AWS 的 EC2,使用这个模式能很方便的访问 Amazon的 S3;Spark 支持多种分布式存储系统:HDFS 和 S3。 
目前Apache Spark支持三种分布式部署方式,分别是standalone、Spark on mesos和 spark on YARN,其中,第一种类似于MapReduce 1.0所采用的模式,内部实现了容错性和资源管理,后两种则是未来发展的趋势,部分容错性和资源管理交由统一的资源管理系统完成:让Spark运行在一个通用的资源管理系统之上,这样可以与其他计算框架,比如MapReduce,公用一个集群资源,最大的好处是降低运维成本和提高资源利用率(资源按需分配)。

三.安装scala 
1.上传scala包,解压缩 
2.配置环境变量SCALA_HOME 
3.source /etc/profile使得生效 
4.验证scala安装情况 
scala -version 
及上scala 安装完成 

四.伪分布式Spark安装部署 
1 解压spark安装包spark-2.1.1-bin-hadoop2.7.tgz,并配置SPARK_HOME环境变量,最后用 source使之生效。 

export SCALA_HOME=/opt/hadoop/scala-2.11.8
export PATH=$PATH:$SCALA_HOME/bin
export SPARK_HOME=/opt/hadoop/spark-2.1.1-bin-hadoop2.7
export PATH=$PATH:SPARK_HOME/bin

注意:$SPARK_HOME/sbin中的启动spark指令与hadoop相同,因此本例中PATH只配置了$SPARK_HOME/bin目录

2 更改配置 在/usr/local/spark-2.0.1/conf 下 
(1)cp slaves.template slaves 
localhost(或者主机名) 

(2)cp spark-env.sh.template spark-env.sh 
vim spark-env.sh 
进行以下配置 
export JAVA_HOME=/opt/Java/jdk1.8.0_151
export SCALA_HOME=/opt/hadoop/scala-2.11.8
export SPARK_WORKER_MEMORY=1G 
export HADOOP_HOME=/opt/hadoop/hadoop-2.7.3
export HADOOP_CONF_DIR=/opt/hadoop/hadoop-2.7.3/etc/hadoop

export SPARK_MASTER_IP=hadoop


注意:如果注释掉HADOOP_HOME,HADOOP_CONF_DIR这两行,则spark不依赖hadoop环境,可以单独使用!

(3)spark-defaults.conf文件用于设定一些默认的Spark环境变量,本次设定了master的地址,和spark shuffer文件的保存路径。
spark.master spark://hadoop:7077

3 启动spark 
(1)先启动hadoop 环境 
/usr/local/hadoop/sbin# start-all.sh 

注意:启动之后要执行命令 hadoop dfsadmin -safemode leave,否则报错Cannot create directory /tmp/hive/hadoop/ee766399-e2f4-4edd-b977-4658fe14f9e3. Name node is in safe mode.

(2)启动spark环境 
/usr/local/spark-2.0.1/sbin# ./start-all.sh 
[注] 如果使用start-all.sh时候会重复启动hadoop配置,需要./在当前工作目录下执行脚本文件。 
jps 观察进程 多出 worker 和 mater 两个进程

查看spark的web控制页面 
http://hadoop:8080/ 
显示spark的端口是7070 

启动shell界面:spark-shell

spark伪分布standalone搭建

4.运行示例

scala>val rdd=sc.textFile("/user/hadoop/testdata/core-site.xml")//注意,此处为hadoop文件系统
scala>rdd.cache()
scala>val wordcount=rdd.flatMap(_.split(" ")).map(x=>(x,1)).reduceByKey(_+_)

scala>wordcount.take(10)

5.提交jar包执行程序

spark-submit --master spark://hadoop:7077 --class com.enn.click.UserClickCountAnalytics ~/HadoopDemo.jar spark://hadoop:7077

注意:最后一个“spark://hadoop:7077”是传入参数,多个参数用空格分割

在提交spark应用程序的时候,抛出类找不到
spark伪分布standalone搭建
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/kafka/common/serialization/StringDeserializer
at com.sparkstreaming.SparkStreamKaflaWordCount$.main(SparkStreamKaflaWordCount.scala:25)
at com.sparkstreaming.SparkStreamKaflaWordCount.main(SparkStreamKaflaWordCount.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
------------------------------------------------------------------------ Exception
in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/streaming/kafka010/KafkaUtils$ at com.sparkstreaming.SparkStreamKaflaWordCount$.main(SparkStreamKaflaWordCount.scala:33) at com.sparkstreaming.SparkStreamKaflaWordCount.main(SparkStreamKaflaWordCount.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
spark伪分布standalone搭建
 
这个需要你将【spark-streaming-kafka-0-10_2.11-2.1.0】,【kafka-clients-0.10.2.0】这两个jar添加到 spark_home/jar/路径下就可以了。