Hadoop은 일부 대형 검색 엔진에서 데이터 축소를 위한 핵심 기능으로도 사용되고 있기는 하지만 분산 데이터 처리를 위한 프레임워크라는 설명이 더 잘 어울린다. 단순한 데이터가 아니라 검색 엔진에 필요한 데이터 및 검색 엔진에서 수집한 데이터 등과 같은 대용량 데이터의 분산 처리에 적합한 프레임워크이다. 많은 애플리케이션에서는 분산 프레임워크인 Hadoop을 통해 병렬 데이터 처리를 효과적으로 수행할 수 있다.
이 기사는 Hadoop 및 아키텍처를 소개하기 위한 것이 아니라 간단한 Hadoop 설정을 보여 주기 위한 것이다. 참고자료 섹션에서 Hadoop 아키텍처, 컴포넌트 및 작동 원리에 대한 자세한 정보를 볼 수 있다. 해당 면책사항을 검토한 후 Hadoop 설치 및 구성 과정을 살펴보자.
이 데모에서는 Cloudera Hadoop 배포판을 사용한다. 이 배포판에는 다양한 Linux® 배포판을 위한 지원이 있으므로 시작하기에 이상적이다.
이 기사에서는 시스템에 Java™ 기술(릴리스 1.6 이상)과 cURL이 설치되어 있는 것으로 가정한다. 그렇지 않은 경우에는 이러한 항목을 먼저 추가해야 한다. 이 설치에 대한 자세한 정보를 보려면 참고자료 섹션을 참조한다.
필자는 Ubuntu(Intrepid 릴리스)에서 실행 중이므로 apt
유틸리티를 사용하여 Hadoop 배포판을 가져왔다. 이 프로세스는 매우 단순하며 소스를 다운로드
및 빌드하는 추가 과정 없이 2진 패키지를 가져올 수 있다. 먼저 apt에게
Cloudera 사이트를 알려준다. 그런 다음 /etc/apt/sources.list.d/cloudera.list에 새 파일을 작성하고
다음 텍스트를 추가한다.
deb http://archive.cloudera.com/debian intrepid-cdh3 contrib deb-src http://archive.cloudera.com/debian intrepid-cdh3 contrib |
Jaunty 또는 다른 릴리스를 실행 중인 경우에는 intrepid를 특정 릴리스 이름으로 바꾼다. (현재 지원되는 릴리스로는 Hardy, Intrepid, Jaunty, Karmic 및 Lenny가 있다.)
그런 다음 Cloudera의 apt-key를 가져와서 다운로드된 패키지의 유효성을 검증한다.
$ curl -s http://archive.cloudera.com/debian/archive.key | \ sudo apt-key add - sudo apt-get update |
그런 다음 단일 호스트에서 모든 Hadoop 디먼이 실행되는 가상 분산 구성을 위한 Hadoop을 설치한다.
$ sudo apt-get install hadoop-0.20-conf-pseudo $ |
이 구성에는 약 23MB가 사용된다(apt가 가져오지만
없을 수도 있는 다른 패키지를 포함하지 않음). 이 설치는 Hadoop을 사용하고 해당 요소 및
인터페이스를 배우는 데 이상적이다.
마지막으로 비밀번호 문구(passphrase)를 사용하지 않는 SSH를 설정한다. ssh
localhost를 사용할 때 비밀번호 문구가 요청되면 다음 단계를 수행해야 한다. 이 단계에서는
몇 가지 보안 개념이 적용되므로 전용 Hadoop 상자라고 가정한다(Listing 1 참조).
Listing 1. 비밀번호 문구를 사용하지 않는 SSH 설정하기
$ sudo su - # ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa # cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys |
마지막으로 사용자의 호스트에 데이터 노드(캐시)에 사용할 저장 공간이 충분히 있는지 확인해야 한다. 저장 공간이 부족하면 예기치 않은 결과가 발생한다(예를 들어, 노드에 복제할 수 없음을 나타내는 오류).
이제 Hadoop을 시작할 준비가 완료되었다. 이제 각 Hadoop 디먼을 시작하여
효과적으로 Hadoop을 시작할 수 있다. 하지만 먼저, hadoop 명령을
사용하여 HDFS(Hadoop File System)를 포맷한다. hadoop 명령은
여러 가지 방법으로 사용할 수 있으며, 여기에서는 몇 가지 방법만 간단히 살펴본다.
먼저, DFS 파일 시스템을 포맷할 namenode를 요청한다. 설치 과정의 일부로 이 작업을 수행하기는 하지만 깨끗한 파일 시스템을 생성할 필요가 있을 경우를 대비해서 알고 있으면 유용하다.
# hadoop-0.20 namenode -format |
요청을 승인하면 파일 시스템이 포맷되고 일부 정보가 리턴된다. 그런 다음 Hadoop 디먼을 시작한다. 이 가상 분산 구성에서는 Hadoop이 namenode, secondarynamenode, datanode, jobtracker 및 tasktracker라는 5개의 디먼을 시작한다. 각 디먼이 시작되면 각 디먼의 로그가 저장된 위치를 식별하는 간단한 텍스트가 표시된다. 각 디먼은 백그라운드에서 디먼으로 실행되도록 시작된다. 그림 1에서는 시작이 완료된 후 가상 분산 노드의 모습을 보여 준다.
그림 1. 가상 분산 Hadoop 구성
Hadoop에는 시작 작업을 간소화할 수 있는 도우미 도구가 있다. 이러한 도구는
시작(예: start-dfs)과 중지(예: stop-dfs)로
분류된다. 아래의 간단한 스크립트는 Hadoop 노드를 시작하는 방법을 보여 준다.
# /usr/lib/hadoop-0.20/bin/start-dfs.sh # /usr/lib/hadoop-0.20/bin/start-mapred.sh # |
디먼이 실행 중인지 확인하기 위해 jps 명령(JVM
프로세스의 ps 유틸리티)을 사용할 수 있다. 이 명령은 5개의
디먼과 해당 프로세스 ID를 나열한다.
이제 Hadoop 디먼이 실행되고 있으므로 Hadoop 프레임워크에서 각 디먼이 수행하는 작업을 살펴보자. namenode는 Hadoop의 마스터 서버이며 파일 시스템 네임스페이스와 클러스터에 저장된 파일에 대한 액세스를 관리한다. 그리고 secondary namenode는 namenode에 대한 중복 디먼이 아니며 주기적인 검사 및 관리 작업을 제공한다. Hadoop 클러스터에는 namenode와 secondary namenode가 하나씩 있다.
datanode는 클러스터에 있는 여러 노드 중 한 노드에 연결된 저장 공간을 관리한다. 데이터를 저장하는 각 노드에서는 datanode 디먼이 실행된다.
마지막으로 각 클러스터에는 단일 jobtracker가 있다. 이 디먼은 datanode와 실제 작업을 수행하는 datanode별 tasktracker의 작업을 스케줄링하는 역할을 담당한다. jobtracker와 tasktracker는 마스터-슬레이브 관계로 작동하며, jobtracker는 datanode에 작업을 분배하고 tasktracker는 작업을 수행한다. 또한 jobtracker는 요청된 작업의 유효성을 검증하고 datanode가 실패할 경우 이전 작업을 다시 스케줄링한다.
이 간단한 구성에서는 모든 노드가 동일한 노드에 있다(그림 1 참조). 앞에서 설명한 것처럼 Hadoop의 병렬 작업 처리 방법은 쉽게 알 수 있다. 아키텍처가 단순하기는 하지만 Hadoop은 내결함성이 있는 방식으로 대용량 데이터를 손쉽게 분배, 로드 조정 및 병렬 처리할 수 있는 방법을 제공한다.
두 가지 테스트를 수행하여 Hadoop(최소한 namenode)이 정상적으로 실행 중인지
확인할 수 있다. 모든 프로세스를 사용할 수 있다면 hadoop 명령을
사용하여 로컬 네임스페이스를 검사할 수 있다(Listing 2 참조).
Listing 2. HDFS에 대한 액세스 검사하기
# hadoop-0.20 fs -ls / Found 2 items drwxr-xr-x - root supergroup 0 2010-04-29 16:38 /user drwxr-xr-x - root supergroup 0 2010-04-29 16:28 /var # |
이제부터 namenode가 실행 중이고 로컬 네임스페이스에 서비스를 제공할 수
있다는 것을 알 수 있다. 여기에서는 hadoop-0.20이라는 명령을
사용하여 파일 시스템을 검사하고 있다. 이 유틸리티는 파일 시스템을 검사하고 클러스터 작업을
실행하는 등의 Hadoop 클러스터 관련 작업을 수행하는 데 사용된다. 명령 구조는 다음과 같다.
hadoop-0.20 유틸리티를 지정한 후 명령(이 경우에는 일반 파일
시스템 쉘)과 하나 이상의 옵션(이 경우에는 ls로 파일 목록 요청)을
정의한다. hadoop-0.20이 Hadoop 클러스터에 대한 주요 인터페이스
중 하나이므로 이 기사에서는 이 유틸리티를 자주 사용한다. Listing 3에서는 이 인터페이스를 조금
더 자세히 살펴보는 데 사용할 수 있는 몇 가지 추가 파일 시스템 작업을 보여 준다. (test라는
서브디렉토리를 작성하고 서브디렉토리의 내용을 나열한 다음 서브디렉토리를 제거한다.)
Listing 3. Hadoop의 파일 시스템 조작 탐색하기
# hadoop-0.20 fs -mkdir test # hadoop-0.20 fs -ls test # hadoop-0.20 fs -rmr test Deleted hdfs://localhost/user/root/test # |
이제 Hadoop을 설치하고 파일 시스템에 대한 기본 인터페이스를 테스트했으므로 실제 애플리케이션에서 Hadoop을 테스트할 차례이다. 이 예제에서는 작은 데이터 세트에 대한 MapReduce 프로세스를 보여 준다. 맵핑(Map)과 축소(Reduce)는 함수형 프로그래밍의 함수 이름을 따서 붙여진 것이지만 데이터 축소를 위한 핵심 기능을 제공한다. 맵핑은 입력을 처리하기 위해 더 작은 하위 문제점 세트로 나누는 프로세스를 의미한다. (이러한 하위 문제점은 병렬 작업자에게 분배된다.) 축소는 하위 문제점의 응답을 단일 출력 세트로 조합하는 것을 의미한다. 여기에서는 처리의 의미를 정의하지 않았다. 왜냐하면 프레임워크에서 사용자가 직접 그 의미를 정의할 수 있기 때문이다. 일반적인 MapReduce는 문서 세트에 있는 단어의 빈도를 계산하는 것이다.
앞의 설명에 따라 하나의 입력 세트와 결과적으로 발생하는 출력 세트를 사용하게 된다. 첫 번째 단계는 파일 시스템에 작업을 저장할 input 서브디렉토리를 작성하는 것이다. 다음 명령을 사용하여 이를 수행한다.
# hadoop-0.20 fs -mkdir input |
그런 다음 input 서브디렉토리에 일부 작업을 저장한다. 이 경우에는 로컬 파일
시스템의 파일을 HDFS로 이동하는 put 명령을 사용한다(Listing 4
참조). 아래 형식은 소스 파일을 HDFS 서브디렉토리(input)로 이동한다. 완료되면 처리할 준비가
된 두 개의 텍스트 파일이 HDFS에 생성된다.
Listing 4. HDFS로 파일 이동하기
# hadoop-0.20 fs -put /usr/src/linux-source-2.6.27/Doc*/memory-barriers.txt input # hadoop-0.20 fs -put /usr/src/linux-source-2.6.27/Doc*/rt-mutex-design.txt input # |
이제 ls 명령을 사용하여 파일이 있는지 확인할 수
있다(Listing 5 참조).
Listing 5. HDFS의 파일 검사하기
# hadoop-0.20 fs -ls input Found 2 items -rw-r--r-- 1 root supergroup 78031 2010-04-29 17:35 /user/root/input/memory-barriers.txt -rw-r--r-- 1 root supergroup 33567 2010-04-29 17:36 /user/root/input/rt-mutex-design.txt # |
HDFS에 작업을 저장했으므로 이제 MapReduce 함수를 수행할 수 있다. 이 함수를
실행하려면 단일 명령이지만 긴 요청이 필요하다(Listing 6 참조). 이 명령은 JAR의 실행을
요청한다. 실제로는 수많은 기능을 구현하지만 이 예제에서는 wordcount에만
집중한다. jobtracker 디먼이 datanode에게 MapReduce 작업을 수행하도록 요청하면 결과적으로
상당한 양의 출력이 발생한다. (여기에서는 두 파일만 처리하므로 출력의 양이 작다.) 이 출력은
map 및 reduce 함수의 진행 상황을 보여 준 후 파일 시스템 및 레코드 처리에 대한 I/O와 관련된
유용한 통계를 제공한다.
Listing 6. 단어 빈도(wordcount)를 위한 MapReduce 작업 수행하기
# hadoop-0.20 jar /usr/lib/hadoop-0.20/hadoop-0.20.2+228-examples.jar \ wordcount input output 10/04/29 17:36:49 INFO input.FileInputFormat: Total input paths to process : 2 10/04/29 17:36:49 INFO mapred.JobClient: Running job: job_201004291628_0009 10/04/29 17:36:50 INFO mapred.JobClient: map 0% reduce 0% 10/04/29 17:37:00 INFO mapred.JobClient: map 100% reduce 0% 10/04/29 17:37:06 INFO mapred.JobClient: map 100% reduce 100% 10/04/29 17:37:08 INFO mapred.JobClient: Job complete: job_201004291628_0009 10/04/29 17:37:08 INFO mapred.JobClient: Counters: 17 10/04/29 17:37:08 INFO mapred.JobClient: Job Counters 10/04/29 17:37:08 INFO mapred.JobClient: Launched reduce tasks=1 10/04/29 17:37:08 INFO mapred.JobClient: Launched map tasks=2 10/04/29 17:37:08 INFO mapred.JobClient: Data-local map tasks=2 10/04/29 17:37:08 INFO mapred.JobClient: FileSystemCounters 10/04/29 17:37:08 INFO mapred.JobClient: FILE_BYTES_READ=47556 10/04/29 17:37:08 INFO mapred.JobClient: HDFS_BYTES_READ=111598 10/04/29 17:37:08 INFO mapred.JobClient: FILE_BYTES_WRITTEN=95182 10/04/29 17:37:08 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=30949 10/04/29 17:37:08 INFO mapred.JobClient: Map-Reduce Framework 10/04/29 17:37:08 INFO mapred.JobClient: Reduce input groups=2974 10/04/29 17:37:08 INFO mapred.JobClient: Combine output records=3381 10/04/29 17:37:08 INFO mapred.JobClient: Map input records=2937 10/04/29 17:37:08 INFO mapred.JobClient: Reduce shuffle bytes=47562 10/04/29 17:37:08 INFO mapred.JobClient: Reduce output records=2974 10/04/29 17:37:08 INFO mapred.JobClient: Spilled Records=6762 10/04/29 17:37:08 INFO mapred.JobClient: Map output bytes=168718 10/04/29 17:37:08 INFO mapred.JobClient: Combine input records=17457 10/04/29 17:37:08 INFO mapred.JobClient: Map output records=17457 10/04/29 17:37:08 INFO mapred.JobClient: Reduce input records=3381 |
처리가 완료되면 결과를 확인한다. 작업의 핵심은 입력 파일에서 발생한 단어의
수를 계산하는 것이다. 이 출력은 단어와 단어가 입력에 나타난 수를 나타내는 요소로 구성된
파일로 생성된다. hadoop-0.20 유틸리티를 통해 cat
명령을 사용하여(특정 출력 파일을 찾은 후) 이 데이터를 표시할 수 있다(Listing 7 참조).
Listing 7. MapReduce wordcount 작업의 출력 검토하기
# hadoop-0.20 fs -ls /user/root/output Found 2 items drwxr-xr-x - root supergroup 0 2010-04-29 17:36 /user/root/output/_logs -rw-r--r-- 1 root supergroup 30949 2010-04-29 17:37 /user/root/output/part-r-00000 # # hadoop-0.20 fs -cat output/part-r-00000 | head -13 != 1 "Atomic 2 "Cache 2 "Control 1 "Examples 1 "Has 7 "Inter-CPU 1 "LOAD 1 "LOCK" 1 "Locking 1 "Locks 1 "MMIO 1 "Pending 5 # |
hadoop-0.20 유틸리티를 사용하여 HDFS에서 파일을
추출할 수도 있다(Listing 8 참조). get 유틸리티(앞에서 HDFS에
파일을 작성하기 위해 실행한 put과 유사)를 사용하여 이 작업을
쉽게 수행할 수 있다. get 작업의 경우 output 서브디렉토리에서
추출할 HDFS의 파일과 로컬 파일 시스템에 작성할 파일 이름(output.txt)을 지정한다.
Listing 8. HDFS에서 출력 추출하기
# hadoop-0.20 fs -get output/part-r-00000 output.txt # cat output.txt | head -5 != 1 "Atomic 2 "Cache 2 "Control 1 "Examples 1 # |
동일한 JAR을 사용하지만 용도가 다른 또 하나의 예제를 살펴보자. (여기에서는
병렬 grep을 살펴본다.) 이 테스트에서는 기존 입력 파일을 사용하지만
output 서브디렉토리를 제거한 후 다시 작성한다.
# hadoop-0.20 fs -rmr output Deleted hdfs://localhost/user/root/output |
그런 다음 MapReduce 작업에 grep을 요청한다. 이
경우에는 grep이 병렬로 수행된(맵핑) 다음 grep
결과가 결합된다(축소). Listing 9에서는 이 사용 모델의 출력을 보여 준다. (하지만 이 경우에는
간략하게 보여 주기 위해 일부 출력이 생략되었다.) 이 예제의 명령 요청을 보면 grep
요청이 input 서브디렉토리에서 입력을 가져온 후 output 서브디렉토리에 결과를
저장한다. 마지막 매개변수는 검색하려는 문자열이다(이 경우에는 'kernel').
Listing 9. 단어 검색 수(grep)를 위한 MapReduce 작업 수행하기
# hadoop-0.20 jar /usr/lib/hadoop/hadoop-0.20.2+228-examples.jar \ grep input output 'kernel' 10/04/30 09:22:29 INFO mapred.FileInputFormat: Total input paths to process : 2 10/04/30 09:22:30 INFO mapred.JobClient: Running job: job_201004291628_0010 10/04/30 09:22:31 INFO mapred.JobClient: map 0% reduce 0% 10/04/30 09:22:42 INFO mapred.JobClient: map 66% reduce 0% 10/04/30 09:22:45 INFO mapred.JobClient: map 100% reduce 0% 10/04/30 09:22:54 INFO mapred.JobClient: map 100% reduce 100% 10/04/30 09:22:56 INFO mapred.JobClient: Job complete: job_201004291628_0010 10/04/30 09:22:56 INFO mapred.JobClient: Counters: 18 10/04/30 09:22:56 INFO mapred.JobClient: Job Counters 10/04/30 09:22:56 INFO mapred.JobClient: Launched reduce tasks=1 10/04/30 09:22:56 INFO mapred.JobClient: Launched map tasks=3 10/04/30 09:22:56 INFO mapred.JobClient: Data-local map tasks=3 10/04/30 09:22:56 INFO mapred.JobClient: FileSystemCounters 10/04/30 09:22:56 INFO mapred.JobClient: FILE_BYTES_READ=57 10/04/30 09:22:56 INFO mapred.JobClient: HDFS_BYTES_READ=113144 10/04/30 09:22:56 INFO mapred.JobClient: FILE_BYTES_WRITTEN=222 10/04/30 09:22:56 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=109 ... 10/04/30 09:23:14 INFO mapred.JobClient: Map output bytes=15 10/04/30 09:23:14 INFO mapred.JobClient: Map input bytes=23 10/04/30 09:23:14 INFO mapred.JobClient: Combine input records=0 10/04/30 09:23:14 INFO mapred.JobClient: Map output records=1 10/04/30 09:23:14 INFO mapred.JobClient: Reduce input records=1 # |
작업이 완료되면 output 디렉토리를 검사하여 결과 파일을 식별한 후 파일 시스템
cat 작업을 수행하여 해당 내용을 본다(Listing 10 참조).
Listing 10. MapReduce 작업의 출력 검사하기
# hadoop-0.20 fs -ls output Found 2 items drwxr-xr-x - root supergroup 0 2010-04-30 09:22 /user/root/output/_logs -rw-r--r-- 1 root supergroup 10 2010-04-30 09:23 /user/root/output/part-00000 # hadoop-0.20 fs -cat output/part-00000 17 kernel # |
지금까지 HDFS를 검사하는 방법을 살펴보았다. 하지만 Hadoop의 작업에 대한 정보를 보는 데는 웹 인터페이스가 유용하다. Hadoop 클러스터의 맨 위에는 HDFS를 관리하는 namenode가 있다. http://localhost:50070을 통해 사용 가능한 공간, 사용한 공간 및 사용 가능한 datanode 등과 같은 상위 레벨 파일 시스템 정보와 실행 중인 작업 등을 탐색할 수 있다. http://localhost:50030을 통해 jobtracker(작업 상태)를 자세히 살펴볼 수 있다. 두 경우 모두 모든 디먼이 동일한 호스트에서 실행 중이므로 localhost를 참조한다.
이 기사에서는 간단한(가상 분산) Hadoop 클러스터의 설치 및 초기 구성을 살펴보았다(Cloudera의 Hadoop 배포판 사용). 이 특정 배포판을 선택한 이유는 Hadoop의 설치 및 초기 구성이 쉽기 때문이다. apache.org에서 다양한 Hadoop 배포판(소스 포함)을 찾을 수 있다. 자세한 정보는 참고자료 섹션을 참조한다.
하지만 하드웨어 자원이 부족하여 자신의 요구에 맞게 Hadoop 클러스터를 확장할 수 없는 경우에는 어떻게 할 것인가? Hadoop은 인지도가 높기 때문에 사전 빌드된 Hadoop VM 및 임대 서버를 사용하는 클라우드 컴퓨팅 인프라 내에서 쉽게 실행할 수 있다. Amazon에서는 Amazon EC2(Amazon Elastic Compute Cloud) 내에서 AMI(Amazon Machine Image)와 컴퓨팅 자원을 제공한다. 또한 Microsoft에서도 최근에 Windows® Azure Services Platform 내에서 Hadoop 지원을 제공하게 될 것이라고 발표했다.
이 기사에서는 Hadoop을 사용하여 대량 데이터세트를 처리하기 위한 분산 컴퓨팅 환경을 매우 쉽게 구성할 수 있다는 것을 살펴보았다. 이 시리즈의 다음 기사에서는 추가 예제와 함께 다중 노드 클러스터에서 Hadoop을 구성하는 방법에 대해 설명한다. 후속 기사에서 만나길 바란다.
교육
-
Yahoo!의 Doug Cutting(현재는
Cloudera 소속)은 Nutch 검색 엔진의 분배를 지원하기 위해 Hadoop을 개발했다.
-
Hadoop 개발의 주 사이트는 Apache 프로젝트이다.
-
Cloudera에서는 쉽게 시작할 수 있도록 지원하기 위해 사전 패키징된 Hadoop 및 VM을 제공한다.
- 라이센스 위반을 걱정하지 않고 Hadoop을 안전하게 사용할 수 있도록 최근 Google에서 Hadoop에 부여한
라이센스를
살펴보자. Google에는 Hadoop의 아이디어에 대한 특허를 보유하고 있다(특허 7,650,331에 정의된 효율적인 대용량 데이터 처리).
- "Distributed
computing with Linux and Hadoop"(developerWorks, 2008년 12월) 및 최근의 "Linux와
Apache Hadoop을 사용한 클라우드 컴퓨팅"(developerWorks, 2009년 10월)에서 Hadoop 및 아키텍처에 대한 자세한 정보를 볼 수 있다.
- Google의 세미나 문서에서 이 함수형 프로그래밍에 대해 설명하는
MapReduce: Simplified Data Processing on Large Clusters를 읽어보자.
-
Wikipedia에 게시된 MapReduce에 대한 소개를 읽어보자.
- Apache 사이트에서 Hadoop 유틸리티의 명령을 살펴보자.
- Hadoop
on the horizon 및 IBM의 jStart(신기술 분야)에 대해 배워보자. jStart에서는 웹 데이터를 통해 비즈니스 인텔리전스를
확장할 수 있는 IBM의 매시업인 BigSheets에 대해서도
배울 수 있다.
- developerWorks 리눅스 영역에서는
Linux 개발자와 관리자에게 도움이 되는 수백 편의 사용법
기사 및 튜토리얼과 다운로드, 토론 포럼 및 기타 다양한 참고자료를 볼 수 있다.
- developerWorks
기술 행사 및 웹 캐스트를 통해 다양한 IBM 제품 및 IT 산업 주제에 대한 최신 정보를 얻을 수 있다.
- 무료 developerWorks Live!
briefing을 통해 최신 IBM 제품 및 도구에 대한 정보뿐만 아니라 IT 업계의 최신 경향까지도 빠르게 확인할 수 있다.
- developerWorks
on-demand demos에서는 입문자를 위한 제품 설치 및 설정부터 숙련된 개발자를 위한 고급 기능까지 망라된 다양한 데모를 제공한다.
- Twitter의 developerWorks를 팔로우(follow)하거나
developerWorks에 대한 Linux 트윗(tweet)의 피드를 구독하자.
제품 및 기술 얻기
-
Cloudera에서는 수많은 무료(그러면서도 안정적인)
Hadoop 배포판을 제공한다. 다양한 Linux 배포판을 위한 배포판,
VM 및 Amazon
EC2용 VM을 다운로드할 수 있다.
-
이 기사를 집필하던 당시 Windows Azure
클라우드에서는 Hadoop을 VM으로 제공하려고 준비하고 있으며, Amazon에서는 확장 가능한 Amazon EC2
인프라 내에서 Hadoop용 머신 이미지를 제공하고 있다.
-
자신에게 가장 적합한 방법으로 IBM 제품을 평가해 보자.
시험판 제품을 다운로드하거나 온라인으로 제품을 사용해 보거나 클라우드 환경에서 제품을 사용하거나
SOA Sandbox에서
SOA(Service Oriented Architecture)를 효과적으로 구현하는 방법을 배울 수 있다.
토론
- My developerWorks 커뮤니티에 참여하자.
개발자 중심 블로그, 포럼, 그룹 및 Wiki 검색 중에 다른 developerWorks
사용자와 의견을 교환해 보자.
M. Tim Jones는 임베디드 펌웨어 아키텍트이자 Artificial Intelligence: A Systems Approach, GNU/Linux Application Programming(현재 2판), AI Application Programming(현재 2판) 및 BSD Sockets Programming from a Multilanguage Perspective의 저자이다. 정지 위성을 위한 커널 개발에서 시작해 임베디드 시스템 아키텍처와 네트워크 프로토콜 개발에 이르기까지 다양한 분야에 대한 공학 지식을 가지고 있다. 콜로라도주 롱몬트 소재의 Emulex Corp.에서 컨설턴트 엔지니어로 활약하고 있다.