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系统 (阅读:10663)
- HBase技术介绍 (阅读:6974)
- hadoop rpc机制 && 将avro引入hadoop rpc机制初探 (阅读:5159)
- Hadoop的map/reduce作业输入非UTF-8编码数据的处理原理 (阅读:4747)
- 解析Google集群资源管理系统Omega (阅读:4740)
- 快速构建实时抓取集群 (阅读:4424)
- Hadoop超级安装手册 (阅读:4034)
- 百度是如何使用hadoop的 (阅读:4206)
- 使用hadoop进行大规模数据的全局排序 (阅读:3499)
- storm集群的监控 (阅读:3436)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:帝林 来源: 量子数科院
- 标签: Hadoop Hadoop 集群
- 发布时间:2011-06-02 13:26:27
-
[89] memory prefetch浅析
-
[46] 基本排序算法的PHP实现
-
[42] find命令的一点注意事项
-
[35] Oracle bbed工具的编译
-
[32] JS中如何判断字符串类型的数字
-
[29] Inline Form Labels
-
[28] 8大实用又重要Mac使用技巧
-
[26] 深入浅出cassandra 4 数据一致性问
-
[26] 两行 JavaScript 代码
-
[25] 卡诺模型―设计品质与设计价值的思考