Spark学习笔记
一.spark自带框架(不依赖其它的框架)的安装方式
1.配置单机式的spark集群【即master节点和worker节点在相同的主机上】
将spark-env.sh-template文件修改成spark-env.sh
vi /spark/conf/spark-env.sh
export JAVA_HOME= #导入Java_HOME
export spark_master_host=localhost #指定master主机(localhost)
export spark_master_port=7077 #指定端口号(默认为7077)
- 修改slaves文件
vi slaves
localhost #指定子节点所在的位置
2.配置高可用的spark集群
二.为什么worker知道master的地址?或者说二者之间是如何通信的?
1.执行流程大概如下:
- 1)进入
/usr/local/spark-2.2.0-bin-hadoop2.6/sbin
,执行命令:./start-all.sh
启动。 - 2)在执行start-all.sh命令时,启动了本机的master进程,然后读取本机的slaves文件,即master知道需要启动的slaves的主机名。
- 3)因为master所在主机使用的是Zookeper来搭建高可用的环境。所以master知道Zookeper的地址,同时worker也知道Zookeper的地址,所以间接的worker也知道了master的地址。
三.如何让spark依靠hdfs来计算数据
1.spark可以有三种部署方式
- standalone 是spark自带的集群管理器,商业还很少使用
- 2.Spark on mesos(二者联系最为密切)
- 3.Spark on Yarn
2.spark只是一个自带的计算引擎
2.spark只是依靠hdfs来读取数据,进入hadoop的安装目录,使用命令sbin/start-dfs.sh来启动hdfs
3.集群上的任何一台机器上都可以执行spark-shell命令,但spark-shell 执行的是local模式,启动界面就可以看到spark和scala的版本号。呈现的进程是sparkSubmit,而并非是分布式集群。
4.启动分布式集群,切换到spark的sbin目录,执行命令:./start-all.sh
接着切换到bin目录,这次是指定master,使用如下命令:spark-shell --master spark://localhost:7077
,可以查看web页面http://192.168.211.2:8080/
的Application ID 信息,8080端口是spark的管理页面的端口,即从浏览器可以查看的端口。
5.执行上述命令之后,发生的变化如下:
- 1)出现CoarseGrainedExecutorBackend进程,它是真正负责计算Spark任务的进程
四.Spark-shell
1.支持scala,和python语言
2.一个Driver就包括main方法和分布式数据集RDD。spark shell本身就是一个driver
- local 使用一个worker线程本地化运行spark(完全不并行)
- local[*] 使用逻辑cpu个数数量的线程来本地化运行spark
- local[k] 使用k个worker线程本地化运行spark,k是线程的数量【应该根据机器的cpu核数设定】
- spark://host:port 指定连接到spark standalone master 默认端口是7077
- yarn-client 以客户端模式连接yarn集群,集群的位置可以在HADOOP_CONF_FIR环境变量中找到
- yarn-cluster 以集群模式连接yarn集群
- mesos://host:port 连接到指定的Mesos集群。默认端口是5050
3.参数解析:
- –master
- –jars 添加依赖jar包到classpath中
- –help 显示帮助信息