2017-02-14 7 views
1

У меня есть версия hasoop версии 2.7.3 с открытым исходным кодом 2.7.3 (2 Masters + 3 Slaves), установленная на экземплярах AWS EC2. Я использую кластер, чтобы интегрировать его с Kafka Connect.Команда HDFS fsck показывает работоспособность как коррумпированную для '/'

Настройка кластера была выполнена в прошлом месяце, и настройка подключения kafka была завершена за две недели. С тех пор мы смогли использовать записи кафки на нашей HDFS и выполнять различные операции.

С прошлым днем ​​я начал становиться ниже ошибки. Когда я скопировать новый файл в кластер из местных, он приходит и получает открыт, но через некоторое время снова начинает показывать подобный IOException:

17/02/14 07:57:55 INFO hdfs.DFSClient: No node available for BP-1831277630-10.16.37.124-1484306078618:blk_1073793876_55013 file=/test/inputdata/derby.log 
17/02/14 07:57:55 INFO hdfs.DFSClient: Could not obtain BP-1831277630-10.16.37.124-1484306078618:blk_1073793876_55013 from any node: java.io.IOException: No live nodes contain block BP-1831277630-10.16.37.124-1484306078618:blk_1073793876_55013 after checking nodes = [], ignoredNodes = null No live nodes contain current block Block locations: Dead nodes: . Will get new block locations from namenode and retry... 
17/02/14 07:57:55 WARN hdfs.DFSClient: DFS chooseDataNode: got # 1 IOException, will wait for 499.3472970548959 msec. 
17/02/14 07:57:55 INFO hdfs.DFSClient: No node available for BP-1831277630-10.16.37.124-1484306078618:blk_1073793876_55013 file=/test/inputdata/derby.log 
17/02/14 07:57:55 INFO hdfs.DFSClient: Could not obtain BP-1831277630-10.16.37.124-1484306078618:blk_1073793876_55013 from any node: java.io.IOException: No live nodes contain block BP-1831277630-10.16.37.124-1484306078618:blk_1073793876_55013 after checking nodes = [], ignoredNodes = null No live nodes contain current block Block locations: Dead nodes: . Will get new block locations from namenode and retry... 
17/02/14 07:57:55 WARN hdfs.DFSClient: DFS chooseDataNode: got # 2 IOException, will wait for 4988.873277172643 msec. 
17/02/14 07:58:00 INFO hdfs.DFSClient: No node available for BP-1831277630-10.16.37.124-1484306078618:blk_1073793876_55013 file=/test/inputdata/derby.log 
17/02/14 07:58:00 INFO hdfs.DFSClient: Could not obtain BP-1831277630-10.16.37.124-1484306078618:blk_1073793876_55013 from any node: java.io.IOException: No live nodes contain block BP-1831277630-10.16.37.124-1484306078618:blk_1073793876_55013 after checking nodes = [], ignoredNodes = null No live nodes contain current block Block locations: Dead nodes: . Will get new block locations from namenode and retry... 
17/02/14 07:58:00 WARN hdfs.DFSClient: DFS chooseDataNode: got # 3 IOException, will wait for 8598.311122824263 msec. 
17/02/14 07:58:09 WARN hdfs.DFSClient: Could not obtain block: BP-1831277630-10.16.37.124-1484306078618:blk_1073793876_55013 file=/test/inputdata/derby.log No live nodes contain current block Block locations: Dead nodes: . Throwing a BlockMissingException 
17/02/14 07:58:09 WARN hdfs.DFSClient: Could not obtain block: BP-1831277630-10.16.37.124-1484306078618:blk_1073793876_55013 file=/test/inputdata/derby.log No live nodes contain current block Block locations: Dead nodes: . Throwing a BlockMissingException 
17/02/14 07:58:09 WARN hdfs.DFSClient: DFS Read 
org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block: BP-1831277630-10.16.37.124-1484306078618:blk_1073793876_55013 file=/test/inputdata/derby.log 
     at org.apache.hadoop.hdfs.DFSInputStream.chooseDataNode(DFSInputStream.java:983) 
     at org.apache.hadoop.hdfs.DFSInputStream.blockSeekTo(DFSInputStream.java:642) 
     at org.apache.hadoop.hdfs.DFSInputStream.readWithStrategy(DFSInputStream.java:882) 
     at org.apache.hadoop.hdfs.DFSInputStream.read(DFSInputStream.java:934) 
     at java.io.DataInputStream.read(DataInputStream.java:100) 
     at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:85) 
     at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:59) 
     at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:119) 
     at org.apache.hadoop.fs.shell.Display$Cat.printToStdout(Display.java:107) 
     at org.apache.hadoop.fs.shell.Display$Cat.processPath(Display.java:102) 
     at org.apache.hadoop.fs.shell.Command.processPaths(Command.java:317) 
     at org.apache.hadoop.fs.shell.Command.processPathArgument(Command.java:289) 
     at org.apache.hadoop.fs.shell.Command.processArgument(Command.java:271) 
     at org.apache.hadoop.fs.shell.Command.processArguments(Command.java:255) 
     at org.apache.hadoop.fs.shell.Command.processRawArguments(Command.java:201) 
     at org.apache.hadoop.fs.shell.Command.run(Command.java:165) 
     at org.apache.hadoop.fs.FsShell.run(FsShell.java:287) 
     at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) 
     at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84) 
     at org.apache.hadoop.fs.FsShell.main(FsShell.java:340) 
