我正在尝试将大量数据(几千个文件,总计19TB)复制到我的Hadoop集群。我在文件的子集上运行bash循环,运行的循环越多,所有副本的速度就越慢
for filename in /path/to/my/data/*.csv;
do cat $filename | ssh user@hadoop "hadoop fs -put - /path/to/new/data/$filename";
done
当我在群集上移动数据时会发生同样的问题,因此我认为它不会复制导致问题的网络。
问题:Hadoop可以同时处理多个put
命令吗?我所看到的是预期的吗?
编辑:群集规格:9个服务器,每个服务器4个磁盘,每个节点可用24TB。大约有六打命令。
答案 0 :(得分:1)
HDFS写入速度取决于几个因素
1)网络速度
2)磁盘I / O速度
3)数据节点数
4)复制因子
5)文件类型 - 是否有大量小文件或大文件
6)Namenode和Datanode Java堆大小。
7)namenode和datanode服务器的性能。
HDFS可以处理多个读取和放大写请求。写入大量小文件会将写入请求发送到每个文件的namenode。写操作只有在复制到n个节点后才能完成,其中n是复制因子,因此复制因子越高,写入将花费更长的时间。
如果网络,磁盘等完美,请在增加namenode和datanode的堆大小后比较性能。