복붙노트

[HADOOP] hadoop의 전역 변수

HADOOP

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 실행 중에 / 수정 된 전역 변수입니다.

해결법

  1. ==============================

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

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

    일반적으로 실행중인 노드간에 상태가 공유되는 두 가지 주요 방법이 있습니다 (공유 상태는 확장 성을 제한하기 때문에 최대한 피할 수 있습니다).

  2. ==============================

    2.Configuration.set (문자열 이름, 문자열 값)을 사용하여 Mappers / Reducers / etc에서 액세스 할 수있는 값을 설정할 수 있습니다.

    Configuration.set (문자열 이름, 문자열 값)을 사용하여 Mappers / Reducers / etc에서 액세스 할 수있는 값을 설정할 수 있습니다.

    운전 기사 :

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

    예 : 귀하의 매퍼에서 :

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

    그러나이 방법을 사용하면 이전 작업의 결과를보고 반복을 다시 시작할지 여부를 결정하는 데 도움이되지 않습니다. 나. 이 값은 작업 실행 후에 다시 푸시되지 않습니다.

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

    물론 이러한 목적으로 카운터를 사용할 수도 있습니다. 그러나 알고리즘에서 의사 결정을하기에는 너무 안정적이지 않습니다. 어떤 경우에는 두 번 증가 할 수있는 것처럼 보입니다 (실패 또는 추측 실행의 경우와 같이 특정 태스크가 두 번 이상 실행 된 경우) - 확실하지 않습니다.

  3. ==============================

    3.이것이 Hadoop 2.0에서 작동하는 방식입니다.

    이것이 Hadoop 2.0에서 작동하는 방식입니다.

    운전 기사 :

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

    그리고 귀하의 매퍼 :

    protected void setup(Context context) throws IOException,
                InterruptedException {
            Configuration conf = context.getConfiguration();
    
            strProp = conf.get("my.dijkstra.parameter");
            // and then you can use it
        }
    
  4. ==============================

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

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

  5. from https://stackoverflow.com/questions/2888788/global-variables-in-hadoop by cc-by-sa and MIT license