rsync文件到hadoop

Mic*_*hal 5 rsync hadoop

我有6台服务器,每台都包含很多日志.我想通过rsync将这些日志放到hadoop fs上.现在我正在使用fuse和rsync直接写入熔丝安装的fs/mnt/hdfs.但是有一个大问题.大约一天后,保险丝守护程序占用5 GB的RAM,并且无法对安装的fs做任何事情.所以我必须重新安装保险丝,一切都很好,但只是一段时间.Rsync命令是

rsync --port=3360 -az --timeout=10 --contimeout=30 server_name::ap-rsync/archive /mnt/hdfs/logs
Run Code Online (Sandbox Code Playgroud)

一段时间后,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]
Run Code Online (Sandbox Code Playgroud)

小智 5

Fuse-hdfs 不支持O_RDWRand O_EXCL,因此 rsync 会收到 EIO 错误。如果你想在fuse-hdfs中使用rsync,则需要对代码进行patch。你有两种修改方式,每一种都可以。我建议使用第二种方法。

  1. 补丁保险丝-hdfs,它可以在hadoop中找到。

    https://issues.apache.org/jira/browse/HDFS-861

  2. 修补 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
    
    Run Code Online (Sandbox Code Playgroud)


xbo*_*ard 0

我不知道问题到底是什么,但我认为要正确解决将日志移动到 HDFS 的一般问题,您可以考虑使用 Flume:https: //github.com/cloudera/flume - http://www.cloudera .com/resource/hw10_flume_reliable_distributed_streaming_log_collection