[출처] http://www.ibm.com/developerworks/kr/library/l-hadoop-3/

 

Hadoop을 이용한 분산 데이터 처리, Part 3: 애플리케이션 개발

Hadoop용 Ruby MapReduce 애플리케이션 개발하기

M. Tim Jones, 컨설턴트 엔지니어, Emulex Corp.

요약: 단일 및 다중 노드 아키텍처에서 Hadoop을 구성, 설치 및 사용하는 방법에 대해 살펴보았으므로 이제 Hadoop 인프라 내에서 애플리케이션을 개발하는 작업을 살펴볼 차례입니다. 시리즈의 마지막 기사인 이 기사에서는 Hadoop API와 데이터 플로우를 살펴본 후 이러한 API와 데이터 플로우를 간단한 맵퍼 및 축소자 애플리케이션에서 사용하는 방법을 보여 줍니다.

이 연재 자세히 보기

원문 게재일: 2010 년 7 월 14 일
번역 게재일: 2010 년 10 월 19 일
난이도: 중급
영어로: 보기
PDF: A4 and Letter (104KB | 13 pages)Get Adobe® Reader®
페이지뷰: 18649 회
의견: 0 (보기 | 의견 추가 - 로그인)

평균 평가 등급 2 개 총 13표 평균 평가 등급 (13 투표수)
아티클 순위

Tim과 연락하기

Tim은 developerWorks의 가장 유명한 다작 저자 중 한 명이다. developerWorks에 실린 Tim의 모든 기사를 살펴보자. Tim의 프로파일을 확인하고 Tim과 다른 저자 및 My developerWorks의 동료 독자와 연락을 해보자.

이 시리즈의 처음 두 기사에서는 주로 단일 및 다중 노드 클러스터를 위해 Hadoop을 설치 및 구성하는 방법에 대해 설명했다. 이 마지막 기사에서는 Hadoop 프로그래밍을 살펴보며 특히, Ruby 언어 내에서 맵핑 및 축소 애플리케이션을 개발하는 과정을 설명한다. 이 기사에서 Ruby를 선택한 첫 번째 이유는 개발자가 알고 있어야 하는 매우 뛰어난 오브젝트 지향 스크립트 언어이기 때문이며, 두 번째 이유는 Java™ 및 Python 언어를 다루는 튜토리얼의 참고자료 섹션에서 수많은 참고자료를 볼 수 있기 때문이다. 이 기사에서도 MapReduce 프로그래밍을 통해 streaming API(Application Programming Interface)를 소개한다. 이 API는 Java 이외의 언어로 애플리케이션을 개발할 수 있는 방법을 제공한다.

먼저 기능 관점에서 맵핑과 축소를 간단하게 살펴본 후 Hadoop 프로그래밍 모델 및 아키텍처 그리고 작업을 작성, 분배 및 관리하는 요소에 대해 자세히 살펴보자.

맵핑 및 축소의 기원

그렇다면 MapReduce 프로그래밍 패러다임의 토대가 되었던 기능적 요소는 무엇일까? 1958년 John McCarthy가 Lisp라는 언어를 개발했다. 이 언어는 수치 및 기호 계산을 구현했지만 대부분의 현대 언어에서는 잘 사용하지 않는 재귀적 형태로 구현했다. (실제로 Wikipedia에 Lisp의 흥미로운 역사가 소개되어 있으며 시간을 들여서 읽을만한 유용한 튜토리얼도 있다.) Lisp는 최초의 대량 생산 컴퓨터인 IBM® 704에서 실현되었으며 이 컴퓨터는 과거에 인기가 많았던 FORTRAN도 지원했다.

