Hadoop2.2.0 HDFS暂时不支持并发追加

2022-06-29 20:52:02 浏览数 (1)

由多个客户端对同一个文件发起并发追加操作后,只有最后发起的那个客户端抢得追加的锁,其他客户端报错:

        at org.apache.Hadoop.hdfs.server.namenode.FSNamesystem.appendFile(FSNamesystem.java:2347)         at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.append(NameNodeRpcServer.java:508)         at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.append(ClientNamenodeProtocolServerSideTranslatorPB.java:320)         at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java:59572)         at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:585)         at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:928)         at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2048)         at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2044)         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:1491)         at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2042)         at org.apache.hadoop.ipc.Client.call(Client.java:1347)         at org.apache.hadoop.ipc.Client.call(Client.java:1300)         at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:206)         at com.sun.proxy.$Proxy9.append(Unknown Source)         at sun.reflect.GeneratedMethodAccessor10.invoke(Unknown Source)         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)         at java.lang.reflect.Method.invoke(Method.java:606)         at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:186)         at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102)         at com.sun.proxy.$Proxy9.append(Unknown Source)         at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.append(ClientNamenodeProtocolTranslatorPB.java:245)         at org.apache.hadoop.hdfs.DFSClient.callAppend(DFSClient.java:1480)         at org.apache.hadoop.hdfs.DFSClient.append(DFSClient.java:1520)         at org.apache.hadoop.hdfs.DFSClient.append(DFSClient.java:1508)         at org.apache.hadoop.hdfs.DistributedFileSystem$4.doCall(DistributedFileSystem.java:310)         at org.apache.hadoop.hdfs.DistributedFileSystem$4.doCall(DistributedFileSystem.java:306)         at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)         at org.apache.hadoop.hdfs.DistributedFileSystem.append(DistributedFileSystem.java:306)         at org.apache.hadoop.fs.FileSystem.append(FileSystem.java:1160)         at com.goojje.cart.etl.CartCommon.write(CartCommon.java:84)         at com.goojje.cart.CartClientMain.pushData(CartClientMain.java:63)         at com.goojje.cart.CartClientMain.main(CartClientMain.java:29) org.apache.hadoop.ipc.RemoteException(java.io.IOException): java.lang.NullPointerException         at com.goojje.cart.index.CartIndexer.buildIndex(CartIndexer.java:49)         at com.goojje.cart.ipc.server.CartProtocolImpl.saveIndex(CartProtocolImpl.java:49)         at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)         at java.lang.reflect.Method.invoke(Method.java:606)         at org.apache.hadoop.ipc.WritableRpcEngine$Server$WritableRpcInvoker.call(WritableRpcEngine.java:481)         at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:928)         at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2048)         at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2044)         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:1491)         at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2042)         at org.apache.hadoop.ipc.Client.call(Client.java:1347)         at org.apache.hadoop.ipc.Client.call(Client.java:1300)         at org.apache.hadoop.ipc.WritableRpcEngine$Invoker.invoke(WritableRpcEngine.java:231)         at com.sun.proxy.$Proxy10.saveIndex(Unknown Source)         at com.goojje.cart.CartClientMain.pushData(CartClientMain.java:64)         at com.goojje.cart.CartClientMain.main(CartClientMain.java:29)

分析可知,当前Hadoop并不支持并发写操作。下面链接是对这个问题的理论诠释:http://www.linuxidc.com/Linux/2014-01/95941.htm

0 人点赞