Hadoop集群间Hadoop方案探讨
在日常的工作过程中,我们经常会碰到在不同的Hadoop集群间来回copy数据的需求。这些不同的集群,他们的Hadoop版本可能不同,不同机房的acl也可能不通,给我们的distcp带来了很多困难。这里整理曾经遇到的各种需求,供各位看官参考:
1.机房影响
这里假设有两个Hadoop集群,a和b,版本一致,但位于不同的机房A1和B1(A1的机器变化较少,B1的机器变化更频繁,acl推荐从A1打通到B1),任务计划于机房A1的机器gateway_a上提交。需要做的工作是:打通集群A1的所有机器,到集群B1的所有机器间的acl,主要包括:Namenode端口、jobtracker端口等
acl打通完成后,直接使用命令即可:
hadoop distcp -i hdfs://sourcename:
2.版本影响
同理,假设有两个集群c和d,c的版本为0.20.2,d的版本为0.19.1,我们需要把c的数据传输到d上。想实现这个需求,推荐的方案为:
任务提交到集群d上,gateway_d能够访问集群c的nn、jt、dfs http等端口,命令如:
hadoop distcp -i hftp://sourcename:50070/URI_soure hdfs://destname:
这里,需要额外关注的是,从0.20开始,hadoop修改了它的rpc协议,导致提交到0.20的jobtracker的distcp任务,是无法写入到0.19版本的集群的,如果想做distcp操作,任务必须启动在0.19版本的集群上。
3.机房和版本的共同影响
这种情况,综合上述两种操作即可,首先,我们需要做集群间的acl,考虑源和目标集群哪个的变动更频繁,来决定开通acl的方向;acl搞定后,接着步骤2执行就行。相信各位聪明的看官,就不再赘述了。
最后的最后,补充遇到过的一种复杂情形:有集群e(0.20)/f(0.19)/g(0.19),其中e/f位于同一机房,g位于另外一个机房,f->g的acl已经打通,如果临时需要从e推送数据到g的话,可以考虑将job提交到f集群上,通过hftp的方式,将e的数据distcp到g上,实践可用,供紧急需求时参考。
备注:distcp的工作原理,请参考《Hadoop The Definitive Guide》 章节3.7
建议继续学习:
- Facebook的实时Hadoop系统 (阅读:10584)
- HBase技术介绍 (阅读:6760)
- hadoop rpc机制 && 将avro引入hadoop rpc机制初探 (阅读:5104)
- Hadoop的map/reduce作业输入非UTF-8编码数据的处理原理 (阅读:4598)
- 解析Google集群资源管理系统Omega (阅读:4587)
- 快速构建实时抓取集群 (阅读:4375)
- Hadoop超级安装手册 (阅读:3979)
- 百度是如何使用hadoop的 (阅读:3918)
- 使用hadoop进行大规模数据的全局排序 (阅读:3449)
- storm集群的监控 (阅读:3387)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:帝林 来源: 量子数科院
- 标签: Hadoop Hadoop 集群
- 发布时间:2011-06-02 13:26:27
- [55] IOS安全–浅谈关于IOS加固的几种方法
- [53] 如何拿下简短的域名
- [52] 图书馆的世界纪录
- [52] android 开发入门
- [50] Go Reflect 性能
- [50] Oracle MTS模式下 进程地址与会话信
- [48] 【社会化设计】自我(self)部分――欢迎区
- [47] 读书笔记-壹百度:百度十年千倍的29条法则
- [36] 程序员技术练级攻略
- [29] 视觉调整-设计师 vs. 逻辑