Skip to content

Hadoop集群管理

Hadoop 2.7.1 单机与集群部署指南

一、概述


二、架构说明

IP地址主机名服务角色
115.231.182.239masterNameNode, ResourceManager
115.231.182.240node1DataNode, NodeManager
115.231.182.241node2DataNode, NodeManager
  • Hadoop安装目录: /www/hadoop

三、配置步骤

1. 配置主机名与网络

修改 /etc/hosts

在所有节点上编辑 /etc/hosts 文件,添加主机映射:

Terminal window
vi /etc/hosts

内容:

115.231.182.239 master
115.231.182.240 node1
115.231.182.241 node2

配置网络信息

  • 编辑 /etc/sysconfig/network/etc/hostname,确保主机名正确。

2. 配置SSH免验证登录

Master节点操作

  1. 生成SSH密钥:
    Terminal window
    ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
  2. 合并公钥到 authorized_keys:
    Terminal window
    cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
  3. 分发公钥到Node节点:
    Terminal window
    scp ~/.ssh/id_dsa.pub node1:~
    scp ~/.ssh/id_dsa.pub node2:~

Node节点操作

在每个Node节点上执行:

Terminal window
mkdir -p ~/.ssh
cat ~/id_dsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

3. 下载与安装Hadoop

Master节点操作

  1. 下载Hadoop:

    Terminal window
    cd /www
    wget -c http://mirrors.noc.im/apache/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz
    tar xvzf hadoop-2.7.2.tar.gz
    mv hadoop-2.7.2/ hadoop
  2. 设置环境变量: 编辑 /etc/profile,添加:

    Terminal window
    export HADOOP_PREFIX=/www/hadoop
    source /etc/profile
  3. 创建数据目录:

    Terminal window
    mkdir -p /www/hadoop-data/tmp
    mkdir -p /www/hadoop-data/dfs/data
    mkdir -p /www/hadoop-data/dfs/name
  4. 配置Hadoop核心文件: 进入配置目录:

    Terminal window
    cd /www/hadoop/etc/hadoop
    • core-site.xml:

      <configuration>
      <property>
      <name>hadoop.tmp.dir</name>
      <value>/www/hadoop-data/tmp</value>
      <description>A base for other temporary directories.</description>
      </property>
      <property>
      <name>fs.defaultFS</name>
      <value>hdfs://master:9000</value>
      </property>
      <property>
      <name>io.file.buffer.size</name>
      <value>4096</value>
      </property>
      </configuration>
    • hdfs-site.xml:

      <configuration>
      <property>
      <name>dfs.nameservices</name>
      <value>hadoop-cluster1</value>
      </property>
      <property>
      <name>dfs.namenode.secondary.http-address</name>
      <value>master:50090</value>
      </property>
      <property>
      <name>dfs.namenode.name.dir</name>
      <value>file:///www/hadoop-data/dfs/name</value>
      </property>
      <property>
      <name>dfs.datanode.data.dir</name>
      <value>file:///www/hadoop-data/dfs/data</value>
      </property>
      <property>
      <name>dfs.replication</name>
      <value>2</value>
      </property>
      <property>
      <name>dfs.webhdfs.enabled</name>
      <value>true</value>
      </property>
      </configuration>
    • mapred-site.xml:

      <configuration>
      <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
      </property>
      <property>
      <name>mapreduce.jobtracker.http.address</name>
      <value>master:50030</value>
      </property>
      <property>
      <name>mapreduce.jobhistory.address</name>
      <value>master:10020</value>
      </property>
      <property>
      <name>mapreduce.jobhistory.webapp.address</name>
      <value>master:19888</value>
      </property>
      </configuration>
    • yarn-site.xml:

      <configuration>
      <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
      </property>
      <property>
      <name>yarn.resourcemanager.address</name>
      <value>master:8032</value>
      </property>
      <property>
      <name>yarn.resourcemanager.scheduler.address</name>
      <value>master:8030</value>
      </property>
      <property>
      <name>yarn.resourcemanager.resource-tracker.address</name>
      <value>master:8031</value>
      </property>
      <property>
      <name>yarn.resourcemanager.admin.address</name>
      <value>master:8033</value>
      </property>
      <property>
      <name>yarn.resourcemanager.webapp.address</name>
      <value>master:8088</value>
      </property>
      </configuration>
    • slaves:

      node1
      node2
  5. 配置JAVA_HOME: 编辑 hadoop-env.shyarn-env.sh,添加:

    Terminal window
    export JAVA_HOME=/usr/lib/jvm/java/

4. 启动与关闭Hadoop

启动Hadoop集群

在Master节点执行:

Terminal window
/www/hadoop/bin/hdfs namenode -format
/www/hadoop/sbin/start-all.sh

关闭Hadoop集群

在Master节点执行:

Terminal window
/www/hadoop/sbin/stop-all.sh

单机模式启动

若需以单机模式运行,修改配置文件中的 masterlocalhost,并仅启动DFS服务:

Terminal window
/www/hadoop/sbin/start-dfs.sh

5. 监控界面


Hadoop集群节点管理指南

一、增加节点流程

1. 查看集群节点状态

Terminal window
hdfs dfsadmin -report

2. 配置新增节点

  • Master节点操作
    Terminal window
    vi etc/hadoop/slaves # 添加新节点名
    hadoop-1

3. 新节点服务启动

Terminal window
# 在hadoop-1节点执行
hdfs --daemon start datanode # 启动DataNode
yarn --daemon start nodemanager # 启动NodeManager

4. 刷新集群配置

Terminal window
# Master节点执行
hdfs dfsadmin -refreshNodes # 刷新DataNode
yarn rmadmin -refreshNodes # 刷新NodeManager

5. 验证新增节点

Terminal window
hdfs dfsadmin -report

二、下线节点流程

1. 下线DataNode

  • 配置排除列表

    <!-- 修改hdfs-site.xml -->
    <property>
    <name>dfs.hosts.exclude</name>
    <value>/path/to/dfshosts.exclude</value>
    </property>
    Terminal window
    echo "hadoop-2" >> dfshosts.exclude
    hdfs dfsadmin -refreshNodes

2. 下线NodeManager

  • 配置YARN排除列表

    <!-- 修改yarn-site.xml -->
    <property>
    <name>yarn.resourcemanager.nodes.exclude-path</name>
    <value>/path/to/dfshosts.exclude</value>
    </property>
    Terminal window
    echo "hadoop-2" >> dfshosts.exclude
    yarn rmadmin -refreshNodes

三、磁盘扩容流程

1. 准备工作

  • 下线目标节点:
    Terminal window
    hdfs --daemon stop datanode # 在目标节点执行

2. 磁盘操作

Terminal window
# 分区与挂载
fdisk /dev/sdb # 创建新分区
mkfs.ext4 /dev/sdb1
mount /dev/sdb1 /data2 # 挂载到新目录

3. 修改存储路径

<!-- 修改hdfs-site.xml -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/data1,/data2</value>
</property>

4. 重启服务

Terminal window
hdfs --daemon start datanode # 在目标节点重启

5. 验证扩容

Terminal window
hdfs dfsadmin -report

时区配置

主机的时间设置是没有问题,都是设置为 GTM+8 而主机时间实际是 14点 相差8个小时. 可以猜测 是时区设置的问题 再进一步调查 发现java 是通过读取环境变量的时区信息来确定时区的,如果环境变量中没有设置TZ 变量, 那么java 就会读取UTC 时间

vi hadoop-env.sh
#最后增加一行
export TZ="Asia/Shanghai"