部门同事经常会通过wget去拉相应的日志文件到本地的机器,
最近最近存储全部切换到hdfs上了,所以将wget的文件方便快捷的保存到hdfs就变成很急切的需求。
目前同步文件一般都采用不落地的方式,即不写本地的磁盘,直接将读到的数据同步到目标地。
因为我们的hdfs是使用了hfds-fuse的,所以自然就会想到通过fuse来实现。
但是经过测试,通过fuse会报错误,应该是因为在数据传输到hdfs后需要修改相应的状态而报错。
具体原因不想查了,因为fuse以后用得会越来越少。
在这想到通过管道来实现,就是将wget的文件写到管道的一端,而hadoop在另一端直接读取管道的内容并写到hdfs上。
经过测试,效果还是不错的,速度在15M/S到25M/S直接,取决于当时的网络状况。
[sunwg]$ wget http://bbs.oratea.net/data/20111008.txt -O – | hadoop fs -put – /sunwg/25.txt
–10:12:27– http://bbs.oratea.net/data/20111008.txt
Resolving bbs.oratea.net… 10.75.160.25
Connecting to bbs.oratea.net|10.75.160.25|:80… connected.
HTTP request sent, awaiting response… 200 OK
Length: 657337785 (627M)
Saving to: `STDOUT’
100%[===========================================================================================>] 657,337,785 26.6M/s in 40s
10:13:06 (15.8 MB/s) – `-’ saved [657337785/657337785]