■ 하둡
□ 하둡이란?
- 빅데이터의 실질적인 시작이 Hadoop
(High Availability Distributed Object-Oriented Platform)
- 자바기반 sw framework
- 오픈소스
- 대용량의 데이터를 낮은 비용을 들여 정형, 반정형, 비정형 데이터 등으로부터 정보를 추출
- 하나의 smart한 서버보다는 몇십대 이상의 plain 서버(GFS, HDPS) + 병렬처리
- 확장성 : 용량 필요시 추가로 서버를 연결하면 됨
□ 왜 하둡인가?
- 2008년 뉴욕타임즈 100년도 넘는 분량의 신문기사(1000만 이상의 페이지)를 하둡을 이용해 하루만에 PDF로 변환
- 200만원 정도의 비용. 만일 일반 서버로 하면 10년 이상이 요구됨
# 국내외 하둡 사용
- 아마존, 이베이, 페이스북등
- 네이버, 다음카카오, KT 등의 이동통신사
expert system : mycin
# 하둡의 역사
- 2003년 google이 검색엔진 관련 대용량 데이터를 처리할 수 있는 논문(GFS + Mapreduce)을 발표
* GFS = Google File System의 약어
- Apache를 만든 더그커팅(Doug Cutting)의 웹 검색엔진 Nutch의 성능 확장을 목표로 하둡의 본격적인 탄생이 시작됨.
- 2006년 더그커팅이 야후로 옮김
- 더그커팅은 야후에 있던 직원이 만든 회사인 클라우데라로 옮김
□ 하둡의 구조
# 하둡의 구조 1
-2011년 자바 sw framework, 분산저장 + 병렬처형태의 hadoop v1 대두
<hadoop v1 구조>
[MapReduce]
클러스터 자원 배분과 데이터처리 담당
[HDFS]
- 2012년 hadoop v2
<hadoop v2 구조>
[MapReduce]
데이터처리 담당
[YARN] (Yet Another Resource Negotiator)
클러스터 자원 배분
[HDFS]
- 2017년 hadoop v3
HDFS 파일저장 용량 감소를 위해 Erasure Coding 기법 추가 (reed - solomon 알고리즘)
3copy시 차지하는 용량 문제 해결
# 하둡의 구조 2
Master/Slave 구조
# namenode와 datanode는 3초 단위로 heartbeat를 rcv and send
-- 만일 알림이 없다면 문제 발생
즉, datanode가 namenode에 heart beat를 전달하지 않으면
namenode는 해당 datanode에 data를 저장하지 않음
1. Standalone mode
- 기본 실행모드
- 하둡 환결설정없이 실행하는 로컬모드 (분산환경없이 함)
(즉, conf/*.xml의 configuration 태그 안이 비어있다)
- 하둡 데몬 프로세서 동작없이 모두 Standalone JVM 내에서 동작
- 즉, HDFS 사용 없으므로 Namenode, Datanode는 물론 JobTracker, TaskTracker도 가동되지 않음.
- 분산환경이 아닌 한 대의 단일 서버에서 MapReduce 위주의 작업을 하는 환경을 말함.
- 테스트, 디버그가 쉽기 때문에 개발에 적합
2. 가상 분산 모드 (Pseudo-distributed mode)
- 하나의 장비에 하둡 환경설정
- HDFS, MapReduce 관련 하둡 데몬 프로세서를 하나의 장비에서만 실행
- 즉, namenode, Datanode, JobTracker, TaskTracker가 한 대의 단일 서버에서 가동됨
(한 대의 단일 서버 + HDFS + MapReduce)
3. 완전 분산 모드 (Fully-distributed mode)
- 하둡 데몬 프로세스가 여러 컴퓨터로 구성된 그룹에서 동작
- 즉, Master Server 및 Slave Server(다수의 컴퓨터) + HDFS + MapReduce
- 최하 두 대 이상의 컴퓨터가 연결되어야 함
■ winscp
# https://winscp.net/eng/download.php
에서 아래 초록색 버튼 클릭하여 버전 6.x 받음
# 다운받은winscp를 설치한다.
변경없이 나오는 것은 그대로 [수락]...[다음]을 클릭 ... [설치]
- [시작페이지 열기 체크해제] - 완료
□ winscp 접속 사용하기
(새사이트 클릭) - 파일 프로토콜을 scp로 변경 - 호스트 이름에 ifconfig쳐서 나온 리눅스 ens... ip 주소
즉, 192.168.xx.xx 포트번호를 22 사용자 이름 root, 1234 비밀번호 적고
- 저장
- 세션저장에 root로 하고 - (아래 암호저장 및 바로가기에 체크 x) - 확인
- 로그인 클릭
- 호스트 키 관련 메시지 박스가 뜨면 "예" 클ㄺ
- (재접속 나오면 재접속 클릭)
- 접속됨 (왼쪽 window, 우측 linux)
□ CentOS에 있는 기존 자바를 삭제
# 프로그램 - 시스템도구 - 터미널
아니면 tera term 사용
* rpm (redhat package manager) : program insatall management tool
* yum (yellow dog update modified) : rpm 개정판
rpm -qa | grep java
yum remove tzdata-java.noarch
yum remove javapackages-tools.noarch
yum remove python-javapackages.noarch
rpm -qa | grep java
ㄴ 다 지우고 내용이 안 나오면 성공
□ 추가 작업
먼저 winscp 준비
# JDK 다운로드
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
로 접속하여 우측 아래 jdk-8u371-linux-x64.tar.gz을 다운로드
# java 설치
- jdk를 윈도우에서 다운받은 경우 winscp로 설치한다
- winscp를 가동하여 /root/아래 폴더 "다운로드" 폴더로 간다
- 그런다음 다른쪽 폴더에 있는 jdk-8u371-linux-x64.tar.gz 파일을 드래그하여 복붙한다.
# cd ./다운로드 (한글처리시 winkey + spacebar 등 사용) 후 jdk 압축파일을 tmp로 이동한다.
root@localhost 다운로드] # mv jdk-8u371-linux-x64.tar.gz /tmp
(이때 jdk까지 치고 왼쪽 탭을 누르면 글자가 자동완성 된다.)
그리고 tar 파일 압축해제 및 /opt/jdk 폴더 생성
tar zxvf /tmp/jdk (탭) && mkdir /opt/jdk
(주로 application 프로그램 저장시 opt 폴더를 사용)
[root@localhost ~]# cd ./다운로드
[root@localhost 다운로드]# ls
jdk-8u381-linux-x64.tar.gz
[root@localhost 다운로드]# cd /tmp
[root@localhost tmp]# ls
[root@localhost ~]# cd ./다운로드
[root@localhost 다운로드]# mv jdk-8u381-linux-x64.tar.gz /tmp
[root@localhost 다운로드]# tar zxvf /tmp/jdk-8u381-linux-x64.tar.gz && mkdir /opt/jdk
- 다운로드 안에 jdk 1.8.0_381 디렉토리 전체 파일을 /opt/jdk로 이동
[root@localhost 다운로드]# mv jdk1.8.0_381 /opt/jdk
cd /opt/jdk
[root@localhost jdk]# ls -al 하면
drwxr-xr-x. 8 root root 4096 8월 8 02:43 jdk1.8.0_381 이 디렉토리가 보인다.
cd jdk(탭)한 다음 엔터
ls 하면 jdk 파일 전체 보인다.
이제 경로를 간단하게 설정해주자
[root@localhost jdk1.8.0_381]# cd
[root@localhost ~]# ln -s /opt/jdk/jdk1.8.0_381 /opt/jdk/yoki
# /opt/jdk/yoki 폴더를 아무데서나 접근 및 사용 가능하도록 환경설정하기
# cd /
# vi ~/.bash_profile
# esc + i 누르고 적당한 공란을 찾아가
# 환경설정을 시작한다
export JAVA_HOME=/opt/jdk/yoki
export PATH=$JAVA_HOME/bin:$PATH
# 수정한 내용 적용하기
source ~/.bash_profile
이런 다음 java -version 누르면 path가 잘 설정되어 답이 잘 나옴
# 가상(의사)분산 모드(Pseudo-distributed mode)로 하둡 설치
# 하둡계정 만들기
cd /
계정과 pw 생성
useradd hadoop
passwd hadoop
새암호 : hadoop
새암호재입력 : hadoop
# hadoop 3.2.4 다운 받기
- apache hadoop 주소 https://hadoop.apache.org/release/3.2.4.html 를 찾아가서
-우측 상단[download]클릭(tar.gz)
# 하둡 설치 폴더를/opt 아래 hadoop3 이름으로 만든다
[root@localhost /]# mkdir /opt/hadoop3
# cd /tmp로 /tmp로 이동하고 winscp를 사용하여 다운 받은 하둡 파일을 드래그로 복붙한 다음 압축을 푼다.
- cd /tmp
- tar -zxvf ./hadoop-3.2.4.tar.gz (/앞에.있음)(tar -xvzf ~)
- 압축은 tar -cvzf aa.tar.gz * ==> 모든 파일을 aa.tar.gz이름으로 압축
- c:파일을 묶고(x는 압축 풀기) v : 압축 or 풀기 과정을 화면에 표시
- z:gunzip으로 f:뒤에는 파일 이름을 적는다.
(참고) 용량 30GB - VDI(동적할당-30GB)에서 ifconfig 해보니 로그인용 사이트 주소는 root@192.168.x.xxx ==> 자기주소 적기
(연결은 로그인 누르고 root 암호 입력)
(참고) 웹에 접속하여 다운로드하는 wget을사용하여 hadoop-3.2.4.tar.gz을 다운받을 수 있다.
# 연결전송(다운)받은 hadoop-3.2.4.tar의 압축을푼다
# /tmp 폴더에 생성된 hadoop-3.2.4 하둡폴더를 /opt/hadoop3 폴더로 이동시킨다.
[root@localhost tmp]# mv ./hadoop-3.2.4 /opt/hadoop3
#./opt/hadoop3과 /opt/hadoop3/*에 대한 파일 권한을 hadoop group hadoop에게 줌
(-R은 폴더와 그 안에 있는 파일까지)
chown -R hadoop:hadoop /opt/hadoop3 /opt/hadoop3/*
==> root 권한에서 hadoop 권한으로 owner가 변경됨
# su(substitute)를 사용하여 hadoop 사용자로 사용자 변경 후 hadoop 폴더로 가자
[root@localhost tmp]# cd /
[root@localhost /]# su - hadoop
[hadoop@localhost ~]$ cd /opt/hadoop3
# jdk와 마찬가지로 하둡에 대한 symbolic link 설정
ln -s hadoop-3.2.4 ./yoki3
# /home/hadoop 아래 .bash_profile을 수정한다.
- vi ~/.bash_profile 작성(아래 #줄사이 작성)
###########################################
export HADOOP_HOME=/opt/hadoop3/yoki3
export PATH=$HADOOP_HOME/bin:$PATH
export PATH=$HADOOP_HOME/sbin:$PATH
#-------------------------
export JAVA_HOME=/opt/jdk/yoki
export PATH=$JAVA_HOME/bin:$PATH
############################################
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
(위에 3줄은 원래있는거)
# 앞에 설정 적용하기
source ~/.bash_profile
□ 추가 환경설정(xml파일 변경)
(참고 : xml의 역할)
1) hdfs-site.xml
하둡 파일시스템(HDFS)과 관련된 환경 정보를 설정
2) mapred-site.xml
MapReduce와 관련된 환경 정보를 설정
3) core-site.xml
HDFS와 Mapreduce에서 함께 사용할 환경정보들을 설정
(hdfs-site와 mapred-site의 공통 설정 부분)
4) yarn-site.xml
Resource Manager(master),Node Manager(slave)정보를 설정
==>YARN(Yet Another Resource Negotiator) : 리소스를 별도로 관리
5) yarn-env.sh
YARN을 실행하는 쉘 스크립트 파일
# 순서
# hadoop 환경설정파일 폴더인 /etc/hadoop으로 가기
(/opt/hadoop3/yoki3/etc/hadoop)
cd $HADOOP_HOME/etc/hadoop
# core-site.xml파일 수정
vi ./core-site.xml
<configuration> 안에 property 긁어서 넣기
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
# hdfs-site.xml 수정
vi hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
# YARN 설정하기
mapred-site.xml 을 하나 만들어 설정한다
(없으면 이렇게 하고 있으면 생략)
이것을 위해 이미 있는 임시파일 mapred-site.xml.template파일을 복사한다
[hadoop@localhost hadoop]cp mapred-site.xml.template mapred-site.xml
# mapred-site.xml을 수정
[hadoop@localhost hadoop]vi ./mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
# yarn-site.xml 을 수정
분산 저장 및 분산 저장된 데이터 합칠 때
[hadoop@localhost hadoop] vi ./yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
□ 공개키 설정하기
id/pw 보다 더 강력한 보안 설정
cf.winscp = window + secure copy + remote copy protocol
# 하둡계정을 공개키로 설정
하둡계정을 공개키로 설정하여 네트워크 접속 시 공개키로 로그인 한다
[hadoop@localhost hadoop] ssh-keygen -t dsa -P "" -f ~/.ssh/id_dsa
다음과 같은 문구가 뜬다
Generating public/private dsa key pair.
Created directory '/home/hadoop/.ssh'.
Your identification has been saved in /home/hadoop/.ssh/id_dsa.
Your public key has been saved in /home/hadoop/.ssh/id_dsa.pub.
The key fingerprint is:
SHA256:AxrFbMSGoTX/90nBDHJ5RYzriS27ZE4C86zOocg0u08 hadoop@localhost.localdomain
The key's randomart image is:
+---[DSA 1024]----+
| +Bo . o. =o |
| o.+* o.+o . |
| . .oo .+. |
| o o .. |
| . o S .+.. |
| = ooo+. |
| o E . + +oo |
| o = o o *. |
| =oo.+ o. |
+----[SHA256]-----+
(참고) ssh:secure shell로서 네트워크 접속 시 암호기반으로
dsa : digital signature algorithm 암호알고리즘 지정
# (참고) hadoop의 .ssh 생성
(참고) 지금위치는 [hadoop@localhost hadoop]$ pwd
/opt/hadoop3/yoki3/etc/hadoop
# 파일 id_dsa.pub을 authorized_keys뒤에 붙이기
[hadoop@localhost hadoop] cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
# ~/.ssh/authorized_keys의 mode를 0700으로 ==> 700이란
[hadoop@localhost hadoop] chmod 0700 ~/.ssh/authorized_keys
# 다른 곳으로 갔을 경우 원래대로 다시 오게하기
[hadoop@localhost ~]$ cd $HADOOP_HOME/etc/hadoop
[hadoop@localhost hadoop]$ pwd
/opt/hadoop3/yoki3/etc/hadoop
□ ssh # 공개키 #
[hadoop@localhost hadoop]# scp ~/.ssh/id_dsa.pub hadoop@localhost:/tmp/id_dsa.pub
* localhost yes, no 나오면 yes
# why? 공개키를 만들어서 하둡에 넣어주고있는가?
하둡은 서버를 여러개 namenode(master) 서버 - datanode(slave) 서버
과연 서로 문제가 없는지 알아야 자료가 send 하거나 처리
ㄴ 방법으로 사용하는 것은 ssh 기법 (공개키 - 개인키, 공개키를 서버로 보내서 서로 확인)
한 대일지라도 ssh 기법은 필요. 이 작업 없으면 더이상 진행 x
# cat (공개키를 .ssh에 추가) 생략
[hadoop@localhost hadoop]# cat /tmp/id_dsa.pub >> ~/.ssh/)
# ssh실행
[hadoop@localhost hadoop]# ssh localhost
# 실행확인
[hadoop@localhost hadoop] # hdfs namenode -format
NameNode를 다시 설정
start-all.sh
[hadoop@localhost hadoop] # start-yarn.sh (start-all.sh ==> old)
모든 shell 프로그램을 실행
# jps 실행
jps는 java Virtual Machine Process Status Tool로 프로세스 실행상태를 확인하려는 것
[hadoop@localhost hadoop]jps
java process로 아래 6개의 프로세스가 구동되면 Hadoop 설치 완성된 것
10609 Resource Manager
10849 NodeManager
10051 NameNode
11062 Jps
10215 DataNode
10414 SecondaryNameNode
■ jps 6개가 안 나오는 에러 시의 처리
# $JAVA_HOME is not set 에러
vi hadoop-env.sh
#export JAVA_HOME=${JAVA_HOME} ##### 여기 주석
export JAVA_HOME=/opt/jdk/yoki ##### 여기 추가
그 다음
start-all.sh
jps
하면 6개 보임
(참고) 하둡 종료 후 확인
stop-all.sh
jsp ==> 결과 jps만 보임
# Namenode 없는 에러
hdfs(hadoop) namenode -format
으로 NameNode를 다시 format하고
start-all.sh ==> jps
하면 6개 보이면 하둡 설치 end, 반드시 start-all.sh로 가동
# DataNode demon 없는 에러
cd /tmp/hadoop-hadoopd/dfs/ 로 가서
rm -rf data 수행 후
cd $HADOOP_HOME
shart-all.sh
# 나머지 에러들도 로그 확인하여 수정
로그파일은 $HADOOP_HOME/logs
로그 파일들은
hadoop-hadoop-namenode-localhost.localdomain.log
hadoop-hadoop-datanode-localhost.localdomain.log
hadoop-hadoop-secondarynamenode-localhost.localdomain.log
'IT&코딩 > 국비지원' 카테고리의 다른 글
빅데이터 - 4 (R 설치) (0) | 2023.08.21 |
---|---|
빅데이터 - 3 (하둡을 이용한 워드카운팅) (0) | 2023.08.18 |
빅데이터 - 1 (0) | 2023.08.17 |
리눅스 - 4 (실습) (0) | 2023.08.17 |
리눅스 - 3 (tera term 사용) (0) | 2023.08.17 |