请教:Java客户端并发访问HDFS的问题。

nada_forever 2011-09-26 12:31:36
测试环境描述:HDFS由一个NameNode(一台物理机)和两个DataNode(两台物理机)组成,客户端在区域网内的另一台机器;
测试过程描述:
首先,HDFS上已经存在了一个大约12M的文件;
然后,客户端启动多根线程,每根线程都去分别获取文件;
测试结果是:
当客户端为1根线程时,客户端获取到文件的处理时间为672ms:
当客户端为5根线程时,客户端每根线程获取到文件的平均处理时间为1800ms:
当客户端为10根线程时,客户端每根线程获取到文件的平均处理时间为3500ms:

下面是我的测试代码:

package hdfs;

import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URI;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;

public class TestProblem {

public static void main(String[] args) throws FileNotFoundException, IOException {
final String dst = "hdfs://172.16.4.14:9000/user/hdfs/apk/20.apk";
final Configuration conf = new Configuration();
final FileSystem fs = FileSystem.get(URI.create(dst), conf);

//客户端请求线程数
int count = 10;

ExecutorService es = Executors.newCachedThreadPool();
for (int i = 0; i < count; i++) {
es.execute(new Runnable() {

@Override
public void run() {
try {
long begin = System.currentTimeMillis();

FSDataInputStream hdfsInStream = fs.open(new Path(dst));
ByteArrayOutputStream out = new ByteArrayOutputStream();

IOUtils.copyBytes(hdfsInStream, out, 1024, true);
System.out.println(out.size());
System.out.println("consuming time:" + (System.currentTimeMillis() - begin));
hdfsInStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
}


非常奇怪,随着客户端处理线程的增加,处理时间急剧上升,是我的代码有问题?瓶颈在哪儿?
日志看起来似乎都是正常的;
请各位帮忙看看,谢谢。


补充说明:我只通过bin/start-dfs.sh脚本启动服务,并没有开启hadoop的其他功能。
...全文
480 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lingling1989r 2011-09-29
  • 打赏
  • 举报
回复
可能是文件大小的问题,增加到一定程度之后,你分多个线程能显现出他的优点,是不是大部分时间用于分开合并,所以才耗时增加。。。
nada_forever 2011-09-28
  • 打赏
  • 举报
回复
后来测试,似乎确实与网络带宽有关,但我的客户端机器的千兆网卡的使用率最高只能达到60%,有点奇怪啊。
uncle_bacon 2011-09-28
  • 打赏
  • 举报
回复
路过帮顶!
sxdgundam 2011-09-28
  • 打赏
  • 举报
回复
路过帮顶!
nada_forever 2011-09-27
  • 打赏
  • 举报
回复
高手都在哪呢?
nada_forever 2011-09-26
  • 打赏
  • 举报
回复
自己顶。。。。
nada_forever 2011-09-26
  • 打赏
  • 举报
回复
自己顶一下,请各位麻烦帮一帮忙,呵呵。

20,807

社区成员

发帖
与我相关
我的任务
社区描述
Hadoop生态大数据交流社区,致力于有Hadoop,hive,Spark,Hbase,Flink,ClickHouse,Kafka,数据仓库,大数据集群运维技术分享和交流等。致力于收集优质的博客
社区管理员
  • 分布式计算/Hadoop社区
  • 涤生大数据
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