Не удается выполнить rsync для hdfs, смонтированного на hdfs :-)

Извините за неудачный каламбур в заголовке. Вот сделка:

В чем моя проблема?

У меня есть кластер HDP 3.1 с 3 узлами данных, 1 именным узлом и 1 резервным именным узлом. Этот кластер находится в сети 192.168.10.0/24. В этой сети у меня есть еще один сервер, с которого мне регулярно нужно синхронизировать файлы с HDFS. rsync выдает мне сообщение об ошибке

rsync: [receiver] close failed on "/hdfs_10G_fuse/user/dir_1/.file_xyz.csv.hoY9FN": Input/output error (5)

так же как

rsync: [receiver] mkstemp "/hdfs_10G_fuse/user/dir_1/sub_dir1/.file_xyz" failed: Input/output error (5)

так же как

create /user/dir_1/dir_1.5/dir_sub_1.5/dir_37/.file.csv.ggVI4W: permission denied

(Нет, я не хочу использовать hdfs copyfromlocal по причинам, которые я сейчас опускаю для краткости, но готов объяснить, если никто не найдет решение моей проблемы с rsync.)

Что я уже сделал и пробовал?

Поэтому я использовал инструмент Microsoft hdfs-mount, чтобы, наконец, успешно смонтировать HDFS в локальный каталог на этом сервере. Я следовал всем инструкциям на странице https://github.com/microsoft/hdfs-mount, включая установка Go 1.13 и т.д. Вот что я сделал для успешного монтирования:

sudo apt remove 'golang-*'
cd ~
wget https://dl.google.com/go/go1.13.9.linux-amd64.tar.gz
tar xf go1.13.9.linux-amd64.tar.gz
sudo mv go /usr/local/go-1.13
export GOROOT=/usr/local/go-1.13
export PATH=$GOROOT/bin:$PATH
git clone --recurse-submodules -j8 https://github.com/microsoft/hdfs-mount.git
sudo mkdir -p $GOROOT/src/golang.org/x/
cd !$
sudo git clone https://github.com/golang/sys.git
cd ~/hdfs-mount/
make
sudo nano /etc/fuse.conf
# + --> uncomment settings in /etc/fuse.conf
sudo mkdir /hdfs_10G_fuse/
sudo chown danilo:danilo /hdfs_10G_fuse
sudo ./hdfs-mount 192.168.10.10:8020 /hdfs_10G_fuse/

(Я сделал это после того, как попробовал другие подходы, такие как шлюз NFS, встроенный в HDP (монтирование работает, те же проблемы, что и ниже, + намного медленнее), https://github.com/remis-thoughts/native-hdfs-fuse.git, https://github.com/alexsmith1612/hadoofus.git и т. д. Так что hdfs-mount показался мне лучшим вариантом.)

На HDFS я выполнил

hdfs dfs -chmod 755 /user/dir_1

как пользователь hdfs, и я также иногда пробовал 777. Я также попытался установить для dfs.permissions.enabled в конфигурации сайта HDFS значение false, перезапустил службу и снова смонтировал ее — все с теми же результатами, что и перечисленные выше.

Я также обновил rsync до версии 3.2.3, загрузив исходный код, исправив его и скомпилировав в соответствии с инструкциями, указанными в файле INSTALL.md. Поскольку я использую Ubuntu 18.04 на сервере, у меня не было доступной библиотеки xxhash, и я отключил ее с помощью флага компилятора. Вот вывод для версии:

rsync  version 3.2.3  protocol version 31
Copyright (C) 1996-2020 by Andrew Tridgell, Wayne Davison, and others.
Web site: https://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, hardlink-specials, symlinks, IPv6, atimes,
    batchfiles, inplace, append, ACLs, xattrs, optional protect-args, iconv,
    symtimes, prealloc, stop-at, no crtimes
Optimizations:
    SIMD, asm, openssl-crypto
Checksum list:
    md5 md4 none
Compress list:
    zlibx zlib none

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

У меня были те же проблемы с версией rsync, которая была в Ubuntu 18.04. Почему я обновлял и устанавливал из исходников? Так что я мог бы исправить это. Почему я хотел это исправить? Потому что я надеялся, что https://stackoverflow.com/a/11697694/7870462 станет решением моей проблемы.

Какую дополнительную информацию я могу предоставить?

Запуск hdfs-mount в терминале и просмотр вывода дает мне такие сообщения, как:

2020/10/16 17:02:47 Dir.go:212: Can't create file:  /user/dir_1/subdir_1/.file_1.csv.UMdYKH create /user/dir_1/subdir_1/.file_1.csv.UMdYKH: permission denied

в то время как я перебирал и модифицировал до полной гибкости несколькими способами, как указано выше.

Что мне поможет?

Объяснение или тест, чтобы выяснить, в чем проблема

Еще один патч для rsync или hdfs-mount, решающий проблему

Большое спасибо!


person Danilo Saft    schedule 16.10.2020    source источник