CentOS7.5之spark2.3.0安装

一简介

1.1 Spark概述

Apache Spark是一个快速且通用的集群计算系统。它提供Java,Scala,Python和R中的高级API以及支持通用执行图的优化引擎。是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行计算框架,Spark拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。Spark是Scala编写,方便快速编程。

1.2 spark下载

官方下载地址:http://spark.apache.org/downloads.html

1.3 spark技术栈

1.4 spark运行模式


运行环境


模式


描述


Local


本地模式


常用于本地开发测试,本地还分为local单线程和local-cluster多线程;


Standalone


集群模式


典型的Mater/slave模式,不过也能看出Master是有单点故障的;Spark支持ZooKeeper来实现HA


On yarn


集群模式


运行在yarn资源管理器框架之上,由yarn负责资源管理,Spark负责任务调度和计算


On mesos


集群模式


运行在mesos资源管理器框架之上,由mesos负责资源管理,Spark负责任务调度和计算


术语


描述


Application


Spark的应用程序,包含一个Driver program和若干Executor


SparkContext


Spark应用程序的入口,负责调度各个运算资源,协调各个Worker Node上的Executor


Driver Program


运行Application的main()函数并且创建SparkContext


Executor


是为Application运行在Worker node上的一个进程,该进程负责运行Task,并且负责将数据存在内存或者磁盘上。

每个Application都会申请各自的Executor来处理任务


Cluster Manager


在集群上获取资源的外部服务(例如:Standalone、Mesos、Yarn)


Worker Node


集群中任何可以运行Application代码的节点,运行一个或多个Executor进程


Task


运行在Executor上的工作单元


Job


SparkContext提交的具体Action操作,常和Action对应


Stage


每个Job会被拆分很多组task,每组任务被称为Stage,也称TaskSet


RDD


是Resilient distributed datasets的简称,中文为弹性分布式数据集;是Spark最核心的模块和类


DAGScheduler


根据Job构建基于Stage的DAG,并提交Stage给TaskScheduler


TaskScheduler


将Taskset提交给Worker node集群运行并返回结果


Transformations


是Spark API的一种类型,Transformation返回值还是一个RDD,

所有的Transformation采用的都是懒策略,如果只是将Transformation提交是不会执行计算的


Action


是Spark API的一种类型,Action返回值不是一个RDD,而是一个scala集合;计算只有在Action被提交的时候计算才被触发。

二 集群安装

2.1  Local模式

1 解压

[[email protected] software]$ tar zxvf spark-2.3.0-bin-hadoop2.7.tgz -C /opt/module/
[[email protected] module]$ mv spark-2.3.0-bin-hadoop2.7 spark-2.3.0

2 配置环境变量

[[email protected] spark-2.3.0]$ sudo vi /etc/profile
export  SPARK_HOME=/opt/module/spark-2.3.0
export  PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbinsource /etc/profile

3 测试

Local模式下spark基本测试:bin/spark-shell

[[email protected] spark-2.3.0]$ bin/spark-shell
2018-06-05 03:47:16 WARN  NativeCodeLoader:62 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Spark context Web UI available at http://node21:4040
Spark context available as ‘sc‘ (master = local[*], app id = local-1528184918749).
Spark session available as ‘spark‘.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  ‘_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.3.0
      /_/

Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_171)
Type in expressions to have them evaluated.
Type :help for more information.

scala> sc.textFile("/opt/module/datas/wc.input")
res0: org.apache.spark.rdd.RDD[String] = /opt/module/datas/wc.input MapPartitionsRDD[1] at textFile at <console>:25

scala> res0.collect
res1: Array[String] = Array(hadoop habse hive, spark flink storm, sqoop spark hadoop, flume kafka)

scala> sc.stop()

scala> :quit

2.2 Standalone模式

1  解压安装包

[[email protected] software]$ tar zxvf spark-2.3.0-bin-hadoop2.7.tgz -C /opt/module/
[[email protected] module]$ mv spark-2.3.0-bin-hadoop2.7 spark-2.3.0

2  修改conf下文件

2.1 修改slaves.template文件,添加从节点。

[[email protected] conf]$ mv slaves.template slaves
[[email protected] conf]$ vi slaves

2.2 修改spark-env.sh

