在 hadoop 单节点集群上添加 EBS 卷

Adding EBS volume on hadoop single node cluster

我在 AWS 云上用 8 GB 根卷创建了一个 EC2 Linux 机器,然后部署了 hadoop 和 spark 并创建了 单节点 集群在那台机器上。

当我打开hadoop的主页时,我看到一切都很好。

Configured Capacity:    7.74 GB
DFS Used:   3.72 MB (0.05%)
Non DFS Used:   4.47 GB
DFS Remaining:  3.27 GB (42.23%)
Block Pool Used:    3.72 MB (0.05%)

到目前为止,一切都很好。现在我想在此 EC2 实例上添加更多存储。所以我使用了一个 40GB 的 EBS 块存储,并在其上创建了一个 ext4 文件系统并将其挂载到 /data EC2实例的目录。 使用 df -h 命令,我可以看到 space 已全部安装并正确可用。 `

Filesystem      Size  Used Avail Use% Mounted on
 udev            3.9G   12K  3.9G   1% /dev
tmpfs           799M  400K  799M   1% /run
/dev/xvda1      7.8G  4.1G  3.3G  56% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
none            5.0M     0  5.0M   0% /run/lock
none            3.9G     0  3.9G   0% /run/shm
none            100M     0  100M   0% /run/user
/dev/xvdb        40G   48M   38G   1% /data

但是在 hadoop 页面 (http://*<myec2-ip>*:50050/) 上,我仍然看到相同的 7.74GB 容量并且没有看到增加的容量。

我什至尝试过重新格式化 hadoop 文件系统,但这也无济于事。
bin/hadoop 名称节点格式

如何在 hadoop 文件系统上添加这个额外的存储空间?

您需要编辑 hdfs-site.xml 以在该新卷中挂载目录以放置您的名称节点或数据节点数据。

dfs.datanode.data.dir - 确定 DFS 数据节点应在本地文件系统中存储其块的位置。如果这是一个逗号分隔的目录列表,那么数据将存储在所有命名目录中,通常在不同的设备上

dfs.namenode.name.dir - 确定 DFS 名称节点应在本地文件系统中存储名称 table(fsimage) 的位置。如果这是一个以逗号分隔的目录列表,那么名称 table 将被复制到所有目录中,以实现冗余

然后您需要重新启动相应的 HDFS 服务

尽量避免格式化名称节点。当你这样做时你会丢失所有 HDFS 数据

我所做的是:

  1. 在 /etc/hadoop/hdfs-site.xml 文件

    中的配置下方添加
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/data</value>
    </property>
    

因为 /data 是我将新 EBS 卷挂载到的目录。

  1. 我使用以下命令停止了 hadoop 和 yarn 服务:

    $HADOOP_HOME/sbin/stop-dfs.sh
    $HADOOP_HOME/sbin/stop-yarn.sh
    
  2. 因为我使用 hadoop 用户到 运行 我的 hadoop 服务器,所以我做了 hadoop 用户作为 /data 的所有者使用以下命令

    sudo chown hadoop /data
    
  3. 然后我又重启了hadoop服务

    $HADOOP_HOME/sbin/start-dfs.sh
    $HADOOP_HOME/sbin/start-yarn.sh