我正在尝试使用2台机器进行小型的hadoop设置(用于实验)。我正在加载大约13GB的数据,一个大约3900万行的表,使用Hive复制因子为1。
我的问题是hadoop总是将所有这些数据存储在一个datanode上。只有当我使用setrep将dfs_replication因子更改为2时,hadoop才会在另一个节点上复制数据。我也试过了平衡器($HADOOP_HOME/bin/start-balancer.sh -threshold 0
)。平衡器认识到它需要移动大约5GB来平衡。但是说:No block can be moved. Exiting...
并退出:
2010-07-05 08:27:54,974 INFO org.apache.hadoop.hdfs.server.balancer.Balancer: Using a threshold of 0.0
2010-07-05 08:27:56,995 INFO org.apache.hadoop.net.NetworkTopology: Adding a new node: /default-rack/10.252.130.177:1036
2010-07-05 08:27:56,995 INFO org.apache.hadoop.net.NetworkTopology: Adding a new node: /default-rack/10.220.222.64:1036
2010-07-05 08:27:56,996 INFO org.apache.hadoop.hdfs.server.balancer.Balancer: 1 over utilized nodes: 10.220.222.64:1036
2010-07-05 08:27:56,996 INFO org.apache.hadoop.hdfs.server.balancer.Balancer: 1 under utilized nodes: 10.252.130.177:1036
2010-07-05 08:27:56,997 INFO org.apache.hadoop.hdfs.server.balancer.Balancer: Need to move 5.42 GB bytes to make the cluster balanced.
Time Stamp Iteration# Bytes Already Moved Bytes Left To Move Bytes Being Moved
No block can be moved. Exiting...
Balancing took 2.222 seconds
有人可以建议如何在没有复制的情况下在hadoop上实现均匀的数据分发吗?
答案 0 :(得分:0)
通常在2个机器集群中,我希望一台机器成为namenode,另一台机器成为datanode。因此,当您将复制因子设置为1时,数据将被复制到唯一可用的datanode。如果将其更改为2,它可能会在群集中查找另一个数据节点以将数据复制到但无法找到它,因此可能会退出。