这是CDH/HDP/Apache Hadoop迁移到CDP系列之一,如对迁移感兴趣,请关注该系列之前博客《使用 Replication Manager 迁移到CDP 私有云基础》、《将数据迁移到CDP 私有云基础的数据迁移用例》、《将Hive数据迁移到CDP》。
了解如何将 Kudu数据从 CDH 迁移到 CDP。
当您将 Kudu 数据从 CDH 迁移到 CDP 时,您必须使用 Kudu 备份工具来备份和恢复您的 Kudu 数据。
1. 使用 kudu-backup-tools.jar Kudu 备份工具备份 Kudu 中的所有数据。
2. 在旧集群中的新集群中手动应用任何自定义 Kudu 配置。
3. 将备份的数据复制到目标 CDP 集群。
4. 使用 Kudu 备份工具恢复备份 Kudu 数据。
1. 在 Kudu 中备份数据
您可以使用Kudu 备份工具kudu-backup-tools.jar 备份Kudu 中的所有数据。
Kudu 备份工具运行 Spark 作业,该作业会根据您指定的内容构建备份数据文件并将其写入 HDFS或 AWS S3。请注意,如果您要备份到 S3,则必须提供 S3 凭据以进行 spark-submit,如指定凭据以从 Spark 访问 S3 中所述
Kudu 备份工具在第一次运行时为您的数据创建完整备份。随后,该工具会创建增量备份。
重要的
增量备份和恢复功能仅适用于 CDH 6.3.0 及更高版本。因此,如果您有活动的摄取过程,例如 Spark 作业、Impala SQL 批处理或 Nifi 在 Kudu 中插入或更新数据,您可能需要在开始完整备份之前暂停这些过程,以避免在开始 Kudu 备份过程后丢失数据更改.
运行以下命令以启动备份过程:
spark-submit --class org.apache.kudu.backup.KuduBackup <path to kudu-backup2_2.11-1.12.0.jar> \ --kuduMasterAddresses <addresses of Kudu masters> \ --rootPath <path to store the backed up data> \ <table_name>
在哪里
· --kuduMasterAddresses
用于将 Kudu 大师的地址指定为逗号分隔的列表。例如, master1-host,master-2-host,master-3-host
哪些是 Kudu 大师的实际主机名。
· --rootPath
用于指定存储备份数据的路径。它接受任何 Spark 兼容的路径。
o HDFS 示例: hdfs:///kudu-backups
o AWS S3 示例: s3a://kudu-backup/
如果您正在备份到 S3 并看到“线程“main”中的异常java.lang.IllegalArgumentException:路径必须是绝对的”错误,请确保 S3 路径以正斜杠( /
)结尾。
· <table_name>
可以是要备份的表或表列表。
例子:
spark-submit --class org.apache.kudu.backup.KuduBackup /opt/cloudera/parcels/CDH-7.2.1-1.cdh7.2.1.p0.4041380/lib/kudu/kudu-backup2_2.11.jar \ --kuduMasterAddresses cluster-1.cluster_name.root.hwx.site,cluster-2.cluster_name.root.hwx.site \ --rootPath hdfs:///kudu-backups \
my_table
2. 将 Kudu 数据恢复到新集群中
在 Kudu中备份数据后,您可以将数据复制到目标 CDP 集群,然后使用 Kudu备份工具将其恢复。
如果您在旧集群中应用了任何自定义 Kudu 配置,那么您必须手动在目标集群中应用这些配置。
如果您更改了 的值tablet_history_max_age_sec
并计划在目标集群上运行 Kudu 的增量备份,我们建议将其重置tablet_history_max_age_sec
为默认值 1 周(请参阅https://issues.apache.org/jira/browse/KUDU-2677)。
常用修改配置标志的示例:
· rpc_max_message_size
· tablet_transaction_memory
· rpc_service_queue_length
· raft_heartbeat_interval
· heartbeat_interval_ms
· memory_limit_hard_bytes
· block_cache_capacity_mb
手动应用自定义配置后,重新启动 Kudu 集群。
1. 通过以下方式之一将备份的数据复制到目标 CDP 集群:
o 使用 distcp:
sudo -u hdfs hadoop distcp hdfs:///kudu/kudu-backups/* hdfs://cluster-2.cluster_name.root.hwx.site/kudu/kudu-backups/
o 使用复制管理器。有关更多信息,请参阅HDFS 复制。
2. 运行以下命令在目标集群上恢复备份:
spark-submit --class org.apache.kudu.backup.KuduRestore <path to kudu-backup2_2.11-1.12.0.jar> \ --kuduMasterAddresses <addresses of Kudu masters> \ --rootPath <path to the stored backed up data> \ <table_name>
在哪里
o --kuduMasterAddresses
用于将 Kudu 大师的地址指定为逗号分隔的列表。例如,master1-host,master-2-host,master-3-host
哪些是 Kudu 大师的实际主机名。
o --rootPath
用于指定存储备份数据的路径。它接受任何与 Spark 兼容的路径。
§ HDFS 示例: hdfs:///kudu-backups
§ AWS S3 示例: s3a://kudu-backup/
如果您已备份到 S3 并看到“线程“main”中的异常java.lang.IllegalArgumentException:路径必须是绝对的”错误,请确保 S3 路径以正斜杠( /
)结尾。
o <table_name>
可以是要备份的表或表列表。
o 可选:--tableSuffix
,如果设置,添加到恢复的表名就足够了。它只能在 createTables
属性为 时使用 true
。
o 可选:--timestampMs
是以毫秒为单位的 UNIX 时间戳,它定义了选择还原候选者时要使用的最晚时间。其默认值为 System.currentTimeMillis()
。
sudo -u hdfs spark-submit --class org.apache.kudu.backup.KuduRestore /opt/cloudera/parcels/CDH-7.2.0-1.cdh7.2.0.p0.3758356/lib/kudu/kudu-backup2_2.11.jar \ --kuduMasterAddresses cluster-1.cluster_name.root.hwx.site \ --rootPath hdfs:///kudu/kudu-backups \
my_table
3. 在 Cloudera Manager 中重启 Kudu 服务。