EXCELSIOR

Hadoop2(하둡2)설치 - 완전분산모드 & 네임노드 HA구성 본문

DataBase/Hadoop

Hadoop2(하둡2)설치 - 완전분산모드 & 네임노드 HA구성

Excelsior-JH 2017. 1. 21. 00:36

이번 포스팅에서는 하둡2를 완전 분산 모드로 설치하면서 네임노드 HA를 구성해본다. 

우선 완전분산모드로 설치하기 위해서는 최소 3대이상의 서버가 필요하다. 그 이유는 네임노드 HA 구성에 필요한 저널노드가 적어도 3대 이상의 서버에서 실행돼야 하기 때문이다. 

다행히 최근에 VirtualBox에다가 CentOS 7을 설치하고 연결하는 것을 다른팀 분한테 배워서 Ubuntu 1대, CentOS 3대 총 4대의 서버를 구성했다. VirtualBox에 가상머신 설치는 다음에 포스팅 하겠다.



위 네 대의 서버는 JDK 설치, hadoop 실행 계정 생성, SSh 인증과 같은 기본적인 환경설정이 완료돼 있어야 한다.


1. 하둡 실행 계정 생성

root 계정으로 하둡을 설치할 수 있지만(실은 이때까지 root계정으로 단일노드로 설치하여 포스팅했다...) 매우 위험하다. 혹여나 잘못되면 시스템 자체를 사용할 수 없기 때문이다. 그래서 이번 포스팅에서 완전 분산 모드로 설치하면서 계정을 hadoop으로 통일했다.

root@hadoop: # vi /etc/hosts
192.168.56.1 hadoop
192.168.56.101 hadoop01
192.168.56.102 hadoop02
192.168.56.103 hadoop03

위와 같이 호스트 정보를 4대의 서버에 동일하게 적용한다. 


2. Java 설치

호스트명 hadoop은 기존 Ubuntu16.04 이기 때문에 jdk1.8이 설치되어 있었지만, 나머지 hadoop01~03까지는 VirtualBox에 CentOS7을 설치했기 때문에 OpenJDK가 설치되어 있었다. 이를 jdk로 바꿔주기 위해 다음과 같은 명령어를 입력하여 open-jdk를 제거해 주었다.

[root@hadoop01 ~]# rpm -qa | grep jdk
ex) java-1.8.0-openjdk-1.8.0-1.48.1.11.3.el6_2.x86_64

[root@hadoop01 ~]# yum remove java-1.8.0-openjdk-1.8.0-1.48.1.11.3.el6_2.x86_64

그런다음 Oracle 사이트에 들어가 Linux에 해당하는 jdk를 다운받았다. 


JDK를 다운받은 뒤 해당 파일을 root계정으로 로그인 한 뒤 /usr/local에 저장하여 압축을 푼다.

[root@hadoop01 ~]# cd /usr/local
[root@hadoop01 ~]# chmod 755 jdk-8u121-linux-x64.tar.gz
[root@hadoop01 ~]# tar xvfz jdk-8u121-linux-x64.tar.gz

압축을 풀고 나면 JDK 경로를 쉽게 찾을 수 있게 다음과 같이 심볼릭 링크를 생성한다.

[root@hadoop01 ~]# ln -s jdk.1.8.0_121 java

마지막으로 /etc/profile 파일에 java 경로 관련 환경변수를 등록한다. 

[root@hadoop01 ~]# vi /etc/profile
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin
export CLASS_PATH="."

[root@hadoop01 ~]# resource /etc/profile
[root@hadoop01 ~]# java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)


3. SSH 설정

다음과 같은 명령어를 통하여 SSH 공개키를 네임노드가 설치될 hadoop과 hadoop01 호스트에 각각 만들어 준다. 비밀번호 입력없이 엔터(Enter)를 누르면 된다.

hadoop@hadoop ~:$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hadoop/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/hadoop/.ssh/id_rsa.
Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub.

