[ https://issues.apache.org/jira/browse/HDFS-9617?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15088904#comment-15088904 ]
zuotingbing commented on HDFS-9617: ----------------------------------- Thank you for your reply. my client code : 【main class】 public class HadoopLoader { public HadoopLoader() { } public static void main(String[] args) { HadoopLoader hadoopLoader = new HadoopLoader(); //上传数据 hadoopLoader.upload(); } private void upload() { new UploadProcess().upload(); } ==================================================================================================== public class UploadProcess { private ExecutorService executorService; private Map<String, Boolean> processingFileMap = new ConcurrentHashMap<String, Boolean>(); public void upload() { executorService = Executors.newFixedThreadPool(HadoopLoader.CONFIG_PROPERTIES.getHandleNum()); for (int i = 0; i < 1000; i++) { processLoad("/home/ztb/testdata/43.bmp", "hdfs://10.43.156.157:9000/ztbtest"); } } private void processLoad(String filePathName, String hdfsFilePathName) { LoadThread loadThread = new LoadThread(filePathName, hdfsFilePathName); executorService.execute(loadThread); } } =================================================================================================== public class LoadThread implements Runnable { private static final org.apache.commons.logging.Log LOG = LogFactory.getLog(LoadThread.class); String filePathName; //数据文件完整名称(路径名+文件名) String hdfsFilePathName; //数据文件完整名称(路径名+文件名) public LoadThread(String filePathName, String hdfsFilePathName) { this.filePathName = filePathName; this.hdfsFilePathName = hdfsFilePathName; } public void writeToHdfs(String filePathName, String hdfsFilePathName) throws IOException { LOG.info("Start to upload " + filePathName + " to " + hdfsFilePathName); Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(URI.create(hdfsFilePathName), conf); InputStream in = null; OutputStream out = null; Path hdfsFilePath; try { in = new BufferedInputStream(new FileInputStream(filePathName)); hdfsFilePath = new Path(hdfsFilePathName); out = fs.create(hdfsFilePath); IOUtils.copyBytes(in, out, conf); } finally { if (in != null) { in.close(); } if (out != null) { out.close(); } } LOG.info("Finish uploading " + filePathName + " to " + hdfsFilePathName); } @Override public void run() { try { writeToHdfs(filePathName, hdfsFilePathName); } catch (IOException e) { LOG.error(e.getMessage(), e); } } } i get java_pid8820.hprof when i set -XX:+HeapDumpOnOutOfMemoryError > my java client use muti-thread to put a same file to a same hdfs uri, after > no lease error,then client OutOfMemoryError > ----------------------------------------------------------------------------------------------------------------------- > > Key: HDFS-9617 > URL: https://issues.apache.org/jira/browse/HDFS-9617 > Project: Hadoop HDFS > Issue Type: Bug > Reporter: zuotingbing > > org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException): > No lease on /Tmp2/43.bmp.tmp (inode 2913263): File does not exist. [Lease. > Holder: DFSClient_NONMAPREDUCE_2084151715_1, pendingcreates: 250] > at > org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkLease(FSNamesystem.java:3358) > at > org.apache.hadoop.hdfs.server.namenode.FSNamesystem.analyzeFileState(FSNamesystem.java:3160) > at > org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:3042) > at > org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:615) > at > org.apache.hadoop.hdfs.server.namenode.AuthorizationProviderProxyClientProtocol.addBlock(AuthorizationProviderProxyClientProtocol.java:188) > at > org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.addBlock(ClientNamenodeProtocolServerSideTranslatorPB.java:476) > at > org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java) > at > org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:587) > at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1026) > at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2013) > at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2009) > 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:1653) > at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2007) > at org.apache.hadoop.ipc.Client.call(Client.java:1411) > at org.apache.hadoop.ipc.Client.call(Client.java:1364) > at > org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:206) > at com.sun.proxy.$Proxy14.addBlock(Unknown Source) > at > org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.addBlock(ClientNamenodeProtocolTranslatorPB.java:391) > at sun.reflect.GeneratedMethodAccessor66.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:187) > at > org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102) > at com.sun.proxy.$Proxy15.addBlock(Unknown Source) > at > org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.locateFollowingBlock(DFSOutputStream.java:1473) > at > org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.nextBlockOutputStream(DFSOutputStream.java:1290) > at > org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:536) > my java client(JVM -Xmx=2G) : > jmap TOP15: > num #instances #bytes class name > ---------------------------------------------- > 1: 48072 2053976792 [B > 2: 45852 5987568 <constMethodKlass> > 3: 45852 5878944 <methodKlass> > 4: 3363 4193112 <constantPoolKlass> > 5: 3363 2548168 <instanceKlassKlass> > 6: 2733 2299008 <constantPoolCacheKlass> > 7: 533 2191696 [Ljava.nio.ByteBuffer; > 8: 24733 2026600 [C > 9: 31287 2002368 > org.apache.hadoop.hdfs.DFSOutputStream$Packet > 10: 31972 767328 java.util.LinkedList$Node > 11: 22845 548280 java.lang.String > 12: 20372 488928 java.util.concurrent.atomic.AtomicLong > 13: 3700 452984 java.lang.Class > 14: 981 439576 <methodDataKlass> > 15: 5583 376344 [S -- This message was sent by Atlassian JIRA (v6.3.4#6332)