2010-05-22 3 views
10

내 프로그램은 반복적 인 맵/축소 접근법을 따릅니다. 그리고 특정 조건이 충족되면 중지해야합니다. 어쨌든 모든 맵/리사이저 작업에 배포 할 수있는 전역 변수를 설정하고 전역 변수가 완료 조건에 도달했는지 확인하십시오.hadoop의 전역 변수

이와 비슷한 것.

While(Condition != true){ 

      Configuration conf = getConf(); 
      Job job = new Job(conf, "Dijkstra Graph Search"); 

      job.setJarByClass(GraphSearch.class); 
      job.setMapperClass(DijkstraMap.class); 
      job.setReducerClass(DijkstraReduce.class); 

      job.setOutputKeyClass(IntWritable.class); 
      job.setOutputValueClass(Text.class); 

} 

여기서 condition은 각 map/reduce 실행 중에/변경된 전역 변수입니다.

답변

5

map-reduce 작업을 실행할 때마다 출력의 상태와 카운터에 포함 된 값 등을 검사 할 수 있습니다. 반복을 제어하고있는 노드에서 하나 이상의 명령을 내릴 수 있습니다 반복 또는 아닙니다. 나는 당신이 시나리오에서 글로벌 상태에 대한 필요성이 어디서 왔는지 이해하지 못한다고 생각합니다.

더 일반적으로 - 공유 노드가 일 때 확장 성을 제한하기 때문에을 피하는 것이 가장 좋습니다.하지만 상태를 실행하는 노드간에 공유되는 주된 두 가지 방법이 있습니다.

  1. 는 다른 노드가 읽기 (작업 종료, 그리고 투기 실행이 이상한 오류가 발생하지 않습니다 때 파일이 정리됩니다 있는지 확인) 할 수 HDFS에 파일을 작성합니다.
  2. 전용 ZK 트리 노드에 일부 데이터를 저장하려면 ZooKeeper를 사용하십시오.
+0

당신이 카운터를 사용하는 방법에 대한 좀 더 설명해 주 시겠어요 :

conf.set("my.dijkstra.parameter", "value"); 

그리고 당신의 매퍼에

? 감사. – Deepak

+1

간단한 소개를 위해 시도해보십시오. http://philippeadjiman.com/blog/2010/01/07/hadoop-tutorial-series-issue-3-counters-in-action/ – SquareCog

0

Cascading을 사용하면 여러 개의 Hadoop 작업을 구성 할 수 있습니다. 전역 상태 변수를 유지하고 더미 내용으로 초기화하려는 HDFS 경로를 지정하십시오. 반복 할 때마다이 HDFS 경로의 현재 내용을 읽고, 그 내용을 삭제하고, 여러 단계의 맵/축소 단계를 수행하고 마지막으로 전역 상태 변수를 업데이트하는 전역 축소 작업을 수행합니다. 작업의 성격에 따라 추측 실행을 비활성화하고 많은 재 시도를 허용해야 할 수도 있습니다.

6

당신은 당신의 매퍼에 액세스 할 수 있습니다 값을 설정 Configuration.set (문자열 이름, 문자열 값)을 사용할 수 있습니다/기어/등 :

conf.set("my.dijkstra.parameter", "value"); 
: 드라이버에서

public void configure(JobConf job) { 
     myParam = job.get("my.dijkstra.parameter"); 
    } 

하지만 이전 작업의 출력에 볼이하지 않습니다 가능성이 도움을 한 번 더 반복을 시작할지 여부를 결정하기 : 당신의 매퍼한다. 나는. 이 값은 작업 실행 후에 다시 푸시되지 않습니다.

또한 Hadoop의 DistributedCache을 사용하여 모든 노드에 배포 할 파일을 저장할 수 있습니다. 이런 방식으로 전달하려는 가치가 작은 것이면 단순히 HDFS에 무엇인가를 저장하는 것보다 조금 낫습니다.

물론 counters도이 목적으로 사용할 수 있습니다. 그러나 알고리즘에서 의사 결정을 내리는 데 너무 안정적이지 않습니다. 어떤 경우에는 두 번 증가 할 수 있습니다 (실패 또는 추측 실행의 경우와 같이 일부 작업이 한 번 이상 실행 된 경우) - 확실하지 않습니다.

+0

정확하게 (내) 질문에 대한 답변입니다. 고마워요! – Malcolm

3

이것이 Hadoop 2에서 작동하는 방식입니다.드라이버 0

:

protected void setup(Context context) throws IOException, 
      InterruptedException { 
     Configuration conf = context.getConfiguration(); 

     strProp = conf.get("my.dijkstra.parameter"); 
     // and then you can use it 
    }