Elwin.Y

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

    最近一个项目 在大把大把的使用hadoop-HDFS,关于HDFS 的优势网上都快说烂了,这里不再说了,免得被。。 呵呵

废话少说,开整

1、场景描述:

    服务器A 监听 服务器B分发任务socket。当B 服务器发送指令上传数据,服务器A 便启动HDFSClient 开始

从服务器D(FTP服务器)获取数据上传至HADOOP(这里的数据总量大小一般10-100G,单个文件4-15M)2、

2、环境:

  网络:千兆局域网

  hadoop版本:1.2.1

  硬件环境:略(正规服务器,不扯了)

3、问题

至于这种数据量大,文件碎小。单线程程序绝对打不满网络(IO 这里绝对不是问题,服务器插着多块磁盘)此处已写程序测试。

4、解决方法

4.1、hadoop优化配置

-------------------------------------------------------------------------------------------------------------

集群整体心跳 将默认3秒 修改为0.25秒
<!--hadoop 源代码 心跳 解释:conf.getLong("dfs.heartbeat.interval", HEARTBEAT_INTERVAL) * 1000L;//代码中读取心跳 为毫秒 --->
    <property>
       <name>dfs.heartbeat.interval</name>
       <value>0.25</value>
    </property>
------------------------------------------------------------------------------------------------------------------------
集群  SequenceFiles在读写中可以使用的缓存大小 默认 为4KB  ,这里扩容至 1MB 今后根据实际物理机器调优
直接影响 hdfs 读写能力
<property>
         <name>io.file.buffer.size</name>
         <value>1048576</value>
    </property>
 
注意:看你hadoop 集群的配置,普通pc 或者虚拟机请勿模仿。
-------------------------------------------------------------------------------------------------------------------------
启动 hadoop 做磁盘存储均衡
hadoop balancer -Threshold 5 ------- 每个磁盘利用率偏差 在5% 之内
-------------------------------------------------------------------------------------------------------------------------
 
4.2 程序优化
1、将程序改为多线程(我的集群目前35线程可以将网络基本打满)
2、将HDFS 操作类改成单例(注意,线程安全的哦),这只主要第一步初始化的是
 
(1) Configuration config = new Configuration();
(2)FileSystem hdfs = FileSystem.get(URI.create(URL),config);
//FileSystem 初始化相对比较耗时。
----------------------------------------------------------------------
好了,开启你的线程池 开始测试吧
我这里网络基本可以打满,个人还是比较满意的
(亲们,千兆局域网  一般说的是都是小b,你传输数据的时候 理想速度应该是125M)。
 
 
 
 
 

 

 

 

posted on 2013-11-22 19:31  Elwin.Y  阅读(2029)  评论(0编辑  收藏  举报