Spark2.4.0 分布式环境搭建

2019-03-19  本文已影响0人  井地儿

系统环境

软件版本

软件 安装包版本
hadoop hadoop-2.7.7.tar.gz
jdk jdk-8u191-linux-x64.tar.gz
scala scala-2.12.8.tgz
mysql mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz
spark spark-2.4.0-bin-hadoop2.7.tgz

集群环境


ip hostname system
master 10.96.81.166 jms-master-01 centos7.2 [ CPU: 4 & 内存: 12G & 硬盘大小: 100G ]
node 10.96.113.243 jms-master-02 centos7.2 [ CPU: 4 & 内存: 12G & 硬盘大小: 100G ]
node 10.96.85.231 jms-master-03 centos7.2 [ CPU: 4 & 内存: 12G & 硬盘大小: 100G ]

约定规范

约定所有软件的安装目录:/home/hadoop/tools
约定所有的安装包存放目录:/home/hadoop/tools/package

前期准备

本文默认已经搭建好了hadoop集群环境。

安装包下载

为节省时间,提前在官网下载好和hadoop环境版本匹配的spark安装包spark-2.4.0-bin-hadoop2.7.tgz
如果没有安装scala,请下载scala安装包scala-2.12.8.tgz,并安装。

scala安装

先在master节点完成安装,然后scp到其他各个node节点。

master主节点安装

以下安装在master(jms-master-01)进行:
上传scala安装包至master节点:
scp scala-2.12.8.tgz jms-master-01:/home/hadoop/tools/package

解压

tar -xzvf scala-2.12.8.tgz -C /home/hadoop/tools/

配置scala环境变量

sudo vim /etc/profile

# scala home
export SCALA_HOME=/home/hadoop/tools/scala-2.12.8
export PATH=$SCALA_HOME/bin:$PATH

环境变量立即生效

source /etc/profile

验证

[hadoop@jms-master-01 tools]$ scala
Welcome to Scala 2.12.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_191).
Type in expressions for evaluation. Or try :help.

scala> :q

退出scala交互窗口命令
:q

node节点分发

# 分发scala
scp -r scala-2.12.8 jms-master-02:/home/hadoop/tools/
scp -r scala-2.12.8 jms-master-03:/home/hadoop/tools/
# 分发配置
sudo scp /etc/profile  jms-master-02:/etc/profile
sudo scp /etc/profile  jms-master-03:/etc/profile

最后在各节点刷新profile文件使配置生效,并验证scala是否安装成功。

Spark安装

先在master节点完成安装,然后scp到其他各个node节点。

master主节点安装

上传&解压

scp spark-2.4.0-bin-hadoop2.7.tgz jms-master-01:/home/hadoop/tools/package
tar -xzvf spark-2.4.0-bin-hadoop2.7.tgz -C /home/hadoop/tools/

添加Spark环境变量

sudo vim /etc/profile
# spark home
export SPARK_HOME=/home/hadoop/tools/spark-2.4.0-bin-hadoop2.7
export PATH=$SPARK_HOME/bin:$PATH

修改Spark配置文件

spark配置文件模版在: cd ${SPARK_HOME}/conf/
主要修改两个配置文件:spark-env.sh和slaves

spark-env.sh

# 复制模版
cp spark-env.sh.template spark-env.sh
# 添加配置
vim spark-env.sh
export SCALA_HOME=/home/hadoop/tools/scala-2.12.8
export JAVA_HOME=/home/hadoop/tools/java/jdk1.8.0_191
export SPARK_MASTER_IP=jms-master-01
export SPARK_WORKER_MEMORY=2g
export HADOOP_CONF_DIR=/home/hadoop/tools/hadoop-2.7.7/etc/hadoop

slaves

cp slaves.template slaves
vim slaves
# localhost
jms-master-01
jms-master-02
jms-master-03

node节点分发

# 分发spark
scp -r spark-2.4.0-bin-hadoop2.7 jms-master-02:/home/hadoop/tools/
scp -r spark-2.4.0-bin-hadoop2.7 jms-master-03:/home/hadoop/tools/
# 分发配置
sudo scp /etc/profile  jms-master-02:/etc/profile
sudo scp /etc/profile  jms-master-03:/etc/profile

最后在各节点刷新profile文件使配置生效。

启动Spark集群

启动前确定Hadoop集群已经启动。
启动命令
sh $SPARK_HOME/sbin/start-all.sh