[hadoop@hadoop01 ~]$ ssh-keygen -t rsa

공개키는 사용자 계정의 홈 디렉터리에 있는 .ssh 폴더에 생성된다. 생성된 공개키를 ssh-copy-id 명령어를 이용해 다른 서버에 복사한다. ssh-copy-id 명령어는 대상 서버의 .ssh 디렉터리 안에 있는 authorized_keys 파일에 공개키를 입력하며, 다음과 같은 형식으로 실행한다.

ssh-copy-id -i [복사할 공개키 경로] [대상 서버 계정]@[대상 서버]

hadoop@hadoop ~:$ ssh-copy-id -i /home/hadoop/.ssh/id_rsa.pub hadoop@hadoop01
Are you sure you want to continue connecting (yes/no)? yes

hadoop@hadoop ~:$ ssh hadoop01
Last login: Fri Jan 20 16:57:59 2017 from hadoop

위에서 확인할 수 있듯이 암호를 묻지 않고 바로 hadoop01 서버에 접속하는 것을 확인할 수 있다. 위와같이 ssh-copy-id 명령어를 모든 서버에(hadoop01~03) 공개키를 복사한다. 


4. 프로토콜 버퍼 설치(Protocol Buffer)

프로토콜 버퍼에 대한 설명과 설치방법은 여기 를 클릭하면 확인할 수 있다.  hadoop01 ~ 03 서버에 프로토콜 버퍼를 설치한다. root 계정으로 접속한 뒤 실행한다.

cd /usr/local

tar xvfz protobuf-2.5.0.tar.gz
cd protobuf-2.5.0
./configure
make
make install


5. 주키퍼 설치

네임노드 HA를 구성하려면 주키퍼를 먼저 설치해야한다. 주키퍼는 다음과 같은 순서로 설치한다. 


1) 주키퍼

주키퍼를 설치할 서버 hadoop, hadoop01, hadoop02에 zookeeper계정을 다음과 같이 만든다. 

adduser zookeeper
passwd zookeeper

위 3번의 SSH설정을 zookeeper 계정에도 똑같이 적용한다. 


2) 주키퍼 다운로드

다음과 같이 wget 명령어를 이용해 설치파일을 zookeeper 계정의 home 디렉터리에 다운로드 받은 뒤 압축을 푼다.

wget "http://apache.tt.co.kr/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz"
tar xvfz zookeeper-3.4.9.tar.gz

bin디렉터리에는 주키퍼 클라이언트와 서버를 실행하기 위한 셸 스크립트 파일이 들어 있고, 주키퍼 환경설정을 위한 파일은 conf에 들어 있다. 주키퍼를 실행하려면 zoo.cfg 파일을 conf에 저장해야한다. 기존 conf 디렉터리에는 샘플 파일인 zoo_sample.cfg만 있으므로 다음과 같이 zoo_sample.cfg를 복사한 후 해당파일을 수정한다. 

zookeeper@hadoop:~$ cd /home/zookeeper/zookeeper-3.4.9
zookeeper@hadoop:~/zookeeper-3.4.9$ cp conf/zoo_sample.cfg conf/zoo.cfg
zookeeper@hadoop:~/zookeeper-3.4.9$ vi conf/zoo.cfg
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/home/zookeeper/data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
maxClientCnxns=0
maxSessionTimeout=180000
server.1=hadoop:2888:3888
server.2=hadoop01:2888:3888
server.3=hadoop02:2888:3888
      • dataDir: 주키퍼 스냅샷을 저장하는 경로이다. 기본값은 /tmp/zookeeper로 되어 있으며 주키퍼 계정의 홈 디렉터리로 경로를 변경한다.
      • maxClientCnxns: 주키퍼의 최대 클라이언트 커넥션 개수이다. 0은 무제한을 의미하며, 기본값은 60으로 설정되어있다.
      • maxSessionTimeout: 세션별 타임아웃 시간이며, 밀리초(ms) 단위로 설정한다.
      • server.#: 이 옵션은 멀티서버로 구성할 서버를 등록하는 옵션이다. "server."뒤의 값은 해당 서버의 아이디를 의미한다. 숫자 또는 관리자가 원하는 값을 부여하면 된다. 첫 번째 포트인 2888은 주키퍼의 리더에 접속하기 위한 포트이고, 두 번째 포트인 3888은 리더를 결정하는데 사용한다.

