org.apache.hadoop.ipc.RemoteException: No lease on /google/public_plus/20181127/23_merged (inode 2683729964): File does not exist. [Lease.  Holder: DFSClient_NONMAPREDUCE_-39928930_1, pending creates: 8]





하둡 소스를 보면, 파일이 없거나 디렉토리이면 위의 에러가 발생한다. lease 이슈는 아니다..




https://github.com/facebookarchive/hadoop-20/blob/master/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java#L3105


private void checkLease(String src, String holder, INode file) 

                                                     throws IOException {


    if (file == null || file.isDirectory()) {

      Lease lease = leaseManager.getLease(holder);

      throw new LeaseExpiredException("No lease on " + src +

                                      " File does not exist. " +

                                      (lease != null ? lease.toString() :

                                       "Holder " + holder + 

                                       " does not have any open files"));

    }




참고로 lease는 write lock과 비슷한 개념이다.


Leases

In HDFS these locks are called Leases. Leases are granted to a client which request to open a file for a write operation (e.g. create / append / truncate a file.) 


https://www.raviprak.com/research/hadoop/leaseManagement.html






사실 생각해보면. 실제로 있어야 하는데 존재했다가 삭제된 것이다. 


이는 병렬 이슈인 것이다.


https://stackoverflow.com/questions/7559880/leaseexpiredexception-no-lease-error-on-hdfs




spark이라면. 다음과 같이 설정을 해서 speculative optimization 알고리즘(병렬)을 끄도록 한다.



sparkConf.set("spark.speculation", "false");

sparkConf.set("spark.hadoop.mapreduce.map.speculative", "false");

sparkConf.set("spark.hadoop.mapreduce.reduce.speculative", "false")



hive라면 다음과 같은 설정을 진행한다. 



set mapreduce.map.speculative=false;

set mapreduce.reduce.speculative=false;

set hive.mapred.reduce.tasks.speculative.execution=false;

Posted by 김용환 '김용환'

댓글을 달아 주세요