0. 시작에 앞서
이 문서의 내용은 Hadoop Wiki에 나와있는 Windows에서 Hadoop 2.x (또는 그 이상) 버전을 빌드, 설치하는 방법의 핵심만 추출하여 인용하였다.
만약, 이 문서를 따르지 않고 Apache Hadoop official site에서 binary를 다운 받아서 진행한 경우 HDFS 데몬을 실행하는 과정에서 아래와 같은 3가지 에러 메시지를 확인 할 수 있으며 경험상 디버깅이 불가능하다.
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
FATAL datanode.DataNode: Exception in secureMain
java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
FATAL datanode.DataNode: Exception in secureMain
java.lang.NullPointerException
|
하둡을 설치할 때에는 반드시 직접 빌드하거나, 빌드된 버전을 다운받아서 진행해야 한다.
1. 설치 준비
준비물: java, hadoop binaries
apache official site에서 제공되는 binaries는 winutils.exe 등을 포함하지 않으므로 hadoop을 build 해야한다.
하지만 어떤 고마운 사람들이 pre-compiled version을 올려주기도 한다.
참고로, 위 버전의 컴파일 환경이다.
- Apache Maven 3.2.5
- CMake 3.1.0
- MinGW: Minimalist GNU for Windows, specifically with sh, mkdir, rm, cp, tar, and gzip.
- Oracle Java 7u71. Note that the newer Java 8 will not work out of the box due to doclint errors.
- Google Protocol Buffers 2.5.0. The pom file is hard-coded to use 2.5.0.
- Microsoft Windows SDK for Windows 7 and .NET Framework. Alternatively, you may use Visual Studio 2010 Professional. Visual Studio 2012 and later will not work without modification of the build scripts.
환경 변수에 JAVA_HOME이라는 이름으로 java 설치 경로를 입력해준다. 이 때 공백(space)이 있으면 제대로 동작하지 않을 수 있다.
예)
set JAVA_HOME=C:\Java\jdk1.7.0_45 |
2. 싱글 노드 클러스터(가상 분산 모드) 구성하기
2.1. HDFS 환경설정
pre-compiled binaries 압축 파일을 풀면 여러 폴더가 있다.
그 중에 etc\hadoop은 여러가지 환경설정을 저장하고 있는 폴더이다.
편의상 하둡이 설치된 경로를 %HADOOP_PREFIX%라고 표시한다.
%HADOOP_PREFIX%\etc\hadoop\hadoop-env.cmd 파일을 열어 파일의 끝에 다음을 추가한다. 예시에서 c:\deploy가 하둡이 설치된 경로이다.
set HADOOP_PREFIX=c:\deploy
set HADOOP_CONF_DIR=%HADOOP_PREFIX%\etc\hadoop
set YARN_CONF_DIR=%HADOOP_CONF_DIR% set PATH=%PATH%;%HADOOP_PREFIX%\bin
|
%HADOOP_PREFIX%\etc\hadoop\core-site.xml 파일을 열어 다음과 같이 설정한다.
<configuration>
<property> <name>fs.default.name</name> <value>hdfs://0.0.0.0:19000</value> </property> </configuration>
|
%HADOOP_PREFIX%\etc\hadoop\hdfs-site.xml 파일을 열어 다음과 같이 설정한다.
<configuration>
<property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
|
%HADOOP_PREFIX%\etc\hadoop\slaves 파일을 열어 다음과 같이 설정한다.
localhost |
2.2. YARN 환경설정
%HADOOP_PREFIX%\etc\hadoop\mapred-site.xml 파일을 열거나 생성하여 다음과 같이 설정한다.
<configuration>
<property>
<name>mapreduce.job.user.name</name> <value>%USERNAME%</value> </property> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>yarn.apps.stagingDir</name> <value>/user/%USERNAME%/staging</value> </property> <property> <name>mapreduce.jobtracker.address</name> <value>local</value> </property>
</configuration>
|
%HADOOP_PREFIX%\etc\hadoop\yarn-site.xml 파일을 열거나 생성하여 다음과 같이 설정한다.
<configuration>
<property> <name>yarn.server.resourcemanager.address</name> <value>0.0.0.0:8020</value> </property> <property> <name>yarn.server.resourcemanager.application.expiry.interval</name> <value>60000</value> </property> <property> <name>yarn.server.nodemanager.address</name> <value>0.0.0.0:45454</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.server.nodemanager.remote-app-log-dir</name> <value>/app-logs</value> </property> <property> <name>yarn.nodemanager.log-dirs</name> <value>/dep/logs/userlogs</value> </property> <property> <name>yarn.server.mapreduce-appmanager.attempt-listener.bindAddress</name> <value>0.0.0.0</value> </property> <property> <name>yarn.server.mapreduce-appmanager.client-service.bindAddress</name> <value>0.0.0.0</value> </property> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>-1</value> </property> <property> <name>yarn.application.classpath</name> <value> %HADOOP_CONF_DIR%, %HADOOP_COMMON_HOME%/share/hadoop/common/*, %HADOOP_COMMON_HOME%/share/hadoop/common/lib/*, %HADOOP_HDFS_HOME%/share/hadoop/hdfs/*, %HADOOP_HDFS_HOME%/share/hadoop/hdfs/lib/*, %HADOOP_MAPRED_HOME%/share/hadoop/mapreduce/*, %HADOOP_MAPRED_HOME%/share/hadoop/mapreduce/lib/*, %HADOOP_YARN_HOME%/share/hadoop/yarn/*, %HADOOP_YARN_HOME%/share/hadoop/yarn/lib/* </value> </property> </configuration>
|
2.3. 환경변수 초기화
%HADOOP_PREFIX%\etc\hadoop\hadoop-env.cmd 파일을 실행시킨다.
2.4. 파일시스템 포맷
command line에서 다음과 같은 명령을 통해 파일 시스템을 포맷시킨다. 실행결과가 에러메시지 없이 종료되었다면 포맷이 성공한 것이다.
%HADOOP_PREFIX%\bin\hdfs namenode -format |
2.5. HDFS 데몬 시작
command line에서 다음과 같은 명령을 통해 localhost에서 NameNode와 DataNode가 실행시킨다.
%HADOOP_PREFIX%\sbin\start-dfs.cmd |
제대로 HDFS 데몬이 실행되고 있다면, 다음과 같이 파일을 넣어서 테스트를 할 수 있다. 다시 한번 말하지만 C:\deploy는 하둡이 설치된 경로이다.
C:\deploy>bin\hdfs dfs -put myfile.txt /
C:\deploy>bin\hdfs dfs -ls / Found 1 items drwxr-xr-x - username supergroup 4640 2014-01-18 08:40 /myfile.txt C:\deploy>
|
2.6. YARN 데몬 시작 및 YARN job 실행
command line에서 다음과 같은 명령을 통해 YARN 데몬을 실행시킨다.
%HADOOP_PREFIX%\sbin\start-yarn.cmd |
클러스터가 제대로 동작하는지 확인하기 위해서 다음과 같은 wordcount job을 실행시킬 수 있다. 실행하기 전에 example jar 파일이 올바른 경로에 있는지 확인하고 동작시켜야 한다.
%HADOOP_PREFIX%\bin\yarn jar %HADOOP_PREFIX%\share\hadoop\mapreduce\hadoop-mapreduce-examples-2.6.0.jar wordcount /myfile.txt /out |