[pilot] Ch2. 파일럿 프로젝트 아키텍처 설계(2)
[출처: 실무로 배우는 빅데이터 기술, 김강원 저]
1. 클라우데라 매니저(CM) 설치
- CM : 빅데이터 에코시스템을 쉽게 설치하고 관리해주는 빅데이터 시스템 자동화 도구
- 빅데이터 소프트웨어에 대한 프로비저닝, 매니지먼트, 모니터링 수행
- 프로비저닝 : 하둡 에코시스템 편리하게 설치, 삭제, 수정 관리
- 매니지먼트 : 설치한 에코시스템의 설정 변경 및 최적화 지원
- 모니터링 : 하드웨어의 리소스 및 설치 컴포넌트의 상태 모니터링 / 대시보드
2. 가상머신 서버 설치
- 원래는 명령어를 이용하여 CM을 설치해야 하지만, 현재 CM 정책이 수정되어 책에 나와있는 명령어로 설치가 안됨
- 저자님의 깃허브에서 가상머신 2개 이미지 파일을 받을 수 있음
https://drive.google.com/file/d/1oLikMIC6bzt0jNV0n49YNOM0foNPXDZh/view?usp=sharing
- 기존에 설치했던 서버들을 지우고, 이 이미지 파일로 서버를 설치하면 됨
3. 파일럿 pc 운영체제 호스트 파일 수정
- 메모장 관리자 권한으로 실행
-
[파일] - [열기] 에서 C:\Windows\System32\drivers\etc 로 이동 후 hosts 파일 열기
- 가상머신에 설치한 리눅스 서버의 IP/도메인명 정보 입력 후 저장 (server01, server02만 입력)
4. 크롬으로 CM 접속
- 기동하는데 시간이 조금 걸리기 때문에 접속이 바로 안되더라도 여러 번 새로고침
- 사용자 이름, 암호 모두 admin
- CM 첫화면
- 우선은 HDFS, YARN, ZooKeeper 만 설치
- CM 홈화면
- 각 서버의 리소스(CPU, 메모리, 디스크, I/O 등)와 설치된 SW 모니터링하며 현재 상태값 보여줌
- 각 소프트웨어가 불량으로 표시되어도, 정지 상태가 아니라면 진행에 문제 없음 -> 리소스 절약
5. HDFS 구성 변경
1) HDFS 복제 계수 설정
- 하둡에서 원본 파일을 저장하면 안정성을 위해 2개의 복제본 추가로 생성해 총 3개의 파일 만들어짐
- 파일럿 프로젝트에서는 2개로도 충분하기 때문에 2개로 변경
- 복제 계수를 늘리면 여러 데이터노드에 파일이 분산 저장되어 분석 작업시 성능 극대화
2) HDFS 접근 권한 해제
- 하둡 파일시스템에 대한 접근 권한 해제
- 테스트 환경을 고려한 설정. 실제 플젝에서는 계정별로 접근 권한 분리하여 적용
3) HDFS 블록 크기 변경
- 128MB -> 64MB
- 파일럿 프로젝트에서 수집/적재하는 파일의 최대 크기는 110MB
- 하둡은 기본 블록 크기보다 작은 파일 처리시 효율성 떨어짐
6. YARN 구성 변경
- YARN 스케줄러와 리소스매니저 메모리 크기 설정
- 1 -> 1.5 GiB
2) YARN 스케줄러 변경
- 하둡에서 job이 실행될 때 YARN의 스케줄러가 분산 데이터노드의 리소스를 고려해 잡 스케줄링
- FairScheduler -> FIFOScheduler
- Fair가 더 개선된 스케줄이지만, 개인의 pc로 이용하기에는 리소스 경합이 발생해 병목 현상 발생
병목 현상 : 두 구성 요소의 최대 성능의 차이로 인해 한 구성 요소가 다른 하드웨어의 잠재 성능을 제한하는 것
7. 클러스터 재시작
- 설정들 최종 반영하기 위해 클러스터 재시작
- 홈에서 [Cluster 1] - [작업] - [재시작]
8. HDFS 예제 실습
- 저자님 깃허브에서 예제소스 폴더 다운로드 (제가 올려도 되는건지 모르겠어서 링크는 생략하겠습니다)
1) Filezilla로 샘플 txt 파일 -> server02 /home/bigdata 로 전송
HDFS 명령어
https://hadoop.apache.org/docs/r3.1.2/hadoop-project-dist/hadoop-common/FileSystemShell.html
hdfs dfs [GENERIC_OPTIONS] [COMMAND_OPTIONS]
# cat : 파일 읽어서 보여줌 (리눅스 cat과 동일)
hdfs dfs -cat [경로]
# count : 폴더, 파일, 파일 사이즈
hdfs dfs -count [경로]
# ls : 디렉터리 내부 파일
hdfs dfs -ls [디렉터리]
# mkdir : 특정 path에 디렉터리 생성
hdfs dfs -mkdir (-p) [path]
# cp : 파일 복사
hdfs dfs -cp [소스 경로] [복사 경로]
2) 파일 저장 및 확인
cd /home/bigdata
hdfs dfs -put Sample.txt /tmp
- Sample.txt 파일이 HDFS의 /tmp 디렉터리로 저장됨
hdfs dfs -ls /tmp
- 파일 목록에 Sample.txt 존재
3) 파일 내용 보기
hdfs dfs -cat /tmp/Sample.txt
4) 저장한 파일 상태 확인
hdfs dfs -stat '%b %o %r %u %n' /tmp/Sample.txt
- 파일 크기, 파일 블록 크기, 복제 수, 소유자명, 파일명 정보 보여줌
5) 파일 이름 바꾸기
hdfs dfs -mv /tmp/Sample.txt /tmp/Sample2.txt
- Sample.txt -> Sample2.txt 로 변경
6) 파일 시스템 상태 검사
hdfs fsck /
- 전체 크기, 디렉터리 수, 파일 수, 노트 수 등 파일 시스템의 전체 상태 보여줌
hdfs dfsadmin -report
- 하둡 파일시스템의 기본 정보 및 통계 보여줌
- HDFS 파일의 비정상 상태
- HDFS 점검 명령을 실행할 때 파일 시스템에 문제가 발생할 경우 “CORRUPT FILES”, “MISSING BLOCKS”, “MISSING SIZE”, “CORRUPT BLOCKS” 등의 항목에 숫자가 표기됨
- 이 같은 상태가 지속되면 하둡은 물론 HBase, 하이브 등에 부분적인 문제 발생 가능
- HDFS는 비정상적인 파일 블록 발견한 경우 다른 노드에 복구하려고 시도, 사용자가 직접 삭제/이동 명령 조치할 수 있음
# 강제로 안전모드 해제
hdfs dfsadmin -safemode leave
# 손상된 파일 강제로 삭제
hdfs fsck / -delete
# 손상된 파일을 /lost + found 디렉터리로 이동
hdfs fsck / -move
9. 주키퍼 클라이언트 명령을 이용한 설치 확인
1) zookeeper-client 실행
zookeeper-client
2) 주키퍼 z노드 등록/조회/삭제
create /pilot-pjt bigdata
ls /
get /pilot-pjt
delete /pilot-pjt
- bigdata를 담고 있는 pilot-pjt 라는 znode 생성, 조회, 삭제
- zookeeper와 znode
- zookeeper : 분산 어플리케이션을 구성하기 쉽게 도와주는 시스템 (znode로 구성된 분산 데이터 모델을 지원하는 시스템)
- z노드 : 클러스터를 구성하고 있는 각각의 서버
- 주키퍼는 데이터를 디렉터리 구조로 관리하며, key-value 스토리지처럼 key로 접근 가능
- 디렉터리 구조의 각 데이터 노드가 znode
참고 사이트
https://engkimbs.tistory.com/660
10. 스마트카 로그 시뮬레이터 설치
1) server02에 작업 폴더 생성
cd /home
mkdir -p /home/pilot-pjt/working/car-batch-log
mkdir /home/pilot-pjt/working/driver-realtime-log
chmod 777 -R /home/pilot-pjt
2) 자바 컴파일, 실행 환경 변경 (1.7 -> 1.8)
rm /usr/bin/java
rm /usr/bin/javac
ln -s /usr/java/jdk1.8.0_181-cloudera/bin/javac /usr/bin/javac
ln -s /usr/java/jdk1.8.0_181-cloudera/bin/java /usr/bin/java
java -version
- 1.8.0_181 확인
3) 자바로 만들어진 스마트카 로그 시뮬레이터 프로그램 server02에 업로드
-
파일질라 이용
-
bigdata.smartcar.loggen-1.0.jar 파일을 /home/pilot-pjt/working에 업로드
4) 스마트카 로그 시뮬레이터 실행
bigdata.smartcar.loggen-1.0.jar
파일에 두 개의 메인 자바프로그램이 있음- 스마트카 운전자의 운행 정보를 실시간으로 발생시키는
DriverLogMain.java
- 스마트카의 상태 정보를 주기적으로 발생시키는
CarLoginMain.java
- 스마트카 운전자의 운행 정보를 실시간으로 발생시키는
DriverLogMain.java
먼저 실행
cd /home/pilot-pjt/working
java -cp bigdata.smartcar.loggen-1.0.jar com.wikibook.bigdata.smartcar.loggen.DriverLogMain 20160101 10
- java -cp [경로] [클래스 이름] (현재 열려 있는 명령 창에서만 유효)
- cp (classpath) : JVM이 프로그램을 실행할 때 클래스 파일을 찾는 데 기준이 되는 파일 경로, JVM의 매개 변수
- 자바에서 외부 라이브러리 파일이나 jar 파일 포함하여 컴파일하기 위해서는 classpath 이용
- bigdata.smartcar.loggen-1.0.jar : 포함하고자 하는 라이브러리나 jar 파일 (필요한 클래스 파일들)
- com.wikibook.bigdata.smartcar.loggen.DriverLogMain : 컴파일 할 파일
- 시뮬레이터 작동 확인
cd /home/pilot-pjt/working/driver-realtime-log
tail -f SmartCarDriverInfo.log
- 데이터 형식 정의
- CarLogMain.java 실행
cd /home/pilot-pjt/working
java -cp bigdata.smartcar.loggen-1.0.jar com.wikibook.bigdata.smartcar.loggen.CarLogMain 20160101 10
- 코드 설명
- 첫번째 매개 변수: 실행 날짜
- 두번째 매개 변수: 스마트카 대 수 -> 2016년 1월 1일 기준으로 10대의 스마트카에 대한 로그 파일인 SmartCarStatusInfo_20160101.txt 생성됨
- 시뮬레이터 작동 확인
cd /home/pilot-pjt/working/SmartCar
tail -f SmartCarStatusInfo_20160101.txt
- 데이터 형식 정의