사전 작업
하둡을 구동할 계정은 hadoop, 그룹도 hadoop 으로 한다. hadoop 계정의 홈 디렉토리는 /home/hadoop 이다. 키-쌍 생성 관련 내용은 별도의 포스트를 통해 설명하겠다
# 사용자 생성 [root@hadoop01 ~]# useradd -g hadoop hadoop [root@hadoop01 ~]# su - hadoop [root@hadoop01 ~]# passwd hadoop hadoop 사용자의 비밀 번호 변경 중 새 암호: 새 암호 재입력: passwd: 모든 인증 토큰이 성공적으로 업데이트 되었습니다. #여기까지 모든 서버에서 작업한다.
# 키 쌍 생성 [hadoop@hadoop01 ~]$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/hadoop/.ssh/id_rsa): Created directory '/home/hadoop/.ssh'. 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. The key fingerprint is: SHA256:kQyuv0LCUMDOBwicLr4VyFSskm0wYIGHLIv1pTbALF0 hadoop@centos7 The key''s randomart image is: +---[RSA 2048]----+ |%O=oE . | |XBO. ..o . | |O@+o o. + | |BBoo=. . | |++..o. S | | .o... | | oo . | | . . . | | .. | +----[SHA256]-----+ [hadoop@hadoop01 ~]$ chmod 700 ~/.ssh [hadoop@hadoop01 ~]$ cat ~/.ssh/id_rsa.pub >> authorized_keys [hadoop@hadoop01 ~]$ chmod 600 ~/.ssh/* [hadoop@hadoop01 ~]$ ls -l ~/.ssh/ 합계 12 -rw------- 1 hadoop hadoop 396 9월 14 15:32 authorized_keys -rw------- 1 hadoop hadoop 1675 9월 14 15:24 id_rsa -rw------- 1 hadoop hadoop 396 9월 14 15:24 id_rsa.pub # 하둡 클러스터로 사용할 모든 서버에 키를 복사하고 권한을 변경한다. [hadoop@hadoop01 ~]$ scp ~/.ssh/authorized_keys hadoop@hadoop02:/home/hadoop/.ssh/authorized_keys The authenticity of host 'hadoop02 (192.168.0.2)' can't be established. ECDSA key fingerprint is SHA256:nhIT6XvSamWF1mgXDkAuM64eZj5XCJww5T2NEojH2iU. ECDSA key fingerprint is MD5:7b:a5:40:02:c3:cd:0f:e7:36:77:dd:3c:cc:3b:ba:d2. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts. hadoop@hadoop02's password: authorized_keys [hadoop@hadoop01 ~]$ ssh hadoop02 chmod 700 /home/hadoop/.ssh [hadoop@hadoop01 ~]$ ssh hadoop02 chmod 600 /home/hadoop/.ssh/authorized_keys hadoop@hadoop02's password:
설치
Apache Hadoop 홈페이지에서 바이너리를 다운로드 하고 압축을 해제한다.
※ hadoop 계정으로 진행
[hadoop@hadoop01 ~]$ wget http://mirror.apache-kr.org/hadoop/common/hadoop-3.1.4/hadoop-3.1.4.tar.gz --2020-09-14 15:28:30-- http://mirror.apache-kr.org/hadoop/common/hadoop-3.1.4/hadoop-3.1.4.tar.gz Resolving mirror.apache-kr.org (mirror.apache-kr.org)... 125.209.216.167 Connecting to mirror.apache-kr.org (mirror.apache-kr.org)|125.209.216.167|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 348326890 (332M) [application/octet-stream] Saving to: ‘hadoop-3.1.4.tar.gz’ 100%[=====================================================================================================================================>] 348,326,890 37.9MB/s in 11s 2020-09-14 15:28:41 (30.1 MB/s) - ‘hadoop-3.1.4.tar.gz’ saved [348326890/348326890] [hadoop@hadoop01 ~]$ tar -xvzf hadoop-3.1.4.tar.gz hadoop-3.1.4/ hadoop-3.1.4/lib/ 중략 hadoop-3.1.4/libexec/mapred-config.sh hadoop-3.1.4/libexec/hadoop-config.cmd hadoop-3.1.4/libexec/hdfs-config.cmd [hadoop@hadoop01 ~]$ ln -s ~/hadoop-3.1.4 ~/hadoop [hadoop@hadoop01 ~]$ ls -l 합계 340164 lrwxrwxrwx 1 hadoop hadoop 12 9월 14 15:31 hadoop -> hadoop-3.1.4 drwxr-xr-x 9 hadoop hadoop 169 9월 14 15:31 hadoop-3.1.4 -rw-rw-r-- 1 hadoop hadoop 348326890 8월 24 21:40 hadoop-3.1.4.tar.gz drwxrwxr-x 2 hadoop hadoop 6 9월 14 15:22 perl5 #나머지 노드에서 모두 동일한 작업을 수행한다. (다운로드, 압축 풀기, 심볼릭 링크 생성)
[hadoop@hadoop01 ~]$ vi ~/.bas_profile # 여기부터 파일의 맨 뒤에 붙여넣기 한다. export HADOOP_HOME=/home/hadoop/hadoop export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin [hadoop@hadoop01 ~]$ source ~/.bas_profile 나머지 노드들에서 동일하게 수행 해 준다.
설정
# Hadoop 환경변수 설정 (하둡이 구동될 때 읽어들이는 환경변수) [hadoop@hadoop01 ~]$ vi $HADOOP_HOME/etc/hadoop/hadoop-env.sh # 기존 내용을 모두 지우고 여기서부터 붙여넣기 한다. export HADOOP_HOME=/home/hadoop/hadoop export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop # 시스템 사양에 맞추어 적절히 증감한다. export HADOOP_HEAPSIZE_MAX= 8g export HADOOP_HEAPSIZE_MIN=8g export HADOOP_OS_TYPE=${HADOOP_OS_TYPE:-$(uname -s)}
# core-site.xml [hadoop@hadoop01 ~]$ vi $HADOOP_HOME/etc/hadoop/core-site.xml <!-- 모두 지우고 여기서부터 붙여넣기 한다. --> <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop01:8020</value> <!-- 기본 HDFS 주소. 예를 들어 "hdfs dfs -ls / " 를 수행하면 / 앞에 value의 주소가 들어간다고 이해하면 된다 --> </property> <property> <name>hadoop.proxyuser.hive.groups</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.hive.hosts</name> <value>*</value> </property> </configuration>
# hdfs-site.xml [hadoop@hadoop01 ~]$ vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml <!-- 모두 지우고 여기서부터 붙여넣기 한다. --> <configuration> <property> <name>dfs.replication</name> <value>3</value> <!-- 데이터 복제 횟수 --> </property> <property> <name>dfs.namenode.name.dir</name> <value>/home/hadoop/namenode</value> <!-- 로컬(리눅스 시스템의) 디렉토리 경로이며, 반드시 hadoop을 구동하는 계정이 디렉토리에 대한 모든 권한을 가지고 있어야 한다. --> </property> <property> <name>dfs.namenode.checkpoint.dir</name> <value>/home/hadoop/namesecondary</value> <!-- namenode 디렉토리와 동일하게 로컬 디렉토리이고 모든 권한을 부여해야 한다. --> </property> <property> <name>dfs.datanode.data.dir</name> <value>/home/hadoop/datanode</value> <!-- 실제 hdfs 에 쌓인 데이터가 저장되는 경로. 여유공간이 넉넉한 파티션의 디렉토리를 지정해야 한다. datanode로 동작하는 클라이언트, 즉 workers 파일에 등록되어있는 호스트에 모두 동일하게 적용해야 한다. 당연히 hadoop을 구동하는 계정이 모든 권한을 가진 디렉토리여야 한다. --> </property> <property> <name>dfs.http.address</name> <value>hadoop01:50070</value> <!--namenode http 주소 및 포트. hadoop web-UI --> </property> <property> <name>dfs.secondary.http.address</name> <value>hadoop01:50090</value> <!-- Secondary namenode http 주소 및 포트 주의 할 점은 secondary-namenode는 백업, 복구를 담당하는 것이 아니라 보조의 역할이라는 점이다. --> </property> <property> <name>dfs.block.size</name> <value>16777216</value> <!-- HDFS의 block size, Byte 단위. 다음 값들을 참고하자. 8MB=8,388,608 / 16MB=16,777,216 / 32MB=33,554,432 / 64MB=67,108,864 / 128MB=134,217,728 --> </property> <property> <name>dfs.permissions.enabled</name> <value>false</value> <!-- 값이 false일 경우 파일 시스템의 퍼미션 관련 기능이 비활성화된다. --> </property> <property> <name>fs.trash.interval</name> <value>3</value> <!-- 휴지통과 같은 기능이다. 파일을 삭제하면 임시 공간으로 이동되고 지정한 시간 이후 삭제된다. value의 값(=분)에 따라 휴지통이 비워진다. --> </property> </configuration>
# yarn-site.xml [hadoop@hadoop01 ~]$ vi $HADOOP_HOME/etc/hadoop/yarn-site.xml <!-- 모두 지우고 여기서부터 붙여넣기 한다. --> <configuration> <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.resourcemanager.hostname</name> <value>hadoop02</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>hadoop02:8025</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>hadoop02:8030</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>hadoop02:8050</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>hadoop02:8055</value> </property> <property> <name>yarn.resourcemanager.scheduler.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value> <!-- org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler - FIFO : 먼저 들어온 작업을 먼저 처리한다. 후순위 작업은 이전 작업이 끝날 때까지 대기한다. org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler - FAIR : 작업에 균등하게 자원을 할당한다. org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler - 트리 형태로 큐를 선언하고 각 큐 별로 이용할 수 있는 자원의 용량을 정하여 할당한다. --> </property> </configuration>
# mapreduce-site.xml [hadoop@hadoop01 ~]$ vi $HADOOP_HOME/etc/hadoop/mapreduce-site.xml <!-- 모두 지우고 여기서부터 붙여넣기 한다. --> <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapred.local.dir</name> <value>/home/hadoop/mapred</value> </property> <property> <name>mapred.system.dir</name> <value>/home/hadoop/mapred</value> </property> <property> <name>mapred.map.memory.mb</name> <value>2048</value> <!-- map 작업을 위한 최대 리소스 제한 --> </property> <property> <name>mapred.map.java.opts</name> <value>-Xmx1024M</value> <!-- map 작업을 위한 최대 child jvms --> </property> <property> <name>mapred.reduce.memory.mb</name> <value>3072</value> <!-- reduce 작업을 위한 최대 리소스 제한 --> </property> <property> <name>mapred.reduce.java.opts</name> <value>-Xmx2560M</value> <!-- reduce 작업을 위한 최대 child jvms --> </property> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop02:10020</value> <!-- Job history server 주소 (기본 포트는 10020) --> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop02:19888</value> <!-- Job history server Web UI주소 (기본 포트는 19888) --> </property> <property> <name>mapreduce.jobhistory.intermediate-done-dir</name> <value>/home/hadoop/mr-history/tmp</value> </property> <property> <name>mapreduce.jobhistory.done-dir</name> <value>/home/hadoop/mmr-histroy/done</value> </property> </configuration>
[hadoop@hadoop01 ~]$ vi $HADOOP_CONF_DIR/workers # datanode 구동을 위한 노드를 기록한다. hadoop01 hadoop02 192.168.0.3 hadoop04.net
# 수정한 설정 파일을 모든 노드에 복사한다. [hadoop@hadoop01 ~]$ scp $HADOOP_HOME/etc/hadoop/* hadoop02:/home/hadoop/etc/hadoop/
구동 및 확인. 그리고 종료
# 구동 스크립트를 이용한 방법 # 하둡 구동 [hadoop@hadoop01 ~]$ $HADOOP_HOME/sbin/start-all.sh WARNING: Attempting to start all Apache Hadoop daemons as hadoop in 10 seconds. WARNING: This is not a recommended production deployment configuration. WARNING: Use CTRL-C to abort. Starting namenodes on [centos7] Starting datanodes Starting secondary namenodes [centos7] Starting resourcemanager Starting nodemanagers # 프로세스 확인 [hadoop@hadoop01 ~]$ jps -l 92880 org.apache.hadoop.yarn.server.nodemanager.NodeManager 92339 org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode 93780 sun.tools.jps.Jps 92685 org.apache.hadoop.yarn.server.resourcemanager.ResourceManager 92111 org.apache.hadoop.hdfs.server.datanode.DataNode # 종료 [hadoop@hadoop01 ~]$ sbin/stop-all.sh WARNING: Stopping all Apache Hadoop daemons as hadoop in 10 seconds. WARNING: Use CTRL-C to abort. Stopping namenodes on [centos7] Stopping datanodes Stopping secondary namenodes [centos7] Stopping nodemanagers Stopping resourcemanager
댓글을 달려면 로그인해야 합니다.