0

问题(TL;DR;)

我正在寻找的是一种告诉 kudu 将数据从目录中复制出来(/data/0在下面的上下文中)或停用目录的方法。可能吗?

语境

我有一个带有多个数据目录(都在不同磁盘上)的 kudu 设置,例如。/data/0, /data/1, /data/2. 目前 WALs/data/0以及 kudu tablet、hdfs 目录和 yarn 本地目录都在。长话短说,这个磁盘超载了,我想迁移除 WAL 之外的所有东西。

这个问题与 kudu tablet 目录有关。我知道如何从文档中强制删除磁盘,但是:

如果指定了 --force,所有配置为使用该目录的平板电脑将在启动时失败并在其他地方复制。

这听起来不错(平板电脑最终会被复制),但我碰巧有一些复制因子为 1 的表,所以这些表将被完全销毁。

解决方法

我知道一些解决方法,但没有一个是理想的:

  • 我可以重新创建 RF 为 3 的表
  • 我可以kudu tablet change_config move_replica使用例如 RF 1 为桌子制作平板电脑。服务器 1 到服务器 2,然后删除服务器 1 的目录,重新平衡,然后冲洗并重复从服务器 2 到 3,然后从 3 到 1(我只有 3 台服务器)。
  • 我可以移动/data/0到内部/data/1(配置实际上并不使用整个磁盘,而是使用那里的一个子目录),但/data/1随后会收到两倍的 IO。
4

1 回答 1

0

健全性检查

首先,您需要确保没有复制因子为 1 的表。如果运气不好,该表的某些片在您将删除的磁盘上,则该表将变得不可用。请注意,运行此命令的用户必须在 Kudu 的 superuser_acl 列表中(当然将 ${kudu_master_host} 替换为真实主机名)。

kudu cluster ksck ${kudu_master_host} | grep '| 1 |' | cut -f2 ' '

如果那里有桌子,您需要

  • 要么放弃他们
  • 或使用更高的复制因子重新创建它们。您不能更改现有表的复制因子。从技术上讲,还有其他选择,但它们更棘手:

开始重新平衡。在此之后,数据将被正确传播,更重要的是我们知道可能会发生再平衡。

kudu cluster rebalance ${kudu_master_host}

停止库杜。

删除磁盘

注意:每个节点都做这个节点!应该可以一次做2个,但我还没有测试过。如果您使用 Cloudera manager,则需要使用配置组。

删除要从中删除的目录的路径fs_data_dirs

当 kudu 仍然停止时,告诉平板服务器上的 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。数据将自动重新平衡。

kudu cluster ksck ${kudu_master_host}恭喜,一旦所有平板电脑都满意(不返回任何错误),就转到下一个节点。

于 2020-07-22T10:21:04.027 回答