spark学习笔记(搭建)(先配置zookeeper)

目录

概念

特点

组成模块

搭建

local本地模式(单机版)

准备

原理

 操作

           测试-运行spark-shell

           打开web界面

web界面

           使用示例  读取本地文件并计算

关闭

Standalone-独立集群模式

原理

          各个节点功能

操作

测试--运行

           在主节点上启动spark集群------------------

           在主节点上停止spark集群

            jps   

            单独启动  主节点上单独启动和停止Master-----------------

           在从节点上单独启动和停止Worker(Worker指的是slaves配置文件中的主机名)

             集群的停止

web界面(重要)

启动spark-shell   测试任务

            执行

StandlonaHA高可用

原理

 操作

启动

模拟node1宕机

测试-WordCount

spark-On-Yarn用的多

原理

 操作-准备工作

         启动服务

          UI页面

操作-spark任务提交

           client模式-了解

     查看web界面

            cluster模式-开发使用

     查看web界面


概念

spark是大规模数据处理的统一分析引擎

特点

高效  速度超Hadoop

使用简单

功能多  通用性

可以运行在多个地方(可以在Hadoop上)

组成模块

搭建

安装包下载

 或者官网  Apache Spark™ - Unified Engine for large-scale data analytics

local本地模式(单机版)

准备

1 保证linux里有JDK(Spark源码是Scala编写的,编译成.class文件,运行在JVM之上)

原理

使用本地的多线程 模拟Spark集群中的各个角色

 操作

上传安装包

上传到 /export/server目录下

cd /export/server/

解压安装包

tar -zxvf spark-3.0.1-bin-hadoop2.7.tgz 

修改权限

chown -R root /export/server/spark-3.0.1-bin-hadoop2.7

chgrp -R root /export/server/spark-3.0.1-bin-hadoop2.7

改名(或创建软连接)

ln -s /export/server/spark-3.0.1-bin-hadoop2.7 /export/server/spark

测距课程包括境外

           测试-运行spark-shell

启动spark交互式窗口
 

/export/server/spark/bin/spark-shell

           打开web界面

http://node1:4040


web界面

jobs 

           使用示例  读取本地文件并计算

vim /root/words.txt
hello me you her
hello me you
hello me
hello

执行WordCount

val textFile = sc.textFile("file:///root/words.txt")
val counts = textFile.flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _)
counts.collect

web界面jods上刷新   有任务了

详情

关闭

crtl+c

jps(关闭前后 看一遍)

Standalone-独立集群模式

原理

          各个节点功能

类似Hadoop YARN 管理集群资源和调度资源

主节点Master

管理整个集群资源,接收提交应用,分配资源给每个应用,运行Task任务

从节点Workers

管理每个机器的资源,分配对应的资源来运行Task

每个从节点分配资源信息给Worker管理,资源信息包含内存Memory和CPU Cores核数

历史服务器(可选)

Spark Application 运行完成以后,保存事件日志数据到HDFS,启动HistoryServer可以查看应用运行相关信息

操作

集群规划

node1:master

ndoe2:worker/slave

node3:worker/slave

修改配置文件   配置worker

cd /export/server/spark/conf
mv slaves.template slaves
vim slaves

删除localhost

node2
node3

2,3配置为worker

配置master

cd /export/server/spark/conf

mv spark-env.sh.template spark-env.sh
vim spark-env.sh

增加如下内容(最后插入)

## 设置JAVA安装目录
JAVA_HOME=/export/server/jdk1.8.0_241

## HADOOP软件配置文件目录,读取HDFS上文件和运行Spark在YARN集群时需要,先提前配上
HADOOP_CONF_DIR=/export/server/hadoop-3.3.0/etc/hadoop
YARN_CONF_DIR=/export/server/hadoop-3.3.0/etc/hadoop

## 指定spark老大Master的IP和提交任务的通信端口
SPARK_MASTER_HOST=node1
SPARK_MASTER_PORT=7077

SPARK_MASTER_WEBUI_PORT=8080

SPARK_WORKER_CORES=1
SPARK_WORKER_MEMORY=1g

JAVA 和Hadoop如果不一样要改为自己的

(echo $JAVA_HOME)

分发到其他机器

