[Hadoop 기초 튜 토리 얼] 6. Hadoop 의 단일 표 관련 조회
개발 환경
하드웨어 환경: Centos 6.5 서버 4 대 (1 대 는 Master 노드, 3 대 는 Slave 노드) 소프트웨어 환경: Java 1.7.045、hadoop-1.2.1
1. 입력 데이터 분석
파일 데이터 예제 입력:
child parent
Tom Jack
Jack Alice
Jack Jesse
1 열 은 child 를 나타 내 고, 2 열 은 parent 를 나타 내 며, 우 리 는 child 와 parent 의 관계 에 따라 child 와 grantparent 의 관 계 를 얻어 야 한다.예 를 들 어 Tom 의 parent 는 Jack 이 고 Jack 의 parent 는 Alice 와 Jesse 이다. 이로써 Tom 의 grantparent 는 {Alice, Jesse} 임 을 알 수 있다.
2. 지도 과정
먼저 기본 TextInputFormat 클래스 를 사용 하여 입력 파일 을 처리 하고 텍스트 의 줄 마다 편 이 량 과 내용 을 얻 습 니 다.Map 과정 에서 먼저 입력 을 child 와 parent 로 나 눈 다음 에 한 번 오른쪽 표 로 출력 하고 한 번 은 왼쪽 표 로 출력 합 니 다. 주의해 야 할 것 은 출력 된 value 에 좌우 표 차이 표 지 를 추가 해 야 합 니 다. 그 중에서 왼쪽 표 식별 자 는 1 이 고 오른쪽 표 식별 자 는 2 입 니 다. 그림 과 같 습 니 다.
맵 의 핵심 코드 는 다음 과 같 습 니 다. 상세 한 소스 코드 는 다음 과 같 습 니 다. SingletonTableJoin \ src \ com \ zonesion \ \ tablejoin \ SingletonTableJoin. java.
@Override
protected void map(Object key, Text value, Context context)
throws IOException, InterruptedException {
String childName = new String();
String parentName = new String();
String relationType = new String();
String line = value.toString();
String[] values = line.split(" ");
if(values.length >= 2){
if(values[0].compareTo("child") != 0){
childName = values[0];
parentName = values[1];
relationType = "1";
context.write(new Text(parentName), new Text(relationType+" "+childName));//<"Lucy","1 Tom">
relationType = "2";
context.write(new Text(childName), new Text(relationType+" "+parentName));//<"Jone","2 Lucy">
}
}
}
3. 감소 과정
Reduce 과정 은 먼저 'key, values' 즉' Lucy ',' 1 Tom ',' 2 Mary ',' 2 Ben '을 입력 한 values 값 을 옮 겨 다 니 며 단원 정보 (예 를 들 어' 1 Tom ') 를 얻 은 다음 단원 정보 에 있 는 사용자 ID (예 를 들 어 Tom) 를 왼쪽 표, 오른쪽 표 식별 자 에 따라 각각 grand Child 집합 과 grandParent 집합 에 저장 합 니 다.마지막 으로 grand Child 집합 과 grand Parent 집합 에 대해 피리 칼 적 연산 을 하여 child 와 grand Parent 의 관 계 를 얻어 출력 한다. 그림 과 같다.
Reduce 엔 드 핵심 코드 는 다음 과 같 습 니 다. 상세 한 소스 코드 는 다음 과 같 습 니 다. SingletonTableJoin \ src \ com \ zonesion \ \ tablejoin \ SingletonTableJoin. java.
public static class JoinReducer extends Reducer<Text, Text, Text, Text>{
@Override
protected void reduce(Text key, Iterable<Text> values,Context context)
throws IOException, InterruptedException {
List<String> grandChild = new ArrayList<String>();//
List<String> grandParent = new ArrayList<String>();//
Iterator<Text> it = values.iterator();//["1 Tom","2 Mary","2 Ben"]
while(it.hasNext()){
String[] record = it.next().toString().split(" ");//"1 Tom"---[1,Tom]
if(record.length == 0) continue;
if(record[0].equals("1")){// , child grandchild
grandChild.add(record[1]);
}else if(record[0].equals("2")){// , parent grandParent
grandParent.add(record[1]);
}
}
//grandchild grandparent
if(grandChild.size() != 0 && grandParent.size() != 0){
for(int i=0;i<grandChild.size();i++){
for(int j=0;j<grandParent.size();j++){
context.write(new Text(grandChild.get(i)), new Text(grandParent.get(j)));
}
}
}
}
}
4. 구동 실현
구동 실현 핵심 코드 는 다음 과 같 습 니 다. 상세 한 소스 코드 는 다음 과 같 습 니 다. SingletonTableJoin \ src \ com \ zonesion \ \ tablejoin \ SingletonTableJoin. java.
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf,args).getRemainingArgs();
if(otherArgs.length != 2){
System.err.println("Usage: SingletonTableJoin <in> <out>");
}
Job job = new Job(conf,"SingletonTableJoin Job");
job.setJarByClass(SingletonTableJoin.class);
job.setMapperClass(JoinMapper.class);
job.setReducerClass(JoinReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 : -1);
}
5. 배치 운영
1) Hadoop 클 러 스 터 시작
[hadoop@K-Master ~]$ start-dfs.sh
[hadoop@K-Master ~]$ start-mapred.sh
[hadoop@K-Master ~]$ jps
5283 SecondaryNameNode
5445 JobTracker
5578 Jps
5109 NameNode
2) 배포 소스 코드
#
[hadoop@K-Master ~]$ mkdir -p /usr/hadoop/workspace/MapReduce
#
SingletonTableJoin /usr/hadoop/workspace/MapReduce/ ;
... 싱글 톤 태 블 릿 조 인 트 를 직접 다운로드 할 수 있 습 니 다.
3) 컴 파일 파일 파일
#
[hadoop@K-Master ~]$ cd /usr/hadoop/workspace/MapReduce/SingletonTableJoin
#
[hadoop@K-Master SingletonTableJoin]$ javac -classpath /usr/hadoop/hadoop-core-1.2.1.jar:/usr/hadoop/lib/commons-cli-1.2.jar -d bin src/com/zonesion/tablejoin/SingletonTableJoin.java
#
[hadoop@K-Master SingletonTableJoin]$ ls -la bin/com/zonesion/tablejoin/
12
drwxrwxr-x 2 hadoop hadoop 122 7 31 11:02 .
drwxrwxr-x 3 hadoop hadoop 22 7 31 11:02 ..
-rw-rw-r-- 1 hadoop hadoop 1856 7 31 11:02 SingletonTableJoin.class
-rw-rw-r-- 1 hadoop hadoop 2047 7 31 11:02 SingletonTableJoin$JoinMapper.class
-rw-rw-r-- 1 hadoop hadoop 2074 7 31 11:02 SingletonTableJoin$JoinReducer.class
4) jar 파일 포장
[hadoop@K-Master SingletonTableJoin]$ jar -cvf SingletonTableJoin.jar -C bin/ .
added manifest
adding: com/(in = 0) (out= 0)(stored 0%)
adding: com/zonesion/(in = 0) (out= 0)(stored 0%)
adding: com/zonesion/tablejoin/(in = 0) (out= 0)(stored 0%)
adding: com/zonesion/tablejoin/SingletonTableJoin$JoinReducer.class(in = 2217) (out= 1006)(deflated 54%)
adding: com/zonesion/tablejoin/SingletonTableJoin$JoinMapper.class(in = 1946) (out= 823)(deflated 57%)
adding: com/zonesion/tablejoin/SingletonTableJoin.class(in = 1856) (out= 955)(deflated 48%)
5) 입력 파일 업로드
[hadoop@K-Master SingletonTableJoin]$ hadoop fs -mkdir /user/hadoop/SingletonTableJoin/input/
[hadoop@K-Master SingletonTableJoin]$ hadoop fs -put input/file01.txt /user/hadoop/SingletonTableJoin/input/
[hadoop@K-Master SingletonTableJoin]$ hadoop fs -ls /user/hadoop/SingletonTableJoin/input/
Found 1 items
-rw-r--r-- 1 hadoop supergroup163 2014-07-31 11:08 /user/hadoop/SingletonTableJoin/input/file01.txt
6) Jar 파일 실행
[hadoop@K-Master SingletonTableJoin]$ hadoop jar SingletonTableJoin.jar com.zonesion.tablejoin.SingletonTableJoin SingletonTableJoin/input SingletonTableJoin/output
14/07/31 14:47:55 INFO input.FileInputFormat: Total input paths to process : 1
14/07/31 14:47:55 INFO util.NativeCodeLoader: Loaded the native-hadoop library
14/07/31 14:47:55 WARN snappy.LoadSnappy: Snappy native library not loaded
14/07/31 14:47:56 INFO mapred.JobClient: Running job: job_201407310921_0012
14/07/31 14:47:57 INFO mapred.JobClient: map 0% reduce 0%
14/07/31 14:48:00 INFO mapred.JobClient: map 100% reduce 0%
14/07/31 14:48:07 INFO mapred.JobClient: map 100% reduce 33%
14/07/31 14:48:08 INFO mapred.JobClient: map 100% reduce 100%
14/07/31 14:48:08 INFO mapred.JobClient: Job complete: job_201407310921_0012
.....
특히 주의: 주 클래스 를 지정 할 때 는 전체 패키지 이름 인 com. zonesion. tablejoin. singletonTableJoin 을 사용 해 야 합 니 다. 그렇지 않 으 면 힌트 를 찾 을 수 없습니다.
7) 출력 결과 보기
[hadoop@K-Master SingletonTableJoin]$ hadoop fs -cat SingletonTableJoin/output/part-r-00000
Tom Alice
Tom Jesse
Jone Alice
Jone Jesse
Tom Mary
Tom Ben
Jone Mary
Jone Ben
Philip Alice
Philip Jesse
Mark Alice
Mark Jesse
이 가능 하 다, ~ 할 수 있다,...
[Hadoop 기초 튜 토리 얼] 5. Hadoop 의 단어 계수 [Hadoop 기초 튜 토리 얼] 6. Hadoop 의 단일 표 관련 조회 [Hadoop 기초 튜 토리 얼] 7. Hadoop 중 하나 가 다 중 관련 조회 [Hadoop 기초 튜 토리 얼] 8. Hadoop 중 하나 가 다 중 관련 조회 [Hadoop 기초 튜 토리 얼] 9. Hadoop 의 후진 색인
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Azure HDInsight + Microsoft R Server에서 연산 처리 분산Microsoft Azure HDInsight는 Microsoft가 제공하는 Hadoop의 PaaS 서비스로 인프라 주변의 구축 노하우를 몰라도 훌륭한 Hadoop 클러스터를 구축할 수 있는 훌륭한 서비스입니다. 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.