2012-01-25 2 views
2

GenericOptionsParser를 통해 여러 개의 구성 매개 변수를 Hadoop 작업에 전달하려고합니다.GenericOptionsParser에서 -D 옵션을 사용하여 여러 일반 인수를 설정할 수 있습니까?

"-D abc = xyz"를 사용하면 하나의 인수를 전달할 수 있으며 구성 객체에서 동일한 인수를 검색 할 수 있지만 다중 인수를 전달할 수는 없습니다.

여러 인수를 전달할 수 있습니까? 그렇다면 어떻게해야합니까?

답변

0

여러 매개 변수를 전달하는 테스트를 거쳤으며 -D 플래그를 여러 번 사용했습니다.

$ HADOOP_HOME/빈/하둡 항아리 /path/to/my.jar -D mapred.heartbeats.in.second = 80 -D mapred.map.max.attempts = 2 ...`

이렇게하면 작업 구성에서 지정한 값으로 변경됩니다. -D color=yellow -D number=10

+4

사실 그것은 다른 방법입니다. [Hadoop - The Definitive Guide] (http://shop.oreilly.com/product/0636920010388.do) -'-D property = value 옵션을 사용하여 Hadoop 속성을 GenericOptionsParser (및 ToolRunner)에 설정하는 것을 혼동하지 마십시오. java 명령에 -Dproperty = value 옵션을 사용하여 JVM 시스템 특성을 설정하십시오. JVM 시스템 속성의 구문은 D와 속성 이름 사이에 공백을 허용하지 않지만 GenericOptionsParser는 공백으로 구분해야합니다. ' –

+0

@PraveenSripati : 내 대답이 잘못되지 않도록 업데이트했습니다. :) – Nija

4

전달 된 매개 변수 내가 최근에 실행

color = yellow 
number = 10 
+0

이 경우 나는 색깔 = 노란 숫자 = null – samarth

+0

당신은 뭔가를 놓친 것일 수도 있습니다 - 니자도 다른 대답에서 언급 한 것처럼 그것을 할 수 있습니다. –

1

String color = getConf().get("color"); 
System.out.println("color = " + color); 

String number = getConf().get("number"); 
System.out.println("number = " + number); 

다음은 콘솔의 오/피이었다 run() 메소드에 다음 코드를했다 Hadoop 1.2.1에서 Hadoop 2.4.1로 업그레이드 한 후이 문제를 해결합니다. 문제는 Hadoop의 commons-cli 1.2에 대한 의존성이 Cassandra 2.0.5에서 가져온 commons-cli 1.1과의 충돌 때문에 생략되었습니다.

소스 코드를 살펴본 후 초기화되지 않은 값 (Hadoop의 GenericOptionsParser가하는 것)의 기본값 인 commons-cli 옵션은 기본적으로 버전 1.1에서는 1로 제한되고 1.2에서는 제한이 없습니다.

도움이 되었기를 바랍니다.

관련 문제