cat: Could not obtain block: BP-1831277630-10.16.37.124-1484306078618:blk_1073793876_55013 file=/test/inputdata/derby.log 

Когда я делаю: HDFS FSCK /, я получаю:

Total size: 667782677 B 
Total dirs: 406 
Total files: 44485 
Total symlinks:    0 
Total blocks (validated):  43767 (avg. block size 15257 B) 
    ******************************** 
    UNDER MIN REPL'D BLOCKS:  43766 (99.99772 %) 
    dfs.namenode.replication.min: 1 
    CORRUPT FILES:  43766 
    MISSING BLOCKS:  43766 
    MISSING SIZE:   667781648 B 
    CORRUPT BLOCKS:  43766 
    ******************************** 
Minimally replicated blocks: 1 (0.0022848265 %) 
Over-replicated blocks:  0 (0.0 %) 
Under-replicated blocks:  0 (0.0 %) 
Mis-replicated blocks:   0 (0.0 %) 
Default replication factor: 3 
Average block replication:  6.8544796E-5 
Corrupt blocks:    43766 
Missing replicas:    0 (0.0 %) 
Number of data-nodes:   3 
Number of racks:    1 
FSCK ended at Tue Feb 14 07:59:10 UTC 2017 in 932 milliseconds 


The filesystem under path '/' is CORRUPT 

Это означает, что все мои файлы каким-то образом повреждены.

Я хочу восстановить HDFS и исправить поврежденное состояние здоровья. Кроме того, я хотел бы понять, как возникла такая проблема внезапно и как ее предотвратить в будущем?

+0

Вы изменили свойство 'dfs.datanode.data.dir' на работающем кластере или удалили соответствующий каталог? – franklinsijo

+0

Я изменил значение для dfs.datanode.data.dir только после удаления всех моих блоков. Мой hadoop.tmp.dir установлен в/opt/data, и я изменил свой файл dfs.datanode.data.dir на/opt/data/dfs/data. Но я сделал это только после того, как обнаружил, что мои блоки повреждены. Эта проблема произошла дважды в прошлом месяце, и я хотел бы знать, почему это произошло. – earl

+0

Я нашел в Интернете, что эти свойства: - dfs.datanode.scan.period.hours и dfs.block.scanner.volume.bytes.per.second должны быть изменены, чтобы предотвратить сканирование блоков hdfs. Я установил dfs.datanode.scan.period.hours в -1 и dfs.block.scanner.volume.bytes.per.second в 0, чтобы предотвратить проверку блока hdfs. Но я не уверен, что это поможет мне. Эта ссылка сказала, что по умолчанию dfs.datanode.scan.period.hours устанавливается в 504 часа или 3 недели. Это означает, что после четных 504 часов происходит сканирование блоков hdfs. Я помню, что последний коррумпированный блок был примерно три недели назад. Поэтому я изменил эти значения. – earl

ответ

1

Вся файловая система (43766 блоки), которые помечены как может быть поврежден или из-за удаления dfs.datanode.data.dir папки (ы) полностью или изменяя его значение в hdfs-site.xml. При этом убедитесь, что Namenode также отформатирован и перезапущен.

Если нет, то Namenode по-прежнему хранит информацию о блоке и ожидает, что они будут доступны среди Datanode(s). Сценарий, размещенный в вопросе, аналогичен сценарию.

Невозможно восстановить блоки, если каталоги данных удалены. Если значение dfs.datanode.data.dir изменено в hdfs-site.xml, а Namenode еще не отформатировано, возврат значения в hdfs-site.xml поможет.