2012-03-24 3 views
0

나는 Hadoop MapReduce에 대한 상대적으로 초보자입니다. WordCount 샘플 변형본을 http://archive.cloudera.com/cdh/3/hadoop/mapred_tutorial.html에 시도했습니다. 내 소스 파일에 추가 열이 있으며 합계가 발생해야하는 열을 지정할 수 있기를 원합니다.Hadoop MapReduce Configuration 객체를 사용하여 맞춤 매개 변수를 전달하려면 어떻게해야합니까?

run (...) 메소드 (87 행부터 116 행)에는 명령 행에서 전달 된 인수가 있습니다. 구분 기호가있는 인수와 필터링을 수행 할 열 위치가있는 인수가 두 가지 추가 인수가 있습니다. 나는 구성 (샘플의 28 행) 방식으로이 값을 가져올 때

내가

if (args.length == 5) { 
     conf.set("ipPosition", args[4]); 
    } 
    if (args.length == 6) { 
     conf.set("delimiter", args[5]); 
    } 

이러한 값을 설정하고는 그러나, 그들은 null을 반환한다.

public void configure(JobConf job) { 
     try { 
      String varIpPosition = job.get("ipPosition"); 
      if (varIpPosition != null) { 
       ipPosition = Integer.parseInt(varIpPosition); 
      } 
      String varDelimiter = job.get("delimiter"); 
      if (varDelimiter != null) { 
       if (varDelimiter == "comma") { 
        lineDelimiter = ","; 
       } else { 
        lineDelimiter = " "; 
       } 
      } 
      System.err.println("IP Position" + ipPosition); 
     } catch (Exception ex) { 
      System.err.println("Error Configuring Job :" 
        + job.get("ipPosition") + " - " 
        + StringUtils.stringifyException(ex)); 
     } 
    } 

구성 매개 변수를 잘못 설정했거나 잘못 검색합니까? 어떤 도움을 주셔서 감사합니다.

+1

그래, 그건 내 잘못이다. If 조건이 모두 아래에 해당한다고 어떻게 기대합니까? if (args.length == 5) { conf.set ("ipPosition", args [4]); } if (args.length == 6) { conf.set ("delimiter", args [5]); } 금요일 저녁 코딩은 분명히 나쁜 아이디어입니다. 조건을 수정 한 후 코드는 훌륭하게 작동합니다. 문제가있는 사람들에게 불편을 끼쳐 드려 죄송합니다. – sumitkm

답변

0

위의 설명에서 언급 한 바와 같습니다. 그것은 '코드 오류'였습니다. API에 문제가 없습니다. if 조건은

if (args.length >= 5) { 
    conf.set("ipPosition", args[4]); 
} 
if (args.length >= 6) { 
    conf.set("delimiter", args[5]); 
} 

입니다. 감사합니다.

관련 문제