2

我们有一个基于单个服务器上的单个节点的 Cloudera 5 安装。在集群上添加 2 个额外节点之前,我们希望使用新磁盘来增加分区的大小。

我们安装了以下服务:

  • 具有 1 个 NodeManager 1 个 JobHistory 和 1 个 ResourceManager 的 yarn
  • 具有 1 个数据节点、1 个主节点和 1 个辅助节点的 hdfs
  • 具有 1 个主服务器和 1 个区域服务器的 hbase
  • 带 1 台服务器的动物园管理员

所有数据当前都安装在一个分区上。将收集的数据数量增加了,因此我们需要使用另一个磁盘来存储所有信息。

所有数据都在挂载到文件夹 /dfs 的分区下

工作分区是:

df -h

hadoop-dfs-partition 119G 9.8G 103G 9% /dfs

df -i

hadoop-dfs-partition 7872512 18098 7854414 1% /dfs

该文件夹的内容如下:

drwxr-xr-x 11 根 4096 2014 年 5 月 8 日 dfs
drwx------。2 根 16384 2014 年 5 月 7 日 lost+found
drwxr-xr-x 5 根 4096 2014 年 5 月 8 日 yarn

在 dfs 下有这些文件夹:

drwx------ 3 hdfs hadoop 4096 2 月 23 日 18:14 dn
drwx------ 3 hdfs hadoop 4096 2 月 23 日 18:14 dn1
drwx------ 3 hdfs hadoop 4096 2 月 23 日 18:14 dn2
drwx------ 3 hdfs hadoop 4096 2 月 23 日 18:14 nn
drwx------ 3 hdfs hadoop 4096 2 月 23 日 18:14 nn1
drwx------ 3 hdfs hadoop 4096 2 月 23 日 18: 14 nn2
drwx------ 3 hdfs hadoop 4096 2 月 23 日 18:14 snn
drwx------ 3 hdfs hadoop 4096 2 月 23 日 18:14 snn1
drwx------ 3 hdfs hadoop 4096 18 年 2 月 23 日:14 snn2

在纱线下有这些文件夹:

drwxr-xr-x 9 纱线 hadoop 4096 11 月 9 日 15:46 nm
drwxr-xr-x 9 纱线 hadoop 4096 11 月 9 日 15:46 nm1
drwxr-xr-x 9 纱线 hadoop 4096 11 月 9 日 15:46 nm2

我们怎样才能做到这一点?我找到了使用 distcp 命令在集群之间迁移数据的唯一方法。

没有找到任何方法来移动原始数据。

在执行之前停止所有服务并关闭整个集群

cp -Rp /dfs/* /dfs-new/

命令是一个可行的选择?

(/dfs-new 在安装新磁盘的新 ext4 分区的文件夹中)

有更好的方法吗?

先感谢您

4

1 回答 1

1

我以这种方式解决了:

  1. 停止除 hdfs 以外的所有服务

  2. 从 hdfs 中导出数据。就我而言,有趣的部分是在 hbase 中:

    su - hdfs  
    hdfs dfs -ls / 
    

    命令显示以下数据:
    drwxr-xr-x - hbase hbase 0 2015-02-26 20:40 /hbase
    drwxr-xr-x - hdfs supergroup 0 2015-02-26 19:58 /tmp
    drwxr-xr-x - hdfs 超级组 0 2015-02-26 19:38 /用户

    hdfs dfs -copyToLocal / /a_backup_folder/  
    

    将所有数据从 hdfs 导出到普通文件系统

    control-D  
    

    返回根目录

    停止 Cloudera 上的所有服务(包括 hdfs)

  3. 现在您可以卸载“旧”和“新”分区。

  4. 安装“新”分区代替“旧”分区的路径(在我的情况下是 /dfs)

  5. 在我的情况下将“旧”分区安装在新位置是/dfs-old(记住mkdir /dfs-old)这样可以检查旧结构

  6. 使此更改永久编辑 /etc/fstab。检查一切是否正确,重复第 3 步,然后尝试

    mount -a 
    
  7. df -h 检查您是否在正确的分区上映射了 /dfs 和 /dfs-old(分别为“新”和“旧”分区)

  8. 格式名称节点进入

    services > hdfs > namenode > action format namenode
    在我的例子中

    ls -l /dfs/dfs  
    

    我有:
    drwx------ 4 hdfs hadoop 4096 2 月 26 日 20:39 nn
    drwx------ 4 hdfs hadoop 4096 2 月 26 日 20:39 nn1
    drwx------ 4 hdfs hadoop 4096 2 月 26 日20:39 NN2

  9. 在 cloudera 上启动 hdfs 服务

    你应该有新的文件夹:

    ls -l /dfs/dfs  
    

    我有:

    drwx------ 3 hdfs hadoop 4096 2 月 26 日 20:39 dn
    drwx------ 3 hdfs hadoop 4096 2 月 26 日 20:39 dn1
    drwx------ 3 hdfs hadoop 4096 2 月 26 日 20:39 dn2
    drwx------ 4 hdfs hadoop 4096 2 月 26 日 20:39 nn
    drwx------ 4 hdfs hadoop 4096 2 月 26 日 20:39 nn1
    drwx------ 4 hdfs hadoop 4096 2 月 26 日 20: 39 nn2
    drwx------ 3 hdfs hadoop 4096 2 月 26 日 20:39 snn
    drwx------ 3 hdfs hadoop 4096 2 月 26 日 20:39 snn1
    drwx------ 3 hdfs hadoop 4096 20 年 2 月 26 日:39 snn2

  10. 现在将数据复制回新分区

    hdfs dfs -copyFromLocal /a_backup_folder/user/* /user  
    hdfs dfs -copyFromLocal /a_backup_folder/tmp/* /tmp  
    hdfs dfs -copyFromLocal /a_backup_folder/hbase/* /hbase  
    
  11. hbase 文件夹需要有适当的权限,hbase:hbase as user:group

    hdfs dfs -chown -R hbase:hbase /hbase  
    

    如果您忘记了这一步,您稍后会在 hbase 日志文件上收到权限被拒绝错误

    检查结果

    hdfs dfs -ls /hbase
    

    你应该看到这样的东西:
    drwxr-xr-x - hbase hbase 0 2015-02-26 20:40 /hbase/.tmp
    drwxr-xr-x - hbase hbase 0 2015-02-26 20:40 /hbase/WALs
    drwxr-xr-x - hbase hbase 0 2015-02-27 11:38 /hbase/archive
    drwxr-xr-x - hbase hbase 0 2015-02-25 15:18 /hbase/损坏
    drwxr-xr-x - hbase hbase 0 2015-02-25 15:18 /hbase/data
    -rw-r--r-- 3 hbase hbase 42 2015-02-25 15:18 /hbase/hbase.id
    -rw-r--r-- 3 hbase hbase 7 2015-02-25 15:18 /hbase/hbase.version
    drwxr-xr-x - hbase hbase 0 2015-02-27 11:42 /hbase/oldWALs

(这里的重要部分是拥有正确的用户和文件和文件夹组)

现在启动所有服务并检查 hbase 是否正在使用

    hbase shell  
    list

您应该会看到迁移前的所有表。尝试

    count 'a_table_name'
于 2015-02-27T11:00:46.957 回答