Продолжая играть с 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 1at 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-fe2dc951575c2016-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:80202016-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 Datanode2016-07-21 18:58:02,608 INFO org.apache.hadoop.util.ExitUtil: Exiting with status 02016-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
|
$ jps26736 NodeManager26392 DataNode26297 NameNode26635 ResourceManager26510 SecondaryNameNode |
И теперь я могу снова загружать локальные файлы в HDFS. #выиграть!
| Ссылка: | Hadoop: DataNode не начинается с нашего партнера по JCG Марка Нидхэма в блоге Марка Нидхэма . |