分享

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

goldtimes 发表于 2013-10-25 10:43:24 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 7 8337
刚刚开始看HDFS,对客户端访问HDFS做了一个简单的并发测试,对测试结果比较疑惑,请各位帮忙看看;

测试环境描述:
HDFS由一个NameNode(一台物理机)和两个DataNode(两台物理机)组成,客户端在区域网内的另一台机器;
测试过程描述:
首先,HDFS上已经存在了一个大约12M的文件;
然后,客户端启动多根线程,每根线程都去分别获取文件;
测试结果是:
当客户端为1根线程时,客户端获取到文件的处理时间为672ms:
当客户端为5根线程时,客户端每根线程获取到文件的平均处理时间为1800ms:
当客户端为10根线程时,客户端每根线程获取到文件的平均处理时间为3500ms:
下面是我的测试代码:
[ol]
  • 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 复制代码
    非常奇怪,随着客户端处理线程的增加,处理时间很急剧上升,是我的代码有吗?瓶颈在哪儿吗?
    日志看起来似乎都是正常的;
    请各位帮忙看看,谢谢。
    补充说明:我只通过bin/start-dfs.sh脚本启动服务,并没有开启hadoop的其他功能。
  • 已有(7)人评论

    跳转到指定楼层
    JavaShoote 发表于 2013-10-25 10:43:24
    怎么没人呢。。。。
    回复

    使用道具 举报

    mexiang 发表于 2013-10-25 10:43:24
    请各位帮帮忙看看哦,呵呵。
    回复

    使用道具 举报

    sq331335144 发表于 2013-10-25 10:43:24
    都到编码阶段了,我还没开始编码,方便的话留个联系方式交流下,我的邮箱fly542@163.com
    回复

    使用道具 举报

    mituan2008 发表于 2013-10-25 10:43:24
    扣扣:4五40六047九,欢迎交流啊。
    回复

    使用道具 举报

    fylanyu 发表于 2013-10-25 10:43:24
    怎么的都没人的呢吗?吗?
    回复

    使用道具 举报

    mituan2008 发表于 2013-10-25 10:43:24
    随着客户端处理线程的增加,你的namnode就是这个,要处理的数据多了,当然时间会长,namenode的rpc服务器是采用nio,本质是一个队列处理的,当然要一个一个请求排队
    回复

    使用道具 举报

    JavaShoote 发表于 2013-10-25 10:43:24
    随着客户端处理线程的增加,你的namnode就是这个,要处理的数据多了,当然时间会长,namenode的rpc服务器是 ...
    sunshine 发表于 2011-9-29 16:47



    ipc.server.read.threadpool.size  默认1
    dfs.namenode.handler.count      默认3
    以上设置 增加数目试试
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    推荐上一条 /2 下一条