HDFS запись из кафки: исключение createBlockOutputStream - PullRequest
0 голосов
/ 23 мая 2018

Я использую Hadoop из Docker Swarm с 1 наменодом и 3 датододами (на 3 физических машинах).Я также использую соединитель kafka и kafka connect + hdfs для записи сообщений в HDFS в формате паркета.

Я могу записывать данные в HDFS с помощью клиентов HDFS (hdfs put).Но когда Кафка пишет сообщения, она работает в самом начале, а затем, если происходит сбой с этой ошибкой:

org.apache.hadoop.net.ConnectTimeoutException: 60000 millis timeout while waiting for channel to be ready for connect. ch : java.nio.channels.SocketChannel[connection-pending remote=/10.0.0.8:50010]
    at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:534)
    at org.apache.hadoop.hdfs.DFSOutputStream.createSocketForPipeline(DFSOutputStream.java:1533)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.createBlockOutputStream(DFSOutputStream.java:1309)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.nextBlockOutputStream(DFSOutputStream.java:1262)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:448)
[2018-05-23 10:30:10,125] INFO Abandoning BP-468254989-172.17.0.2-1527063205150:blk_1073741825_1001 (org.apache.hadoop.hdfs.DFSClient:1265)
[2018-05-23 10:30:10,148] INFO Excluding datanode DatanodeInfoWithStorage[10.0.0.8:50010,DS-cd1c0b17-bebb-4379-a5e8-5de7ff7a7064,DISK] (org.apache.hadoop.hdfs.DFSClient:1269)
[2018-05-23 10:31:10,203] INFO Exception in createBlockOutputStream (org.apache.hadoop.hdfs.DFSClient:1368)
org.apache.hadoop.net.ConnectTimeoutException: 60000 millis timeout while waiting for channel to be ready for connect. ch : java.nio.channels.SocketChannel[connection-pending remote=/10.0.0.9:50010]
        at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:534)
        at org.apache.hadoop.hdfs.DFSOutputStream.createSocketForPipeline(DFSOutputStream.java:1533)
        at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.createBlockOutputStream(DFSOutputStream.java:1309)
        at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.nextBlockOutputStream(DFSOutputStream.java:1262)
        at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:448)

И тогда датододы больше не доступны для процесса:

[2018-05-23 10:32:10,316] WARN DataStreamer Exception (org.apache.hadoop.hdfs.DFSClient:557)
org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /topics/+tmp/test_hdfs/year=2018/month=05/day=23/hour=08/60e75c4c-9129-454f-aa87-6c3461b54445_tmp.parquet could only be replicated to 0 nodes instead of minReplication (=1).  There are 3 datanode(s) running and 3 node(s) are excluded in this operation.
        at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget4NewBlock(BlockManager.java:1733)
        at org.apache.hadoop.hdfs.server.namenode.FSDirWriteFileOp.chooseTargetForNewBlock(FSDirWriteFileOp.java:265)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:2496)
        at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:828)

Но если я загляну в консоль администрирования hadoop, все узлы, кажется, работают и все в порядке.

Я проверил hdfs-site и настройку "dfs.client.use.datanode.hostname"устанавливается в true как для namenode, так и для datanodes.Все ips в файлах конфигурации hadoop определены с использованием адресов 0.0.0.0.

Я тоже пытался отформатировать namenode, но ошибка повторилась.

Возможно, проблема в том, что Kafka пишетслишком быстро в HDFS, так что это ошеломляет?Это было бы странно, поскольку я пробовал ту же конфигурацию на меньшем кластере, и она работала хорошо даже при большой пропускной способности сообщений kafka.

Есть ли у вас какие-либо другие идеи о происхождении этой проблемы?

Спасибо

1 Ответ

0 голосов
/ 01 февраля 2019

dfs.client.use.datanode.hostname=true должен быть настроен также на стороне клиента и, следуя вашему стеку журнала:

java.nio.channels.SocketChannel [ожидающий подключения удаленный = / 10.0.0.9: 50010]

Полагаю, 10.0.0.9 относится к частному сетевому IP;таким образом, кажется, что свойство не установлено в вашем клиенте в пределах hdfs-client.xml .

Более подробную информацию можно найти здесь .

...