rsync文件到hadoop
我有6个服务器,每个都包含大量的日志。我想通过rsync将这些日志写入hadoop fs。现在我使用熔丝和rsync直接写入熔丝安装的fs/mnt/hdfs。 但是有一个很大的问题。大约一天后,熔丝deamon占用5 GB的RAM,并且无法对安装的fs进行任何操作。所以我必须重新安装保险丝,一切都可以,但只是一段时间。 rsync命令是rsync文件到hadoop
rsync --port=3360 -az --timeout=10 --contimeout=30 server_name::ap-rsync/archive /mnt/hdfs/logs
Rsync的一段时间后,会产生错误消息:
rsync error: timeout in data send/receive (code 30) at io.c(137) [sender=3.0.7]
rsync: connection unexpectedly closed (498784 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(601) [receiver=3.0.7]
rsync: connection unexpectedly closed (498658 bytes received so far) [generator]
rsync error: error in rsync protocol data stream (code 12) at io.c(601) [generator=3.0.7]
我不知道究竟是什么问题,但我认为,妥善解决移动日志的一般问题HDFS你可以考虑使用Flume:https://github.com/cloudera/flume - http://www.cloudera.com/resource/hw10_flume_reliable_distributed_streaming_log_collection
我会用hadoop fs -copyFromLocal /path/to/logs hdfs:///path/to/logs/$DATE。由于您将日志放入日期过的目录,因此不需要使用rsync。不需要FUSE,这对于原型而言是有利的,但是如你所见,这是不可靠的。
这个选项是我第一次尝试如何避免直接使用rsyng到hadoop保险丝。 首先我将新文件rsynced到本地目录,然后我用hadoop dfs -copyFromLocal。但我在复制到hdfs时遇到了问题。 http://*.com/questions/6449562/hadoop-copyfromlocal-problem-wit-copying-directory 如果可以使用这个命令,那就太好了。 – Michal
Fuse-hdfs不支持O_RDWR
和O_EXCL
,所以rsync会得到一个EIO错误。 如果你想用fuse-hdfs使用rsync,需要修补代码。 你有两种修改方式,每一种都可以。我建议使用第二种方法。
-
patch fuse-hdfs,它可以在hadoop中找到。
-
补丁的rsync(版本3.0.8)。
diff -r rsync-3.0.8.no_excl/syscall.c rsync-3.0.8/syscall.c 234a235,252 > #if defined HAVE_SECURE_MKSTEMP && defined HAVE_FCHMOD && (!defined HAVE_OPEN64 || defined HAVE_MKSTEMP64) > { > int fd = mkstemp(template); > if (fd == -1) > return -1; > if (fchmod(fd, perms) != 0 && preserve_perms) { > int errno_save = errno; > close(fd); > unlink(template); > errno = errno_save; > return -1; > } > #if defined HAVE_SETMODE && O_BINARY > setmode(fd, O_BINARY); > #endif > return fd; > } > #else 237c255,256 < return do_open(template, O_WRONLY|O_CREAT, perms); --- > return do_open(template, O_RDWR|O_EXCL|O_CREAT, perms); > #endif
水槽是相当沉重的重量,有一堆的依赖。所以虽然它在移动日志方面做得非常出色,但它不会那么容易设置。 –
谢谢,我看着水槽。但我希望将gzipped日志文件与其子目录一起传输。当我尝试传输的文件不完整。文本文件没问题,但gzip文件没有。 – Michal