# HDFS 扩容
## 动态添加DataNode节点
本节将描述 HDFS 扩容的方法,并假设原有集群主节点分别为 hdfs1,hdfs2,hdfs3,新添加的节点为 hdfs4。其中hdfs1为active namenode角色。
### 安装
配置yum源,安装lava命令行管理工具, yum 源需自行配置
```sh
ssh hdfs1
# 从yum源所在机器(假设为192.168.1.10)获取repo文件
scp root@192.168.1.10:/etc/yum.repos.d/oushu.repo /etc/yum.repos.d/oushu.repo
# 追加yum源所在机器信息到/etc/hosts文件
yum clean all
yum makecache
yum install -y lava
```
使用 yum install 的安装方式:
```bash
ssh hdfs4
yum install -y hdfs
```
### 准备
在hdfs1节点创建一个`hdfshost`文件
```shell
ssh hdfs1
touch ${HOME}/hdfshost
```
配置hdfshost内容为所有安装HDFS的服务的hostname
``` sh
hdfs1
hdfs2
hdfs3
hdfs4
```
同步配置之前需要确认hdfs-site.xml文件中的 dfs.datanode.data.dir参数是否符合预期:
```xml
dfs.datanode.data.dir
/data1/hdfs/datanode,/data2/hdfs/datanode
```
conf中的配置文件同步到新节点:
```sh
lava scp -r -f hdfs4 /usr/local/oushu/conf/common/* =:/usr/local/oushu/conf/common/
```
新节点创建DataNode目录:
```sh
ssh hdfs4
sudo su root
mkdir -p /data1/hdfs/datanode
mkdir -p /data2/hdfs/datanode
chmod -R 755 /data1/hdfs
chmod -R 755 /data2/hdfs
chown -R hdfs:hadoop /data1/hdfs
chown -R hdfs:hadoop /data2/hdfs
mkdir -p /var/lib/hadoop-hdfs/
chmod -R 755 /var/lib/hadoop-hdfs/
chown -R hdfs:hadoop /var/lib/hadoop-hdfs/
```
#### Kerberos准备(可选)
如果开启Kerberos,则需要在所有HDFS节点安装Kerberos客户端。
```shell
lava ssh -f ${HOME}/hdfshost -e "yum install -y krb5-libs krb5-workstation"
```
### 启动
步骤如下:
1. 启动datanode
```
sudo -u hdfs hdfs --daemon start datanode
```
2. 在NameNode上刷新节点
```
hdfs dfsadmin -refreshNodes
```
3. 启动 balancer
```
start-balancer.sh
```
4. 添加新节点的IP或hostname到slave文件中,并分发到每台机器上
```
lava scp -r -f hdfs4 /usr/local/oushu/conf/common/* =:/usr/local/oushu/conf/common/
```
## 动态删除DataNode节点
1,配置NameNode的hdfs-site.xml,增加dfs.hosts.exclude配置
```xml
dfs.hosts.exclude
/usr/local/oushu/conf/common/excludes
```
2,在对应路径(/usr/local/oushu/conf/common/)下新建 excludes 文件,并写入待删除DataNode的ip或域名
3,在NameNode上刷新所有DataNode并进行数据平衡
```bash
hdfs dfsadmin -refreshNodes
start-balancer.sh
```