我最近升级了我的cloudera环境,从5.8.x(hadoop2.6.0,hdfs-1)升级到了6.3.x(hadoop3.0.0,hdfs-1),在用 moveFromLocal
,我刚刚意识到dfs使用了我所执行的datanode服务器的% moveFromLocal
比其他人多3倍。
然后跑了 fsck
与 -blocks
, -locations
以及 -replicaDetails
我加载数据的hdfs路径上的标志;我发现复制的块(rf=2)都在同一台服务器上,除非我手动运行,否则不会被分发到其他节点 hdfs balancer
.
一个月前提出了一个相关的问题,hdfs put/movefromlocal not distributing data across data nodes?,这并没有真正回答任何问题;我一直加载的文件是Parquet文件。
Cloudera5.8.x中没有这样的问题。在cloudera6.3.x中,我是否应该进行一些与复制、机架感知等相关的新配置?
任何帮助都将不胜感激。
2条答案
按热度按时间vcirk6k61#
根据hdfs架构文档,“对于常见情况,当复制因子为3时,hdfs的放置策略是,如果写入程序位于数据节点上,则在本地计算机上放置一个副本…”
因为namenode不允许datanodes拥有同一块的多个副本,所以创建的最大副本数是当时datanodes的总数
xjreopfe2#
您可能正在某个数据节点上执行movefromlocal。似乎您需要从非datanode执行movefromlocal以在集群上获得均匀分布。