温馨提示×

HDFS与Spark在CentOS如何集成使用

小樊
43
2025-12-25 16:21:42
栏目: 智能运维

在 CentOS 上集成 HDFS 与 Spark 的完整步骤


一 环境准备与版本兼容

  • 操作系统与基础组件
    • 建议使用 CentOS 7/8,安装 JDK 8(Spark 3.x 普遍依赖 JDK 8)。
    • 配置主机名解析(/etc/hosts)、SSH 免密登录、关闭防火墙或放行端口(如 HDFS 9000/50070YARN 8088Spark 7077/8080)。
    • 集群时间同步(如 NTP),避免分布式组件通信异常。
  • Hadoop 与 Spark 版本匹配
    • Spark 发行包通常带有 Hadoop 版本标签(如:spark-3.1.1-bin-hadoop3.2.tgz),选择与现有 Hadoop 版本一致的包可减少兼容性问题。
    • 若使用“without-hadoop”包,需自行提供 Hadoop 依赖与配置。
  • 参考实践要点
    • 多节点集群需统一 JAVA_HOME、配置 slaves/workers、SSH 互信与 NTP 时间同步。

二 安装与配置 HDFS

  • 安装 Hadoop
    • 下载并解压 Hadoop 至如 /opt/hadoop-3.3.x,设置环境变量:
      • export HADOOP_HOME=/opt/hadoop-3.3.x
      • export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  • 关键配置($HADOOP_HOME/etc/hadoop)
    • core-site.xml
      • 指定默认文件系统与 NameNode 地址:
        • fs.defaultFShdfs://namenode:9000
    • hdfs-site.xml
      • 副本数与数据/名称目录(示例为单节点伪分布式):
        • dfs.replication1
        • dfs.namenode.name.dirfile:///opt/hadoop-3.3.x/dfs/name
        • dfs.datanode.data.dirfile:///opt/hadoop-3.3.x/dfs/data
    • 格式化与启动
      • 首次启动前执行:hdfs namenode -format
      • 启动 HDFS:start-dfs.sh
      • 验证:jps 应看到 NameNode/DataNode/SecondaryNameNode 进程;访问 http://namenode:9870 查看 HDFS Web UI。

三 安装与配置 Spark 连接 HDFS

  • 安装 Spark
    • 选择与 Hadoop 匹配的发行包(如 spark-3.1.1-bin-hadoop3.2.tgz),解压至 /opt/spark-3.1.1,设置环境变量:
      • export SPARK_HOME=/opt/spark-3.1.1
      • export PATH=$PATH:$SPARK_HOME/bin
  • 让 Spark 找到 Hadoop 配置
    • 方式一(推荐):在 $SPARK_HOME/conf/spark-env.sh 中添加
      • export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    • 方式二:使用 “without-hadoop” 包时,在 spark-env.sh 中设置
      • export SPARK_DIST_CLASSPATH=$(/opt/hadoop-3.3.x/bin/hadoop classpath)
  • 集群与运行模式
    • Spark Standalone:在 $SPARK_HOME/conf/workers 配置 Worker 节点,启动:start-all.sh
    • 访问 http://spark-master:8080 查看 Spark Web UI。

四 快速验证与常见操作

  • 验证 HDFS 读写(spark-shell)
    • 读取 HDFS 文件:
      • spark-shell --master local[*]
      • scala> val df = spark.read.text(“hdfs://namenode:9000/input/test.txt”); df.show()
    • 写入 HDFS 目录:
      • scala> df.write.mode(“overwrite”).text(“hdfs://namenode:9000/output/”)
  • 运行示例作业(WordCount)
    • spark-shell --master local[*] --class org.apache.spark.examples.WordCount
      /opt/spark-3.1.1/examples/jars/spark-examples_2.12-3.1.1.jar
      hdfs://namenode:9000/input/test.txt hdfs://namenode:9000/output/wc
  • PySpark 读写 HDFS
    • pyspark
      • from pyspark.sql import SparkSession

      • spark = SparkSession.builder.appName(“HDFS-PySpark”).getOrCreate()

      • df = spark.read.text(“hdfs://namenode:9000/input/test.txt”)

      • df.show(); df.count()

  • 常见问题排查
    • 无法解析 HDFS 地址:检查 core-site.xmlfs.defaultFS/etc/hosts 主机名映射。
    • ClassNotFound/Hadoop 依赖缺失:确认 HADOOP_CONF_DIRSPARK_DIST_CLASSPATH 配置正确。
    • 权限问题:HDFS 目录权限与 hadoop.proxyuser 相关配置(如 spark 用户代理)需允许提交作业。
    • 端口不通:确认 firewalld/安全组 已放行 9000/9870/8088/7077/8080 等端口。

五 在 YARN 上运行 Spark 作业(可选)

  • 配置与启动 YARN
    • yarn-site.xml 启用 Shuffle 服务
      • yarn.nodemanager.aux-servicesmapreduce_shuffle
    • 启动 YARN:start-yarn.sh,访问 http://resourcemanager:8088
  • 提交 Spark 到 YARN
    • 客户端模式:
      • spark-submit --master yarn --deploy-mode client
        –class org.apache.spark.examples.SparkPi
        /opt/spark-3.1.1/examples/jars/spark-examples_2.12-3.1.1.jar 10
    • 集群模式:
      • spark-submit --master yarn --deploy-mode cluster
        –class org.apache.spark.examples.SparkPi
        /opt/spark-3.1.1/examples/jars/spark-examples_2.12-3.1.1.jar 10
  • 说明
    • 使用 YARN 时,Spark 通过 HADOOP_CONF_DIR 自动读取 YARNHDFS 配置,无需额外改动 Spark 端。

0