"server.#"에서 서버별로 아이디를 부여했다. 이 아이디는 zoo.cfg에만 설정되는 것이 아니라 주키퍼 데이터 디렉터리에도 저장돼 있어야 한다. 다음과 같이 dataDir 항목의 디렉터리를 만들고, myid라는 파일을 생성한다. myid에는 zoo.cfg에서 설정한 아이디를 등록하면된다.

zookeeper@hadoop:~/zookeeper-3.4.9$ cd /home/zookeeper
zookeeper@hadoop:~$ mkdir data
zookeeper@hadoop:~$ cd data
zookeeper@hadoop:~$ vi myid
1
zookeeper@hadoop:~$ cat data/myid
1

다른 서버에도 주키퍼를 설치한다. scp와 ssh 명령어를 이용해 설치한다.

zookeeper@hadoop:~$ cd $HOME
zookeeper@hadoop:~$ tar cvfz zookeeper.tar.gz zookeeper-3.4.9
zookeeper@hadoop:~$ scp zookeeper.tar.gz zookeeper@hadoop01:/home/zookeeper 
zookeeper@hadoop:~$ scp zookeeper.tar.gz zookeeper@hadoop02:/home/zookeeper 
zookeeper@hadoop:~$ ssh hadoop01 "cd /home/zookeeper; tar xvfz zookeeper.tar.gz; mkdir data"
zookeeper@hadoop:~$ ssh hadoop02 "cd /home/zookeeper; tar xvfz zookeeper.tar.gz; mkdir data"

그런다음 hadoop01, hadoop02 서버의 data/myid파일을 각각 2, 3으로 만들어 준다.

마지막으로 주키퍼 서버를 실행하면 주키퍼 클러스터 구성이 완료된다. 각 서버마다 zookeeper 계정으로 로그인 해서 다음과 같이 주키퍼 서버를 실행한다.

zookeeper@hadoop:~$ cd zookeeper-3.4.9
zookeeper@hadoop:~/zookeeper-3.4.9$ ./bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

주키퍼는 별도의 웹 인터페이스를 제공하지 않으므로 다음과 같이 명령어로 서버 상태를 확인해야 한다.

[zookeeper@hadoop02 zookeeper-3.4.9]$ ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg
Mode: leader


6. 하둡2 설치

1) 하둡2 다운로드 및 압축 파일 해제

wget "http://mirror.apache-kr.org/hadoop/common/stable2/hadoop-2.7.3.tar.gz"

cd /home/hadoop

tar xvfz hadoop-2.7.3.tar.gz

#압축풀고 난 뒤 hadoop-2.7.3 디렉터리에 대한 심볼릭 링크를 생성

ln -s hadoop-2.7.3 hadoop2

2) 하둡2 환경설정 파일 수정

수정 파일은 etc/hadoop에 저장되어 있다.

① hadoop-env.sh 수정

# The java implementation to use.
export JAVA_HOME=/usr/local/java
export HADOOP_PID_DIR=/home/hadoop/hadoop-2.7.3/pids
export HADOOP_SECURE_DN_PID_DIR=${HADOOP_PID_DIR}

② masters 수정 : 네임노드 HA를 구성하면 masters 파일을 작성할 필요가 없다. 스텐바이 네임노드가 보조네임노드의 역할을 대체하기 때문이다.


③ slaves 수정

vi slaves
hadoop
hadoop01
hadoop02
hadoop03

