搜索
查看: 9120|回复: 4

hdfs数据传输问题

[复制链接]

2

主题

0

回帖

28

积分

新手上路

积分
28
发表于 2014-1-21 00:39:56 | 显示全部楼层 |阅读模式
请问 hdfs 在上传一个300M文件用时 30分钟 太慢了 达不到公司要求
怎么处理呢

152

主题

47

回帖

2875

积分

管理员

积分
2875
发表于 2014-1-21 01:51:37 | 显示全部楼层
切换操作方式可能有助于提高上传速
hadoop计算需要在hdfs文件系统上进行,因此每次计算之前必须把需要用到的文件(我们称为原始文件)都上传到hdfs上。文件上传到hdfs上通常有三种方法:
a> hadoop自带的dfs服务,put;
b> hadoop的API,Writer对象可以实现这一功能;
c> 调用OTL可执行程序,数据从数据库直接进入hadoop

由于存在ETL层,因此第三种方案不予考虑
将a、b方案进行对比,如下:
1、空间:方案a在hdfs上占用空间同本地,因此假设只上传日志文件,则保存一个月日志文件将消耗掉约10T空间,如果加上这期间的各种维表、事实表,将占用大约25T空间
     方案b经测试,压缩比大约为3~4:1,因此假设hdfs空间为100T,原来只能保存约4个月的数据,现在可以保存约1年

2、上传时间:方案a的上传时间经测试,200G数据上传约1小时
      方案b的上传时间,程序不做任何优化,大约是以上的4~6倍,但存在一定程度提升速度的余地

3、运算时间:经过对200G数据,大约4亿条记录的测试,如果程序以IO操作为主,则压缩数据的计算可以提高大约50%的速度,但如果程序以内存操作为主,则只能提高5%~10%的速度

4、其它:未压缩的数据还有一个好处是可以直接在hdfs上查看原始数据。压缩数据想看原始数据只能用程序把它导到本地,或者利用本地备份数据
     压缩格式:按照hadoop api的介绍,压缩格式分两种:BLOCK和RECORD,其中RECORD是只对value进行压缩,一般采用BLOCK进行压缩。
     对压缩文件进行计算,需要用SequenceFileInputFormat类来读入压缩文件,以下是计算程序的典型配置代码:

JobConf conf = new JobConf(getConf(), log.class);
    conf.setJobName(”log”);
    conf.setOutputKeyClass(Text.class);//set the map output key type
    conf.setOutputValueClass(Text.class);//set the map output value type

    conf.setMapperClass(MapClass.class);
    //conf.setCombinerClass(Reduce.class);//set the combiner class ,if havenot, use Recuce class for default
    conf.setReducerClass(Reduce.class);
    conf.setInputFormat(SequenceFileInputFormat.class);//necessary if use compress