[[email protected] conf]$ mv spark-env.sh.template spark-env.sh
[[email protected] conf]$ vi spark-env.sh 
SPARK_MASTER_HOST=node21      #master的ip或主机名
SPARK_MASTER_PORT=7077        #提交任务的端口,默认是7077
SPARK_MASTER_WEBUI_PORT=8080  #masster节点的webui端口
SPARK_WORKER_CORES=2          #每个worker从节点能够支配的core的个数
SPARK_WORKER_MEMORY=3g        #每个worker从节点能够支配的内存数
SPARK_WORKER_PORT=7078        #每个worker从节点的端口(可选配置)
SPARK_WORKER_WEBUI_PORT=8081  #每个worker从节点的wwebui端口(可选配置)
SPARK_WORKER_INSTANCES=1      #每个worker从节点的实例(可选配置)

2.3 配置spark-defaults.conf(可选配置)

配置spark-defaults.conf文件:不配置此选项运行spark服务还是在local模式下运行。
spark.master                     spark://node21:7077
-----------------------------------------------------------------------------
如果没有配置此选项,也可以通过bin/spark-shell命令通过指定--master参数指定其运行在哪种模式下,例如:
# bin/spark-shell --master spark://node21:7077
或者
# bin/spark-shell --master local

3 同步到其他节点上

[[email protected] module]$ scp -r spark-2.3.0 [email protected]:/opt/module/
[[email protected] module]$ scp -r spark-2.3.0 [email protected]:/opt/module/

同步完成,配置node22,node23的环境变量

4 启动集群

启动spark:

sbin/start-master.sh

sbin/start-slaves.sh

或者

sbin/start-all.sh

5  测试集群

[[email protected] spark-2.3.0]$ spark-shell
2018-06-05 05:36:37 WARN  NativeCodeLoader:62 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Spark context Web UI available at http://node21:4040
Spark context available as ‘sc‘ (master = local[*], app id = local-1528191467883).
Spark session available as ‘spark‘.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  ‘_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.3.0
      /_/

Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_171)
Type in expressions to have them evaluated.
Type :help for more information.
scala> sc.textFile("/opt/module/datas/wc.input")
res0: org.apache.spark.rdd.RDD[String] = /opt/module/datas/wc.input MapPartitionsRDD[1] at textFile at <console>:25
scala> res0.collect
res1: Array[String] = Array(hadoop habse hive, spark flink storm, sqoop spark hadoop, flume kafka)
scala> sc.stop()
scala> :quit

或是运行官方的例子

[[email protected] spark-2.3.0]$ spark-submit  --master spark://node21:7077  --class org.apache.spark.examples.SparkPi ./examples/jars/spark-examples_2.11-2.3.0.jar 100

2.3 Spark On Yarn

1 首先启动 YARN 资源管理器
2 更改$SPARK_HOME/conf/spark-env.sh下文件

配置HADOOP_CONF_DIR配置文件的路径

HADOOP_CONF_DIR=/opt/module/hadoop-2.7.6/etc/hadoop

确保HADOOP_CONF_DIRYARN_CONF_DIR指向包含Hadoop集群(客户端)配置文件的目录。这些配置用于写入HDFS并连接到YARN ResourceManager。该目录中包含的配置将被分发到YARN集群,以便应用程序使用的所有容器使用相同的配置。如果配置引用不是由YARN管理的Java系统属性或环境变量,还应该在Spark应用程序的配置(驱动程序,执行程序和以客户端模式运行时的AM)中对其进行设置。

有两种部署模式可用于在YARN上启动Spark应用程序。在cluster模式中,Spark驱动程序在由群集上的YARN管理的应用程序主进程内运行,客户端可以在启动应用程序后离开。在client模式下,驱动程序在客户端进程中运行,而应用程序主服务器仅用于从YARN请求资源。

与Spark支持的其他集群管理器不同,该--master 参数中指定了主设备的地址,在YARN模式下,ResourceManager的地址从Hadoop配置中获取。因此,--master参数是yarn

cluster模式启动Spark应用程序:

$ ./bin/spark-submit --class path.to.your.Class --master yarn --deploy-mode cluster [options] <app jar> [app options]

例如:

$ ./bin/spark-submit --class org.apache.spark.examples.SparkPi     --master yarn     --deploy-mode cluster     --driver-memory 4g     --executor-memory 2g     --executor-cores 1     --queue thequeue     examples/jars/spark-examples*.jar     10

以上启动了一个启动默认应用程序主控的YARN客户端程序。然后SparkPi将作为Application Master的子线程运行。客户端将定期轮询应用程序主文件以获取状态更新并将其显示在控制台中。一旦你的应用程序运行完毕,客户端将退出。有关如何查看驱动程序和执行程序日志的信息,请参阅下面的“调试应用程序”部分。