④ core-site.xml 수정

1
2
3
4
5
6
7
8
9
10
11
<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://hadoop-cluster</value>
        </property>
 
        <property>
                <name>ha.zookeeper.quorum</name>
                <value>hadoop:2181,hadoop01:2181,hadoop02:2181</value>
        </property>
</configuration>
cs


⑤ hdfs-site.xml 수정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<configuration>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>/home/hadoop/data/dfs/namenode</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>/home/hadoop/data/dfs/datanode</value>
        </property>
        <property>
                <name>dfs.journalnode.edits.dir</name>
                <value>/home/hadoop/data/dfs/journalnode</value>
        </property>
        <property>
                <name>dfs.nameservices</name>
                <value>hadoop-cluster</value>
        </property>
        <property>
                <name>dfs.ha.namenodes.hadoop-cluster</name>
                <value>nn1,nn2</value>
        </property>
        <property>
                <name>dfs.namenode.rpc-address.hadoop-cluster.nn1</name>
                <value>hadoop:8020</value>
        </property>
        <property>
                <name>dfs.namenode.rpc-address.hadoop-cluster.nn2</name>
                <value>hadoop01:8020</value>
        </property>
        <property>
                <name>dfs.namenode.http-address.hadoop-cluster.nn1</name>
                <value>hadoop:50070</value>
        </property>
        <property>
                <name>dfs.namenode.http-address.hadoop-cluster.nn2</name>
                <value>hadoop01:50070</value>
        </property>
        <property>
                <name>dfs.namenode.shared.edits.dir</name>
                <value>qjournal://hadoop:8485;hadoop01:8485;hadoop02:8485/hadoop-cluster</value>
        </property>
        <property>
                <name>dfs.client.failover.proxy.provider.hadoop-cluster</name>
                <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property>
        <property>
                <name>dfs.ha.fencing.methods</name>
                <value>sshfence</value>
        </property>
        <property>
                <name>dfs.ha.fencing.ssh.private-key-files</name>
                <value>/home/hadoop/.ssh/id_rsa</value>
        </property>
        <property>
                <name>dfs.ha.automatic-failover.enabled</name>
                <value>true</value>
        </property>
</configuration>
cs


④ yarn-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<configuration>
 
<!-- Site specific YARN configuration properties -->
        <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.nodemanager.local-dirs</name>
                <value>/home/hadoop/data/yarn/nm-local-dir</value>
        </property>
        <property>
                <name>yarn.resourcemanager.fs.state-store.uri</name>
                <value>/home/hadoop/data/yarn/system/rmstore</value>
        </property>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>hadoop</value>
        </property>
        <property>
                <name>yarn.web-proxy.address</name>
                <value>0.0.0.0:8089</value>
        </property>
</configuration>
cs



7. 하둡 배포

설정한 하둡2 설치파일을 scp와 ssh 명령어를 통해서 전체 서버에 배포한다.

hadoop@hadoop:~$ cd /home/hadoop
hadoop@hadoop:~$ tar cvfz hadoop.tar.gz hadoop-2.7.3
hadoop@hadoop:~$ scp hadoop.tar.gz hadoop@hadoop01:/home/hadoop
hadoop@hadoop:~$ scp hadoop.tar.gz hadoop@hadoop02:/home/hadoop
hadoop@hadoop:~$ scp hadoop.tar.gz hadoop@hadoop03:/home/hadoop

hadoop@hadoop:~$ ssh hadoop@hadoop01 "cd /home/hadoop; tar xvfz hadoop.tar.gz"
hadoop@hadoop:~$ ssh hadoop@hadoop02 "cd /home/hadoop; tar xvfz hadoop.tar.gz"
hadoop@hadoop:~$ ssh hadoop@hadoop03 "cd /home/hadoop; tar xvfz hadoop.tar.gz"


8. 하둡2 실행

ZKFC를 실행하기 전에 반드시 다음과 같이 주키퍼를 초기화해야 한다.

