본문 바로가기

IT&코딩/국비지원

빅데이터 - 2 (하둡 & winscp)

728x90
반응형

■ 하둡

 

□ 하둡이란?

 

- 빅데이터의 실질적인 시작이 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
728x90
반응형

'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