-
[Hadoop] MapReduce Configuration 알아보기Hadoop 2024. 2. 3. 11:32728x90반응형
- 목차
들어가며.
이번 글에서는 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>
반응형'Hadoop' 카테고리의 다른 글
[Hadoop] HADOOP_USER_NAME 환경변수 알아보기 (0) 2024.02.21 [Hadoop] MapReduce Combiner 알아보기 (0) 2024.02.11 [Hadoop] Secondary NameNode 알아보기 (0) 2024.01.30 Zookeeper Ensemble 알아보기 (Leader Election, Sequential Znode) (0) 2023.12.19 Zookeeper Watch Mechanism 알아보기 (2) 2023.12.19