目录:
一、Spark的安装
1.安装环境:
在linux上安装spark ,前提要部署了hadoop集群,并且安装了scala、zookeeper,JDK1.8
2.Spark的下载:
Scaka官方网址:
http://spark.apache.org/
Scala下载地址:
http://spark.apache.org/downloads.html
打开上述链接,进入到下图,点击红框下载 spark-2.4.5-bin-hadoop2.7.tgz,如下图所示:
3.安装步骤:
Spark的部署模式有Local、Local-Cluster、Standalone、Yarn、Mesos,我们选择最具代表性的Standalone集群部署模式。
(1)将安装包上传到服务器并解压
[liu@master software]$ tar -zxvf kafka_2.11-0.11.0.0.tgz -C ../module/
(2)配置Spark【Standalone】
进入Spark安装目录/conf下
将slaves.template复制为slaves
将spark-env.sh.template复制为spark-env.sh
修改slaves文件,将work的hostname输入:
修改spark-env.sh文件,添加如下配置:
为了防止出现“JAVA_HOME not set”异常,可以在sbin目录下的spark-config.sh 文件中加入如下配置:
将修改的配置文件分发到另外两台从机:
[liu@master conf]$ scp -r slaves liu@server1:/home/liu/modules/spark-2.2.0/conf/
[liu@master conf]$ scp -r slaves liu@server2:/home/liu/modules/spark-2.2.0/conf/
[liu@master conf]$ scp -r spark-env.sh liu@server1:/home/liu/modules/spark-2.2.0/conf/
[liu@master conf]$ scp -r spark-env.sh liu@server2:/home/liu/modules/spark-2.2.0/conf/
[liu@master sbin]$ scp -r spark-config.sh liu@server1:/home/liu/modules/spark-2.2.0/sbin/
[liu@master sbin]$ scp -r spark-config.sh liu@server2:/home/liu/modules/spark-2.2.0/sbin/
目前Spark集群配置完毕,通过Spark安装目录/sbin/start-all.sh启动。启动后执行jps命令,主节点上有Master进程,其他子节点上有Work进程
进入Spark的Web管理页面(主节点):http://master:8080/
到此为止,Spark集群安装完毕。
3.1 配置Job History Server【Standalone】
(1)进入Spark安装目录conf下,将spark-default.conf.template复制为spark-default.conf
修改spark-default.conf文件,开启Log:
【注意:HDFS上的目录必须是存在的】
(2)修改conf /spark-env.sh文件,添加如下配置:
(3)将配置好的Spark文件拷贝到其他节点上,然后启动通过sbin /start-history-server.sh启动Spark日志收集服务
进入Spark的日志管理页面(主节点):http://master:4000/
到此为止,Spark History Server安装完毕。
3.2 配置Spark HA【Standalone】
(1)停止spark所有服务,修改配置文件spark-env.sh,在该配置文件中删掉SPARK_MASTER_HOST并添加如下配置:
(2)将spark-env.sh同步到另外两台节点
[liu@master conf]$ scp -r spark-env.sh liu@server1:/home/liu/modules/spark-2.2.0/conf/
[liu@master conf]$ scp -r spark-env.sh liu@server2:/home/liu/modules/spark-2.2.0/conf/
(3)在主机上执行sbin/start-all.sh脚本,启动集群并启动第一个master节点,然后在一台从机上执行sbin/start-master.sh启动第二个master节点。
3.3 配置Spark【Yarn】
(1)修改Hadoop配置下的yarn-site.xml,添加以下配置:
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
(2)修改 conf /spark-env.sh 添加以下内容让Spark能够发现Hadoop配置文件:
二、Spark的使用
1.执行spark程序(standalone)
利用蒙特·卡罗算法求PI:
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://master:7077 \
--executor-memory 1G \
--total-executor-cores 2 \
/home/liu/modules/spark-2.2.0/examples/jars/spark-examples_2.11-2.2.0.jar \
100
参数说明:
--master spark://master:7077 指定Master的地址
--executor-memory 1G 指定每个executor可用内存为1G
--total-executor-cores 2 指定每个executor使用的cup核数为2个
2.执行spark程序(yarn)
利用蒙特·卡罗算法求PI:
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://master:7077 \
--master yarn \
--deploy-mode client \
/home/liu/modules/spark-2.2.0/examples/jars/spark-examples_2.11-2.2.0.jar \
100
3.启动Spark Shell
bin/spark-shell \
--master spark://master:7077 \
--executor-memory 2g \
--total-executor-cores 2
如果启动spark shell时没有指定master地址,但是也可以正常启动spark shell和执行spark shell中的程序,其实是启动了spark的local模式,该模式仅在本机启动一个进程,没有与集群建立联系。
在Spark shell中用scala语言编写spark程序:
sc.textFile("hdfs://master:9000/Scala.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).sortBy(_._2).saveAsTextFile("hdfs://master:9000/output")
方法说明:
- sc是SparkContext对象,该对象时提交spark程序的入口
- textFile(hdfs://master:9000/Scala.txt)是hdfs中读取数据
- flatMap(.split(" "))先map在压平 map((,1))将单词和1构成元组
- reduceByKey(+)按照key进行reduce,并将value累加
- saveAsTextFile(“hdfs:// master:9000/output”)将结果写入到hdfs中
4.在IDEA中使用Spark本地调试wordCount程序
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object Spark_01 {
def main(args: Array[String]): Unit = {
if (args.length<=0){
println(
"""
|缺少参数
|inputPath outputPath
""".stripMargin
)
return
}
//获取配置文件 setMaster:提交模式:local本地运行模式
val conf: SparkConf = new SparkConf().setAppName("wordCount").setMaster("local[*]")
//Spark的上下文对象 SparkContext
val sc: SparkContext = new SparkContext(conf)
//Spark 的wordCount
sc.textFile(args(0)).flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).sortBy(_._2).saveAsTextFile(args(1))
sc.stop()
}
}