hadoop@hadoop:~/hadoop-2.7.3$ bin/hdfs zkfc -formatZK

HDFS에 파일을 저장하려면 네임노드를 미리 포맷해야한다. 네임노드 HA에서는 네임노드를 포맷하기 전에 반드시 저널노드를 실행해야한다. 그래야 포맷 명령어를 실행했을 때 공유 에디트 로그 디렉터리를 초기화할 수 있기 때문이다. 저널노드는 hadoop-daemon.sh 스크립트로 실행한다.  만약 가상 분산 모드로 설치를 진행한 경우 rm -rf /home/hadoop/data 명령어로 삭제한다.

hadoop@hadoop:~/hadoop-2.7.3$ sbin/hadoop-daemon.sh start journalnode
starting journalnode, logging to /home/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-journalnode-hadoop.out
[hadoop@hadoop01 hadoop-2.7.3]$ ./sbin/hadoop-daemon.sh start journalnode
starting journalnode, logging to /home/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-journalnode-hadoop01.out
[hadoop@hadoop02 hadoop-2.7.3]$ ./sbin/hadoop-daemon.sh start journalnode
starting journalnode, logging to /home/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-journalnode-hadoop02.out

저널노드가 실행되면 네임노드를 포맷한다. 그다음 액티브 네임노드를 실행한 뒤 주키퍼 장애 컨트롤러(ZKFC)를 실행한다.

hadoop@hadoop:~/hadoop-2.7.3$ bin/hdfs namenode -format

hadoop@hadoop:~/hadoop-2.7.3$ sbin/hadoop-daemon.sh start namenode
starting namenode, logging to /home/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-namenode-hadoop.out

hadoop@hadoop:~/hadoop-2.7.3$ sbin/hadoop-daemon.sh start zkfc
starting zkfc, logging to /home/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-zkfc-hadoop.out

전체 데이터노드를 실행한다. 

hadoop@hadoop:~/hadoop-2.7.3$ sbin/hadoop-daemon.sh start datanode
starting datanode, logging to /home/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-datanode-hadoop.out
starting datanode, logging to /home/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-datanode-hadoop01.out
starting datanode, logging to /home/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-datanode-hadoop02.out

이제 스텐바이 네임노드를 설정한다. 우선 스탠바이 네임노드를 실행할 서버에 접속한 후 하둡 디렉터리로 이동해 다음과 같이 액티브 네임노드의 메타데이터를 복사한다. bootstrapStandby 명령어를 실행하면 스탠바이 네임노드를 포맷하고 액티브 네임노드의 메타데이터가 스탠바이 네임노드로 복사된다.

[hadoop@hadoop01 hadoop-2.7.3]$ ./bin/hdfs namenode -bootstrapStandby

[hadoop@hadoop01 hadoop-2.7.3]$ ./sbin/hadoop-daemon.sh start namenode
starting namenode, logging to /home/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-namenode-hadoop01.out

스텐바이 네밍노드용 주키퍼 장애 컨트롤러(ZKFC)를 실행한다.

[hadoop@hadoop01 hadoop-2.7.3]$ ./sbin/hadoop-daemon.sh start zkfc
starting zkfc, logging to /home/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-zkfc-hadoop01.out

드디어 모든 HDFS 설치 작업이 완료됐다. 이번에는 HDDFS가 정상적으로 작동하는지 테스트 해본다.  

먼저 다음과 같이 디렉터리를 생성하고 etc/hadoop/hadoop-env.sh 파일을 업로드한 뒤 파일목록을 출력한다.

