温馨提示×

Debian Hadoop 虚拟机部署教程

小樊
38
2025-12-19 05:50:55
栏目: 云计算

Debian Hadoop 虚拟机部署教程

一 环境准备与规划

  • 虚拟化与系统
    • 宿主机安装虚拟化软件(如 VirtualBox/VMware),创建 Debian 11/12 虚拟机,建议内存 ≥2GB、磁盘 ≥20GB,网络选择 桥接NAT 并确保可访问互联网。
  • 节点规划(示例)
    • 单机伪分布式:1 台(NameNode + DataNode + ResourceManager + NodeManager)
    • 最小集群:1 主 2 从(master、slave1、slave2),便于后续扩展为高可用。
  • 软件版本建议
    • Java:OpenJDK 8(Hadoop 3.x 系列对 8 兼容性最好)
    • Hadoop:3.3.x(稳定、生态完善)
  • 网络与主机名
    • 为每台虚拟机配置静态 IP,并在所有节点 /etc/hosts 中写入主机名映射,确保互相解析。
    • 示例(/etc/hosts):
      192.168.1.101 master
      192.168.1.102 slave1
      192.168.1.103 slave2
      
  • 基础依赖
    • 安装 SSH 服务、基础工具(wget、vim 等),并准备 Hadoop 二进制包下载地址。

