Spark入门
Spark入门
1. 是什么
-
一个统一的针对大规模数据的分析计算引擎
-
Spark的出现是为了替代Hadoop中MapReduce
-
模块划分
模块划分 | 程序入口 | 数据抽象 | 使用场景 |
---|---|---|---|
Spark Core | SparkContext | RDD | 离线批处理 |
Spark SQL | SparkSession | DataFrame、Dataset | 结构化批处理 |
Spark Streaming | StreamingContext | DStream | 流式实时计算 |
2. 怎么用
2.1 环境准备
- 静态ip和主机名,主机名映射
echo '
192.168.1.131 bd1301
192.168.1.132 bd1302
192.168.1.133 bd1303
' >> /etc/hosts
- 安装jdk,添加环境变量
echo 'export JAVA_HOME=/opt/jdk1.8' >> /etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile
source /etc/profile
- 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
- ssh免密登录
ssh-keygen -t rsa
ssh-copy-id bd1301
2.2 安装HDFS
-
下载解压
-
修改配置文件
-
hadoop-env.sh
-
core-site.xml
-
hdfs-site.xml
-
salves
-
-
分发安装包
-
配置环境变量
echo 'export HADOOP_HOME=/opt/hadoop-2.7.7' >> /etc/profile
echo 'export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH' >> /etc/profile
source /etc/profile
- 启动集群
2.1 搭建
-
关于版本
-
x.y.z
- x 大版本,API和功能模块的变化
- y 中版本,API和功能没有改动,仅仅增量添加新的功能
- z 小版本,频繁更新,修复bug,修复性能问题
-
当前学习版本 3.1.2
-
生产环境版本 2.4.x 3.1.x
-
最新版本 3.2.1
-
- 下载解压
-
修改配置文件
- spark-env.sh
# 添加jdk
export JAVA_HOME=/opt/jdk1.8
# standalone模式Master启动的机器主机名
SPARK_MASTER_HOST=bd1301
# standalone模式Master启动的服务端口
SPARK_MASTER_PORT=7077
# standalone模式Master的Web界面的端口
SPARK_MASTER_WEBUI_PORT=8080
- spark-defaults.conf
# Spark默认使用的MasterURI
spark.master spark://bd1301:7077
- workers
# 配置需要启动worker进程的所有机器
bd1301
bd1302
bd1303
- 分发安装包
#!/bin/bash
MY_HOSTNAME=`hostname`
HOSTS=`cat /etc/hosts | grep bd | awk '{print $2}' | grep -v $MY_HOSTNAME`
for HOST in $HOSTS
do
echo "正在将${1}发送到${HOST}的${2}..."
scp -rq $1 $HOST:$2
echo "done.."
done
- 配置环境变量
echo 'export SPARK_HOME=/opt/spark-3.1.2' >> /etc/profile
echo 'export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH' >> /etc/profile
source /etc/profile
- 启动集群
2.2 Spark-shell
- Spark-shell封装了scala的REPL,可以直接在Spark-shell中编写spark程序,并将程序提交到集群执行
# 启动spark-shell
spark-shell
-
sparkshell中会自动创建SparkContext实例,在Sparkshell中编写的程序,会默认占用所有的集群可用CPU核心,以及为每个worker启动一个executor,每个executor默认占用1GB内容,用于运行在Sparkshell中编写的任务
-
sparkshell通常用于测试
2.3 IDEA中开发Spark程序
- 创建工程引入依赖
- 创建包含入口方法的主程序
- 创建SparkContext的实例
- 使用SparkContext加载数据创建RDD
- 使用RDD调用各种算子完成数据处理
- 将处理结果写入文件或打印到控制台
3. 核心原理
3.1 Spark程序的运行模式
-
local 本地模式
通常用于开发环境,可以直接在IDE(集成开发环境)中启动一个Spark程序
用于编码和测试 -
standalone 独立集群模式
spark提供了独立的主从架构集群模式,集群的主要角色分为
Master:主节点,用于提交和管理Spark任务
Worker:接收Master分配的任务,启动若干执行器(Executor),执行具体任务逻辑 -
客户端模式
各种资源管理平台:YARN,Mesos,K8s,cloud
创建工程 -> 编写Spark任务 -> 打成jar -> 提交到资源管理平台
yarn jar xxx.jar xxx.xx.Main