问题
近期遇到以下问题:跨网络的Hadoop集群数据同步。
背景
因为一些安全性原因,内部在大集群之外搭建了一套网络隔离的Hadoop集群,而且需要从大集群同步数据到该网络隔离的Hadoop集群上去。
在不存在网络问题的情况下,可以使用Distcp跨集群拷贝,但是因为网络的问题,Distcp就失效了。在起初,使用了Datax来实现数据的同步,但缺陷也比较明显:
- 配置复杂,需要配置字段级的信息,而这种在文件拷贝的场景下其实是不需要的
- 对文件的压缩格式要求很高
- 无法支持hive的动态分区。
此外,可能会有人提出其他的方案,譬如通过Hadoop客户端拉取文件到中转机,再从中转机推到另一个集群,但这种方式的缺陷也比较明显:
- 太慢了
- 监控和错误处理机制不够,无法线上稳定调度
- 对中转机的存储也有很高的要求
解决方案
借鉴了Datax的框架+插件的思想,可以在计算资源和网络IO资源之间寻找平衡,最大化的提升效率。为此,在Datax上进行改造,复用了Datax的框架部分,对协议和插件做了一些定制化的改造,使之成为文件拷贝的工具。
该方案不仅能用于解决网络隔离场景下的文件同步,也能解决不同文件系统之间的数据同步。
目前写了初步版本,代码见: https://github.com/amazingWu/datax-fs-cp
不知道有没有其他的合适的方案,也不吝指导。