接下来的处理与非压缩格式的处理一样
大数据中国(http://www.bigdatas.cn),以数据的力量改变生活!

152

主题

47

回帖

2875

积分

管理员

积分
2875
发表于 2014-1-21 01:54:15 | 显示全部楼层
参考价值:Hadoop1.0.4 HDFS I/O性能测试
分布式RDF查询引擎的项目需要在节点之间传输中间结果,考虑HDFS可以作为一个备选的传输媒介,于是对HDFS的IO性能做了一个粗略的测试,过程和结果如下:

硬件环境:

实验室的8台老机器组成的集群,配置:

Intel 965芯片组
Intel Core E4400 CPU(2GHz双核,2MB L2,800MHz FSB)
1GB*4 双通道 DDR2 667 内存
160GB*1 SATA2 硬盘
集成BCM5754 Gigabit PCI-E 网卡
8台机器用1米长的5类线接到一台48G背板带宽的24口千兆交换机上

软件环境:

8台机器上都装着
CentOS 6.2(2.6.32) x64 系统
Hadoop 1.0.4(集群上启动了map-reduce,还运行着zookeeper和hama0.6.0,但没有运行任何job)

测试过程:

由于只是想知道hdfs大概的io性能,以下的实验都没有多次实验取平均。

首先将hdfs的上传速度和scp的速度做对比,随便在集群中找了一个节点iir455-202,向hdfs  put一个1028MB的文件(hdfs文件块64MB,8个节点,每个节点大约会有2个文件块):

[iir@iir455-202 data]$ time ~/hadoop-1.0.4/bin/hadoop fs -put external_links_en.nt /bhq/

real 0m42.693s
user 0m12.163s
sys 0m3.138s

用了42.693秒,从该节点向另外一个节点scp该文件:

[iir@iir455-202 data]$ time scp external_links_en.nt iir@iir455-200:/data/

external_links_en.nt                          100% 1028MB  36.7MB/s  00:28   

real 0m29.178s
user 0m22.577s
sys 0m3.406s

用了29.178秒,可见hdfs put文件的速度约24MB/s,scp点对点拷贝的速度约35MB/s。

再看看下载的速度,将本地的文件删除,从hdfs上get一个:

[iir@iir455-202 data]$ time ~/hadoop-1.0.4/bin/hadoop fs -get /bhq/external_links_en.nt ./

real 0m16.727s
user 0m8.550s
sys 0m3.693s

下载的速度很快,只用了16.727秒,约61.5MB/s的速度,怀疑是本地有缓存导致速度很快,于是换个目录试试:

[iir@iir455-202 data]$ mkdir 123
[iir@iir455-202 data]$ time ~/hadoop-1.0.4/bin/hadoop fs -get /bhq/external_links_en.nt ./123/

real 0m21.534s
user 0m8.471s
sys 0m3.737s

21.534秒,速度依然挺快的,应该和本地的缓存没啥关系,50-60MB/s的这个速度估计也就接近了老SATA2硬盘、集成网卡和5类网线的极限了。
大数据中国(http://www.bigdatas.cn),以数据的力量改变生活!

152

主题

47

回帖

2875

积分

管理员

积分
2875
发表于 2014-1-21 01:57:13 | 显示全部楼层
有人问:为什么(hadoop基准测试中)HDFS写入速度如此之慢?
搭建好hadoop之后,对hadoop做基准测试,使用hadoop-1.1.2的test包中的IO测试进行读写测试。测试结果让我觉得非常诧异,只有2-3M/s的写入速率。

在我的认识里,传统硬盘的写速度应该能够到120M/s的样子,网络传输速度也能够达到10M/s至少,在使用千兆交换机的前提下,甚至能够达到100M/s~想问一下HDFS之所以写速度为如此慢的原因到底是什么~~

PS:附上测试的环境参数:

机器配置如下:
机器数量:7
DataNode:6
内存:32G
硬盘:2T 7200转 磁盘 + 128G SSD
网络情况:百兆带宽

写测试:
往HDFS上写10个1000M的文件:
使用命令 :$ hadoop jar $HADOOP_HOME/hadoop-test-1.1.2.jar TestDFSIO -write -nrFiles 10 -fileSize 1000

测试结果为:

有人回答:
总共写10000M,耗时503s,得到集群平均每秒写19.8M,然后统计数据Throughput=2.39M/S,所以平均下来有19.8/2.39=8.31个进程并发。
因为是写10个文件,由此推断在集群大部分时间内应该是10个进程并发的。
文件默认的副本数是3,所以实际上每写一份文件,就会产生2份的网络传输(3个副本位于不同的datanode上),10个进程并发在6台datanode上,所以肯定会有一部分机器上至少起了两个写进程(会产生副本1到副本2的流量),再加上别的机器的pipeline(副本2到副本3的流量),所以会有大约2.39*(2+2)≈10M/s的流量,基本达到带宽瓶颈了。
换千兆网卡吧。。
大数据中国(http://www.bigdatas.cn),以数据的力量改变生活!

152

主题

47

回帖

2875

积分

管理员

积分
2875
发表于 2014-1-21 02:03:24 | 显示全部楼层
还有人说:
当数据量很大的時候,集群节点个数就睡有影响。
「慢」只是一种表現,可能得确认一下是哪个因素造成「慢」。
有可能是节点数太少,本身能同时写入的量就少,当然就会慢。
其次,还跟架构有关,不少人问我可不可以跑在虚拟机上,我常说可以,但前提是不能共用硬盘。
否则两台虚拟机器就会抢硬盘带宽。

因此,您不介紹集群状态,基本上沒办法判定「慢」的因素。
大数据中国(http://www.bigdatas.cn),以数据的力量改变生活!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

 
 
大数据行业交流
大数据行业交流
大数据求职招聘
大数据求职招聘
站长电话:
15010106923
微信联系:
hb-0310
站长邮箱:
ab12-120@163.com
大数据中国微信

QQ   

版权所有: Discuz! © 2001-2013 大数据.

GMT+8, 2024-5-4 04:02 , Processed in 0.110680 second(s), 26 queries .

快速回复 返回顶部 返回列表