Продолжая играть с Mahout, я в конце концов решил отказаться от использования своей локальной файловой системы и использовать вместо этого локальный Hadoop, поскольку при использовании любых примеров это, по-видимому, намного меньше.
К сожалению, все мои попытки загрузить любые файлы из моей локальной файловой системы в HDFS были выполнены со следующим исключением:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
java.io.IOException: File /user/markneedham/book2.txt could only be replicated to 0 nodes, instead of 1 at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java: 1448 ) at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java: 690 ) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 39 ) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 25 ) at java.lang.reflect.Method.invoke(Method.java: 597 ) at org.apache.hadoop.ipc.WritableRpcEngine$Server.call(WritableRpcEngine.java: 342 ) at org.apache.hadoop.ipc.Server$Handler$ 1 .run(Server.java: 1350 ) at org.apache.hadoop.ipc.Server$Handler$ 1 .run(Server.java: 1346 ) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java: 396 ) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java: 742 ) at org.apache.hadoop.ipc.Server$Handler.run(Server.java: 1344 ) at org.apache.hadoop.ipc.Client.call(Client.java: 905 ) at org.apache.hadoop.ipc.WritableRpcEngine$Invoker.invoke(WritableRpcEngine.java: 198 ) at $Proxy0.addBlock(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 39 ) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 25 ) at java.lang.reflect.Method.invoke(Method.java: 597 ) at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java: 82 ) at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java: 59 ) at $Proxy0.addBlock(Unknown Source) at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.locateFollowingBlock(DFSOutputStream.java: 928 ) at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.nextBlockOutputStream(DFSOutputStream.java: 811 ) at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java: 427 ) |
Изучив вывод jps , я в конце концов понял, что DataNode фактически не запускается , что объясняет сообщение об ошибке, которое я видел.
Быстрый просмотр файлов журнала показал, что происходит не так:
/usr/local/Cellar/hadoop/2.7.1/libexec/logs/hadoop-markneedham-datanode-marks-mbp-4.zte.com.cn.log
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
2016 - 07 - 21 18 : 58 : 00 , 496 WARN org.apache.hadoop.hdfs.server.common.Storage: java.io.IOException: Incompatible clusterIDs in /usr/local/Cellar/hadoop/hdfs/tmp/dfs/data: namenode clusterID = CID-c2e0b896-34a6-4dde-b6cd-99f36d613e6a; datanode clusterID = CID-403dde8b-bdc8-41d9-8a30-fe2dc951575c 2016 - 07 - 21 18 : 58 : 00 , 496 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool <registering> (Datanode Uuid unassigned) service to / 0.0 . 0.0 : 8020 . Exiting. java.io.IOException: All specified directories are failed to load. at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java: 477 ) at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java: 1361 ) at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java: 1326 ) at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java: 316 ) at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java: 223 ) at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java: 801 ) at java.lang.Thread.run(Thread.java: 745 ) 2016 - 07 - 21 18 : 58 : 00 , 497 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Ending block pool service for : Block pool <registering> (Datanode Uuid unassigned) service to / 0.0 . 0.0 : 8020 2016 - 07 - 21 18 : 58 : 00 , 602 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Removed Block pool <registering> (Datanode Uuid unassigned) 2016 - 07 - 21 18 : 58 : 02 , 607 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Exiting Datanode 2016 - 07 - 21 18 : 58 : 02 , 608 INFO org.apache.hadoop.util.ExitUtil: Exiting with status 0 2016 - 07 - 21 18 : 58 : 02 , 610 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: SHUTDOWN_MSG: |
Я не уверен, как мои кластерные идентификаторы вышли из синхронизации, хотя я ожидаю, что это потому, что я переформатировал HDFS, не осознавая на некотором этапе Есть и другие способы решения этой проблемы, но самым быстрым для меня было просто уничтожить каталог данных DataNode, который, как сказал мне файл журнала, находится здесь:
1
|
sudo rm -r /usr/local/Cellar/hadoop/hdfs/tmp/dfs/data/current |
Затем я повторно запустил скрипт hstart, который я украл из этого учебника, и все, включая DataNode на этот раз, запустилось правильно:
1
2
3
4
5
6
|
$ jps 26736 NodeManager 26392 DataNode 26297 NameNode 26635 ResourceManager 26510 SecondaryNameNode |
И теперь я могу снова загружать локальные файлы в HDFS. #выиграть!
Ссылка: | Hadoop: DataNode не начинается с нашего партнера по JCG Марка Нидхэма в блоге Марка Нидхэма . |