MyMapper1.map

 

- 2M.Title.ID가 이 Mapper에 의해 처리

- map 함수의 키로는 Title스트링이, 밸류로는 그 타이틀을 갖는 문서의 ID가 들어옴

- ID를 키로 그리고 Title+"\t+1"을 밸류로 Reducer로 넘긴다.

 

public static class MyMapper1 extends Mapper<Text, Text, Text, Text>

{

@Override

protected void map (Text key, Text value, final Context context) throws IOException, InterruptedException

{

context.write(value, new Text(key+"\t+1"));

context.getCounter("Stats", "Number of Title+DocID").increment(1);

}

}

 

 

 

 

MyMapper2.map

 

- CountCitation(과 TopN)의 결과가 이 Mapper에 의해 처리

- map 함수의 키로는 ID가 들어오고 밸류로는 빈도수가 들어온다.

- Reducer로 출력할 때는 ID를 그대로 키로 그리고 빈도수 +"\t"+2을 밸류로 넘긴다.

 

public static class MyMapper2 extends Mapper<Text, Text, Text, Text>

{

@Override

protected void map(Text key, Text value, final Context context)

throws IOException, Interrupted Exception

{

context.write(key, new Text(value+"\t"+2));

context.getCounter("Stats",DocID+Citation").increment(1);

}

}

 

 

빅데이터공부하기 56_ JOIN ID & TITLE

 

개요

 

앞서 Count Citation 처럼 결과가 ID가 나오는 경우 무슨 내용인지 궁금.

 

2M.TITLE.ID

- ID별로 해당문서의 타이틀을 보여주는 데이터파일.

- 이 파일과 CountCitation과 TopN의 결과 파일을 ID로 조인하면 타이틀을 알아낼 수 있음

 

조인전략

- 여기서는 2개의 입력파일셋을 각기 mapper로 로드하여 조인을 reducer에서 수행

- 사실 TopN의 결과로 나온 10개의 ID에 대해서만 조인을 하자면 Distributed Cache라는 것을 사용하면 훨씬 효율적이다. 이에 대해서는 Advanced MapReduce프로그래밍 세션에서 다뤄보겠습니다.

 

MultipleInputs의 사용

 

MutipleInputs.addInputPath(pass, new Path(titleDocID), KeyValueTextInputFormat.class, MyMapper1.class);

- titleDicID에 있는 파일들을 읽을때는 MyMapper1.map을 mapper로 사용하면서 입력포맷으로는 KeyValueTextInputFormat을 사용하세요.

 

MutipleInputs.addInputPath(pass, new Path(doclDFreq), KeyValueTextInputFormat.class, MyMapper2.class);

- docIdFreq에 있는 파일들을 읽을때는 MyMapper2.map을 mapper로 사용하면서 입력포맷으로는 KeyValueTextInputFormat을 사용하세요.

 

이 경우 Job클래스의 setMapperClass는 호출이 불필요.

COUNT CITATION

 

개요

 

- 앞서본 2M.SPCID.DSTID를 바탕으로 가장 많이 레퍼런스된 위키피디아 페이지의 분서 번호가 뭔지 알아낸다.

 

- 기본적으로 word count와 흡사

* Map으로 들어오는 (srclD, dstID)pair를 (dstID, 1)pair로 바꿔서 넘기고 Reduce에서 단순히 dstID로 들어온 value단의 값을 합한다.

* 작업의 특성상 combiner의 적용이 가능.

 

Map 코드

 

public static class Map extends Mapper<Text, Text, Text, IntWritable> {

private final static IntWritable one = new IntWritable(1);

public void map(Text key, Text value, Context context)throws IOException, InterruptedException {

context.write(value, one);

}

}

 

Reduce 코드

 

public static class Reduce extends Reducer<Text, IntWritable, Text, IntWritable>{

public void reduce(Text key, lterable<IntWritable>values, Context context)

throws IOEception, interruptedException{

int sum=0;

fot (IntWritable val : values)

sum +=val.get();

context.write(key,new intWritable(sum));

}

}

 

실행결과

 

앞서 결과에 TopN Job을 실행하여 추출된 top 10 DoclD

 

18951490        9536

38523            10900

5405             12187

9239             12545

3383             13632

5407             15945

15573            21453

14532            23075

14533            24610

9316              34884

 

 

 

 

 

빅데이터공부하기는 it개발자스터디공간을 이용해주세요 ^^

학원을 알아보신다면 --> www.oraclejava.co.kr

 

 

 

COUNT TRIGRAM

 

개요

- Word Count 프로그램의 확장. 연속된 3개의 단어 빈도수를 계산.

- 계산이 끝난 후 TopN을 내부에서 바로 호출

* Job Chaining의 한가지 예

* Count Trigram의 출력이 TopN의 입력으로 사용됨

 

Job Chaining 코드

 

 

실행결과

 

$ hadoop fs- cat/counttrigram/topN/part-r-00000

 

a number of 83818

a number of 89594

the u s 90349

the university of  98566

the end of  100059

member of the  107580

part of the 147861

as well as  169659

the united states  177699

one of the   225768

 

빅데이터공부하기 이번글은 소스코드에 대해서 공부할거에요.

 

 

 

소스코드 

 

1. 파라미터 N의 전달

 

먼저 이 값이 TopN프로그램의 세번째 인자로 지정

main 함수에서 이를 읽어 "top N"이란 파라미터로 정의

- job.getConfiguation(), setlnt("topN", Integer.parselnt(args[2]));

- Mapper와 Reducer의 setup메소드에서 이 값을 읽어간다.

 

int topN=10;

@Override

protected void setup(Context context)throws IOException, InterruptedException{
    topN=context.getConfiguation().getlnt("topN",10);

}

 

2. map

 

public void map(LongWritable key, Text value, Context context)throws IOException, InterruptedException{

String[]pair= value.toString().split("\\t")

Long IValue=(long)integer.parseint(pair[1].toString());

insert(queue, pair[0],IValue,topN)

}

 

 

3. insert

 

public static void insert(PriorityQueue queue, String item,LongIValue, int TopN) {

ItemFreq head=(ItemFreq)queue peek();

 

if (queue size()<top N ll head.getFreq()<IValue){

ItemFreq itemFreq = new ItemFreq();

ItemFreq.setltem(item);

ItemFreq.setFreq(IValue);

queue.add(itemFreq);

if(head !=null && head.getFreq()<IValue) {// remove smallest item. queue.remove();

}

}

 

 

 

이번글은 input type에 대해서 알아보도록하겠습니다.

 

<!DOCTYPE HTML>

<html lang="ko-KR">

<head>

<meta charset="UTR-8">

<title>input type</title>

</head>

<body>

<h1>input type</h1><br>

color: <input type="color" name="color"><br><br>

date: <input type="date" name="date"><br><br>

email: <input type="email" name="date"><br><br>

search: <input type="search" name="search"><br><br>

tel:<input type="tel" name="tel"><br><br>

week:<input type="week" name="week"><br><br>

submit:<input type="submit" name="submit"><br><br>

</body>

</html>

 

결과를 보도록 할께요 ^^

 

 

손쉽게 input type를 작성하실 수 있습니다. ^^

궁금하신 점은 뎃글 남겨주세요.

 

이외에도 많은 input 요소들이 있어요. (저는 몇가지만 적었어요.)

 

 

 

 

'웹표준 > HTML5 & CSS3' 카테고리의 다른 글

html&css공부하기  (1) 2015.03.09
HTML5&CSS3 공부하기 글자색과 배경색 2  (0) 2015.03.02
HTML5&CSS3 공부하기 글자색과배경색  (0) 2015.02.25
HTML5&CSS3공부하기  (0) 2015.02.24
HTML5공부하기1 문서구조  (0) 2014.10.22

빅데이터공부하기 Top N의 글입니다.

 

우선순위큐(PriorityQueue)

 

우선순위를 가진 항목들을 저장하는 큐

일반 FIFO 큐나 스택과는 달 리 우선 순위가 높은 데이터가 먼저 나가게됨

예제에서는 자바 util의 PriorityQueue 클래스를 이용

- PriorityQueue에 저장될 개체타입을 ITemFreq로 정의하고 초기 크기는 10으로 지정. 또한 개체간의 비교에 사용될 Comparator도 지정

 

Mapper와 reducer의 시작부분에서 두개의 변수 생성

comparator<ItemFreq>comparator=new ITemFreqComparator();

PriorityQueue<ITemFreq>queue=new PriorityQueue<ITemFreq>(10, comparator);

 

ItemFreq클래스

 

이 클래스는 PriorityQueue, Mapper와 Reducer에도 키로 사용

- WritableComparable 인터페이스 구현

 

빅데이터공부하기 54_1 Top N

 

이번글부터는 Top N 을 공부하도록하겠습니다.

 

개요

 

앞서 WordCount2의 실행결과에서 가장 높은 빈도수를 갖는 10개의 단어는?

두번째 필드가 숫자로 빈도수를 나타낸다는 전제하에 동작(범용적)

동작방식

- 각 mapper에서 들어오는 레코드들을보고 Top N개만 출력.

- Reducer에서 결국 같은 작업을 반복

- Top N개의 레코드를 가려내기위해 PriorityQueue를 사용

* 모두를 다 저장하고나서 소팅하는 것은 메모리낭비가 너무 큼

- 모든 입력레코드의 처리가 끝난 후에야 Top N개를 알 수 있으므로 Mapper와 Reducer의 cleanup 메소드에서 PriorityQueue의 내용을 출력

 

만일 전체 데이터를 빈도수로 소팅하고 싶다면 다른 전략이 필요

- 하둡제공 예제 프로그램중에 TeraSort라는 것의 구현을 흉내내면됨. 하둡의 벤치마크로 널리 쓰이는 프로그램

- 데이터 샘플링 후 파티션(Partitioner)을 어떤 값 기준으로 나눌지 정하는 형태. 이는 아주 흔히 쓰이는 하둡 잡 실행 전략 중의 하나

 

 

 

+ Recent posts