2017-07-11 85 views
0

我想在本地机器上启动一个hadoop单节点集群。我已根据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然后在命令jps我看到数据管理部已经启动并运行(运行start-dfs.sh后右):如何将文件复制到HDFS?

15735 Jps 
15548 DataNode 
15660 SecondaryNameNode 
15453 NameNode 

几秒钟后,我重新运行该命令jps,我看到datanode没有运行。为什么?如何解决这个问题?

之后,我运行脚本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

您是否检查过datanode日志? – Serhiy

+0

这个错误告诉你'文件只能被复制到0节点,这意味着你没有运行datanode,hdfs没有正确启动。配置或网络拓扑可能有问题(例如,namenode无法连接datanode)。首先检查日志。 – maxteneff

回答

1

首先删除您在core-site.xml中指定的hadoop.tmp.dir文件夹的内容。然后使用hdfs namenode -format做一个namenode格式。您的datanode应该正常启动并且正常运行,之后所有的复制操作都将成功执行。

+0

是你在tmp中默认的hadoop目录,如果你应该改变它,否则你每次重启时都会丢失hdfs – VIPER

+0

我认为这是因为我每次重启时都会丢失HDFS中的文件。我盲目地使用了我在我的问题中共享的文章中指定的配置。但是现在我遵循[这个答案](https://stackoverflow.com/a/28379125/2531472)来避免这种情况发生。 –

1

hadoop namenode -format 

然后使用

stop-all.sh 

然后停止所有服务使用

start-all.sh 

start-all.sh和stop-all.sh已废弃使用重新启动所有服务start-dfs.sh和stop-dfs.sh代替

+0

不幸的是,只是格式化namenode并没有完全解决。我能解决这个问题。看到我对这个问题的回答。非常感谢:) –

相关问题