hadoop@hadoop:~/hadoop-2.7.3$ bin/hdfs dfs -mkdir user
hadoop@hadoop:~/hadoop-2.7.3$ bin/hdfs dfs -mkdir user/hadoop
hadoop@hadoop:~/hadoop-2.7.3$ bin/hdfs dfs -mkdir user/hadoop/conf
hadoop@hadoop:~/hadoop-2.7.3$ bin/hdfs dfs -put etc/hadoop/hadoop-env.sh user/hadoop/conf/
hadoop@hadoop:~/hadoop-2.7.3$ bin/hdfs dfs -ls user/hadoop/conf
Found 1 items
-rw-r--r--   1 hadoop hadoop       4251 2017-01-21 00:22 user/hadoop/conf/hadoop-env.sh

이제 얀 클러스터와 맵리듀스 잡을 위한 히스토리 서버도 함께 실행한다.

hadoop@hadoop:~/hadoop-2.7.3$ sbin/start-yarn.sh
starting yarn daemons
starting resourcemanager, logging to /home/hadoop/hadoop-2.7.3/logs/yarn-hadoop-resourcemanager-hadoop.out
hadoop: starting nodemanager, logging to /home/hadoop/hadoop-2.7.3/logs/yarn-hadoop-nodemanager-hadoop.out
hadoop02: starting nodemanager, logging to /home/hadoop/hadoop-2.7.3/logs/yarn-hadoop-nodemanager-hadoop02.out
hadoop01: starting nodemanager, logging to /home/hadoop/hadoop-2.7.3/logs/yarn-hadoop-nodemanager-hadoop01.out
hadoop03: starting nodemanager, logging to /home/hadoop/hadoop-2.7.3/logs/yarn-hadoop-nodemanager-hadoop03.out

hadoop@hadoop:~/hadoop-2.7.3$ sbin/mr-jobhistory-daemon.sh start historyserver
starting historyserver, logging to /home/hadoop/hadoop-2.7.3/logs/mapred-hadoop-historyserver-hadoop.out

모든 하둡 데몬이 정상적으로 실행됐다면 네임노드가 설치된 hadoop과 hadoop01에는 다음과 같은 프로세스가 출력된다.

hadoop@hadoop:~/hadoop-2.7.3$ jps
15841 NodeManager
16150 JobHistoryServer
14650 JournalNode
14974 DFSZKFailoverController
15695 ResourceManager
15039 DataNode
16223 Jps

[hadoop@hadoop01 hadoop-2.7.3]$ jps
14913 NodeManager
14597 DFSZKFailoverController
15320 Jps
14026 JournalNode
14159 DataNode

마지막으로 WordCount 예제를 실행해 얀이 정상적으로 작동하는지 확인한다.

