建议有Hadoop基础后再学Spark
本文续:https://yellow520.blog.csdn.net/article/details/110425351
电火花的目录
1、概述
- Apache SparkTM是大数据分析引擎
- 在Scala语言中实现
- 依赖JDK
- 更基于内存(相对于MapReduce),适用于实时计算
- 官网:http://spark.apache.org/
- 下载地址:https://downloads.apache.org/spark/
- 官方教程:http://spark.apache.org/docs/latest/quick-start.html
库 | 用途 |
---|---|
Spark SQL | 结构化数据处理 |
Spark Streaming | 实时数据流式计算 |
MLlib | 机器学习 |
GraphX | 图和图并行计算 |
2、软件安装
环境 | 版本 | 命令 or 路径 | 备注 |
---|---|---|---|
CentOS | centos-release-7-5.1804.el7.centos.x86_64 | rpm -q centos-release | 开源的Linux操作系统 |
JDK | 1.8.0_212 | /opt | Java软件开发工具包 |
Spark | 2.4.7 | /opt | 大数据实时计算引擎 |
安装Spark前,要预先装好JDK(本文略过)
2.1、环境变量、解压到指定目录、修改用户组
1、环境变量
echo '# Spark' >> /etc/profile.d/custom.sh
echo 'export SPARK_HOME=/opt/spark' >> /etc/profile.d/custom.sh
echo 'export PATH=$PATH:$SPARK_HOME/bin' >> /etc/profile.d/custom.sh
source /etc/profile.d/custom.sh
2、解压、改名、修改用户组
tar -zxvf spark-2.4.7-bin-hadoop2.7.tgz -C /opt/
cd $SPARK_HOME/..
mv spark-2.4.7-bin-hadoop2.7 spark
chown -R root:root spark
2.2、目录介绍
ll $SPARK_HOME
目录 | 用处 | e.g. |
---|---|---|
bin | 可执行命令 | spark-shell 、spark-submit |
conf | 配置 | spark-env.sh.template |
data | 一些可以拿来玩机器学习的样本 | graphx 、mllib 、streaming |
example | 官方提供了一些代码案例 | cat examples/src/main/python/wordcount.py |
jars | 依赖的JAR文件 | |
python、R | 对其它语言的支持 | pyspark |
sbin | 启停命令 | start-all.sh 、stop-all.sh |
2.3、运行
2.3.1、spark-submit
提交官方案例
$SPARK_HOME/bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
$SPARK_HOME/examples/jars/spark-examples_2.11-2.4.7.jar \
10
2.3.2、spark-shell
import org.apache.spark.rdd.RDD
// 读数据(并行化)
val rdd0: RDD[String] = sc.parallelize(List("cat dog", "cat cow", "cow pig"))
// 分词并平坦化
val rdd1: RDD[String] = rdd0.flatMap(_.split(" "))
// 每个词
val rdd2: RDD[(String, Int)] = rdd1.map((_, 1))
// 对相同的key进行reduce操作
val rdd3: RDD[(String, Int)] = rdd2.reduceByKey(_ + _)
// 打印
println(rdd0.collect.toList)
println(rdd1.collect.toList)
println(rdd2.collect.toList)
println(rdd3.collect.toList)
-
打印结果
-
List(cat dog, cat cow, cow pig)
List(cat, dog, cat, cow, cow, pig)
List((cat,1), (dog,1), (cat,1), (cow,1), (cow,1), (pig,1))
List((cow,2), (dog,1), (pig,1), (cat,2))
2.3.3、pyspark
>>> sc
<SparkContext master=local[*] appName=PySparkShell>
>>> sc.parallelize(['a','b','c','c']). \
... map(lambda word:(word,1)).reduceByKey(lambda a,b:a+b).collect()
[('a', 1), ('c', 2), ('b', 1)]
3、Standalone集群部署
主机名 | Hadoop100 | Hadoop101 | Hadoop102 |
---|---|---|---|
IP地址 | 192.168.1.100 | 192.168.1.101 | 192.168.1.102 |
Spark:Master | 1 | ||
Spark:Worker | 1 | 1 |
3.1、配置文件
cd $SPARK_HOME/conf/
3.1.1、slaves
en | cn |
---|---|
slave | 奴隶;从动装置 |
slaves | 服务于另一连接计算机的系统 |
echo -e "hadoop101\nhadoop102" > slaves
cat slaves
3.1.2、spark-env.sh
设置
Master
的hadoop100:7070
通信地址
cp spark-env.sh.template spark-env.sh
echo -e "SPARK_MASTER_HOST=hadoop100\nSPARK_MASTER_PORT=7077" >> spark-env.sh
cat spark-env.sh
3.1.3、log4j.properties(可选)
设置日志级别,改一行
log4j.rootCategory
cp log4j.properties.template log4j.properties
vi log4j.properties
log4j.rootCategory=WARN, console
3.2、分发到各节点
rsync -a $SPARK_HOME/ hadoop101:$SPARK_HOME/
rsync -a $SPARK_HOME/ hadoop102:$SPARK_HOME/
3.3、启停命令
在
hadoop100
执行,那么Master
就会在hadoop100
$SPARK_HOME/sbin/start-all.sh
$SPARK_HOME/sbin/stop-all.sh
3.4、查看集群状态
命令行查看
jps | grep -v Jps
ssh hadoop101 "jps | grep -v Jps"
ssh hadoop102 "jps | grep -v Jps"
浏览器查看
hadoop100:8080
3.5、运行官方案例
官方案例求 π \pi π
cd $SPARK_HOME/
./bin/spark-submit \
--master spark://hadoop100:7077 \
--class org.apache.spark.examples.SparkPi \
./examples/jars/spark-examples_2.11-2.4.7.jar \
10
4、YARN集群模式
- 此处另开新篇,先删上面旧版,此处Spark版本
spark-3.0.1-bin-hadoop2.7.tgz
- 请先装好JDK和Hadoop
4.1、解压
tar -zxvf spark-3.0.1-bin-hadoop2.7.tgz -C /opt/
cd /opt/
mv spark-3.0.1-bin-hadoop2.7 spark
chown -R root:root spark
ll
4.2、环境变量
修改环境变量配置、分发配置、source配置
echo '# Spark' >> /etc/profile.d/custom.sh
echo 'export SPARK_HOME=/opt/spark' >> /etc/profile.d/custom.sh
echo 'export PATH=$PATH:$SPARK_HOME/bin' >> /etc/profile.d/custom.sh
rsync -a /etc/profile.d/custom.sh hadoop101:/etc/profile.d/
rsync -a /etc/profile.d/custom.sh hadoop102:/etc/profile.d/
source /etc/profile.d/custom.sh
ssh hadoop101 'source /etc/profile.d/custom.sh'
ssh hadoop102 'source /etc/profile.d/custom.sh'
Spark的YARN集群模式配置
echo 'export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop' \
>> $SPARK_HOME/conf/spark-env.sh
4.3、文件分发
rsync -a $SPARK_HOME/ hadoop101:$SPARK_HOME/
rsync -a $SPARK_HOME/ hadoop102:$SPARK_HOME/
4.4、提交Spark任务(前提Hadoop在运行)
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
$SPARK_HOME/examples/jars/spark-examples_2.12-3.0.1.jar \
10