Preprequisites

Installing Oracle Java

OpenJDK는 퍼포먼스가 Oracle Java에 비해서 늦습니다. Oracle Java 8을 설치하도록 하겠습니다.
Hadoop Supported Java version

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

Installing requisite softwares

sudo apt-get install ssh rsync

Adding Hadoop User (Optional)

보안, 백업, 관리 등등의 이유로 Hadoop 유저를 새로 생성하는 것이 좋습니다. 물론 requirement 는 아닙니다.

# 만약 perl locale 에러가 나면..
# sudo locale-gen ko_KR.UTF-8

sudo addgroup hadoop
sudo adduser --ingroup hadoop hduser
sudo adduser hduser sudo

Configuring ssh and sshd

하둡은 ssh를 통해서 각각의 노드들을 관리합니다. 2번째 문장이 key pair를 만들게 되는데 패스워드는 없는 것으로 설정을 합니다. 보안이 걱정된다면 암호를 넣는게 맞고, 하둡이 노드에 연결될때마다 패스워드 넣어야 하는 귀차니즘이 걱정되면 넣지 않으면 됩니다.

su hduser
ssh-keygen -t rsa -P ""
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys

다음의 명령어로 제대로 작동을 하는지 확인을 합니다.

ssh localhost

만약에 Connection Refused가 나면 ssh server 가 설치가 안되어 있어서 그럴수도 있습니다.
또는 /etc/ssh/sshd_config 설정을 확인해보시면 됩니다.

sudo apt-get install openssh-server

Hadoop Installation

Prerequisites

다음을 설치해줍니다.

sudo apt-get install maven libssl-dev build-essential pkgconf cmake findbugs

Protobuf-2.5

protobuf 는 반드시 2.5 여야 합니다.
protoc –version 버젼이 2.5 초과라면 다음과 같이 2.5를 설치합니다.

wget https://github.com/google/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gz
tar xzvf protobuf-2.5.0.tar.gz
cd  protobuf-2.5.0
./configure
make
make check
sudo make install
sudo ldconfig
protoc --version 

FindBugs Source (Windows)

findbugs-sourceforge 에서 source 를 다운받습니다.
압축해제후 원하는 곳으로 findbugs source를 이동시키고 FINDBUGS_HOME을 설정해줍니다. (아래는 예제)

unzip findbugs-3.0.1-source.zip
export FINDBUGS_HOME=/home/anderson/apps/findbugs-3.0.1
  • -Pdist 할때 docs를 넣게 되면 FindBugs가 필요합니다.

Installation from Source

Hadoop Download

다운로드 페이지에서 hadoop-2.7.3-src.tar.gz 파일을 다운로드 합니다. (소스 코드 파일) 압축을 해제시키고 압축을 해제한 폴더로 들어갑니다.

  • package 는 build 명령어
  • -Pdist는 native code, documentation 없이 build하라는 뜻
  • -Pdist,native 는 native code와 함께 build하라는 뜻
  • -Pdist,native,docs 는 native code 그리고 documentation과 함께 빌드하라는 뜻
  • -DskipTests 테스트를 skip
  • -Dtar 는 tar파일을 만듭니다.

hduser로 로그인해서 해야합니다. 반드시!

su hduser
tar xvf hadoop-*src.tar.gz
cd hadoop-*src

# mvn package -Pdist,docs,src,native -DskipTests -Dtar 

mvn package -Pdist,docs,src,native -DskipTests -Dtar
sudo cp -R hadoop-dist/target/hadoop-* /usr/local/
sudo chown -R hduser:hadoop /usr/local/hadoop-*
sudo ln -s /usr/local/hadoop-*/ /usr/local/hadoop

빌드가 끝난후 hadoop-dist/target/hadoop-2.7.3 디렉토리를 /usr/local 에다가 복사합니다.
또는 이미 설치가 되있는 상태라면, hadoop-dist/target/hadoop-2.7.3/lib/native 안의 내용물만 복사하면 됩니다.

.bashrc

다음의 명령어들을 .bashrc에 넣어주시면 됩니다. (설정값들은 변경해주셔야 합니다.)

참고로 HADOOP_HOME 은 deprecated 되었습니다.
대신에 HADOOP_PREFIX를 사용합니다.

# Java
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
unset JAVA_TOOL_OPTIONS

