温馨提示×

Ubuntu Hadoop与Spark如何集成

小樊
38
2025-10-06 07:45:59
栏目: 智能运维

Ubuntu环境下Hadoop与Spark集成步骤

1. 环境准备

在集成前需确保系统满足以下基础条件:

  • 操作系统:Ubuntu 20.04 LTS及以上(推荐);
  • Java环境:安装JDK 8或更高版本(Spark 3.x兼容JDK 8/11/17),通过java -version验证安装;
  • Hadoop版本:选择3.x系列(如3.3.1),需与Spark版本兼容(如Spark 3.2.0支持Hadoop 3.2+);
  • Spark版本:选择3.2.0及以上稳定版,下载时需指定Hadoop版本(如spark-3.2.0-bin-hadoop3.2.tgz),确保兼容性。

2. 安装Hadoop

  • 下载与解压:通过wget下载Hadoop压缩包(如wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz),解压至/usr/local目录并重命名为hadoop
  • 配置环境变量:编辑~/.bashrc文件,添加以下内容:
    export HADOOP_HOME=/usr/local/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    
    执行source ~/.bashrc使变量生效;
  • 核心配置:修改Hadoop配置文件(位于$HADOOP_HOME/etc/hadoop):
    • core-site.xml:设置HDFS默认文件系统地址,例如:
      <property>
          <name>fs.defaultFS</name>
          <value>hdfs://localhost:9000</value>
      </property>
      
    • hdfs-site.xml:配置NameNode和DataNode数据存储路径及副本数,例如:
      <property>
          <name>dfs.replication</name>
          <value>1</value> <!-- 单机环境设为1 -->
      </property>
      <property>
          <name>dfs.name.dir</name>
          <value>file:///usr/local/hadoop/dfs/name</value>
      </property>
      <property>
          <name>dfs.data.dir</name>
          <value>file:///usr/local/hadoop/dfs/data</value>
      </property>
      

3. 安装Spark

  • 下载与解压:通过wget下载Spark压缩包(如wget https://archive.apache.org/dist/spark/spark-3.2.0/spark-3.2.0-bin-hadoop3.2.tgz),解压至/usr/local目录并重命名为spark
  • 配置环境变量:编辑~/.bashrc文件,添加以下内容:
    export SPARK_HOME=/usr/local/spark
    export PATH=$PATH:$SPARK_HOME/bin
    export HADOOP_HOME=/usr/local/hadoop <!-- 指向Hadoop安装目录 -->
    
    执行source ~/.bashrc使变量生效;
  • 配置Spark与Hadoop集成:编辑$SPARK_HOME/conf/spark-env.sh(若不存在则复制模板cp $SPARK_HOME/conf/spark-env.sh.template $SPARK_HOME/conf/spark-env.sh),添加:
    export SPARK_DIST_CLASSPATH=$(hadoop classpath) <!-- 让Spark加载Hadoop依赖 -->
    
    创建$SPARK_HOME/conf/spark-defaults.conf文件(若不存在则复制模板),添加:
    spark.master local[*] <!-- 本地模式运行,*表示使用所有核心 -->
    spark.hadoop.fs.defaultFS hdfs://localhost:9000 <!-- 指向HDFS地址 -->
    

4. 启动Hadoop集群

  • 格式化HDFS:首次启动需格式化NameNode,执行:
    hdfs namenode -format
    
  • 启动HDFS:运行start-dfs.sh启动NameNode和DataNode,通过jps命令验证进程(应看到NameNodeDataNode);
  • 启动YARN(可选):若需使用YARN作为资源管理器,运行start-yarn.sh启动ResourceManager和NodeManager,通过jps验证进程(应看到ResourceManagerNodeManager)。

5. 启动Spark集群

  • 本地模式:直接运行spark-shell即可启动本地Spark交互式Shell;
  • YARN模式:若Hadoop启用了YARN,可通过以下命令提交Spark作业到YARN集群:
    spark-submit --master yarn --deploy-mode client --class org.apache.spark.examples.SparkPi $SPARK_HOME/examples/jars/spark-examples_2.12-3.2.0.jar 10
    
    其中--master yarn指定资源管理器为YARN,--deploy-mode client表示客户端模式(方便查看日志)。

6. 验证集成

  • 向HDFS上传数据:使用HDFS命令上传测试文件,例如:
    hadoop fs -put ~/test.txt /user/root/input
    
  • 用Spark读取HDFS数据:启动Spark Shell,执行以下代码:
    from pyspark.sql import SparkSession
    spark = SparkSession.builder \
        .appName("Hadoop-Spark Integration Test") \
        .config("spark.hadoop.fs.defaultFS", "hdfs://localhost:9000") \
        .getOrCreate()
    df = spark.read.text("hdfs://localhost:9000/user/root/input/test.txt")
    df.show() <!-- 显示文件内容 -->
    
    若能正常读取并显示HDFS中的文件内容,则说明集成成功。

常见问题排查

  • 版本兼容性问题:确保Spark与Hadoop版本匹配(如Spark 3.2.0支持Hadoop 3.2+),避免因版本冲突导致启动失败;
  • 环境变量未生效:执行source ~/.bashrc重新加载环境变量,或重启终端;
  • HDFS权限问题:若上传文件时报权限错误,可修改HDFS目录权限(如hadoop fs -chmod -R 777 /user/root);
  • 端口冲突:若HDFS或Spark端口被占用,可修改core-site.xml中的fs.defaultFS端口(如9001)或spark-env.sh中的SPARK_MASTER_PORT

0