Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop Spark Streaming:java.io.FileNotFoundException:文件不存在:<;输入文件名>_临摹__Hadoop_Apache Spark_Hdfs_Spark Streaming - Fatal编程技术网

Hadoop Spark Streaming:java.io.FileNotFoundException:文件不存在:<;输入文件名>_临摹_

Hadoop Spark Streaming:java.io.FileNotFoundException:文件不存在:<;输入文件名>_临摹_,hadoop,apache-spark,hdfs,spark-streaming,Hadoop,Apache Spark,Hdfs,Spark Streaming,我正在编写一个spark流应用程序,它从HDFS读取输入。我将spark应用程序提交给Thread,然后运行一个脚本,将数据从本地fs复制到HDFS 但Spark应用程序开始抛出fileNotFoundException。 我相信这是因为spark在将文件完全复制到HDFS之前就已经开始收集文件了 以下是异常跟踪的某些部分: java.io.FileNotFoundException: File does not exist: <filename>._COPYING_

我正在编写一个spark流应用程序,它从HDFS读取输入。我将spark应用程序提交给Thread,然后运行一个脚本,将数据从本地fs复制到HDFS

但Spark应用程序开始抛出fileNotFoundException。 我相信这是因为spark在将文件完全复制到HDFS之前就已经开始收集文件了

以下是异常跟踪的某些部分:

java.io.FileNotFoundException: File does not exist: <filename>._COPYING_
        at org.apache.hadoop.hdfs.server.namenode.INodeFile.valueOf(INodeFile.java:66)
        at org.apache.hadoop.hdfs.server.namenode.INodeFile.valueOf(INodeFile.java:56)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocationsUpdateTimes(FSNamesystem.java:1932)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocationsInt(FSNamesystem.java:1873)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocations(FSNamesystem.java:1853)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocations(FSNamesystem.java:1825)
        at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getBlockLocations(NameNodeRpcServer.java:559)
        at org.apache.hadoop.hdfs.server.namenode.AuthorizationProviderProxyClientProtocol.getBlockLocations(AuthorizationProviderProxyClientProtocol.java:87)
        at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getBlockLocations(ClientNamenodeProtocolServerSideTranslatorPB.java:363)
        at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
        at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:619)
        at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1060)
        at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2044)
        at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2040)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:415)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671)
        at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2038)

        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
        at org.apache.hadoop.ipc.RemoteException.instantiateException(RemoteException.java:106)
        at org.apache.hadoop.ipc.RemoteException.unwrapRemoteException(RemoteException.java:73)
java.io.FileNotFoundException:文件不存在:。\u正在复制_
位于org.apache.hadoop.hdfs.server.namenode.INodeFile.valueOf(INodeFile.java:66)
位于org.apache.hadoop.hdfs.server.namenode.INodeFile.valueOf(INodeFile.java:56)
位于org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocationsUpdateTimes(FSNamesystem.java:1932)
位于org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocationsInt(FSNamesystem.java:1873)
位于org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocations(FSNamesystem.java:1853)
位于org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocations(FSNamesystem.java:1825)
位于org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getBlockLocations(NameNodeRpcServer.java:559)
位于org.apache.hadoop.hdfs.server.namenode.AuthorizationProviderProxyClientProtocol.getBlockLocations(AuthorizationProviderProxyClientProtocol.java:87)
位于org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getBlockLocations(ClientNamenodeProtocolServerSideTranslatorPB.java:363)
位于org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
在org.apache.hadoop.ipc.protobufrpceengine$Server$protobufrpinvoker.call(protobufrpceengine.java:619)上
位于org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1060)
位于org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2044)
位于org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2040)
位于java.security.AccessController.doPrivileged(本机方法)
位于javax.security.auth.Subject.doAs(Subject.java:415)
位于org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671)
位于org.apache.hadoop.ipc.Server$Handler.run(Server.java:2038)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:526)
位于org.apache.hadoop.ipc.RemoteException.instanceeException(RemoteException.java:106)
位于org.apache.hadoop.ipc.RemoteException.unwrapRemoteException(RemoteException.java:73)
有什么建议可以解决这个问题吗


谢谢

您需要将数据生成器文件名设置为当前复制的文件与完全复制的文件不同。然后,您需要在文件数据流上添加过滤器,以仅获取完全复制的文件。例如

正在进行的复制文件前缀\u复制*
完全复制文件前缀数据*

解决方案如下: