2017-07-11 5 views
0

ローカルマシン上でハープシングルノードクラスタを起動しようとしています。私はhttps://amodernstory.com/2014/09/23/installing-hadoop-on-mac-osx-yosemite/に従ってhadoop-env.sh、core-site.xml、mapred-site.xml、hdfs-site.xmlというファイルを設定しました。私は、スクリプトstart-dfs.sh、その後(右start-dfs.shを実行した後に)コマンドjpsを実行すると、私はデータノードが稼働していることを参照してください。ファイルをHDFSにコピーするには?

15735 Jps 
15548 DataNode 
15660 SecondaryNameNode 
15453 NameNode 

数秒後、私はコマンドjpsを再実行して、私がいることがわかりデータノードが実行されていません。どうして?これを解決するには?

その後、私はスクリプトstart-yarn.shを実行してから、コマンドjpsを実行します。私はこれを参照してください:

15955 NodeManager 
16011 Jps 
15660 SecondaryNameNode 
15453 NameNode 
15854 ResourceManager 

究極の目的は私のローカルファイルシステムからHDFSにファイルをコピーすることです。そのために、私はhdfs dfs -copyFromLocal /source-file-path/filename /destination-file-path/というコマンドを実行します。次のエラーが表示されます。

17/07/10 17:09:00 WARN hdfs.DataStreamer: DataStreamer Exception 
org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /pay/txnlinking/redshift.yml._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1). There are 0 datanode(s) running and no 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) 
    at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.addBlock(ClientNamenodeProtocolServerSideTranslatorPB.java:506) 
    at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java) 
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:447) 
    at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:989) 
    at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:845) 
    at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:788) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:422) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1807) 
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2455) 

    at org.apache.hadoop.ipc.Client.getRpcResponse(Client.java:1481) 
    at org.apache.hadoop.ipc.Client.call(Client.java:1427) 
    at org.apache.hadoop.ipc.Client.call(Client.java:1337) 
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:227) 
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:116) 
    at com.sun.proxy.$Proxy10.addBlock(Unknown Source) 
    at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.addBlock(ClientNamenodeProtocolTranslatorPB.java:440) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:398) 
    at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invokeMethod(RetryInvocationHandler.java:163) 
    at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invoke(RetryInvocationHandler.java:155) 
    at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invokeOnce(RetryInvocationHandler.java:95) 
    at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:335) 
    at com.sun.proxy.$Proxy11.addBlock(Unknown Source) 
    at org.apache.hadoop.hdfs.DataStreamer.locateFollowingBlock(DataStreamer.java:1733) 
    at org.apache.hadoop.hdfs.DataStreamer.nextBlockOutputStream(DataStreamer.java:1536) 
    at org.apache.hadoop.hdfs.DataStreamer.run(DataStreamer.java:658) 
copyFromLocal: File /pay/txnlinking/redshift.yml._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1). There are 0 datanode(s) running and no node(s) are excluded in this operation. 

上記のエラーを回避してファイルをHDFSにコピーする方法を教えてください。

P.S:コピーを実行する前に、コピー先のパスフォルダをHDFSに明示的に作成しました。

+0

データノードのログを確認しましたか? – Serhiy

+0

このエラーは 'ファイルは0ノードにしか複製できません 'ということです。つまり、実行中のデータノードがなく、hdfsが正しく起動していないことを意味します。 configsやネットワークトポロジに問題がある可能性があります(例:namenodeはデータノードに接続できません)。まずログを確認してください。 – maxteneff

答えて

1

まず、core-site.xmlで指定したhadoop.tmp.dirフォルダーの内容を削除します。次に、hdfs namenode -formatを使用してnamenode形式を実行します。あなたのデータノードが正常に稼動していなければ、すべてのコピー操作が正常に実行されます。

+0

デフォルトのhadoopディレクトリがtmpになっているので、そうでなければ変更する必要があります。再起動するたびにhdfsが失われます。 – VIPER

+0

再起動するたびにHDFSでファイルを失うためです。私は盲目的に私の質問で共有した記事で指定されたconfigsを使用しました。しかし、今私は[この回答](https://stackoverflow.com/a/28379125/2531472)に従って、これが起こらないようにしました。 –

1

その後、
hadoop namenode -format 

が使用することを推奨されていません

start-all.sh 

start-all.shとstop-all.shを使用してすべてのサービスを再起動し

stop-all.sh 

を使用してすべてのサービスを停止しています代わりにstart-dfs.shとstop-dfs.sh

+0

残念ながら、namenodeをフォーマットするだけではうまくいきませんでした。私はこの問題を解決することができました。この質問に対する私の答えを見てください。おかげでたくさん:) –

関連する問題