Lisp와 같은 함수 언어에서 시작되어 오늘날에는 다른 많은 언어에서도 일반적으로 사용되는 map 함수는 요소 목록에 대해 함수를 적용하는 기능을 제공한다. 이 말이 무슨 뜻일까? Listing 1에서는 Lisp에서 파생된 SCSH(Scheme Shell)를 이용한 해석된 세션을 보여 준다. 첫 번째 행에서는 인수를 사용하여 제곱근을 리턴하는 square 함수를 정의한다. 다음 행에서는 map 함수를 사용하는 방법을 보여 준다. 코드에서 볼 수 있듯이 map을 사용할 때는 함수와 이 함수를 적용할 요소 목록을 제공한다. 결과는 제곱 연산이 적용된 요소가 들어 있는 새 목록이다.


Listing 1. SCSH의 map 함수 데모
	
> (define square (lambda (x) (* x x)))
> (map square '(1 3 5 7))
'(1 9 25 49)
>

축소도 목록에 대해 적용되지만 일반적으로 목록을 스칼라 값으로 축소한다. Listing 2의 예제에서는 목록을 스칼라로 축소하는 또 하나의 SCSH 함수를 보여 준다. 이 경우에는 (1 + (2 + (3 + (4 + (5)))))의 형태로 목록에 있는 값의 합을 구한다. 이는 반복적으로 순환하는 방법을 사용하는 일반적인 함수 프로그래밍이다.


Listing 2. SCSH의 reduction 데모
	
> (define (list-sum lis) (if (null? lis) 0 (+ (car lis) (list-sum (cdr lis)))))
> (list-sum '(1 2 3 4 5))
15
> 

순환은 자동으로 반복으로 변환되기 때문에 명령형 언어의 반복과 마찬가지로 효율적이다.


Hadoop의 프로그래밍 모델

Google에서 대량의 데이터 세트를 처리하거나 생성하기 위한 프로그래밍 모델로 MapReduce라는 아이디어를 도입했다. 기존 모델에서는 map 함수가 키/값 쌍을 처리하여 중간 키/값 쌍 세트를 결과로 리턴했다. 그런 다음 reduce 함수가 중간 키/값 쌍을 처리하여 연관된 키의 값을 병합했다(그림 1 참조). 입력 데이터는 병렬 처리를 위해 시스템 클러스터에 분산될 수 있도록 분할된다. 생성된 중간 데이터도 동일한 방법으로 처리되기 때문에 이 방법은 대량의 데이터를 처리하기에 이상적이다.


그림 1. 단순화된 MapReduce 처리 보기
단순화된 MapReduce 처리 보기

단어 계수에 대한 맵핑 및 축소의 관점에서 그림 1의 아키텍처를 살펴보자(이 기사에서 맵핑 및 축소 애플리케이션을 개발할 것이므로). HDFS(Hadoop file system)에 제공된 입력 데이터는 먼저 분할된 다음 jobtracker를 통해 맵핑 작업자에게 분배된다. 그림 2의 예제에서는 짧은 문장을 분할하지만 일반적으로 분할되는 작업량은 128MB 단위로 분할되며, 이 크기로 분할하는 이유는 작업 설정 시간이 짧아서 작업이 많을수록 오버헤드를 최소화할 수 수 있기 때문이다. 일반적인 예제에서 맵핑 작업자는 토큰화된 단어와 초기값(이 경우에는 1)이 있는 개별 벡터로 작업을 분할한다. 맵핑 태스크가 완료되면(Hadoop에 정의된 대로 tasktracker에 의해) 작업이 축소 작업자에게 제공된다. 축소 작업자는 검색된 키의 수를 나타내는 값을 사용하여 키를 하나의 고유 세트로 축소한다.


그림 2. 간단한 MapReduce 예제
간단한 MapReduce 예제

이 프로세스는 동일한 시스템 또는 서로 다른 시스템에서 발생하거나 순차적으로 또는 서로 다른 데이터 파티션을 사용하여 병렬로 수행될 수 있다. 하지만 어떠한 경우라도 결과는 동일하다.

일반적인 보기(단어 계수를 사용한 검색 색인 생성의 경우)도 Hadoop을 볼 수 있는 한 가지 방법이기는 하지만 이 컴퓨팅 모델은 일반적으로 앞으로 살펴볼 다양한 계산 문제에 적용할 수 있는 것으로 밝혀졌다.


Hadoop의 유연성

그림 2의 간단한 예제를 보면 mapreduce 프로세스가 두 가지 기본 요소이다. 이러한 프로세스의 작동 방법에 대한 일반적인 보기가 있기는 하지만 이 아키텍처에서 mapreduce가 반드시 이 방법대로 동작해야 하는 것은 아니다. 이것이 바로 Hadoop의 진정한 장점이다. 즉, Hadoop에는 특정 애플리케이션을 해결하는 방법으로 동작하는 mapreduce 프로세스를 구현할 수 있는 유연성이 있다. 단어 계수 예제가 수많은 문제점에 적용할 수 있을 정도로 유용하기는 하지만 다른 모델도 이 일반 프레임워크 내에서 활용할 수 있다. 따라서 Hadoop에서 프로세스를 볼 수 있도록 지원하는 맵핑 및 축소 애플리케이션을 개발하기만 하면 된다.

다양한 애플리케이션 중에서도 Hadoop은 신경망, SVM(Support Vector Machines) 및 k 평균 클러스터링과 같이 다양한 알고리즘을 구현하는 머신 학습 애플리케이션에 많이 사용되고 있다(자세한 정보는 참고자료 섹션 참조).


데이터 스트리밍

Hadoop은 Java 기반 프레임워크이지만 Java 이외의 언어로도 맵핑 및 축소 애플리케이션을 작성할 수 있다. 이는 스트리밍을 통해 가능하다. Hadoop 내에서 streaming 유틸리티는 일종의 데이터 플로우를 구현한다. streaming 유틸리티를 사용하여 고유한 맵핑 및 축소 실행 파일(표준 입력[stdin]에서 입력을 받고 표준 출력[stdout]을 통해 출력 제공)을 정의할 수 있으며, streaming 유틸리티는 사용자의 애플리케이션을 필요에 따라 호출하여 데이터를 적절하게 읽고 쓴다(Listing 3 참조).


Listing 3. Hadoop streaming 유틸리티 사용하기
	
hadoop jar $HADOOP_HOME/hadoop-streaming.jar \
	-input inputData
	-output outputData
	-mapper map_exec
	-reducer reduce_exec

Listing 3에서는 Hadoop 내에서 streaming 유틸리티를 사용하는 방법을 보여 주며, 그림 3에서는 플로우의 정의 방법을 그래픽으로 보여 준다. 이 예제는 streaming의 사용 방법을 보여 주기 위한 간단한 예제에 불과하다. 데이터의 구문 분석 방법을 추적하고, 이미지의 호출 방법을 추적하고, 파티셔너(partitioner) 또는 콤바이너(Combiner)의 대체 이미지를 지정하는 작업과 기타 구성 변경 작업에 사용할 수 있는 수많은 옵션이 있다. (자세한 정보는 참고자료 섹션을 참조하기 바란다.)


그림 3. 그래픽 스트리밍 예제
그래픽 스트리밍 예제

Ruby 예제

지금까지 streaming 유틸리티에 대한 기본적인 사항을 살펴보았으므로 이제 간단한 Ruby 맵핑 및 축소 애플리케이션을 작성하고 Hadoop 내에서 프로세스를 사용하는 방법에 대해 알아볼 차례이다. 여기에서는 먼저 일반적인 MapReduce 애플리케이션을 살펴본 후 다른 애플리케이션을 살펴본다(맵핑 및 축소 양식으로 구현하는 방법과 함께).

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

맵퍼부터 시작하자. 이 스크립트는 stdin으로부터 텍스트 입력을 받아서 토큰화한 다음 키/값 쌍 세트를 stdout에 출력한다. 대부분의 오브젝트 지향 스크립트 언어와 마찬가지로 이 태스크는 매우 단순하다. Listing 4에서 맵퍼 스크립트를 보여 준다. (간단한 주석과 공백이 포함되어 크기가 조금 커졌다.) 이 프로그램에서는 반복자를 사용하여 stdin으로부터 한 행을 읽고 또 하나의 반복자를 사용하여 이 행을 개별 토큰으로 분할한다. 그런 다음 각 토큰(단어)이 연관된 값 1과 함께 stdout에 출력된다(탭으로 구분됨).


Listing 4. Ruby 맵핑 스크립트(map.rb)
	
#!/usr/bin/env ruby

# Our input comes from STDIN
STDIN.each_line do |line|

  # Iterate over the line, splitting the words from the line and emitting
  # as the word with a count of 1.
  line.split.each do |word|
    puts "#{word}\t1"
  end

end

다음으로 축소 애플리케이션을 살펴보자. 이 애플리케이션은 약간 더 복잡하지만 Ruby 해시(연관 배열)를 사용하여 축소 오퍼레이션을 단순화한다(Listing 5 참조). 이 스크립트는 다시 한번 stdin의 입력 데이터(streaming 유틸리티가 전달한)에 대한 작업을 수행한 후 행을 단어와 값으로 분할한다. 그런 다음 단어에 대해 해시를 검사하여 단어가 있으면 해당 계수가 요소에 추가된다. 그렇지 않은 경우에는 사용자가 단어에 대한 새 항목을 해시에 작성한 다음 계수(맵퍼 프로세스의 1이어야 함)를 로드한다. 모든 입력이 처리되면 해시를 반복하여 키/값 쌍을 stdout에 출력한다.


Listing 5. Ruby 축소 스크립트(reduce.rb)
	
#!/usr/bin/env ruby

# Create an empty word hash
wordhash = {}

# Our input comes from STDIN, operating on each line
STDIN.each_line do |line|

  # Each line will represent a word and count
  word, count = line.strip.split

  # If we have the word in the hash, add the count to it, otherwise
  # create a new one.
  if wordhash.has_key?(word)
    wordhash[word] += count.to_i
  else
    wordhash[word] = count.to_i
  end

end

# Iterate through and emit the word counters
wordhash.each {|record, count| puts "#{record}\t#{count}"}

맵핑 및 축소 스크립트가 완료되었으므로 이제 명령행에서 이러한 스크립트를 테스트할 차례이다. 이를 위해서는 chmod +x를 사용하여 파일을 실행 파일로 변경해야 한다. 먼저 입력 파일(Listing 6 참조)을 작성한다.


Listing 6. 입력 파일 생성하기
	
# echo "Hadoop is an implementation of the map reduce framework for " \
	"distributed processing of large data sets." > input
#

이 입력을 사용하면 맵퍼 스크립트를 테스트할 수 있다(Listing 7 참조). 이 스크립트는 단순히 입력을 키/값 쌍으로 토큰화하며 여기서, 각 값은 1(고유하지 않은 입력)이다.


Listing 7. 맵퍼 스크립트 테스트하기
	
# cat input | ruby map.rb
Hadoop	1
is	1
an	1
implementation	1
of	1
the	1
map	1
reduce	1
framework	1
for	1
distributed	1
processing	1
of	1
large	1
data	1
sets.	1
#

지금까지는 좋다. 이제 전체 애플리케이션을 원래 스트리밍 양식으로 가져온다(Linux® 파이프). Listing 8에서 맵핑 스크립트를 통해 입력을 전달하고 출력을 정렬(선택적 단계)한 다음 축소자 스크립트를 통해 결과 중간 데이터를 전달한다.


Listing 8. Linux 파이프를 이용한 간단한 MapReduce
	
# cat input | ruby map.rb | sort | ruby reduce.rb
large	1
of	2
framework	1
distributed	1
data	1
an	1
the	1
reduce	1
map	1
sets.	1
Hadoop	1
implementation	1
for	1
processing	1
is	1
# 


Ruby와 Hadoop

쉘 환경에서 맵핑 및 축소 스크립트가 예상대로 작동하면 이제 Hadoop을 사용하여 스크립트를 테스트해 보자. 이 기사에서는 Hadoop 설정 태스크를 생략한다. Hadoop의 설정 및 실행에 대한 자세한 정보는 이 시리즈의 Part 1 또는 Part 2를 참조한다.

첫 번째 단계는 HDFS 내에 입력 데이터를 저장할 input 디렉토리를 작성하는 것이며 그런 다음 스크립트 테스트에 사용할 샘플 파일을 제공한다. Listing 9에서 이 단계를 보여 준다. 이러한 단계에 대한 자세한 정보는 Part 1 또는 Part 2를 참조한다.


Listing 9. MapReduce 프로세스를 위한 입력 데이터 작성하기
	
# hadoop fs -mkdir input
# hadoop dfs -put /usr/src/linux-source-2.6.27/Documentation/memory-barriers.txt input
# hadoop fs -ls input
Found 1 items
-rw-r--r--  1 root supergroup  78031 2010-06-04 17:36 /user/root/input/memory-barriers.txt
# 

다음으로 streaming 유틸리티를 사용하여 Hadoop과 사용자 정의 스크립트를 호출하고 입력 데이터와 출력 위치를 지정한다(Listing 10 참조). 이 예제에서 -file 옵션은 단순히 Hadoop에게 사용자의 Ruby 스크립트를 작업 제출의 일부로 패키징하도록 지시한다.


Listing 10. Hadoop streaming과 사용자 정의 Ruby MapReduce 스크립트 사용하기
	
# hadoop jar /usr/lib/hadoop-0.20/contrib/streaming/hadoop-0.20.2+228-streaming.jar \
  -file /home/mtj/ruby/map.rb -mapper /home/mtj/ruby/map.rb \
  -file /home/mtj/ruby/reduce.rb -reducer /home/mtj/ruby/reduce.rb \
  -input input/* -output output
packageJobJar: [/home/mtj/ruby/map.rb, /home/mtj/ruby/reduce.rb, /var/lib/hadoop-0.20/...
10/06/04 17:42:38 INFO mapred.FileInputFormat: Total input paths to process : 1
10/06/04 17:42:39 INFO streaming.StreamJob: getLocalDirs(): [/var/lib/hadoop-0.20/...
10/06/04 17:42:39 INFO streaming.StreamJob: Running job: job_201006041053_0001
10/06/04 17:42:39 INFO streaming.StreamJob: To kill this job, run:
10/06/04 17:42:39 INFO streaming.StreamJob: /usr/lib/hadoop-0.20/bin/hadoop job ...
10/06/04 17:42:39 INFO streaming.StreamJob: Tracking URL: http://localhost:50030/...
10/06/04 17:42:40 INFO streaming.StreamJob:  map 0%  reduce 0%
10/06/04 17:43:17 INFO streaming.StreamJob:  map 100%  reduce 0%
10/06/04 17:43:26 INFO streaming.StreamJob:  map 100%  reduce 100%
10/06/04 17:43:29 INFO streaming.StreamJob: Job complete: job_201006041053_0001
10/06/04 17:43:29 INFO streaming.StreamJob: Output: output
# 

마지막으로 hadoop 유틸리티를 통해 cat 파일 시스템 오퍼레이션을 사용하여 출력을 살펴본다(Listing 11 참조).


Listing 11. Hadoop 출력 살펴보기
	
# hadoop fs -ls /user/root/output
Found 2 items
drwxr-xr-x  - root supergroup      0 2010-06-04 17:42 /user/root/output/_logs
-rw-r--r--  1 root supergroup  23014 2010-06-04 17:43 /user/root/output/part-00000
# hadoop fs -cat /user/root/output/part-00000 | head -12
+--->|	4
immediate	2
Alpha)	1
enable	1
_mandatory_	1
Systems	1
DMA.	2
AMD64	1
{*C,*D},	2
certainly	2
back	2
this	23
# 

지금까지 30행 미만의 스크립트로 mapreduce 요소를 구현하고 Hadoop 프레임워크 내에서 직접 실행해 보았다. 간단한 예제였지만 이 예제를 통해 Hadoop의 뛰어난 성능을 실감할 수 있었고 Hadoop 프레임워크가 사용자 정의 또는 고유 알고리즘을 이용하여 대량 데이터 세트를 처리하는 데 많이 사용되는 이유도 알 수 있었다.


Hadoop의 다양한 애플리케이션

Hadoop은 대량 데이터 세트의 단어 수를 계산하는 단순한 작업뿐만 아니라 여러 애플리케이션에서도 사용할 수 있다. 이를 위해서는 데이터를 Hadoop 인프라에서 사용할 수 있는 벡터 양식으로 표현할 수만 있으면 된다. 일반적인 예제에서는 벡터 표현을 키와 값으로 사용하지만 값을 정의하는 방법에는 어떠한 제한도 없다(예: 값 수의 집계). 이처럼 Hadoop은 유연성이 높기 때문에 매우 다양한 애플리케이션에서 활용할 수 있다.

MapReduce 단어 계수 모델에 적합한 한 가지 애플리케이션으로는 웹 서버 액세스의 빈도를 표로 작성하는 작업이 있다(Google 세미나 문서에서 논의됨). 이 애플리케이션에서는 URL을 키로 사용한다(웹 서버 액세스 로그에서 수집). reduce 프로세스의 결과는 웹 서버 로그를 기반으로 지정된 웹 사이트의 URL에 대한 총 액세스 수이다.

머신 학습 애플리케이션에서 Hadoop은 대량의 GA 개별 항목을 처리하기 위해 유전자 알고리즘을 확장하는 데 사용되었다(잠재적 솔루션). map 프로세스는 일반적인 유전자 알고리즘을 수행하여 로컬 풀에서 최적의 개별 솔루션을 찾는다. 그런 다음 축소 애플리케이션에서 맵핑 단계의 개별 솔루션이 토너먼트 형식으로 선택된다. 이렇게 하면 개별 노드에서 최적의 솔루션을 식별한 다음 이러한 솔루션을 축소 단계에서 경쟁시킬 수 있으며, 결과적으로 가장 적합한 솔루션이 마지막까지 남아서 분산 표시된다.

또 하나의 흥미로운 애플리케이션이 이메일 스팸의 봇넷을 식별하기 위해 작성되었다. 이 프로세스의 첫 번째 단계에서는 지정된 조직에서 보낸 이메일 메시지를 축소하기 위해 핑거프린트 세트를 기반으로 이메일 메시지를 분류한다. 이 필터링된 데이터를 기반으로 연결된 이메일에 대한 그래프가 작성된다(예를 들어, 이메일 메시지 본문의 동일한 링크 참조). 그런 다음 이러한 관련 이메일이 호스트(정적 또는 동적 IP 주소)로 축소되어 질문 대상 봇넷을 식별한다.

Hadoop은 맵핑 및 축소 프리미티브를 통해 작동하는 애플리케이션뿐만 아니라 머신 클러스터에 작업을 분배하는 수단으로도 유용하다. 맵핑 및 축소는 특정 유형의 애플리케이션에만 사용되는 기능이 아니다. 대신 Hadoop은 보다 빠른 병렬 처리를 제공하기 위해 데이터와 알고리즘을 분배하는 방법으로 볼 수 있다.


Hadoop 애플리케이션 에코시스템

Hadoop이 유연한 프레임워크를 제공하기는 하지만 해당 인터페이스를 다른 애플리케이션을 위한 인터페이스로 변환하는 기능을 제공하는 여러 애플리케이션이 있다. 한 가지 흥미로운 예로는 Hive QL이라는 고유 쿼리 언어를 제공하는 데이터 웨어하우스 인프라인 Hive가 있다. Hive는 SQL(Structured Query Language)을 알고 있는 개발자에게 Hadoop을 더욱 친숙하게 만들어주며 데이터 처리를 위한 일반적인 MapReduce 인프라도 지원한다.

HBase는 HDFS를 기반으로 하는 또 하나의 흥미로운 애플리케이션으로 Google BigTable과 비슷한 고성능 데이터베이스 시스템이다. 일반적인 파일 처리 대신 HBase는 데이터베이스 테이블을 입력 및 출력 양식으로 사용하여 MapReduce 처리를 수행한다.

마지막으로 Pig는 대량 데이터 세트를 분석하는 Hadoop 기반 플랫폼이다. Pig는 맵핑 및 축소 애플리케이션으로 컴파일하는 고급 언어를 제공한다.


추가 주제

Hadoop 시리즈의 이 마지막 기사에서는 Hadoop 프레임워크에서 사용할 수 있는 맵핑 및 축소 애플리케이션을 Ruby로 작성하는 방법을 살펴보았다. 다행스럽게도 이 기사에서 Hadoop의 진정한 성능을 볼 수 있었다. Hadoop이 특정 프로그래밍 모델로 제한되기는 하지만 이 모델은 유연하기 때문에 수많은 애플리케이션에 적용할 수 있다.


참고자료

교육

  • MapReduce: Simplified Data Processing on Large Clusters는 Jeff Dean과 Sanjay Ghemawat가 2004년에 집필한 MapReduce에 대한 세미나 문서이다. 이 문서는 흥미로운 주제로 남아 있다.

  • 이 기사에서는 Hadoop의 streaming 유틸리티를 살펴보았다. 이 유틸리티를 사용하면 Java 이외의 언어로 맵핑 및 축소 스크립트를 개발할 수 있다. Apache에서 Hadoop Streaming 문서와 streaming wiki(다양한 명령행 옵션에 대한 설명 제공)를 비롯하여 streaming에 대한 다양한 자원을 제공하고 있다.

  • Wikipedia에서 LispScheme 언어에 대한 좋은 설명과 함수 프로그래밍 개념(및 MapReduce)에 대한 일반적인 설명을 볼 수 있다.

  • 맵핑과 축소라는 함수 프로그래밍 요소를 보여 주기 위해 이 기사에서는 Scheme 쉘을 사용했다. Scheme을 사용해 보고 싶었다면 SCSH가 이 강력한 언어를 사용해 볼 수 있는 좋은 기회가 될 것이다. Tim의 기사 Scripting with Guile(developerWorks, 2009년 1월) 또는 Scheme introduction에서 Scheme와 C를 이용한 스크립팅에 대한 자세한 정보를 볼 수 있다.

  • Map-Reduce for Machine Learning on Multicore 문서에서는 MapReduce 모델을 사용하여 멀티코어 프로세서를 위한 다양한 머신 학습 알고리즘을 구현한다. 이 문서는 MapReduce 모델을 다양한 계산 알고리즘에 적용하는 방법을 보여 주는 흥미로운 문서이다.

  • Hive는 Hadoop을 기반으로 하는 데이터 웨어하우스 인프라로 Hadoop 데이터에 대한 쿼리 언어를 제공하고 일반적인 Hadoop 프로그래밍 모델을 지원한다. HBase는 Hadoop의 HDFS에 대한 데이터베이스 표현이며, MapReduce에서는 이 표현을 사용하여 간단한 파일에 대한 데이터베이스 테이블 작업을 수행할 수 있다. 마지막으로 Pig는 대량 데이터 세트 분석을 위한 플랫폼이며 Hadoop 프로그래밍을 위한 고급 언어를 제공한다.

  • Ruby 언어는 최신 오브젝트 지향 스크립트 언어이다. 이 언어는 프로그래머의 생산성 향상에 중점을 두고 있다.

  • Mapreduce and Hadoop algorithms in academic papers에 실린 목록을 확인해 보자. 이 사이트에서는 Hadoop을 다양한 애플리케이션(과학, 머신 학습, 웹 서비스 등)에서 사용하는 방법에 대한 흥미로운 관점을 제공한다.

  • Yahoo! DEVELOPER NETWORK에서 Hadoop에 관한 유용한 자원 세트를 볼 수 있다. 특히, Yahoo! Hadoop Tutorial에서는 Hadoop을 소개하고 Hadoop의 사용 및 구성에 대해 자세히 설명하고 있다.

  • Linux에서는 수백 개의 기술자료 목록과 함께, Linux 개발자와 관리자를 위한 다양한 다운로드, 토론 포럼 및 다른 참고자료를 찾을 수 있다.

  • developerWorks 기술 행사 및 웹 캐스트를 통해 다양한 IBM 제품 및 IT 산업 주제에 대한 최신 정보를 얻을 수 있다.

  • 무료 developerWorks Live! briefing을 통해 최신 IBM 제품 및 도구에 대한 정보뿐만 아니라 IT 업계의 최신 경향까지도 빠르게 확인할 수 있다.

  • developerWorks on-demand demos에서는 입문자를 위한 제품 설치 및 설정부터 숙련된 개발자를 위한 고급 기능까지 망라된 다양한 데모를 제공한다.

  • Twitter의 developerWorks를 팔로우(follow)하거나 developerWorks에 대한 Linux 트윗(tweet)의 피드를 구독하자.

제품 및 기술 얻기

토론

  • developerWorks community에 참여한다. 개발자가 운영하고 있는 블로그, 포럼, 그룹 및 위키를 살펴보면서 다른 developerWorks 사용자와 의견을 나눌 수 있다.

필자소개

developerWorks Contributing author level

M. Tim Jones는 임베디드 소프트웨어 아키텍트이자 GNU/Linux Application Programming, AI Application Programming, BSD Sockets Programming from a Multilanguage Perspective의 저자이기도 한다. Jones의 공학 배경은 정지 위성을 위한 커널 개발에서 시작해 임베디드 시스템 아키텍처와 네트워크 프로토콜 개발에 이르기까지 다양한 분야를 아우른다. Jones는 콜로라도 주, 롱몬트 소재 Emulex 사에서 컨설턴트 엔지니어로 활약한다.

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
175 이통사 OpenAPI file 가을의 곰을... 2012.08.22 4175
174 포털 OpenAPI file 가을의 곰을... 2012.08.22 4099
173 공공기관 OpenAPI 가을의 곰을... 2012.08.22 3356
172 멀티부팅시 우분투 GRUB 복구하기.. file 가을의 곰을... 2012.08.21 6025
171 Hadoop HDFS BASIC Usage Over View : 하둡 사용 개요 가을의 곰을... 2012.08.20 5378
170 HDFS 테스트 file 가을의 곰을... 2012.08.20 4560
169 클라우드 기반의 재해복구 시스템 (DRS system) 구축 분석에 대한 논문 가을의 곰을... 2012.08.20 4576
168 오픈 소스 클라우드 분석 file 가을의 곰을... 2012.08.20 3896
167 Visual studio 2010 에서 소스파일을 UTF-8 로 자동변환 file 가을의 곰을... 2012.08.19 3622
166 HTML5로 자신만의 3D 엔진을 만들자 file 가을의 곰을... 2012.07.29 8303
165 SQL 쿼리를 NoSQL인 MongoDB 쿼리로 변경하기 가을의 곰을... 2012.07.29 4249
164 GitHub 소개글 - 류광님 가을의 곰을... 2012.07.29 3523
163 GIT Server 구축 : LINUX UBUNTU, MS WIN file 가을의 곰을... 2012.07.28 5786
162 git 서버 설치 요령 file 가을의 곰을... 2012.07.28 4020
161 mongoDB와 PHP 참고자료 가을의 곰을... 2012.07.15 4845
160 MongoDB와 PHP 연동 가을의 곰을... 2012.07.15 4767
159 phpmyadmin과 비슷하게 mongoDB를 php 서버로 관리하기 위한 phpMoAdmin file 가을의 곰을... 2012.07.15 10935
» Hadoop을 이용한 분산 데이터 처리, Part 3: 애플리케이션 개발 file 가을의 곰을... 2012.07.15 3577
157 Hadoop을 이용한 분산 데이터 처리, Part 2: 추가 주제 file 가을의 곰을... 2012.07.15 3979
156 Hadoop을 이용한 분산 데이터 처리, Part 1: 시작 file 가을의 곰을... 2012.07.15 4444
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED