우분투(Ubuntu)에 하둡설치 테스트
1. 우분투 설치
- Ubuntu Desktop 18.04 버젼 설치 하여 테스트 진행
- Namenode * 1ea, DataNode * 3ea 설치 진행
-
노드 |
Hostname |
IP |
비고 |
NameNode |
master |
192.168.0.200 |
|
DataNode 01 |
slave01 |
192.168.0.201 |
|
DataNode 02 |
slave02 |
192.168.0.202 |
|
DataNode 03 | slave03 | 192.168.0.203 |
|
2. 패키지 업데이트 & 업그레이드
sudo apt-get update && sudo apt-get upgrade
3. 레파지토리 추가 및 패키지 업데이트
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
자바 설치, 자바 업그레이드, 설치 확인
sudo apt-get install oracle-java8-installer
sudo apt-get upgrade
java -version
하둡 그룹 생성
sudo addgroup hadoop
하둡 계정 생성
sudo adduser --ingroup hadoop hduser
관리자 권한 추가
sudo nano /etc/sudoers
hduser 라인 추가
# User privilege specification
root ALL=(ALL:ALL) ALL
hduser ALL=(ALL:ALL) ALL
ssh 설치 +rsa키 설정
마스터 노드
sudo mkdir -p /usr/local/hadoop_tmp/hdfs/namenode
sudo mkdir -p /usr/local/hadoop_tmp/hdfs/datanode
sudo chown hduser:hadoop -R /usr/local/hadoop_tmp/
sudo chmod 777 /usr/local/hadoop_tmp/
데이터노드
sudo mkdir -p /usr/local/hadoop_tmp/hdfs/datanode
sudo chown hduser:hadoop -R /usr/local/hadoop_tmp/
sudo chmod 777 /usr/local/hadoop_tmp/
sudo nano $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>
</configuration>
mapred-site.xml 수정
cp $HADOOP_HOME/etc/hadoop/mapred-site.xml.template $HADOOP_HOME/etc/hadoop/mapred-site.xml
sudo nano $HADOOP_HOME/etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
masters, slaves 파일 편집
sudo nano $HADOOP_HOME/etc/hadoop/masters
master
sudo nano $HADOOP_HOME/etc/hadoop/slaves
master
slave01
slave02
slave03
네임노드 포멧(마스터노드만)
hdfs namenode -format
start-dfs.sh, start-yarn.sh 실행 및 확인(jps)
start-dfs.sh
start-yarn.sh
jps
> start-dfs.sh
NameNode, SecondaryNameNode, DataNode 가 실행
> start-yarn.sh
master에서는 ResourceManager, NodeManager 실행, slave NodeManager 실행
> http://master:50070 / 9000 액티브 확인 , 라이브노드 4개여야 함
> http://master:8088 / yarn 확인
맵리듀스 테스트
- 테스트용 파일을 HDFS에 업로드
hdfs dfs -mkdir /input
hdfs dfs -copyFromLocal /usr/local/hadoop/README.txt /input
hdfs dfs -ls /input
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /input/README.txt ~/wordcount-output
- 결과 디렉톨 확인
hdfs dfs -ls ~/wordcount-output
> SUCCESS 있으면 성공, 파트 파일에 실해 정보 값 표기
- 실행 결과 확인
hduser@master:/usr/local/hadoop$hdfs dfs -cat ~/wordcount-output/part-r-00000 .... source 1 the 8 this 3 to 2 under 1 use, 2 uses 1 using 2 visit 1 website 1 which 2 wiki, 1 with 1 written 1 you 1 your 1 hduser@master:/usr/local/hadoop$ hduser@master:/usr/local/hadoop$
|
하둡 테스트
멀티노드 클러스터
- master ,slave1~3 서버, 네트워크 설정
- /etc/hosts 파일 설정에서 각 서버에 대한 DNS 설정
- /etc/hostname 파일 수정
- /bin/hostname -F /etc/hostname
> hostname 쳐서 확인
- 재부팅
- SSH 공개키 복사 작업
> scp -rp ~/.ssh/authorized_keys root@slave1:~/.ssh/authorized_keys
> scp -rp ~/.ssh/authorized_keys root@slave2:~/.ssh/authorized_keys
> scp -rp ~/.ssh/authorized_keys root@slave3:~/.ssh/authorized_keys
- 노드간 SSH 접속 설정(master~ slave3까지 모두 작업)
> ssh master
> exit
> ssh slave1
> exit
> ssh slave2
> exit
> ssh slave3
- hadoop-env.sh 수정 (master에서 실행)
> gedit $HADOOP_HOME/etc/hadoop/hadoop-env.sh
> 25라인 JDK 경로 수정 : export JAVA_HOME=/usr/local/jdk1.8
> 104번 라인 하둡 데몬의 pid 저장 경로 수정 : export HADOOP_PID_DIR=/home/centos/hadoop-2.9.0/pids
- core-site.xml 수정 (모든 노드에서 실행)
> gedit $HADOOP_HOME/etc/hadoop/core-site.xml
> localhost:9000 > master:9000로 수정
- hdfs-site.xml 수정 (master)
> $HADOOP_HOME 하위에 namenode와 datanode 디렉토리 생성
> rm -rf $HADOOP_HOME/namenode
> mkdir $HADOOP_HOME/namenode
> chwon root -R $HADOOP_HOME/namenode
> chmod 777 $HADOOP_HOME/namenode
> rm -rf $HADOOP_HOME/datanode
> mkdir $HADOOP_HOME/datanode
> chwon root -R $HADOOP_HOME/datanode
> chmod 777 $HADOOP_HOME/datanode
> gedit $HADOOP_HOME/etc/hadoop/hdfs-site.xml
> dfs.replication 1 > 2로 수정
> dfsnamenode.name.dir, dfs.datanode.data.dir 내용 추가
- hdfs-site.xml 수정 (slave123)
> $HADOOP_NODE 하위에 datanode 생성
> rm -rf $HADOOP_HOME/datanode
> mkdir $HADOOP_HOME/datanode
> chwon root -R $HADOOP_HOME/datanode
> chmod 777 $HADOOP_HOME/datanode
> dfs.datanode.data.dir 내용 추가
- 잡트래커 설정(모든노드)
> cp $HADOOP_HOME/etc/hadoop/mapred-site.xml-template $HADOOP_HOME/etc/hadoop/mapred-site.xml
> gpedit $HADOOP_HOME/etc/hadoop/mapred-site.xml
> mapreduce.framework.name yarn 추가
- yarn-size.xml 파일 수정 (모든노드)
> gedit $HADOOP_HOME/etc/hadoop/yarn-site.xml
> 기본 옵션 설정으로 수정
- masters, slaves 파일 수정(master만 수정)
> gedit $HADOOP_HOME/etc/hadoop/masters
> master
> gedit $HADOOP_HOME/etc/hadoop/slaves
> master
slave1
slave2
slave3
- 네임노드 포멧(master에서만 실행), 하둡가동, HDFS 폴더 생성
> $HADOOP_HOME/bin/hdfs namenode -format
- 방화벽 내림 (모든노드)
> systemctl stop firewalld.service
> systemctl disable firewalld.service
- DFS, YARN 시작 (master만 실행)
> start-dfs.sh
NameNode, SecondaryNameNode, DataNode 가 실행
> start-yarn.sh
master에서는 ResourceManager, NodeManager 실행, slave NodeManager 실행
> 확인은 jps
> http://master:50070 / 9000 액티브 확인 , 라이브노드 4개여야 함
> http://master:8088 / yarn 확인
분석 프로그램 실행
- 맵리듀스 jab을 실행하기 위해 HDFS 데릭토리 만듬(master)
> hdfs dfs -mkdir /user
> hdfs dfs -mkdir /user/root
> hdfs dfs -mkdir /user/root/conf
- 하둡 쉘 커맨드로 확인(master)
> hdfs dfs -ls
- 하둡파일시스템에 파일 업로드
> hdfs dfs put $HADOOP_HOME/etc/hadoop/hadoop-env.sh /user/conf/hadoop-env.sh
- 업로드 파일 확인
> hdfs dfs -ls /
> hdfs dfs -ls /user
> hdfs dfs -ls /user/conf / hadoop-env-sh 파일 제대로 올라왔는지 확인
- 테스트용 파일을 HDFS에 업로드
hdfs dfs -mkdir /input
hdfs dfs -copyFromLocal /usr/local/hadoop/README.txt /input
hdfs dfs -ls /input
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /input/README.txt ~/wordcount-output
- 결과 디렉톨 확인
hdfs dfs -ls ~/wordcount-output
> SUCCESS 있으면 성공, 파트 파일에 실해 정보 값 표기
- 실행 결과 확인
> hdfs dfs -cat ~/wordcount-output/part-r-00000
- 로컬로 다운
> hdfs dfs -copyToLocal ~/wordcount-output/part-r-00000 /home/centos/result.txt
> head -5 /home/centos/result.txt / 5줄만 머리에 출력
- 두번 실행하게 되면 에러 발생 아웃풋 디렉토리는 삭제하여야 함
> hdfs dfs -rm -r ~/wordcount-output // r은 하위디렉토리 까지 삭제
- master:50070에서 사용량 확인 가능
명령어 관련내용
- 형식 : hdfs dfs -명령어 옵션
> dfs : Distributed Filesystem Shell (분산 파일 시스템 쉘)
- help : 도움말
> hdfs dfs -help
> hdfs dfs -help ls // ls 명령어에 대한 도움말
- ls : 파일 목록 보기
> hdfs dfs -ls //// 경로 없을경우 사용자 계정의 홈 디렉토리 조회
> hdfs dfs -ls conf / 해당 디렉토리 파일 목록 조회
> hdfs dfs -ls -R / 하위 디렉토리 목록까지 출력
> master 뿐만 아니라 slave에도 동일하게 실행 가능
- du : 파일용량 확인
> hdfs dfs -du : 디렉토리 또는 파일의 사용량을 바이트 단위로 출력
> hdfs dfs -du -s : 해당 디렉토리의 전체용량만(합계) 출력
- cat, text : 파일내용 보기
> cat : 텍스트 파일 전용
> hdfs dfs -cat conf/hadoop-env.sh
> text : 텍스트 파일과 압축파일도 읽을 수 있음
> hdfs dfs -text conf/hadoop-env.sh
- mkdir : 디렉토리 생성
> hdfs dfs -mkdir input
> hdfs dfs ls
- put, copyFromLocal,get, copyToLocal, getmerge, cp : 파일 복사
> hdfs dfs -put $HADOOP_HOME/etc/hadoop/core-site.xml input
input 경로로 복사
> hdfs dfs -ls input
> hdfs dfs -copyFromLocal : 로컬 파일시스템에서 하둡분산파일 시스템으로 복사
> hdfs dfs -copyFromLocal $HADOOP_HOME/etc/hadoop/core-site.xml input/a : input폴더에 a이름으로 변경하여 복사
> hdfs dfs -get input/a a : HDFS의 input/a 를 로컬시스템 에 현재폴더에 a라는 파일이름으로 복사
> ls -la
> hdfs dfs -copyToLocal input/a b : HDFS의 input/a 파일을 로컬시스템에 b라는 파일명으로 변경하여 복사
> cat b
> hdfs dfs -getmerge : 머지하여 복사
> hdfs dfs -getmerge input c : HDFS의 input디렉토리의 파일을 로컬시스템의 c파일에 머지하여 복사
> cat c
> ls -la : c파일 용량 확인
> hdfs dfs -cp conf/hadoop-env.sh hadoop-env-copy.sh : HDFS서버에서 HDFS서버로 파일 복사
> hdfs dfs -ls
> hdfs dfs -ls /user/root
- mv, moveFromLocal : 파일이동
> hdfs dfs -mv input/a input/a2 : input/a 파일을 input/a2로 옮김 (HDFS간 옮김)
> hdfs dfs -moveFromLocal : 로컬 시스템에서 하둡 분산파일 시스템으로 옮김
> hdfs dfs -mkdir temp
> hdfs dfs -moveFromLocal a temp/a : 로컬시스템의 a파일을 HDFS의 temp/a파일로 옮김
- rm : 디렉토리나 파일 삭제
> hdfs dfs -rm temp/a : temp 디렉토리의 a파일 삭제
> hdfs dfs -rm temp : temp 디렉토리 삭제
> hdfs dfs -rm -r input : input 디렉토리 및 하위 디렉토리, 파일까지 다 삭제
- count : 카운트값 조화
> hdfs dfs -count conf : 디렉토리, 파일, 파일사이즈
- tail : 파일의 마지막 내용 확인
> hdfs dfs -tail hadoop-env-copy.sh
- chmod : 권한변경
> hdfs dfs -chmod 777 conf : conf 디렉토리 권한을 777로 변경
> 폴더 내 하위 파일까지 권한 변경하는 방법 확인
> hdfs dfs -ls : conf 권한 변경 확인
> 유닉스 파일 권한 : 10자리
디렉토리(1) 소유자(3) 그룹(3) 전체(3)
r 읽기(4)
w 쓰기(2)
x 실행(1)
- touchz : 0바이트 파일 생성
> hdfs dfs -touchz test.txt
> hdfs dfs -ls