CentOS HDFS与Spark集成指南
小樊
44
2025-12-07 22:35:26
一 环境准备与版本选择
- 操作系统与基础:建议使用 CentOS 7/8,安装 JDK 1.8,配置 SSH 免密 与 /etc/hosts 主机解析,便于集群通信。
- Hadoop 与 Spark 版本匹配:选择与 Hadoop 版本匹配的 Spark 发行包(如带有 “-bin-hadoop3.x” 的 Spark 包),避免客户端与服务端不兼容。
- 组件关系澄清:Spark 并不“必须”依赖 Hadoop 才能运行,但若需读写 HDFS 或提交到 YARN,则需提供 Hadoop 客户端配置与依赖。
- 基础目录建议:将 Hadoop 与 Spark 解压至 /opt,并统一设置环境变量(HADOOP_HOME、SPARK_HOME、PATH)。
二 安装与配置 Hadoop HDFS
- 安装与目录:下载并解压 Hadoop,创建 dfs/name、dfs/data、tmp 等目录。
- 核心配置示例:
- core-site.xml:设置默认文件系统为 hdfs://:9000。
- hdfs-site.xml:设置副本数(如 dfs.replication=1 用于单机/测试)。
- 初始化与启动:首次启动前执行 hdfs namenode -format;随后使用 start-dfs.sh 启动 NameNode/DataNode(如需 YARN,再执行 start-yarn.sh)。
- 进程与访问校验:用 jps 检查进程是否就绪;通过 http://:50070 访问 HDFS Web UI。
三 安装与配置 Spark 连接 HDFS
- 安装与目录:下载与 Hadoop 版本匹配的 Spark(如 spark-3.1.2-bin-hadoop3.2.tgz),解压至 /opt/spark-。
- 关键配置:
- spark-env.sh:设置 HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop(如使用 YARN,可同时设置 YARN_CONF_DIR)。
- spark-defaults.conf:可预设 spark.master(如 local[*] 或 spark://master:7077),以及 spark.hadoop.fs.defaultFS 指向 HDFS。
- 启动方式:
- Standalone:在 Spark 目录执行 start-master.sh 与 start-worker.sh spark://:7077。
- YARN:无需启动 Spark 集群,直接通过 spark-submit --master yarn 提交作业。
四 集成验证与常见操作
- 快速连通性验证:
- HDFS 侧:hdfs dfs -ls / 与 hdfs dfs -mkdir -p /test 检查读写权限与连通性。
- Spark Shell:spark-shell --master local[*] 后执行读取示例
val rdd = sc.textFile(“hdfs://:9000/test.txt”); rdd.count()。
- 提交示例:spark-submit --master local[*] --class org.apache.spark.examples.WordCount /path/to/spark-examples-.jar hdfs://:9000/input /output。
- 简单应用读写 HDFS(Scala):
- 写入:df.write.mode(“overwrite”).csv(“hdfs://:9000/test.csv”)
- 读取:spark.read.csv(“hdfs://:9000/test.csv”).show()。
- 历史服务器(可选):在 spark-env.sh 中设置 SPARK_HISTORY_OPTS=“-Dspark.history.fs.logDirectory=hdfs:///spark-logs”,并在 HDFS 创建目录,便于作业历史查看。
五 常见问题与排查要点
- 版本不兼容:确认 Spark 发行包与 Hadoop 版本匹配(如 Hadoop 3.x 选用 “-bin-hadoop3.x” 的 Spark 包)。
- 配置未生效:确保 HADOOP_CONF_DIR 指向正确的 Hadoop 配置目录,且所有节点一致;必要时在 spark-defaults.conf 显式设置 spark.hadoop.fs.defaultFS。
- 权限与路径:HDFS 目录需存在且当前用户有读写权限;必要时使用 hdfs dfs -chmod/chown 调整。
- 防火墙与端口:开放 HDFS NameNode 50070、DataNode 50075、YARN 8088、Spark Master 7077 等端口,或临时关闭防火墙测试。
- 进程与日志:用 jps 检查进程是否齐全,查看 $HADOOP_HOME/logs 与 $SPARK_HOME/logs 定位启动或作业失败原因。