cd /export/server/
scp -r spark-3.0.1-bin-hadoop2.7 root@node2:$PWD
scp -r spark-3.0.1-bin-hadoop2.7 root@node3:$PWD

分发完创建一个软连接(改名)node2  node3

ln -s /export/server/spark-3.0.1-bin-hadoop2.7 /export/server/spark

测试--运行

           在主节点上启动spark集群------------------

/export/server/spark/sbin/start-all.sh

           在主节点上停止spark集群

/export/server/spark/sbin/stop-all.sh

            jps   

node1 多了个master

node2、node3上多了个worker

            单独启动  主节点上单独启动和停止Master-----------------

start-master.sh
stop-master.sh

           在从节点上单独启动和停止Worker(Worker指的是slaves配置文件中的主机名)

start-slaves.sh
stop-slaves.sh

             集群的停止

/export/server/spark/sbin/stop-all.sh

web界面(重要)

spark: 4040 任务运行job web-ui界面端口

spark: 8080 spark集群web-ui界面端口

spark: 7077 spark提交任务时的通信端口

hadoop: 50070集群web-ui界面端口

hadoop:8020/9000(老版本) 文件上传下载通信端口
 

启动spark-shell   测试任务

启动spark-shell

/export/server/spark/bin/spark-shell --master spark://node1:7077

提交一个任务测试

直接提交(按照上面的local模式)  不行    worker是node2  node3   其上没有数单词数那个文件

先上传文件到hdfs

hadoop fs -put /root/words.txt /wordcount/input/words.txt

目录如果不存在可以创建

hadoop fs -mkdir -p /wordcount/input

结束后可以删除测试文件夹

hadoop fs -rm -r /wordcount

            执行

val textFile = sc.textFile("hdfs://node1:8020/wordcount/input/words.txt")
val counts = textFile.flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _)
counts.collect
counts.saveAsTextFile("hdfs://node1:8020/wordcount/output47")

查看结果

http://node1:50070/explorer.html#/wordcount/output47/

查看spark任务web-ui

http://node1:4040/jobs/


StandlonaHA高可用

原理

主Master只有一个   再加一个

 操作

停止集群

/export/server/spark/sbin/stop-all.sh

node1上配置

vim /export/server/spark/conf/spark-env.sh

 去掉注释

#SPARK_MASTER_HOST=node1

最后加上(一行)

SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node1:2181,node2:2181,node3:2181 -Dspark.deploy.zookeeper.dir=/spark-ha"

分发配置

cd /export/server/spark/conf
scp -r spark-env.sh root@node2:$PWD
scp -r spark-env.sh root@node3:$PWD

启动

启动zk服务(先要去配置zookeeper)

/opt/module/zookeeper/apache-zookeeper-3.5.6-bin/bin/zkServer.sh start
(node1 node2 node3都要)

zkServer.sh status
zkServer.sh stop
zkServer.sh start

node1上启动Spark集群执行

/export/server/spark/sbin/start-all.sh

在node2上再单独只起个master:两个master

/export/server/spark/sbin/start-master.sh

查看WebUI

http://node1:8080/

http://node2:8080/

模拟node1宕机

jps

kill -9 进程id(这里是Master的进程号)

再次查看web-ui

http://node1:8080/(刷新  挂了)

http://node2:8080/(ALIVE)

测试-WordCount

/export/server/spark/bin/spark-shell --master spark://node1:7077,node2:7077

spark上运行

val textFile = sc.textFile("hdfs://node1:8020/wordcount/input/words.txt")
val counts = textFile.flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _)
counts.collect
counts.saveAsTextFile("hdfs://node1:8020/wordcount/output47_2")

spark-On-Yarn用的多

原理

 

 操作-准备工作

关闭之前的Spark-Standalone集群

/export/server/spark/sbin/stop-all.sh

(jps  kill -9 (Master)node2

jps node3)(不知道用不用做)

配置Yarn历史服务器并关闭资源检查
 