hadoop@hadoop:~/hadoop-2.7.3$ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount     user/hadoop/conf output
17/01/21 00:33:49 INFO Configuration.deprecation: session.id is deprecated. Instead, use dfs.metrics.session-id
17/01/21 00:33:49 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId=
17/01/21 00:33:49 INFO input.FileInputFormat: Total input paths to process : 1
17/01/21 00:33:49 INFO mapreduce.JobSubmitter: number of splits:1
17/01/21 00:33:50 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_local937100957_0001
17/01/21 00:33:50 INFO mapreduce.Job: The url to track the job: http://localhost:8080/
17/01/21 00:33:50 INFO mapreduce.Job: Running job: job_local937100957_0001
17/01/21 00:33:50 INFO mapred.LocalJobRunner: OutputCommitter set in config null
17/01/21 00:33:50 INFO output.FileOutputCommitter: File Output Committer Algorithm version is 1
17/01/21 00:33:50 INFO mapred.LocalJobRunner: OutputCommitter is org.apache.hadoop.mapreduce.lib.output.FileOut    putCommitter
17/01/21 00:33:50 INFO mapred.LocalJobRunner: Waiting for map tasks
17/01/21 00:33:50 INFO mapred.LocalJobRunner: Starting task: attempt_local937100957_0001_m_000000_0
17/01/21 00:33:50 INFO output.FileOutputCommitter: File Output Committer Algorithm version is 1
17/01/21 00:33:50 INFO mapred.Task:  Using ResourceCalculatorProcessTree : [ ]
17/01/21 00:33:50 INFO mapred.MapTask: Processing split: file:/home/hadoop/hadoop-2.7.3/user/hadoop/conf/hadoop    -env.sh:0+4251
17/01/21 00:33:50 INFO mapred.MapTask: (EQUATOR) 0 kvi 26214396(104857584)
17/01/21 00:33:50 INFO mapred.MapTask: mapreduce.task.io.sort.mb: 100
17/01/21 00:33:50 INFO mapred.MapTask: soft limit at 83886080
17/01/21 00:33:50 INFO mapred.MapTask: bufstart = 0; bufvoid = 104857600
17/01/21 00:33:50 INFO mapred.MapTask: kvstart = 26214396; length = 6553600
17/01/21 00:33:50 INFO mapred.MapTask: Map output collector class = org.apache.hadoop.mapred.MapTask$MapOutputB    uffer
17/01/21 00:33:50 INFO mapred.LocalJobRunner:
17/01/21 00:33:50 INFO mapred.MapTask: Starting flush of map output
17/01/21 00:33:50 INFO mapred.MapTask: Spilling map output
17/01/21 00:33:50 INFO mapred.MapTask: bufstart = 0; bufend = 6266; bufvoid = 104857600
17/01/21 00:33:50 INFO mapred.MapTask: kvstart = 26214396(104857584); kvend = 26212324(104849296); length = 207    3/6553600
17/01/21 00:33:50 INFO mapred.MapTask: Finished spill 0
17/01/21 00:33:50 INFO mapred.Task: Task:attempt_local937100957_0001_m_000000_0 is done. And is in the process     of committing
17/01/21 00:33:50 INFO mapred.LocalJobRunner: map
17/01/21 00:33:50 INFO mapred.Task: Task 'attempt_local937100957_0001_m_000000_0' done.
17/01/21 00:33:50 INFO mapred.LocalJobRunner: Finishing task: attempt_local937100957_0001_m_000000_0
17/01/21 00:33:50 INFO mapred.LocalJobRunner: map task executor complete.
17/01/21 00:33:50 INFO mapred.LocalJobRunner: Waiting for reduce tasks
17/01/21 00:33:50 INFO mapred.LocalJobRunner: Starting task: attempt_local937100957_0001_r_000000_0
17/01/21 00:33:50 INFO output.FileOutputCommitter: File Output Committer Algorithm version is 1
17/01/21 00:33:50 INFO mapred.Task:  Using ResourceCalculatorProcessTree : [ ]
17/01/21 00:33:50 INFO mapred.ReduceTask: Using ShuffleConsumerPlugin: org.apache.hadoop.mapreduce.task.reduce.    Shuffle@3d215c03
17/01/21 00:33:50 INFO reduce.MergeManagerImpl: MergerManager: memoryLimit=652528832, maxSingleShuffleLimit=163    132208, mergeThreshold=430669056, ioSortFactor=10, memToMemMergeOutputsThreshold=10
17/01/21 00:33:50 INFO reduce.EventFetcher: attempt_local937100957_0001_r_000000_0 Thread started: EventFetcher     for fetching Map Completion Events
17/01/21 00:33:50 INFO reduce.LocalFetcher: localfetcher#1 about to shuffle output of map attempt_local93710095    7_0001_m_000000_0 decomp: 4541 len: 4545 to MEMORY
17/01/21 00:33:50 INFO reduce.InMemoryMapOutput: Read 4541 bytes from map-output for attempt_local937100957_000    1_m_000000_0
17/01/21 00:33:50 INFO reduce.MergeManagerImpl: closeInMemoryFile -> map-output of size: 4541, inMemoryMapOutpu    ts.size() -> 1, commitMemory -> 0, usedMemory ->4541
17/01/21 00:33:50 INFO reduce.EventFetcher: EventFetcher is interrupted.. Returning
17/01/21 00:33:50 INFO mapred.LocalJobRunner: 1 / 1 copied.
17/01/21 00:33:50 INFO reduce.MergeManagerImpl: finalMerge called with 1 in-memory map-outputs and 0 on-disk ma    p-outputs
17/01/21 00:33:50 INFO mapred.Merger: Merging 1 sorted segments
17/01/21 00:33:50 INFO mapred.Merger: Down to the last merge-pass, with 1 segments left of total size: 4519 byt    es
17/01/21 00:33:50 INFO reduce.MergeManagerImpl: Merged 1 segments, 4541 bytes to disk to satisfy reduce memory     limit
17/01/21 00:33:50 INFO reduce.MergeManagerImpl: Merging 1 files, 4545 bytes from disk
17/01/21 00:33:50 INFO reduce.MergeManagerImpl: Merging 0 segments, 0 bytes from memory into reduce
17/01/21 00:33:50 INFO mapred.Merger: Merging 1 sorted segments
17/01/21 00:33:50 INFO mapred.Merger: Down to the last merge-pass, with 1 segments left of total size: 4519 byt    es
17/01/21 00:33:50 INFO mapred.LocalJobRunner: 1 / 1 copied.
17/01/21 00:33:50 INFO Configuration.deprecation: mapred.skip.on is deprecated. Instead, use mapreduce.job.skip    records
17/01/21 00:33:50 INFO mapred.Task: Task:attempt_local937100957_0001_r_000000_0 is done. And is in the process     of committing
17/01/21 00:33:50 INFO mapred.LocalJobRunner: 1 / 1 copied.
17/01/21 00:33:50 INFO mapred.Task: Task attempt_local937100957_0001_r_000000_0 is allowed to commit now
17/01/21 00:33:50 INFO output.FileOutputCommitter: Saved output of task 'attempt_local937100957_0001_r_000000_0    ' to file:/home/hadoop/hadoop-2.7.3/output/_temporary/0/task_local937100957_0001_r_000000
17/01/21 00:33:50 INFO mapred.LocalJobRunner: reduce > reduce
17/01/21 00:33:50 INFO mapred.Task: Task 'attempt_local937100957_0001_r_000000_0' done.
17/01/21 00:33:50 INFO mapred.LocalJobRunner: Finishing task: attempt_local937100957_0001_r_000000_0
17/01/21 00:33:50 INFO mapred.LocalJobRunner: reduce task executor complete.
17/01/21 00:33:51 INFO mapreduce.Job: Job job_local937100957_0001 running in uber mode : false
17/01/21 00:33:51 INFO mapreduce.Job:  map 100% reduce 100%
17/01/21 00:33:51 INFO mapreduce.Job: Job job_local937100957_0001 completed successfully
17/01/21 00:33:51 INFO mapreduce.Job: Counters: 30
        File System Counters
                FILE: Number of bytes read=609708
                FILE: Number of bytes written=1190515
                FILE: Number of read operations=0
                FILE: Number of large read operations=0
                FILE: Number of write operations=0
        Map-Reduce Framework
                Map input records=98
                Map output records=519
                Map output bytes=6266
                Map output materialized bytes=4545
                Input split bytes=126
                Combine input records=519
                Combine output records=268
                Reduce input groups=268
                Reduce shuffle bytes=4545
                Reduce input records=268
                Reduce output records=268
                Spilled Records=536
                Shuffled Maps =1
                Failed Shuffles=0
                Merged Map outputs=1
                GC time elapsed (ms)=0
                Total committed heap usage (bytes)=638582784
        Shuffle Errors
                BAD_ID=0
                CONNECTION=0
                IO_ERROR=0
                WRONG_LENGTH=0
                WRONG_MAP=0
                WRONG_REDUCE=0
        File Input Format Counters
                Bytes Read=4299
        File Output Format Counters
                Bytes Written=3508


7 Comments
댓글쓰기 폼