关于HDFS中的append并发问题
我对于append了解也不深,望明白的人解释一下对于同一个文件多个client是否能够并发的append吗?如果可以的话,会不会造成频繁的向NameNode汇报状态,给NameNode造成压力吗?
并发的append是否会造成有的client等待的时间比较的长吗?
我看好多说法是说不能并发的写入,那么HBase又是如何实现的呢吗? 补充一下,有没有人做过相应的测试呢吗?
补充一个地址吧,里面有一些说明
http://graal.ens-lyon.fr/~gfedak/mapreduce.old/slides/mrs7.pdf hbase中不是并发的append,并发的append也容易顺序混乱(SEQ文件的自带append其实是写文件流未关闭的情况间断写)。HDFS的append功能很多,已经废弃 又废弃了哇!!!
我找了很多资料,没有看到废弃这一说呀,能不能给个资料,我翻阅一下
单个client进行append是没有
但是并发的append,确实出现,
org.apache.hadoop.ipc.RemoteException: org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException: failed to create file /user/rollinkin_append/access.txt for DFSClient_-1872856792 on client 192.168.1.120, because this file is already being created by NN_Recovery on 192.168.1.120
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.recoverLeaseInternal(FSNamesystem.java:1406)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileInternal(FSNamesystem.java:1246)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.appendFile(FSNamesystem.java:1426)
at org.apache.hadoop.hdfs.server.namenode.NameNode.append(NameNode.java:643)
at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:563)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1388)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1384)
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:1121)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1382)
at org.apache.hadoop.ipc.Client.call(Client.java:1070)
at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:226)
at $Proxy5.append(Unknown Source)
at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
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 $Proxy5.append(Unknown Source)
at org.apache.hadoop.hdfs.DFSClient.append(DFSClient.java:762)
at org.apache.hadoop.hdfs.DFSClient.append(DFSClient.java:751)
at org.apache.hadoop.hdfs.DistributedFileSystem.append(DistributedFileSystem.java:173)
at org.apache.hadoop.fs.FileSystem.append(FileSystem.java:650)
at org.rollinkin.hadoop.hdfs.HdfsAppendTest$AppendThread.run(HdfsAppendTest.java:71)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662) hbase中是不用这个appen的,参见我刚才的描述,hbase中的append是一个完整的未关闭的流的间断写入,与你想描述的append是无关的。 HDFS的文件append操作不支持并发,只能同时被一个client操作
页:
[1]