要在client模式下启动Spark应用程序,请执行相同的操作,但替换clusterclient。以下显示如何spark-shellclient模式下运行:

$ ./bin/spark-shell --master yarn --deploy-mode client

添加其他JAR

cluster模式下,驱动程序运行在与客户端不同的机器上,因此SparkContext.addJar无法使用客户端本地文件开箱即用。要使客户端上的文件可用SparkContext.addJar,请使用--jars启动命令中的选项将它们包括在内。

$ ./bin/spark-submit --class my.main.Class     --master yarn     --deploy-mode cluster     --jars my-other-jar.jar,my-other-other-jar.jar     my-main-jar.jar     app_arg1 app_arg2

2.4 spark on yarn 的支持两种模式: 
1) yarn-cluster:适用于生产环境; 
2) yarn-client:适用于交互、调试,希望立即看到app的输出

yarn-cluster和yarn-client的区别在于yarn
appMaster,每个yarn
app实例有一个appMaster进程,是为app启动的第一个container;负责从ResourceManager请求资源,获取到资源后,告诉NodeManager为其启动container。yarn-cluster和yarn-client模式内部实现还是有很大的区别。如果你需要用于生产环境,那么请选择yarn-cluster;而如果你仅仅是Debug程序,可以选择yarn-client。

三 配置历史服务器

1 临时配置,对本次提交的应用程序起作用

./spark-shell --master spark://node21:7077
--name myapp1
--conf spark.eventLog.enabled=true
--conf spark.eventLog.dir=hdfs://node21:8020/spark/test

停止程序,在Web Ui中Completed Applications对应的ApplicationID中能查看history。

2 spark-default.conf配置文件中配置HistoryServer,对所有提交的Application都起作用

在客户端节点,进入../spark-2.3.0/conf/ spark-defaults.conf最后加入:

//开启记录事件日志的功能
spark.eventLog.enabled           true
//设置事件日志存储的目录
spark.eventLog.dir                    hdfs://node21:8020/spark/test
//设置HistoryServer加载事件日志的位置
spark.history.fs.logDirectory   hdfs://node21:8020/spark/test
//日志优化选项,压缩日志
spark.eventLog.compress         true

启动HistoryServer:

./start-history-server.sh

访问HistoryServer:node24:18080,之后所有提交的应用程序运行状况都会被记录。

四 配置MasterHA

1 Master的高可用原理

Standalone集群只有一个Master,如果Master挂了就无法提交应用程序,需要给Master进行高可用配置,Master的高可用可以使用fileSystem(文件系统)和zookeeper(分布式协调服务)。

fileSystem只有存储功能,可以存储Master的元数据信息,用fileSystem搭建的Master高可用,在Master失败时,需要我们手动启动另外的备用Master,这种方式不推荐使用。

zookeeper有选举和存储功能,可以存储Master的元素据信息,使用zookeeper搭建的Master高可用,当Master挂掉时,备用的Master会自动切换,推荐使用这种方式搭建Master的HA。

2 Master高可用搭建

1) 在Spark Master节点上配置主Master,配置spark-env.sh

export SPARK_DAEMON_JAVA_OPTS="
-Dspark.deploy.recoveryMode=ZOOKEEPER
-Dspark.deploy.zookeeper.url=node21:2181,node22:2181,node23:2181
-Dspark.deploy.zookeeper.dir=/sparkmaster0821"

2) 发送到其他worker节点上

scp spark-env.sh 到node22,node23

3) 找一台节点(非主Master节点)配置备用 Master,修改spark-env.sh配置节点上的MasterIP

SPARK_MASTER_IP=node22

4) 启动集群之前启动zookeeper集群:

5) 启动spark Standalone集群,启动备用Master

6) 打开主Master和备用Master WebUI页面,观察状态。

注意点:

  • 主备切换过程中不能提交Application。
  • 主备切换过程中不影响已经在集群中运行的Application。因为Spark是粗粒度资源调度。

测试验证:

提交SparkPi程序,kill主Master观察现象。

./spark-submit
--master spark://node21:7077,node22:7077
--class org.apache.spark.examples.SparkPi
../examples/jars/spark-examples_2.11-2.3.0.jar 10000

五 故障问题

1 警告问题

[[email protected] spark-2.3.0]$ spark-shell
2018-06-05 06:15:02 WARN  NativeCodeLoader:62 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Setting default log level to "WARN".

这种警告是由于glibc库版本不一致造成的。

第一种办法直接在log4j日志中去除告警信息。在hadoop-2.7.6/etc/hadoop/log4j.properties文件中添加

