Spark2.4.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分布式环境搭建完成。