[hadoop@jms-master-01 spark-2.4.0-bin-hadoop2.7]$ cd sbin/
[hadoop@jms-master-01 sbin]$ ls
slaves.sh         start-history-server.sh         start-slave.sh          stop-master.sh                 stop-slaves.sh
spark-config.sh   start-master.sh                 start-slaves.sh         stop-mesos-dispatcher.sh       stop-thriftserver.sh
spark-daemon.sh   start-mesos-dispatcher.sh       start-thriftserver.sh   stop-mesos-shuffle-service.sh
spark-daemons.sh  start-mesos-shuffle-service.sh  stop-all.sh             stop-shuffle-service.sh
start-all.sh      start-shuffle-service.sh        stop-history-server.sh  stop-slave.sh
[hadoop@jms-master-01 sbin]$ sh start-all.sh
starting org.apache.spark.deploy.master.Master, logging to /home/hadoop/tools/spark-2.4.0-bin-hadoop2.7/logs/spark-hadoop-org.apache.spark.deploy.master.Master-1-jms-master-01.out
jms-master-03: starting org.apache.spark.deploy.worker.Worker, logging to /home/hadoop/tools/spark-2.4.0-bin-hadoop2.7/logs/spark-hadoop-org.apache.spark.deploy.worker.Worker-1-jms-master-03.out
jms-master-01: starting org.apache.spark.deploy.worker.Worker, logging to /home/hadoop/tools/spark-2.4.0-bin-hadoop2.7/logs/spark-hadoop-org.apache.spark.deploy.worker.Worker-1-jms-master-01.out
jms-master-02: starting org.apache.spark.deploy.worker.Worker, logging to /home/hadoop/tools/spark-2.4.0-bin-hadoop2.7/logs/spark-hadoop-org.apache.spark.deploy.worker.Worker-1-jms-master-02.out
[hadoop@jms-master-01 sbin]$ jps
20514 Master
20675 Jps
48852 NodeManager
20614 Worker
48375 DataNode
48729 ResourceManager
48556 SecondaryNameNode
48222 NameNode

Spark集群测试

运行第一个spark任务WorldCount

1,准备一个测试文件,摘录一段百度词条中对spark的介绍内容。

vim spark-test.txt

Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。
Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。
尽管创建 Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对 Hadoop 的补充,可以在 Hadoop 文件系统中并行运行。通过名为 Mesos 的第三方集群框架可以支持此行为。Spark 由加州大学伯克利分校 AMP 实验室 (Algorithms, Machines, and People Lab) 开发,可用来构建大型的、低延迟的数据分析应用程序。

2,将测试文件上传到hdfs中
hadoop fs -put spark-test.txt /user/hadoop/input

测试代码

val f = sc.textFile("hdfs://jms-master-01:9000/user/hadoop/input/spark-test.txt")
f.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey( +).collect().foreach(println)

启动spark-shell:

spark-shell

[hadoop@jms-master-01 spark-2.4.0-bin-hadoop2.7]$ spark-shell
2019-03-19 13:37:08 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://jms-master-01:4040
Spark context available as 'sc' (master = local[*], app id = local-1552973836296).
Spark session available as 'spark'.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.4.0
      /_/

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

scala> 

测试

scala> val f = sc.textFile("hdfs://jms-master-01:9000/user/hadoop/input/spark-test.txt")
f: org.apache.spark.rdd.RDD[String] = hdfs://jms-master-01:9000/user/hadoop/input/spark-test.txt MapPartitionsRDD[9] at textFile at <console>:24

scala> f.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey( _+_).collect().foreach(println)
(的补充,可以在,1)
(MapReduce的通用并行框架,Spark,拥有Hadoop,1)
(AMP,2)
(是为了支持分布式数据集上的迭代作业,但是实际上它是对,1)
(Apache,1)
(相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使,1)
((Algorithms,,1)
(Lab),1)
(实验室,1)
((加州大学伯克利分校的AMP实验室)所开源的类Hadoop,1)
(不同,Spark,1)
(能够紧密集成,其中的,1)
(文件系统中并行运行。通过名为,1)
(由加州大学伯克利分校,1)
(是一种与,1)
(Scala,4)
(是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC,1)
(Machines,,1)
(MapReduce所具有的优点;但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。,1)
(启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。,1)
(和,1)
(用作其应用程序框架。与,1)
(开发,可用来构建大型的、低延迟的数据分析应用程序。,1)
(lab,1)
(Mesos,1)
(Spark,5)
(尽管创建,1)
(在某些工作负载方面表现得更加优越,换句话说,Spark,1)
(People,1)
(可以像操作本地集合对象一样轻松地操作分布式数据集。,1)
(是在,1)
(and,1)
(的第三方集群框架可以支持此行为。Spark,1)
(语言中实现的,它将,1)
(Berkeley,1)
(Hadoop,4)

scala>

至此,Spark2.4.0分布式环境搭建完成。

上一篇下一篇

猜你喜欢

热点阅读