Я включил шлюз HDFS NFSv3 в нашем кластере HDFS через официальную документацию. Все работает хорошо, за исключением одного сервера Ubuntu 16.04. Следующее - ядро, mount
и машины sysctl -a
выводить информацию.
root@Linux:~$ uname -a
Linux xxx-server-001 4.15.0-46-generic #49~16.04.1-Ubuntu SMP Tue Feb 12 17:45:24 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
root@Linux:~$ mount | grep hdfs
10.30.200.100:/ on /hdfs type nfs (rw,relatime,sync,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,noacl,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.30.200.100,mountvers=3,mountport=4242,mountproto=tcp,local_lock=all,addr=10.30.200.100)
root@Linux:~$ sysctl -a | grep nfs
fs.nfs.idmap_cache_timeout = 2
fs.nfs.nfs_callback_tcpport = 0
fs.nfs.nfs_congestion_kb = 259136
fs.nfs.nfs_mountpoint_timeout = 500
fs.nfs.nlm_grace_period = 0
fs.nfs.nlm_tcpport = 0
fs.nfs.nlm_timeout = 10
fs.nfs.nlm_udpport = 0
fs.nfs.nsm_local_state = 3
fs.nfs.nsm_use_hostnames = 0
sunrpc.nfs_debug = 0xffff
sunrpc.nfsd_debug = 0x0000
Симптомы следующие:
Это могло бы ls /hdfs
папки с очень небольшим количеством файлов без ошибок, но это не удалось с Input/output error
когда папка, из которой он пытался читать, содержит много файлов (более 100 или около того).
При включении отладочной информации NFS через sudo rpcdebug -m nfs -c all
на машине я заметил следующие журналы ошибок в dmesg
когда я попал в Input/ouput error
через ls
в дальнейшем. Я проверил исходный код Вот, и это похоже на проблему с переполнением буфера. Означает ли это, что это ошибка ядра NFS?
[2538707.003904] NFS: dentry_delete(1232344325/sss.123.txt, 4808cc)
[2538707.003907] NFS: decode_fattr3 prematurely hit the end of our receive buffer. Remaining buffer length is 0 words.
[2538707.003914] NFS: readdir(b200/095900) returns -5
При использовании других ноутбуков или серверов для монтирования шлюза HDFS NFS через sudo mount -t nfs -o vers=3,proto=tcp,nolock,noacl,sync 10.30.200.100:/ /hdfs
, это не проблема. Это означает, что проблема не в самом сервере шлюза NFS. Однако я попытался установить 4.15.0-46-generic
Ядро на моем ноутбуке, но мне не удалось воспроизвести эту проблему.
Эта проблема не воспроизводится постоянно, и иногда она срабатывает во второй или третий раз после того, как шлюз только что смонтирован. Однако частота отказов будет 90% +, поэтому его по-прежнему нельзя использовать.
Пожалуйста, дайте мне знать, есть ли какое-нибудь направление, в котором я мог бы отладить эту странную ситуацию. Заранее спасибо!