vim /export/server/hadoop/etc/hadoop/yarn-site.xml
<configuration>
    <!-- 配置yarn主节点的位置 -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>node1</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!-- 设置yarn集群的内存分配方案 -->
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>20480</value>
    </property>
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>2048</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-pmem-ratio</name>
        <value>2.1</value>
    </property>
    <!-- 开启日志聚合功能 -->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <!-- 设置聚合日志在hdfs上的保存时间 -->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
    </property>
    <!-- 设置yarn历史服务器地址 -->
    <property>
        <name>yarn.log.server.url</name>
        <value>http://node1:19888/jobhistory/logs</value>
    </property>
    <!-- 关闭yarn内存检查 -->
    <property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>false</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>
</configuration>

(配置了需要分发并重启yarn)

cd /export/server/hadoop/etc/hadoop
scp -r yarn-site.xml root@node2:$PWD
scp -r yarn-site.xml root@node3:$PWD
/export/server/hadoop/sbin/stop-yarn.sh
/export/server/hadoop/sbin/start-yarn.sh

配置Spark的历史服务器和Yarn的整合

cd /export/server/spark/conf
mv spark-defaults.conf.template spark-defaults.conf
vim spark-defaults.conf

添加内容

spark.eventLog.enabled                  true
spark.eventLog.dir                      hdfs://node1:8020/sparklog/
spark.eventLog.compress                 true
spark.yarn.historyServer.address        node1:18080

vim /export/server/spark/conf/spark-env.sh
## 配置spark历史日志存储地址
SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://node1:8020/sparklog/ -Dspark.history.fs.cleaner.enabled=true"

注意:sparklog需要手动创建

hadoop fs -mkdir -p /sparklog

修改日志级别

cd /export/server/spark/conf
mv log4j.properties.template log4j.properties
vim log4j.properties

 分发-可选,如果只在node1上提交spark任务到yarn,那么不需要分发

cd /export/server/spark/conf

 scp -r spark-env.sh root@node2:$PWD

 scp -r spark-env.sh root@node3:$PWD

  

 scp -r spark-defaults.conf root@node2:$PWD

 scp -r spark-defaults.conf root@node3:$PWD

   

 scp -r log4j.properties root@node2:$PWD

 scp -r log4j.properties root@node3:$PWD

配置依赖的Spark 的jar包

在HDFS上创建存储spark相关jar包的目录

hadoop fs -mkdir -p /spark/jars/

上传$SPARK_HOME/jars所有jar包到HDFS

hadoop fs -put /export/server/spark/jars/* /spark/jars/

在node1上修改spark-defaults.conf

vim /export/server/spark/conf/spark-defaults.conf

 添加内容

spark.yarn.jars  hdfs://node1:8020/spark/jars/*

分发同步-可选

cd /export/server/spark/conf
scp -r spark-defaults.conf root@node2:$PWD
scp -r spark-defaults.conf root@node3:$PWD

         启动服务

启动HDFS和YARN服务,在node1执行命令

start-dfs.sh
start-yarn.sh

或者

start-all.sh

启动MRHistoryServer服务,在node1执行命令

mr-jobhistory-daemon.sh start historyserver

启动Spark HistoryServer服务,,在node1执行命令

/export/server/spark/sbin/start-history-server.sh

          UI页面

MRHistoryServer服务WEB UI页面

http://node1:19888

Spark HistoryServer服务WEB UI页面

http://node1:18080/

操作-spark任务提交

           client模式-了解

1需要Yarn集群

2历史服务器

3提交任务的客户端工具-spark-submit命令

4待提交的spark任务/程序的字节码--(自己不会创建可以用示例程序)

示例程序--求圆周率

SPARK_HOME=/export/server/spark
${SPARK_HOME}/bin/spark-submit \
--master yarn  \
--deploy-mode client \
--driver-memory 512m \
--driver-cores 1 \
--executor-memory 512m \
--num-executors 2 \
--executor-cores 1 \
--class org.apache.spark.examples.SparkPi \
${SPARK_HOME}/examples/jars/spark-examples_2.12-3.0.1.jar \
10

     查看web界面

http://node1:8088/cluster

            cluster模式-开发使用

SPARK_HOME=/export/server/spark
${SPARK_HOME}/bin/spark-submit \
--master yarn \
--deploy-mode cluster \
--driver-memory 512m \
--executor-memory 512m \
--num-executors 1 \
--class org.apache.spark.examples.SparkPi \
${SPARK_HOME}/examples/jars/spark-examples_2.12-3.0.1.jar \
10

     查看web界面

http://node1:8088/cluster

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值