복붙노트

[HADOOP] Hadoop에서 사용자 정의 구성 값 전파

HADOOP

Hadoop에서 사용자 정의 구성 값 전파

Map / Reduce 중에 Hadoop에서 사용자 정의 구성 객체를 설정하고 (나중에) 얻을 수있는 방법이 있습니까?

예를 들어, 큰 파일을 사전 처리하고 파일과 관련된 일부 특성을 동적으로 판별하는 응용 프로그램을 가정하십시오. 또한 이러한 특성은 사용자 정의 Java 객체 (예 : Properties 객체, 일부는 문자열이 아니기 때문에 독점적이지는 않음)에 저장되고 이후에 각 맵 및 축소 작업에 필요하다고 가정합니다.

애플리케이션이이 구성을 "전파"하여 각 매퍼 및 감속기 기능이 필요할 때 어떻게 액세스 할 수 있습니까?

한 가지 방법은 JobConf 클래스의 set (String, String) 메서드를 사용하는 것입니다. 예를 들어 두 번째 매개 변수를 통해 JSON 문자열로 직렬화 된 구성 객체를 전달할 수 있지만 너무 많이 해킹 된 다음 적절할 수 있습니다 어쨌든 JobConf 인스턴스는 각 매퍼와 감속기에 의해 액세스되어야합니다 (예 : 이전 질문에서 제안 된 것과 같은 방식).

해결법

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

    1.무언가를 놓치지 않는 한, M / R 작업에 필요한 모든 속성을 포함하는 Properties 개체가있는 경우 Properties 개체의 내용을 Hadoop Configuration 개체에 작성하기 만하면됩니다. 예를 들면 다음과 같습니다.

    무언가를 놓치지 않는 한, M / R 작업에 필요한 모든 속성을 포함하는 Properties 개체가있는 경우 Properties 개체의 내용을 Hadoop Configuration 개체에 작성하기 만하면됩니다. 예를 들면 다음과 같습니다.

    Configuration conf = new Configuration();
    Properties params = getParameters(); // do whatever you need here to create your object
    for (Entry<Object, Object> entry : params.entrySet()) {
        String propName = (String)entry.getKey();
        String propValue = (String)entry.getValue();
        conf.set(propName, propValue);
    }
    

    그런 다음 M / R 작업 내에서 Context 객체를 사용하여 맵퍼 (맵 함수) 또는 감속기 (reduce 함수)에서 구성을 다시 가져올 수 있습니다.

    public void map(MD5Hash key, OverlapDataWritable value, Context context)
        Configuration conf = context.getConfiguration();
        String someProperty = conf.get("something");
        ....
    }
    

    Configuration 객체를 사용할 때 필요한 경우 초기화를 수행하는 데 유용한 설정 및 정리 메소드에서 컨텍스트에 액세스 할 수도 있습니다.

    또한 아마도 직접 InputStream이나 파일로 속성을 추가하기 위해 Configuration 객체의 addResource 메소드를 직접 호출 할 수 있다고 언급 할 가치가 있습니다. 그러나 이것이 일반 Hadoop XML configs와 같은 XML 구성이어야한다고 생각합니다. 과잉.

    편집 : 문자열이 아닌 개체의 경우 직렬화를 사용하여 조언 것입니다 : 개체를 serialize 할 수 및 Strings (아마도 예를 들어 Base64 함께 인코딩 할 때 나는 당신이 비정상적인 문자가 있으면 어떻게 될지 잘 모르겠습니다 ) 그리고 mapper / reducer 측에서 Configuration 내부의 속성에서 가져온 문자열에서 객체를 역 직렬화합니다.

    또 다른 방법은 동일한 직렬화 기술을 사용하는 것이지만 대신 HDFS에 쓰고이 파일을 DistributedCache에 추가하는 것입니다. 조금 지나치게 들리지만 이것은 아마도 효과가있을 것입니다.

  2. from https://stackoverflow.com/questions/14971825/propagating-custom-configuration-values-in-hadoop by cc-by-sa and MIT license