log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR  

第二种办法在hadoop-env.sh中 增加HADOOP_OPTS:

export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_HOME/lib/native"

原文地址:https://www.cnblogs.com/frankdeng/p/9092512.html

时间: 2024-08-28 20:44:16

CentOS7.5之spark2.3.0安装的相关文章

Spark2.1.0安装

1.解压安装spark tar zxf spark-2.1.O-bin-2.6.0-CDH5.10.0.tgz 2.修改配置文件 vim /etc/profile export SPARK_HOME=/opt/spark/spark-2.1.O export PATH=$PATH:$SPARK_HOME/bin source /etc/profile 3.spark配置 cd /opt/spark/spark-2.1.O/conf mv spark-env.sh.template spark-e

Spark2.1.0分布式集群安装

一.依赖文件安装 1.1 JDK 参见博文:http://www.cnblogs.com/liugh/p/6623530.html 1.2 Hadoop 参见博文:http://www.cnblogs.com/liugh/p/6624872.html 1.3 Scala 参见博文:http://www.cnblogs.com/liugh/p/6624491.html 二.文件准备 2.1 文件名称 spark-2.1.0-bin-hadoop2.7.tgz 2.2 下载地址 http://spa

centos7.0 安装日志--图文详解-python开发环境配置

centos7.0发布之后,就下载了everthing的DVD镜像,今天有时间,所以决定在vbox底下体验一番--- 上图: 默认是体验安装,作为一个忠实粉丝,我决定选择直接安装! 这个界面是这次新版本更新后改的,它把以前要下一步.上一步可以修改的操作全部集中到一个页面来,默认选择是下图这样,比如你想修改软件安装选项只要点击相应选项就可以了. 每次你更改安装选项之后,它都会自动从新计算安装源,如果你的选择的资源本地没有,还可以通过网络来安装,默认网络是不启用的,所以我们需要自己手工设置一下网络.

centos7.0安装apache-2.4.10

centos7.0安装完毕后,通过yum 安装的apache版本是 2.4.6的. 于是先停止了httpd服务,然后卸载了默认安装的版本. systemctl stop httpd.service rpm -qa|grep httpd #查看apache包,找到名字(例如httpd-2.4.6-18.el6_2.1.x86_64)后用下面命令删除 rpm -e httpd-2.2.15-15.el6_2.1.x86_64 #不过要先把依赖apache的包删除 或者 yum list|grep h

CentOS7.0 安装JAVA周围环境

CentOS7.0 安装JAVA周围环境  安装JDK 1.配置JDK环境变量 把下载好的JDK(jdk-7u75-linux-x64.gz)文件上传到 Reg: /home/p2pweb/java/ 文件夹下(文件夹可自己定义) [[email protected] ~]# tar -zxv -f jdk-7u75-linux-x64.gz // 解压压缩包 [[email protected] ~]# rm -rf jdk-7u75-linux-x64.gz // 删除压缩包 [[email

CentOS7.0 安装JAVA环境

CentOS7.0 安装JAVA环境  安装JDK 1.配置JDK环境变量 把下载好的JDK(jdk-7u75-linux-x64.gz)文件上传到 Reg: /home/p2pweb/java/ 目录下(目录可自定义) [[email protected] ~]# tar -zxv -f jdk-7u75-linux-x64.gz // 解压压缩包 [[email protected] ~]# rm -rf jdk-7u75-linux-x64.gz // 删除压缩包 [[email prot

Centos7下Mysql8.0安装手册 以及 一些坑点总结

MySQL 8 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能! 一.  Mysql8.0版本相比之前版本的一些特性 1) 默认编码utf8默认编码使用utf8mb4, utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的表情字符历史,MySQL数据库的 "utf8"并不是真正概念里的 UTF-8.MySQL中的"utf8"编码只支持最大3字节每字符.真正的大家正在使用

centos7.0安装教程

CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成.由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用.两者的不同,在于CentOS并不包含封闭源代码软件. 写在之前 官方的第一个文本档案.也就是0_README.txt大概意思

Zabbix 3.0 安装

Zabbix 3.0 安装 原文地址http://mp.weixin.qq.com/s?__biz=MzA5NjgwNzM0OQ==&mid=401897477&idx=1&sn=9eda7c22a93b89e30cd1672af19a9c84&scene=23&srcid=02178AIGacHXnK08V8EA6z37#rd 2016-02-17 admin OneOaaS Zabbix 3.0 For CentOS6安装 1 概述2 安装MySQL3 安装WE