ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Hadoop] MapReduce Configuration 알아보기
    Hadoop 2024. 2. 3. 11:32
    728x90
    반응형

    - 목차

     

    들어가며.

    이번 글에서는 Configuration File 을 JVM 데이터로 Deserialization 하는 내용에 대해서 다루어보려고 합니다.

    여타 Java Application 은 Resources 하위의 Configuration 파일 내용을 Application 내부에서 사용하곤 합니다.

    Hadoop 의 MapReduce 에서 org.apache.hadoop.conf.Configuration 의 여러 사용법에 대해서 다루어보도록 하겠습니다.

     

    Deserialize Configuration.

    먼저 configuration.xml 파일을 작성해보겠습니다.

    User 데이터를 표현하는 XML 을 구성하였구요.

    name, age, gender, full-desc 4개의 key-value 로 구성됩니다.

    마지막 속성인 full-desc 는 name, age, gender 의 값들을 동적인 조합하는 변수 속성을 사용하였습니다.

     

    <test_configuration.xml>

    <?xml version="1.0"?>
    <configuration>
        <property>
            <name>name</name>
            <value>andy</value>
            <description>Name</description>
        </property>
        <property>
            <name>age</name>
            <value>10</value>
            <description>Age</description>
        </property>
        <property>
            <name>gender</name>
            <value>Male</value>
            <final>true</final>
            <description>Gender</description>
        </property>
        <property>
            <name>full-desc</name>
            <value>${name}-${age}-${gender}</value>
            <description>User's full description</description>
        </property>
    </configuration>

     

     

    Hadoop Configuration 클래스는 addResource 메소드를 통해서 XML 을 Deserialization 합니다.

    그리고 Configuration 인스턴스를 생성하죠.

    특히 주목할 점은 full-desc 에 해당하는 속성은 다른 속성값들의 조합으로 동적으로 생성됩니다.

     

    package com.westlife.mapreduce;
    
    import org.apache.hadoop.conf.Configuration;
    
    public class TestConfiguration {
      public static void main (String[] args) {
        Configuration configuration = new Configuration();
        configuration.addResource("configs/test_configuration.xml");
    
        String name = configuration.get("name");
        int age = configuration.getInt("age", 0);
        String gender = configuration.get("gender");
        String desc = configuration.get("full-desc");
    
        System.out.println("### name : " + name);
        System.out.println("### age : " + age);
        System.out.println("### gender : " + gender);
        System.out.println("### full-desc : " + desc);
    
        configuration.set("name", "Daniel");
        configuration.set("age", "32");
        configuration.set("gender", "Female");
        System.out.println("### updated full-desc : " + configuration.get("full-desc"));
      }
    }

     

    ### name : andy
    ### age : 10
    ### gender : Male
    ### full-desc : andy-10-Male
    ### updated full-desc : Daniel-32-Female

     

     

    full-desc 변수 속성값 수정하기.

    full-desc 속성은 name, age, gender 세가지 속성값의 조합으로 구성됩니다.

    만약 full-desc 와 같은 변수 속성값을 구성하게 된다면, 더 이상 name, age, gender 에 의존적이지 않게 됩니다.

     

    다시 full-desc 속성을 다른 속성값에 의존적인 상태를 만들기 위해서는

    원래 속성값이었던, "${name}-${age}-${gender}" 으로 값을 변경해야합니다.

     

    package com.westlife.mapreduce;
    
    import org.apache.hadoop.conf.Configuration;
    
    public class TestConfiguration {
      public static void main (String[] args) {
        Configuration configuration = new Configuration();
        configuration.addResource("configs/test_configuration.xml");
    
        configuration.set("full-desc", "Dirty");
        System.out.println("### full-desc : " + configuration.get("full-desc"));
    
        configuration.set("full-desc", "${name}-${age}-${gender}");
        configuration.set("name", "Daniel");
        configuration.set("age", "32");
        configuration.set("gender", "Female");
        System.out.println("### full-desc : " + configuration.get("full-desc"));
    
      }
    }

     

    ### full-desc : Dirty
    ### full-desc : Daniel-32-Female

     

     

    2개 이상의 Configuration XML 파일 적용하기.

    2개 이상의 Configuration XML 설정을 적용할 수 있습니다.

    만약 이러한 상황에서 두 XML 이 동일한 설정값을 가진다면, Overwrite 전략을 취하게 됩니다.

     

    새로운 Configuration xml 인 test_configuration2.xml 을 추가해보도록 하겠습니다.

     

    < test_configuration2.xml >

    <?xml version="1.0"?>
    <configuration>
        <property>
            <name>name</name>
            <value>andy</value>
            <description>Name</description>
        </property>
        <property>
            <name>age</name>
            <value>10</value>
            <description>Age</description>
        </property>
        <property>
            <name>gender</name>
            <value>Female</value>
            <final>true</final>
            <description>Gender</description>
        </property>
        <property>
            <name>full-desc</name>
            <value>${name}-${age}-${gender}</value>
            <description>User's full description</description>
        </property>
    </configuration>

     

    package com.westlife.mapreduce;
    
    import org.apache.hadoop.conf.Configuration;
    
    public class TestConfiguration {
      public static void main (String[] args) {
        Configuration configuration = new Configuration();
        configuration.addResource("configs/test_configuration.xml");
        configuration.addResource("configs/test_configuration2.xml");
    
        String name = configuration.get("name");
        int age = configuration.getInt("age", 0);
        String gender = configuration.get("gender");
        String desc = configuration.get("full-desc");
    
        System.out.println("### name : " + name);
        System.out.println("### age : " + age);
        System.out.println("### gender : " + gender);
        System.out.println("### full-desc : " + desc);
    
        configuration.set("name", "Daniel");
        configuration.set("age", "32");
        configuration.set("gender", "Female");
        System.out.println("### updated full-desc : " + configuration.get("full-desc"));
    
      }
    }

     

    ### name : Chris
    ### age : 20
    ### gender : Male
    ### full-desc : Chris-20-Male
    ### updated full-desc : Daniel-32-Female

     

    순서적으로 늦게 적용된 xml 파일의 값들이 Configuration 값이 Override 합니다.

    따라서 사용자 정보는 test_configuration2.xml 의 값들로 채워집니다.

     

    final 속성.

    아래와 같이 gender 속성은 final 값으로 true 가 설정되어 있습니다.

    이는 Overwrite 하지 않겠다는 설정이구요.

    출력 결과 역시 gender 는 Female 이 아닌 Male 로 출력됩니다.

     

        <property>
            <name>gender</name>
            <value>Female</value>
            <final>true</final>
            <description>Gender</description>
        </property>

     

     

    반응형
Designed by Tistory.