大数据-玩转数据-Spark分布式安装
说明:
之前已经安装配置过了 Hadoop 的 hdfs,yarn 分布式集群,在此基础上进行spark的安装(基于jvm,可以不安装scala)
1.安装spark
1.1下载Spark安装包:
去官网下载 :
Download Spark: spark-3.2.0-bin-hadoop2.7.tgz
因与pyspark 兼容性问题,后更换成了
spark-2.4.4-bin-hadoop2.7.tgz版本,(官网下载里未找到改版本,网盘下载)
官网下载地址:http://spark.apache.org/downloads.html
1.2上传解压:
在上传目录下
[root@hadoop1 ]# tar -zxvf spark-2.4.4-bin-hadoop2.7.tgz -C /home/hadoop/spark
1.3修改环境变量
在/home/hadoop/.bashrc 添加(已经在此添加过了hadoop 环境变量)
export SPARK_HOME=/home/hadoop/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
1.4环境变量生效
[root@hadoop1]# source /home/hadoop/.bashrc
1.5验证Spark
[root@hadoop1]# spark-shell
1.6退出spark shell
scala> :quit
1.7退出之前查看进程
[root@hadoop1]# jps
2566 Jps
2446 SparkSubmit
说明:spark-shell 就是一个SparkSubmi的进程,spark-shell是利用了本地的线程来模拟运行的,并没有利用到spark集群。
配置集群模式
2、配置
Linux完全分布式(Standalone)
2.1 spark-env.sh
在conf 下修改
[root@hadoop1]# vim spark-env.sh
export SPARK_MASTER_IP=192.168.80.2
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_CORES=1
export SPARK_WORKER_INSTANCES=1
export SPARK_WORKER_MEMORY=1g
export HADOOP_CONF_DIR=/home/hadoop/apps/hadoop-2.10.1/etc/hadoop
2.2 slaves
在conf下
[root@hadoop1]# vim slaves
hadoop1
hadoop2
hadoop3
hadoop4
2.3 分发到其他节点
部署到其它机器上:
到拷贝文件所在目录
[root@hadoop1]# for i in {2..4};do scp -r /home/hadoop/spark hadoop$i:$PWD; done
同样,.bashrc 环境变量也要拷贝,并生效。
[root@hadoop1]# for i in {2..4};do scp -r /home/hadoop/.bashrc hadoop$i:$PWD; done
2.4 启动
为了避免和hadoop中的start/stop-all.sh脚本发生冲突,将spark/sbin/start/stop-all.sh重命名
[root@hadoop1]# mv start-all.sh start-spark-all.sh
[root@node01]# mv stop-all.sh stop-spark-all.sh
启动:
先启动hdfs,yarn,再启动spark
[root@hadoop1]# start-spark-all.sh
会在我们配置的主节点master上启动一个进程Master
其它节点启动work进程
单独启动Master或者Worker
start-master.sh 或者start-slaves.sh
启动之后,master将会打印spark://HOST:PORT。你可以通过它连接workers,或者向SparkContext传递"master"参数。你也可以通过master的WEB UI来找到它
2.5 验证
[root@hadoop1]#cd /home/hadoop/spark/bin
[root@hadoop1 bin]# run-example SparkPi
或
[root@hadoop1 bin] # run-example SparkPi 2>&1 |grep "Pi is roughly"
或
scala>sc.textFile("hdfs://ns1/input/spark/wordcount.txt").flatMap(_.split("")).map((_, 1)).reduceByKey(_+_).collect.foreach(println)
1
我们发现spark非常快速的执行了这个程序,计算出我们想要的结果
2.6 端口
8080–>spark集群的访问端口,类似于hadoop中的50070和8080的综合
4040–>sparkUI的访问地址 应用级别的界面,一个应用对应一个
7077–>hadoop中的9000端口
2.7 WEB界面管理
同网段电脑
http://192.168.80.2:8080
总结
Spark+Hadoop的组合,是大数据领域热门的组合
优势:
1.每一个作业独立调度,可以把所有的作业做一个图进行调度,各个作业之间相互依赖,在调度过程中一起调度,速度快。
2.所有过程都基于内存,所以通常也将Spark称作是基于内存的迭代式运算框架。
3.spark提供了更丰富的算子,让操作更方便。
4.更容易的API:支持Python,Scala和Java。
由于Spark同时支持批处理与流处理,因此,对于一些类型的企业应用而言,从“Hadoop+Storm”架构转向Spark架构就成为一种很自然的选择。
需要说明的是,Spark Streaming的原理是将流数据分解成一系列短小的批处理作业,每个短小的批处理作业使用面向批处理的Spark Core进行处理,通过这种方式变相实现流计算,而不是真正实时的流计算,因而通常无法实现毫秒级的响应。因此,对于需要毫秒级实时响应的企业应用而言,仍然需要采用流计算框架(如Storm,FLINK)