从 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 是理想的:

完整性检查

首先,您需要确保没有 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 任何错误),请转到下一个节点。