# Hadoop
export HADOOP_PREFIX=/usr/local/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_PREFIX
export HADOOP_COMMON_HOME=$HADOOP_PREFIX
export HADOOP_HDFS_HOME=$HADOOP_PREFIX
export YARN_HOME=$HADOOP_PREFIX
export HADOOP_CONF_DIR=$HADOOP_PREFIX/conf
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_PREFIX/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_PREFIX/lib/native"
export HADOOP_CLASSPATH=$HADOOP_PREFIX/conf
export CLASSPATH=$CLASSPATH:$HADOOP_PREFIX/lib/*:.
export PATH=$PATH:$HADOOP_PREFIX/bin
export PATH=$PATH:$HADOOP_PREFIX/sbin

Checking Installation

설치 확인 하는 방법..

hadoop checknative -a

다른 방법…

hduser:hadoop>file ./lib/native/libhadoop.so.1.0.0 
./lib/native/libhadoop.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=cb34de90c6ae1192cf393441f9a5e0f6f0465e7c, not stripped

Hadoop Configuration

Standalone Mode Configuration

기본적으로 하둡은 non-distributed mode 즉 single Java process로 돌아가도록 설정이 이미 되어 있습니다.
Standalone Mode는 개발, 디버깅, 테스팅을 위해서 유용합니다.
먼저 기본적으로 제공되는 conf파일들을 모두 설치된 하둡으로 카피해줍니다.
(이때 바로 conf디렉토리가 없으면 만들어줍니다.)

# hduser인 상태에서..
mkdir /usr/local/hadoop/conf
cp hadoop-dist/target/hadoop-*/etc/hadoop/*.xml /usr/local/hadoop/conf

그 다음 아래의 파일들과 동일하게 설정을 해줍니다.

최소한 $HADOOP_PREFIX/conf/core-site.xml 그리고 conf/hadoop-env.sh 가 존재해야 합니다.

conf/hadoop.env.sh

JAVA_HOME에 대한 경로를 변경시켜주세요.

export JAVA_HOME=/usr/lib/jvm/java-8-oracle

conf/core-site.xml

여기에서 포트 설정, 데이터 파일 저장 위치 등등의 주요 설정들을 할수 있습니다.
설정은 key-value pair로 이루어집니다. 또한 final 의 의미는 user application에 의해서 설정값이 overriden 되지 않도록 설정하는 것입니다.

<configuration>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

conf/hdfs.site.xml

자세한 내용은 hdfs-default.xml 문서를 봐주세요 :)

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/home/hduser/dfs/namenode</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/home/hduser/dfs/datanode</value>
    </property>
    <property>
        <name>dfs.permissions</name>
        <value>false</value>
    </property>
</configuration>
Name Value
fs.default.name 클러스터의 URI주소입니다.
dfs.data.dir DataNode가 어디에 Data를 저장시킬지에 대한 경로입니다.
dfs.name.dir NameNode metadata가 저장되는 위치 입니다.
dfs.replication replication의 숫자이고 기본값으로 3으로 지정되어 있습니다.
이보다 더 작은 숫자는 reliability에 문제가 될 수 있습니다.
dfs.permissions 기본값이 true이고, false이면 hduser 뿐만 아니라 모든 유저가 hdfs사용 가능합니다.

Standalone Mode

먼저 filesystem 을 format시켜줍니다. (최소한 최초 한번은 format이 필요합니다. 안하면 에러납니다.)

rm -Rf /tmp/hadoop-hduser
hdfs namenode -format

start-dfs.sh를 실행시켜서 NameNode, Secondary NameNode를 실행시킵니다.
start-yarn.sh 는 ResourceManager를 실행시킵니다.

$ start-dfs.sh && start-yarn.sh
$ jps
19011 SecondaryNameNode
20691 Jps
18773 NameNode
19230 ResourceManager

DataNode, Tasktracker는 daemone으로 다음과 같이 실행시키거나 멈출수 있습니다.

# 시작하기
hadoop-daemon.sh start datanode
hadoop-daemon.sh start tasktracker

# 멈추기
hadoop-daemon.sh stop datanode
hadoop-daemon.sh stop tasktracker

여기서 문제는 DataNode가 보이지가 않는데 이 경우 직접 DataNode를 실행시켜서 문제를 확인해볼수 있습니다.

$ hdfs datanode
Server URL
NameNode http://localhost:50070
Secondary NameNode http://localhost:50090/

Pseudo-Distributed Mode

Mapreduce job은 YARN에서 pseudo-distributed mode로 실행시킬수도 있습니다.

yarn-site.xml

<?xml version="1.0"?>
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

conf/mapred-site.xml

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
   <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
   </property>
</configuration>

Start

start-yarn.sh

Windows Installation

주의!: 개발, 테스트정도로 활용하지, 하둡을 윈도우에서 사용한다는건 정말 멍청한 짓입니다.

Prepare Installation

  1. Microsoft Windows SDK v7.1을 다운받고 설치합니다. (MS Prompt제거했음. Visuall Studio 10이하버젼으로 설치해야함)
  2. Visual Studio 2010을 토렌트로 다운받고 ㅡㅡ;; 설치합니다. (Prompt때문에..)
  3. Maven을 다운받고 설치합니다. (Binary로 C:\apache-maven에 설치후 PATH 지정해주면 됩니다.)
  4. CMAKE (cygwin에 있는 cmake말고..) CMake를 직접 설치 합니다.
  5. Cygwin을 다운받고 설치합니다. (64bit setup-x86_64.exe 파일로 설치합니다.)
  6. Protobuf Releases에 들어가서 2.5를 다운받습니다. (바로 다운로드 받기 -> Protobuf v2.5 Windows 32)
  7. findbugs-sourceforge source를 설치합니다. (FINDBUGS_HOME을 설정)
  8. JAVA_HOME, M2_HOME(Maven), FINDBUGS_HOME, 그리고 Platform 에 대한 환경 변수를 설정해주어야 합니다.
  9. Download Hadoop 하둡 source를 다운받습니다.
  10. Visual Studio Command Prompt를 열고 하둡 source가 있는 곳으로 이동합니다. (Windows Powershell은 안됨)

Permission Configuration

Hadoop Source 디렉토리 전체에 대한 권한을 설정해줘야 합니다.

chmod -R 777 hadoop-2.7.3-src

Environment Variables

Name Value example ETC
JAVA_HOME C:\Program Files\Java\jdk1.8.0_91  
M2_HOME C:\apache-maven-3.3.9  
FINDBUGS_HOME C:\findbugs-3.0.1  
Platform x64 Platform의 대소문자를 주의해야 합니다.
Path C:\Windows\Microsoft.NET\Framework\v4.0.30319 추가시킵니다.

Build

mvn package -Pdist,native-win -DskipTests -Dtar

Easy way!!

실제로는 Windows에서 source로 build안됨. 그냥 binary 다운받고 bin디렉토리에는 winutil/bin에 있는 내용 (overwrite하지말고) 카피해주면 됨. ㅡㅡ; 물론 build이전까지의 모든 내용들은 다 필요함.. ㅡㅡ;;