二 单机伪分布式部署步骤

  • 安装 Java
    • 更新索引并安装 OpenJDK 8:
      sudo apt update
      sudo apt install -y openjdk-8-jdk
      java -version
      
  • 配置 SSH 免密登录(本地回环)
    sudo apt install -y openssh-server
    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    ssh localhost
    
  • 下载并解压 Hadoop
    wget https://downloads.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
    sudo tar -xzvf hadoop-3.3.6.tar.gz -C /usr/local
    sudo ln -sfn /usr/local/hadoop-3.3.6 /usr/local/hadoop
    
  • 配置环境变量(/etc/profile 或 ~/.bashrc)
    export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
    export HADOOP_HOME=/usr/local/hadoop
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    
    使配置生效:source /etc/profile
  • 核心配置(路径均为 $HADOOP_HOME/etc/hadoop)
    • hadoop-env.sh
      export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
      
    • core-site.xml
      <configuration>
        <property>
          <name>fs.defaultFS</name>
          <value>hdfs://localhost:9000</value>
        </property>
        <property>
          <name>hadoop.tmp.dir</name>
          <value>/usr/local/hadoop/tmp</value>
        </property>
      </configuration>
      
    • hdfs-site.xml
      <configuration>
        <property>
          <name>dfs.replication</name>
          <value>1</value>
        </property>
        <property>
          <name>dfs.namenode.name.dir</name>
          <value>/usr/local/hadoop/hdfs/name</value>
        </property>
        <property>
          <name>dfs.datanode.data.dir</name>
          <value>/usr/local/hadoop/hdfs/data</value>
        </property>
      </configuration>
      
    • mapred-site.xml(将模板复制为 mapred-site.xml 后编辑)
      <configuration>
        <property>
          <name>mapreduce.framework.name</name>
          <value>yarn</value>
        </property>
      </configuration>
      
    • yarn-site.xml
      <configuration>
        <property>
          <name>yarn.nodemanager.aux-services</name>
          <value>mapreduce_shuffle</value>
        </property>
        <property>
          <name>yarn.nodemanager.env-whitelist</name>
          <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
        </property>
      </configuration>
      
  • 创建目录并格式化 HDFS
    sudo mkdir -p /usr/local/hadoop/tmp /usr/local/hadoop/hdfs/{name,data}
    sudo chown -R $USER:$USER /usr/local/hadoop
    hdfs namenode -format
    
  • 启动与验证
    start-dfs.sh
    start-yarn.sh
    
    • NameNode Web UI:http://localhost:9870
    • ResourceManager Web UI:http://localhost:8088
    • 运行示例任务:
      hdfs dfs -mkdir -p /user/$USER/input
      hdfs dfs -put $HADOOP_HOME/etc/hadoop/*.xml /user/$USER/input
      hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar \
        wordcount /user/$USER/input /user/$USER/output
      hdfs dfs -cat /user/$USER/output/part-r-00000
      
    以上步骤覆盖虚拟机准备、依赖安装、环境变量、配置文件与启动验证的关键环节。

三 多节点集群部署步骤

  • 前置准备(所有节点)
    • 安装 Java 8SSH 服务,配置静态 IP 与 /etc/hosts 主机名映射,确保节点间可互通。
    • 建议创建专用用户 hadoop 进行操作(可选但推荐)。
  • 配置 SSH 免密登录(集群范围)
    # 每台机器生成密钥
    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    # 在 master 上汇总公钥并分发
    ssh-copy-id master
    ssh-copy-id slave1
    ssh-copy-id slave2
    # 互相验证
    ssh slave1 true && ssh slave2 true
    
  • 安装 Hadoop(所有节点)
    • 同单机步骤:下载解压至 /usr/local/hadoop,设置 JAVA_HOME/HADOOP_HOME/PATH
  • 集群配置($HADOOP_HOME/etc/hadoop)
    • hadoop-env.sh
      export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
      
    • workers(旧版为 slaves)
      slave1
      slave2
      
    • core-site.xml(指定主节点)
      <configuration>
        <property>
          <name>fs.defaultFS</name>
          <value>hdfs://master:9000</value>
        </property>
        <property>
          <name>hadoop.tmp.dir</name>
          <value>/usr/local/hadoop/tmp</value>
        </property>
      </configuration>
      
    • hdfs-site.xml(副本数可按节点数调整)
      <configuration>
        <property>
          <name>dfs.replication</name>
          <value>2</value>
        </property>
        <property>
          <name>dfs.namenode.name.dir</name>
          <value>/usr/local/hadoop/hdfs/name</value>
        </property>
        <property>
          <name>dfs.datanode.data.dir</name>
          <value>/usr/local/hadoop/hdfs/data</value>
        </property>
      </configuration>
      
    • mapred-site.xml、yarn-site.xml 与单机一致(JobHistory 可按需开启)。
  • 目录与权限(所有节点)
    sudo mkdir -p /usr/local/hadoop/tmp /usr/local/hadoop/hdfs/{name,data}
    sudo chown -R hadoop:hadoop /usr/local/hadoop
    
  • 启动与验证
    • 仅在 master 执行:
      hdfs namenode -format
      start-dfs.sh
      start-yarn.sh
      
    • 访问 http://master:9870(HDFS)、http://master:8088(YARN),在 Web UI 检查 Live Nodes 是否为 2
    • 运行示例任务(同单机)验证集群可用性。

四 防火墙与常见问题处理

  • 防火墙与 SELinux(Debian 12 使用 nftables/firewalld 的场景)
    • 建议测试环境先放行相关端口或临时关闭防火墙:
      sudo ufw disable
      # 或按需放行
      sudo ufw allow 22,8088,9870,9000/tcp
      sudo ufw reload
      
    • 如启用 SELinux,测试阶段可将其设为 permissive(生产环境请按需配置策略)。
  • 常见故障排查
    • SSH 免密失败:检查 ~/.ssh/authorized_keys 权限为 600,目录 ~/.ssh700,以及 /etc/hosts 解析是否正确。
    • DataNode 未注册:确认 workers 配置、目录权限、网络互通与 dfs.replication 设置。
    • 端口占用:检查 9870/8088/9000 是否被其他进程占用(ss -tulpen | grep -E '9870|8088|9000')。
    • Java/Hadoop 路径错误:核对 hadoop-env.sh 中的 JAVA_HOMEHADOOP_CONF_DIR
    • 首次启动未格式化:执行 hdfs namenode -format 后再启动 HDFS。

0