从 kudu 磁盘迁移数据
Migrate data away from a kudu disk
问题 (TL;DR;)
我正在寻找一种方法来告诉 kudu 从目录中复制数据(/data/0
在下面的上下文中),或者停止目录。可能吗?
上下文
我有一个包含多个数据目录(都在不同磁盘上)的 kudu 设置,例如。 /data/0
、/data/1
、/data/2
。
目前 WAL 在 /data/0
上,还有 kudu 平板电脑、hdfs 目录和 yarn 本地目录。长话短说,这个磁盘超载了,我想迁移掉除 WAL 之外的所有内容。
此问题与kudu tablet 目录有关。我知道如何强制删除磁盘 from the doc 但是:
If --force is specified, all tablets configured to use that directory
will fail upon starting up and be replicated elsewhere.
这听起来不错(平板电脑最终会被复制),但我碰巧有几个表的复制因子为 1,所以那些表将被完全破坏。
解决方法
我知道一些解决方法,但其中 none 是理想的:
- 我可以重新创建 RF 为 3 的表格
- 我可以
kudu tablet change_config move_replica
平板电脑,例如来自 RF 1 的桌子。服务器 1 到服务器 2,然后删除服务器 1 的目录,重新平衡,然后冲洗并重复从服务器 2 到 3,然后 3 到 1(我只有 3 个服务器)。
- 我可以将
/data/0
移到 /data/1
中(配置实际上不使用整个磁盘,而是那里的一个子目录)但是 /data/1
会收到两倍的 IOs.
完整性检查
首先,您需要确保没有 table 的复制因子为 1。如果运气不好,此 table 中的一些 tablet 在磁盘上,您将删除,然后 table 将变得不可用。注意用户运行这个命令必须在Kudu的superuser_acl列表中(当然用真实的主机名替换${kudu_master_host})。
kudu cluster ksck ${kudu_master_host} | grep '| 1 |' | cut -f2 ' '
如果那里有table,你需要
- 要么放弃它们
- 或者用更高的复制因子重新创建它们。您不能更改现有 table 的复制因子。
从技术上讲,还有其他选择,但它们更棘手:
开始重新平衡。在此之后数据将被适当地传播,更重要的是我们知道可以发生再平衡。
kudu cluster rebalance ${kudu_master_host}
停止捻角羚。
删除磁盘
注意:每个节点执行此节点!一次做2个应该是可以的,不过我没测试过。如果你使用Cloudera manager,你需要使用配置组。
从 fs_data_dirs
.
中删除要删除的目录路径
虽然 kudu 仍然停止,但告诉 tablet 服务器上的 kudu 你刚刚更改了哪个配置,现在少了 1 个磁盘:
sudo -u kudu kudu fs update_dirs --force --fs_wal_dir=<your wal directory> --fs_data_dirs=<comma separated list of remaining directories>
重启kudu。数据将自动重新平衡。
恭喜,一旦所有 table 都满意(kudu cluster ksck ${kudu_master_host}
没有 return 任何错误),请转到下一个节点。
问题 (TL;DR;)
我正在寻找一种方法来告诉 kudu 从目录中复制数据(/data/0
在下面的上下文中),或者停止目录。可能吗?
上下文
我有一个包含多个数据目录(都在不同磁盘上)的 kudu 设置,例如。 /data/0
、/data/1
、/data/2
。
目前 WAL 在 /data/0
上,还有 kudu 平板电脑、hdfs 目录和 yarn 本地目录。长话短说,这个磁盘超载了,我想迁移掉除 WAL 之外的所有内容。
此问题与kudu tablet 目录有关。我知道如何强制删除磁盘 from the doc 但是:
If --force is specified, all tablets configured to use that directory will fail upon starting up and be replicated elsewhere.
这听起来不错(平板电脑最终会被复制),但我碰巧有几个表的复制因子为 1,所以那些表将被完全破坏。
解决方法
我知道一些解决方法,但其中 none 是理想的:
- 我可以重新创建 RF 为 3 的表格
- 我可以
kudu tablet change_config move_replica
平板电脑,例如来自 RF 1 的桌子。服务器 1 到服务器 2,然后删除服务器 1 的目录,重新平衡,然后冲洗并重复从服务器 2 到 3,然后 3 到 1(我只有 3 个服务器)。 - 我可以将
/data/0
移到/data/1
中(配置实际上不使用整个磁盘,而是那里的一个子目录)但是/data/1
会收到两倍的 IOs.
完整性检查
首先,您需要确保没有 table 的复制因子为 1。如果运气不好,此 table 中的一些 tablet 在磁盘上,您将删除,然后 table 将变得不可用。注意用户运行这个命令必须在Kudu的superuser_acl列表中(当然用真实的主机名替换${kudu_master_host})。
kudu cluster ksck ${kudu_master_host} | grep '| 1 |' | cut -f2 ' '
如果那里有table,你需要
- 要么放弃它们
- 或者用更高的复制因子重新创建它们。您不能更改现有 table 的复制因子。 从技术上讲,还有其他选择,但它们更棘手:
开始重新平衡。在此之后数据将被适当地传播,更重要的是我们知道可以发生再平衡。
kudu cluster rebalance ${kudu_master_host}
停止捻角羚。
删除磁盘
注意:每个节点执行此节点!一次做2个应该是可以的,不过我没测试过。如果你使用Cloudera manager,你需要使用配置组。
从 fs_data_dirs
.
虽然 kudu 仍然停止,但告诉 tablet 服务器上的 kudu 你刚刚更改了哪个配置,现在少了 1 个磁盘:
sudo -u kudu kudu fs update_dirs --force --fs_wal_dir=<your wal directory> --fs_data_dirs=<comma separated list of remaining directories>
重启kudu。数据将自动重新平衡。
恭喜,一旦所有 table 都满意(kudu cluster ksck ${kudu_master_host}
没有 return 任何错误),请转到下一个节点。