AmosCloud

Library

Have a Question?

If you have any question you can ask below or enter what you are looking for!

Spark入门

Spark入门

1. 是什么

  • 一个统一的针对大规模数据的分析计算引擎

  • Spark的出现是为了替代Hadoop中MapReduce

  • 模块划分

file

模块划分 程序入口 数据抽象 使用场景
Spark Core SparkContext RDD 离线批处理
Spark SQL SparkSession DataFrame、Dataset 结构化批处理
Spark Streaming StreamingContext DStream 流式实时计算

2. 怎么用

2.1 环境准备

  1. 静态ip和主机名,主机名映射
echo '
192.168.1.131 bd1301
192.168.1.132 bd1302
192.168.1.133 bd1303
' >> /etc/hosts
  1. 安装jdk,添加环境变量
echo 'export JAVA_HOME=/opt/jdk1.8' >> /etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile
source /etc/profile
  1. 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
  1. ssh免密登录
ssh-keygen -t rsa
ssh-copy-id bd1301

2.2 安装HDFS

  1. 下载解压

  2. 修改配置文件

    • hadoop-env.sh

    • core-site.xml

    • hdfs-site.xml

    • salves

  3. 分发安装包

  4. 配置环境变量

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
  1. 启动集群

2.1 搭建

  • 关于版本

    • x.y.z

      1. x 大版本,API和功能模块的变化
      2. y 中版本,API和功能没有改动,仅仅增量添加新的功能
      3. z 小版本,频繁更新,修复bug,修复性能问题
    • 当前学习版本 3.1.2

    • 生产环境版本 2.4.x 3.1.x

    • 最新版本 3.2.1

  1. 下载解压
  2. 修改配置文件

    • 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
  1. 分发安装包
#!/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
  1. 配置环境变量
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
  1. 启动集群

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程序

  1. 创建工程引入依赖
  2. 创建包含入口方法的主程序
  3. 创建SparkContext的实例
  4. 使用SparkContext加载数据创建RDD
  5. 使用RDD调用各种算子完成数据处理
  6. 将处理结果写入文件或打印到控制台

3. 核心原理

3.1 Spark程序的运行模式

  1. local 本地模式
    通常用于开发环境,可以直接在IDE(集成开发环境)中启动一个Spark程序
    用于编码和测试

  2. standalone 独立集群模式
    spark提供了独立的主从架构集群模式,集群的主要角色分为
    Master:主节点,用于提交和管理Spark任务
    Worker:接收Master分配的任务,启动若干执行器(Executor),执行具体任务逻辑

  3. 客户端模式
    各种资源管理平台:YARN,Mesos,K8s,cloud
    创建工程 -> 编写Spark任务 -> 打成jar -> 提交到资源管理平台
    yarn jar xxx.jar xxx.xx.Main