
Data Engineering Zoomcamp 实战在 Hadoop YARN 上以伪分布式模式运行 Spark 集群【免费下载链接】data-engineering-zoomcampData Engineering Zoomcamp is a free 9-week course on building production-ready data pipelines. Join the course here 项目地址: https://gitcode.com/GitHub_Trending/da/data-engineering-zoomcamp本篇指南是 Data Engineering Zoomcamp 第 6 模块Batch Processing环境搭建的关键一环讲解如何为 Spark 作业安装 Hadoop 3.2.3、配置免密 SSH、以伪分布式pseudo-distributed模式启动 YARN并让 Spark 以masteryarn提交作业。读完本文你将掌握单机 YARN 的完整搭建流程、Spark 与 YARN 的对接配置、GCS 连接器接入以及通过 Docker 容器运行时在 YARN 上提交 PySpark 作业如本仓库的06_spark_sql.py的完整方法。为什么 Spark 模块需要 YARN在 Data Engineering Zoomcamp 的 Spark 与 Docker 章节中作业需要调度到一个集群资源管理器上执行而这个角色由 YARNYet Another Resource Negotiator承担。YARN 随 Hadoop 一起分发因此即使你的 Spark 发行版本身自带PySpark 4.x 通过pip/uv安装时会捆绑一份 Spark你仍然需要单独安装 Hadoop 才能获得 YARN。本仓库的安装文档06-batch/setup/linux.md、06-batch/setup/macos.md、06-batch/setup/windows.md解决的是 Spark 本身的安装与验证local[*]模式而本文档解决的是从单机本地模式升级到伪分布式集群模式的这一步。文档的默认假设是 Linux 环境Windows 用户建议使用 WSLmacOS 上理论上也可运行。与完全分布式multi-node不同伪分布式模式将 NameNode、DataNode、ResourceManager、NodeManager 等全部进程运行在同一台机器上既能真实体验 YARN 的调度与资源管理语义又不需要多台服务器适合课程学习和本地开发。前置条件免密 SSH 到 localhostYARN 启动时会通过 SSH 连接到本机的各个节点因此你必须能够无需输入密码地执行ssh localhost如果该命令仍提示输入密码需要把你的公钥追加到本机授权列表中cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys chmod 0600 ~/.ssh/authorized_keys以上命令假设~/.ssh目录下已存在id_rsa.pub若没有先用ssh-keygen -t rsa生成。chmod 0600用于收紧authorized_keys的权限避免 SSH 因权限过宽而拒绝读取。在 WSL 环境下SSH 服务默认可能没有启动需要手动启动sudo service ssh start下载 Hadoop 3.2.3 二进制包本模块使用的 Spark 预期对接 Hadoop 3.2 版本因此仓库文档指定安装 Hadoop 3.2.3。可以从 Apache 官方镜像站获取离你最近的镜像并下载wget https://dlcdn.apache.org/hadoop/common/hadoop-3.2.3/hadoop-3.2.3.tar.gz解压并进入目录tar xzfv hadoop-3.2.3.tar.gz cd hadoop-3.2.3/解压后的目录结构即为 Hadoop 安装根目录后续配置中的HADOOP_HOME就指向它其下的etc/hadoop/存放核心配置文件sbin/存放启动脚本。在单节点上启动 YARNYARN 的守护进程依赖 Java第一步是在 Hadoop 的环境配置脚本中写入JAVA_HOMEecho export JAVA_HOME${JAVA_HOME} etc/hadoop/hadoop-env.sh说明${JAVA_HOME}需要在你的 shell 中已正确设置安装 Java 的步骤见 06-batch/setup/linux.md。将JAVA_HOME写入hadoop-env.sh可确保通过./sbin/脚本启动 YARN 时能找到 JVM。随后启动 YARN./sbin/start-yarn.sh启动成功后YARN 的 ResourceManager Web UI 会监听在8088 端口通过浏览器访问验证http://localhost:8088/在该页面上可以看到集群的活跃节点NodeManager、已提交的应用列表以及资源使用情况——这是验证 YARN 是否正常工作的最直接手段。让 Spark 以 YARN 作为 Master 运行要在 YARN 上提交 Spark 作业SparkSession 或spark-submit需要指定masteryarn。同时Spark 必须知道去哪里读取 YARN 的配置文件如core-site.xml、yarn-site.xml因此需要设置两个环境变量export HADOOP_HOME${HOME}/spark/hadoop-3.2.3 export YARN_CONF_DIR${HADOOP_HOME}/etc/hadoopHADOOP_HOME指向你解压 Hadoop 的位置${HOME}/spark/hadoop-3.2.3是仓库文档约定的路径可按实际解压目录调整YARN_CONF_DIR指向 Hadoop 的配置目录Spark 从这里加载 Hadoop/YARN 的配置信息。设置完成后即可启动 Jupyter在 notebook 中构建SparkSession.builder.master(yarn)或直接使用spark-submit提交作业。以本仓库的 06-batch/code/06_spark_sql.py 为例该脚本通过argparse接收--input_green、--input_yellow、--output三个必填参数读取纽约出租车 green/yellow 的 Parquet 数据用 Spark SQL 按区域、月份、服务类型聚合收入指标后写出 Parquet。这种读取 → 注册临时表 → Spark SQL 聚合 → 写出的脚本结构正是后续以spark-submit提交到 YARN 的标准形态。连接 Spark 与 YARN 到 Google Cloud StorageGCS当输入/输出数据存放在 GCS 时如gs://dtc_data_lake_de-zoomcamp-nytaxi/pq/...需要让 Hadoop/YARN 认识gs://协议。做法是下载 GCS 连接器GCS Connector for Hadoop 3gsutil cp gs://hadoop-lib/gcs/gcs-connector-hadoop3-2.2.5.jar .随后需要修改两类配置文件${SPARK_HOME}/conf/spark-defaults.conf—— 仓库提供了参考模板 06-batch/setup/config/spark-defaults.confspark-master yarn spark.hadoop.google.cloud.auth.service.account.enable true spark.hadoop.google.cloud.auth.service.account.json.keyfile /home/alexey第一行直接指定默认 master 为yarn后两行以spark.hadoop.为前缀将属性透传给 Hadoop 配置启用服务账号认证并指向凭证文件示例路径为/home/alexey请替换为你自己的凭证 JSON 文件路径。${YARN_CONF_DIR}/core-site.xml—— 仓库提供了完整参考配置 06-batch/setup/config/core-site.xml?xml version1.0 encodingUTF-8? ?xml-stylesheet typetext/xsl hrefconfiguration.xsl? configuration property namefs.AbstractFileSystem.gs.impl/name valuecom.google.cloud.hadoop.fs.gcs.GoogleHadoopFS/value /property property namefs.gs.impl/name valuecom.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem/value /property property namefs.gs.auth.service.account.json.keyfile/name value/home/alexey/.google/credentials/google_credentials.json/value /property property namefs.gs.auth.service.account.enable/name valuetrue/value /property /configuration其中前两条属性把gs://文件系统映射到 GCS 连接器的实现类后两条启用服务账号认证并指定 Google 凭证 JSON 的本地路径需替换为你自己的路径。在core-site.xml中新增属性时遵循如下的 property 模板即可property name/name value/value /property同样地在 06-batch/code/cloud.md 中可以看到配套的上传与提交流程先用gsutil -m cp -r pq/ gs://dtc_data_lake_de-zoomcamp-nytaxi/pq把本地 Parquet 数据上传到 GCS再下载gcs-connector-hadoop3-2.2.5.jar到lib/目录供 Spark 使用。在 YARN 上使用 Docker 容器运行时提交作业YARN 3.x 支持将 ApplicationMaster 与 Executor 运行在 Docker 容器中这正好与课程的 Docker 章节衔接。仓库文档给出的思路是从 Hadoop 官方文档hadoop-yarn-site/DockerContainers.html对应 Hadoop 3.2.3复制 Docker 容器相关的 YARN 配置然后使用自定义镜像执行spark-submit。提交命令的核心部分如下MOUNTS$HADOOP_HOME:$HADOOP_HOME:ro,/etc/passwd:/etc/passwd:ro,/etc/group:/etc/group:ro IMAGE_IDpyspark-docker:test spark-submit \ --master yarn \ --conf spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_TYPEdocker \ --conf spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_DOCKER_IMAGE${IMAGE_ID} \ --conf spark.executorEnv.YARN_CONTAINER_RUNTIME_TYPEdocker \ --conf spark.executorEnv.YARN_CONTAINER_RUNTIME_DOCKER_IMAGE${IMAGE_ID} \ 06_spark_sql.py \ --input_greengs://dtc_data_lake_de-zoomcamp-nytaxi/pq/green/2021/*/ \ --input_yellowgs://dtc_data_lake_de-zoomcamp-nytaxi/pq/yellow/2021/*/ \ --outputgs://dtc_data_lake_de-zoomcamp-nytaxi/report-2021要点拆解MOUNTS以hostPath:containerPath:mode的格式把 Hadoop 安装目录、/etc/passwd、/etc/group以只读ro方式挂载进容器保证容器内能读取 Hadoop 配置且用户/组信息一致IMAGE_IDpyspark-docker:test指定自定义 Spark 镜像仓库在 06-batch/setup/config/spark.dockerfile 中提供了最简 Dockerfile仅一行FROM library/openjdk:11可作为构建基础镜像的起点通过--conf分别对ApplicationMasterspark.yarn.appMasterEnv.*和Executorspark.executorEnv.*声明容器运行时类型为 docker 及对应镜像作业脚本06_spark_sql.py的三个参数分别指向 GCS 上的 green、yellow 数据以及聚合结果输出位置。注意gs://路径与 GCS 连接器配置上一节必须同时就位Docker 容器运行时才能访问远端数据。常见排查要点ssh localhost仍需密码检查authorized_keys权限是否为0600、~/.ssh目录权限是否合理WSL 用户记得先sudo service ssh startstart-yarn.sh报 Java 相关错误确认JAVA_HOME已写入etc/hadoop/hadoop-env.sh且路径指向有效的 JDK8088 端口无法访问确认 ResourceManager 进程已启动且无防火墙拦截gs://路径读写失败确认core-site.xml已配置fs.gs.impl与服务账号凭证且spark-defaults.conf中的spark.hadoop.*前缀属性正确提交作业时找不到 YARN 配置确认YARN_CONF_DIR指向${HADOOP_HOME}/etc/hadoop。参考来源本文档的核心依据为仓库中的 06-batch/setup/hadoop-yarn.md配套的配置文件见 06-batch/setup/config/core-site.xml、06-batch/setup/config/spark-defaults.conf 与 06-batch/setup/config/spark.dockerfile。原始文档引用的外部资料包括 Hadoop 官方单机集群配置文档hadoop-project-dist/hadoop-common/SingleCluster.html与 Spark 自定义 Hadoop/Hive 配置文档configuration.html#custom-hadoophive-configuration前者对应本指南中的伪分布式 YARN 搭建后者对应YARN_CONF_DIR与spark.hadoop.*的配置原理如需深入可自行查阅对应版本文档。【免费下载链接】data-engineering-zoomcampData Engineering Zoomcamp is a free 9-week course on building production-ready data pipelines. Join the course here 项目地址: https://gitcode.com/GitHub_Trending/da/data-engineering-zoomcamp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考