切换一个包含cloudera hadoop / hdfs / hbase数据的磁盘
Switch a disk containing cloudera hadoop / hdfs / hbase data
我们有一个基于单个服务器上的单个节点的 Cloudera 5 安装。在集群上添加 2 个额外节点之前,我们想使用新磁盘增加分区的大小。
我们安装了以下服务:
- 带有 1 个 NodeManager、1 个 JobHistory 和 1 个 ResourceManager 的纱线
- 具有 1 个数据节点、1 个主节点和 1 个辅助节点的 hdfs
- 具有 1 个主服务器和 1 个区域服务器的 hbase
- 带 1 个服务器的动物园管理员
所有数据当前都安装在一个分区上。将收集的数据数量增加了,因此我们需要使用另一个磁盘来存储所有信息。
所有数据都在挂载到文件夹/dfs的分区下
工作分区是:
df -h
hadoop-dfs-分区
119G 9.8G 103G 9% /dfs
df -i
hadoop-dfs-分区
7872512 18098 7854414 1% /dfs
该文件夹的内容如下:
drwxr-xr-x 11 root root 4096 2014 年 5 月 8 日 dfs
drwx------。 2 root root 16384 2014 年 5 月 7 日丢失+找到
drwxr-xr-x 5 root root 4096 2014 年 5 月 8 日纱线
在 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 2 月 23 日 18:14 snn2
yarn 下有这些文件夹:
drwxr-xr-x 9 yarn hadoop 4096 11 月 9 日 15:46 nm
drwxr-xr-x 9 yarn hadoop 4096 11 月 9 日 15:46 nm1
drwxr-xr-x 9 yarn hadoop 4096 11 月 9 日 15:46 nm2
我们怎样才能做到这一点?我发现只有使用 distcp 命令在集群之间迁移数据的方法。
没有找到任何移动原始数据的方法。
在执行
之前停止所有服务并关闭整个集群
cp -Rp /dfs/* /dfs-new/
command 是可行的选择吗?
(挂载新盘全新ext4分区所在文件夹下的/dfs-new)
有更好的方法吗?
提前致谢
我是这样解决的:
停止除 hdfs 之外的所有服务
从 hdfs 导出数据。在我的例子中,有趣的部分在 hbase:
su - hdfs
hdfs dfs -ls /
命令显示以下数据:
drwxr-xr-x-hbase hbase 0 2015-02-26 20:40 /hbase
drwxr-xr-x - hdfs 超级组 0 2015-02-26 19:58 /tmp
drwxr-xr-x - hdfs 超级组 0 2015-02-26 19:38 /user
hdfs dfs -copyToLocal / /a_backup_folder/
将所有数据从 hdfs 导出到普通文件系统
control-D
到return根
停止 Cloudera 上的所有服务(包括 hdfs)
现在您可以卸载 "old" 和 "new" 分区。
挂载 "new" 分区代替 "old" 分区的路径(在我的例子中是 /dfs)
挂载"old"分区在我的新地方是/dfs-old(记得mkdir /dfs-old)这样可以检查旧结构
使此更改永久编辑 /etc/fstab。重复第 3 步检查一切是否正确,然后尝试 a
mount -a
df -h
检查您是否将 /dfs 和 /dfs-old 映射到正确的分区(分别是 "new" 和 "old")
格式化名称节点进入
服务 > hdfs > namenode > 操作格式 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 Feb 26 20:39 nn2
在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 Feb 26 20:39 snn2
现在将数据复制回新分区
hdfs dfs -copyFromLocal /a_backup_folder/user/* /user
hdfs dfs -copyFromLocal /a_backup_folder/tmp/* /tmp
hdfs dfs -copyFromLocal /a_backup_folder/hbase/* /hbase
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/corrupt
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'
我们有一个基于单个服务器上的单个节点的 Cloudera 5 安装。在集群上添加 2 个额外节点之前,我们想使用新磁盘增加分区的大小。
我们安装了以下服务:
- 带有 1 个 NodeManager、1 个 JobHistory 和 1 个 ResourceManager 的纱线
- 具有 1 个数据节点、1 个主节点和 1 个辅助节点的 hdfs
- 具有 1 个主服务器和 1 个区域服务器的 hbase
- 带 1 个服务器的动物园管理员
所有数据当前都安装在一个分区上。将收集的数据数量增加了,因此我们需要使用另一个磁盘来存储所有信息。
所有数据都在挂载到文件夹/dfs的分区下
工作分区是:
df -h
hadoop-dfs-分区 119G 9.8G 103G 9% /dfs
df -i
hadoop-dfs-分区 7872512 18098 7854414 1% /dfs
该文件夹的内容如下:
drwxr-xr-x 11 root root 4096 2014 年 5 月 8 日 dfs
drwx------。 2 root root 16384 2014 年 5 月 7 日丢失+找到
drwxr-xr-x 5 root root 4096 2014 年 5 月 8 日纱线
在 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 2 月 23 日 18:14 snn2
yarn 下有这些文件夹:
drwxr-xr-x 9 yarn hadoop 4096 11 月 9 日 15:46 nm
drwxr-xr-x 9 yarn hadoop 4096 11 月 9 日 15:46 nm1
drwxr-xr-x 9 yarn hadoop 4096 11 月 9 日 15:46 nm2
我们怎样才能做到这一点?我发现只有使用 distcp 命令在集群之间迁移数据的方法。
没有找到任何移动原始数据的方法。
在执行
之前停止所有服务并关闭整个集群cp -Rp /dfs/* /dfs-new/
command 是可行的选择吗?
(挂载新盘全新ext4分区所在文件夹下的/dfs-new)
有更好的方法吗?
提前致谢
我是这样解决的:
停止除 hdfs 之外的所有服务
从 hdfs 导出数据。在我的例子中,有趣的部分在 hbase:
su - hdfs hdfs dfs -ls /
命令显示以下数据:
drwxr-xr-x-hbase hbase 0 2015-02-26 20:40 /hbase
drwxr-xr-x - hdfs 超级组 0 2015-02-26 19:58 /tmp
drwxr-xr-x - hdfs 超级组 0 2015-02-26 19:38 /userhdfs dfs -copyToLocal / /a_backup_folder/
将所有数据从 hdfs 导出到普通文件系统
control-D
到return根
停止 Cloudera 上的所有服务(包括 hdfs)
现在您可以卸载 "old" 和 "new" 分区。
挂载 "new" 分区代替 "old" 分区的路径(在我的例子中是 /dfs)
挂载"old"分区在我的新地方是/dfs-old(记得mkdir /dfs-old)这样可以检查旧结构
使此更改永久编辑 /etc/fstab。重复第 3 步检查一切是否正确,然后尝试 a
mount -a
df -h 检查您是否将 /dfs 和 /dfs-old 映射到正确的分区(分别是 "new" 和 "old")
格式化名称节点进入
服务 > hdfs > namenode > 操作格式 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 Feb 26 20:39 nn2在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 Feb 26 20:39 snn2现在将数据复制回新分区
hdfs dfs -copyFromLocal /a_backup_folder/user/* /user hdfs dfs -copyFromLocal /a_backup_folder/tmp/* /tmp hdfs dfs -copyFromLocal /a_backup_folder/hbase/* /hbase
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/corrupt
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'