반응형
SMALL

리눅스 VI ( Visual Editor ) 편집기


vi 편집기는 유닉스 계열에서 가장 많이 사용되는 편집기이다. 1976년 빌조이가 개발하였다. vi 편집기는 한 화면을 편집하는 비쥬얼 에디터 ( Visual Editor ) 이다.

 

VI ( Visual Editor ) 편집기의 특징


vi는 Emacs와 함께 Unix 환경에서 가장 많이 쓰이는 문서 편집기이다. 1976년 빌 조이가 초기 BSD 릴리즈에 포함될 편집기로 만들었다. vi라는 이름은 한 줄씩 편집하는 줄단위 편집기가 아니라 한 화면을 편집하는 비주얼 에디터라는 뜻에서 유래했다. 간결하면서도, 강력한 기능으로 열광적인 사용자가 많다.

현재는 오리지널 vi를 사용하는 경우는 거의 없고, 일반적으로 기능을 모방하여 만들어진 클론을 사용하고 있다. 이런 클론 중 많이 쓰이는 것은 기능이 다양한 것을 장점으로 내세우며, 리눅스 배포판에 포함되는 Vim, 그리고 BSD 라이센스로 제공되며 원본 vi의 동작과 호환성으로 정평이 나 있는 nvi, 독자적인 팬층을 확보한 elvis 등이 있다.

vi 편집기가 동작하는 원리를 보면 버퍼에서 작업을 하게 된다. 그러므로 저장을 시키는 명령어를 입력하지 않는 이상 디스크상에 파일의 내용으로 저장되는 것은 아니다.



출처 : https://tear94fall.github.io/lecture/2020/02/10/vi-keyboard-short-cut.html

vi 단축키(자주 사용하는 것 위주로)

기본기능

기능
h ⬅️ 커서를 왼쪽으로 움직임
j ⬇️ 커서를 아래로 움직임
k ⬆️ 커서를 위로 움직임
l ➡️ 커서를 오른쪽으로 움직임
- 커서를 줄의 처음으로 옮기
gg 문서의 맨위로 커서를 이동
Shift + g 문서의 맨 마지막으로 커서를 이동
Ctrl + f 한페이지 아래로 이동
Ctrl + b 한페이지 이전으로 이동
Ctrl + d 반페이지 아래로 이동
Ctrl + u 반페이지 위로 이동
Ctrl + e 페이지를 한줄씩 아래로 이동
Ctrl + y 페이지를 한줄씩 위로 이동
Shift + h 페이지는 이동하지 않고, 화면 내에서 커서를 맨 위로 이동 시킴
Shift + m 페이지는 이동하지 않고, 화면 내에서 커서를 맨 중간으로 이동 시킴
Shift + l 페이지는 이동하지 않고, 화면 내에서 커서를 맨 마지막으로 이동 시킴
x 커서부터 오른쪽으로 삭제
Shift + x 커서기준으로 커서 왼쪽으로 삭제
v 글자 단위 블럭 지정
Shift + v 라인단위 블럭 지정
Ctrl + v 블럭단위 블럭 지정 (h,j,k,l로 지정이 가능함)
dd 현재 커서가 위치한 라인 삭제
dG 현재 커서가 위치한 라인부터 마지막 까지 삭제
yy 현재 커서가 위치한 라인 복사
p 현재 커서가 위치한 라인 바로 아래 붙여 넣기
Shift + p 현재 커서가 위치한 라인 바로 위 라인에 붙여 넣기
$ 커서를 라인의 맨 마지막으로 이동
^ 커서를 라인의 맨 처음으로 이동
i 현재 커서가 위치한 문자의 앞에 insert
Shift + i 현재 커서가 위치한 라인의 맨 앞에 insert
a 현재 커서 위치에서 한칸 다음으로 이동해서 insert
Shift + a 현재 커서가 위치한 라인의 마지막 위치에서 insert
o 현재 커서가 위치한 라인의 아래에 한줄 삽입하고, 커서를 새로운 라인에 위치한 후 insert
Shift + o 현재 커서가 위치한 라인의 위에 한줄을 삽입하고, 커서를 새로운 라인에 위치한 후 insert
s 현재 커서가 위치한 문자를 지우고 insert
Shift + s 현재 커서가 위치한 라인을 지우고 insert
u Undo, 이전으로 되돌리기
Ctrl + r Redo, 이전으로 되돌리기 취소
> 2번 클릭 들여쓰기
>} 한문단 전체 들여쓰기
2 > > 2줄 들여쓰기
< 2번 클릭 내어쓰기
~ 현재 커서가 위치한 문자가 대문자면 소문자로, 소문자면 대문자로 변경한다
Ctrl + a 현재 커서가 위치한 문자가 숫자면 숫자를 증가 시킬 수 있다 (자릿수 변경 가능)
Ctrl + x 현재 커서가 위치한 문자가 숫자면 숫자를 감소 시킬 수 있다 (음수 값도 가능)

파일 관련 기능

기능
:q 종료
:q! 강제 종료
:wq 저장 후 종료
:w 현재 파일 명으로 저장
:w {filename} filename으로 저장
vi ./{PATH} 파일 네비게이션 기능이다. 현재 디렉토리의 리스트를 보여준다.
커서가 위치한 디렉토리에 엔터를 누르면 해당 디렉터리의 리시트를 다시 보여준다.
파일에서 엔터를 누르면 해당 파일을 열어서 보여준다. (vim 6.0 부터 사용가능하다)

화면 관련 기능

기능
:split (:sp) 화면을 수평으로 나눈다. 두개의 화면에 같은 파일이 표시된다.
:split (:sp) {fileanem} 수평으로 나눠진 화면에 filename을 표시한다.
:vsplit (:vs) 화면을 수직으로 나눈다
:vsplit (:vs) {fileanem} 수직으로 나눠진 화면에 filename을 표시한다.
Crtl + ww 화면을 이동할때 사용한다. (다음화면으로 이동 한다)
Crtl + w {h,j,k,l} 화면을 이동할때 사용한다. (상하좌우 키를 이용해, 원하는 위치로 이동한다)
Ctrl + w= 분할된 화면 사이즈를 동일하게
:close 화면을 닫을때 사용한다
:new 새로운 창을 수직으로 분할된 화면에 열기
:tabnew 새창을 현재 화면과 같은 위치에 열기 (상단에 탭 추가됨)
gt 오른쪽 탭으로 이동
gT 왼쪽 탭으로 이동

기타 기능

기능
Ctrl + v(블럭), Shift + i(클릭), esc 키 두번 클릭 여러줄 수정
:set number 줄번호 보이기
:set nonumber 줄번호 없애기
:{줄 번호} 줄번호로 이동1
{줄번호} + Shift + g 줄번호로 이동2
/{찾을 내용} 단어 찾기
n 또는 * 단어 찾기 위로
Shift +n 또는 # 단어 찾기 아래로

접기 기능

기능
zf 선택 부분 접기
zo 부분 펴기 (open)
zc 부분 접기 (close)
zi 누를 때마다 접기/펴기 할 수 있음 (zc/zo)를 누르지 않아도 됨
zd 현재 위치의 폴드 삭제 하기
zM 모두 접기
zR 모두 펴기
zE 현재 문서의 모든 폴드 삭제
zD 현재 위치의 겹쳐진 폴드 삭제

출처 : https://tear94fall.github.io/lecture/2020/02/10/vi-keyboard-short-cut.html

반응형
LIST
반응형
SMALL

우분투(Ubuntu)


빅데이터 수업을 위해 리눅스 환경에서 스파크 공부를 위한 파이썬을 공부한다.

저번에 설치한 건 centOs로 서버를 만든 것으로, 새로운 환경을 위해 우분투를 설치하기로 했다.

 


1. 우분투 다운로드

https://ubuntu.com/download/desktop

 

Download Ubuntu Desktop | Download | Ubuntu

Ubuntu is an open source software operating system that runs from the desktop, to the cloud, to all your internet connected things.

ubuntu.com

 

2. Oracle VM VirtualBox에 우분투 설치하기

새로만들기 -> ub(자동으로 우분투 파일 인식) -> 메모리 크기 초록색 부분 -> 새 가상디스크 만들기 -> VDI -> 고정크기 -> 파일 크기 35GB -> 만들기

 

3. 우분투 설정

0) ub 우클릭 > 설정

1) 시스템 > 프로세서 > 프로세서 갯수 5

2) 디스플레이 > 화면 > 비디오메모리 82

3) 네트워크 > 어뎁터2 > 네트워크 어뎁터 사용하기 > 어뎁터에 브리지

 

4. 우분투 시작

1) 시작 누르고 아까 설치한 우분투 파일 시동디스크로 열기

 

2) 한국어 선택 > Ubuntu 설치

3) 키보드 레이아웃 > Korean(korean-101/104 key compatible)

4) 최소설치 , 그래픽과 Wi-Fi 하드웨어 그리고 추가 미디어 포맷을 위한 서드 파티 소프트웨어 설치

 

5) 위치 > 서울

6) 계정 이름과 암호 설정

7) 설치 완료

8) 설정한 계정으로 로그인하기

 

 

9) 온라인 계정 연결 > 건너뛰기

10) Livepatch 

11) Untubu 개선에 도움 주기 > 보내지 않겠습니다

12) 개인 정보 설정하지 않기

13)완료

 

14) 한글설정은 파이어폭스 오른쪽 상단에서 한글상태 클릭

 

5. 기본 설정 및 터미널

몇가지 추가 설정을 해주어야 한다.

 

1) ip 확인을 위해 ifconfig 설치

$ 이후에 터미널 창에 입력

sudo apt install net-tools

-> ifconfig로 ip 확인 가능

 

2) ssh service를 설치 및 구동 (참고)

다른 컴퓨터(윈도우) 서버에 연결하기 위해 사용한다.

sudo apt-get install openssh-server
sudo service ssh restart

 

3) 잘 동작하는지 확인

ps aux | grep ssh

 

4) putty에 ub 등록과 ip 주소 입력해주기

 

 

5) MobaXterm의 Session에 ip를 등록해준다.

6) 노드 생성 후 mkdir 디렉토리 생성

 


6. 파이참(Pycharm) 설치

프로그램들을 간단하게 터미널로 설치 가능하다.

sudo apt install snapd snapd-xdg-open
sudo snap install pycharm-community --classic

설치 완료

 

 

7. 아나콘다(Anaconda) 설치

wget https://repo.anaconda.com/archive/Anaconda3-2019.07-Linux-x86_64.sh
bash Anaconda3-2019.07-Linux-x86_64.sh

설치 확인은 

source .bashrc
conda env list

 

터미널 종료는 sudo halt !!!!

 

 

반응형
LIST
반응형
SMALL

아파치 스파크(Apache Spark)


마태 자하리아가 UC 버클리에서 박사 과정 논문의 일부로 개발한 강력한 오픈소스 분산 쿼리 및 처리 엔진.
다양한 종류의 데이터 관련 문제, 예를 들어 반구조(semi-structured), 구조, 스트리밍 또는 머신 러닝/데이터 과학 관련 문제를 해결하기 위해 쉽고 빠르게 쓸 수 있는 프레임워크이다.

 

스파크는 데이터를 읽고, 변형하고, 합계를 낼 수 있으며, 복잡한 통계 모델들을 쉽게 학습하고 배포할 수 있다.

파이썬 pandas 라이브러리와 R의 data.frames 또는 data.tables를 이용하는 데이터 분석가, 데이터 과학자 또는 연구우너들에게 적합한 여러 라이브러리를 제공한다.

 

 

설치하기


1. dn01의 root 계정에서

[root@dn01 ~]# cd /tmp
[root@dn01 tmp]# wget http://apache.mirror.cdnetworks.com/spark/spark-2.4.7/spark-2.4.7-bin-hadoop2.7.tgz
[root@dn01 tmp]# tar xzvf spark-2.4.7-bin-hadoop2.7.tgz
[root@dn01 tmp]# mkdir -p /opt/spark/2.4.7
[root@dn01 tmp]# mv spark-2.4.7-bin-hadoop2.7/* /opt/spark/2.4.7/
[root@dn01 tmp]# ln -s /opt/spark/2.4.7 /opt/spark/current
[root@dn01 tmp]# chown -R hadoop:hadoop /opt/spark/
[root@dn01 tmp]# su - hadoop


[hadoop@dn01 ~]$ vi ~/.bash_profile

 

[~/.bash_profile  : vi 부분]

( 주석 하단에 추가 )

###### spark  ######################
        export SPARK_HOME=/opt/spark/current
        export PATH=$PATH:$SPARK_HOME/bin
        export PATH=$PATH:$SPARK_HOME/sbin
#### spark ######################

 

저장 필수!!

[hadoop@dn01 ~]$ source ~/.bash_profile
[hadoop@dn01 ~]$ cd $SPARK_HOME/conf
[hadoop@dn01 conf]$ pwd

-> 경로확인 : /opt/spark/current/conf

 

[hadoop@dn01 conf]$ mv slaves.template slaves
[hadoop@dn01 conf]$ ls
[hadoop@dn01 conf]$ vi slaves

 

코드

 

[slaves] nn01 dn02 설정

[slaves : vi 부분]

nn01

dn02

( 기존 localhost는 지우고 입력하기 )

 

[hadoop@dn01 conf]$ mv spark-defaults.conf.template  spark-defaults.conf
[hadoop@dn01 conf]$ ls
[hadoop@dn01 conf]$ vi spark-defaults.conf

 

[spark-defaults.conf : vi 부분]

spark.yarn.jars /opt/spark/current/jars/*

( 주석 하단에 추가 )

 

코드

 

[hadoop@dn01 conf]$ mv log4j.properties.template  log4j.properties
[hadoop@dn01 conf]$ ls
[hadoop@dn01 conf]$ vi log4j.properties

 

[log4j.properties : vi 부분]

#INFO -> ERROR로 바꿔 줌 -> Spark 로그에 정신없는 INFO가 안나타남

log4j.rootCategory=ERROR, console

 

[log4j.properties  : vi 부분 ]

 

[hadoop@dn01 conf]$ mv spark-env.sh.template  spark-env.sh
[hadoop@dn01 conf]$ ls
[hadoop@dn01 conf]$ vi spark-env.sh

 

[spark-env.sh  : vi 부분]

( 주석 하단에 추가 )

SPARK_MASTER_HOST=dn01

export JAVA_HOME=/opt/jdk/current

export HADOOP_HOME=/opt/hadoop/current

export SPARK_HOME=/opt/spark/current

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

export SPARK_DRIVER_MEMORY=2g

export SPARK_EXECUTOR_INSTANCES=2

export SPARK_EXECUTOR_CORES=1

export SPARK_EXECUTOR_MEMORY=2g

export SPARK_MASTER_IP=192.168.56.102

#export SPARK_WORKER_DIR=/spark_data/spwork

#export SPARK_PID_DIR=/spark_data/sptmp

export SPARK_DIST_CLASSPATH=$(/opt/hadoop/current/bin/hadoop classpath):/opt/spark/current/jars/*

#export PYTHONPATH=/opt/python/current/python3

#export PYSPARK_PYTHON=/opt/python/current/python3

 

[hadoop@dn01 ] spark-shell

-> spark-shell 확인

   scala> sc.setLogLevel("WARN")
   scala> val f = sc.textFile("file:///etc/hosts")
   scala> f.count
   scala> f.first
   scala> f.collect
   scala> :quit

spark에 잘 들어갔다.

:quit로 빠져 나온다.


2. dn01 노드(root 계정)에서

- dn02와 nn01로 전송 복사

[hadoop@dn01 ] su - root
[hadoop@dn01 ] scp -r /opt/spark  dn02:/opt/spark
> yes
[hadoop@dn01 ] scp -r /opt/spark  nn01:/opt/spark
yes

 

scp로 전송하면 softlink는 안잡힌다.

current가 디렉토리로 된 거 확인하고 디렉토리를 지우고 softlink로 설정

 

 

3. dn02 노드와 nn01(root 계정)에서 확인

[ dn02 계정 ]

[root@dn02 ~]# rm -rf /opt/spark/current
[root@dn02 ~]# ln -s /opt/spark/2.4.7 /opt/spark/current
[root@dn02 ~]# ll /opt/spark/
[root@dn02 ~]# chown -R hadoop:hadoop /opt/spark/
[root@dn02 ~]# su - hadoop
[hadoop@dn02 ~]$ vi ~/.bash_profile

[~/.bash_profile  : vi 부분]

( 주석 하단에 추가 )

###### spark  ######################

        export SPARK_HOME=/opt/spark/current

        export PATH=$PATH:$SPARK_HOME/bin

        export PATH=$PATH:$SPARK_HOME/sbin

#### spark ######################

[hadoop@dn02 ~]$ source ~/.bash_profile

추가

 

[ nn01 계정으로 이동 ]

[hadoop@nn01 ~]$ vi ~/.bash_profile

 

[~/.bash_profile  : vi 부분]

( 주석 하단에 추가 )

###### spark  ######################

        export SPARK_HOME=/opt/spark/current

        export PATH=$PATH:$SPARK_HOME/bin

        export PATH=$PATH:$SPARK_HOME/sbin

#### spark ######################

[hadoop@nn01 ~]$ source ~/.bash_profile

꼭 저장까지 완료하기.

 


4. dn01 노드 hadoop 계정에서

Spark Start ( hadoop start와 이름이 같으므로 반드시 해당 경로로 이동후 실행하기)

[hadoop@dn01 ] $ SPARK_HOME/sbin/start-all.s

끝낼때는

[hadoop@dn01 ]$ ./stop-all.sh

 


5-1. 안전하게 [ 끄는법 ]

 

1) dn01에서

$SPARK_HOME/sbin/stop-all.sh

일단 스팍부터 죽이기

 

2) nn01에서 

stop-all.sh

(하둡 종료)

 

5-2. [다시 켤 때]

1) nn01에서 하둡부터 켜고

start-all.sh

 

2) dn01에서

$SPARK_HOME/sbin/start-all.sh

해야함

반응형
LIST
반응형
SMALL

Hadoop


빅데이터 시스템 중 가장 기본적. 무료
알아서 기능 구현. 결함이 있어도 알아서 standby namenode가 알아서 멈추지 않도록 작업해줌.
오늘은 설치만 해도 ㅈ같이 힘들기 때문에 최대한 복사 붙여넣기로 할 수 있게 구성.

우리는 '아파치 하둡 배포판' 깔 예정. -> 이것만 무료. 그리고 존나 복잡함
하둡 만든 사람 더그 커틴 개새끼
아파치는 기본이고 보통 회사에서는 클라우데라, 호튼윅스 사용할듯.(이 두개는 유료)


 

[아파치 하둡 에코시스템]
하둡을 설치하고(빨간색) 그 주변에 있는 것들을 연결해주어야함.
따로따로 만든거다보니까 연결하는 작업이 너무 힘들기 때문에 클라우데라, 호든윅스처럼 이미 어느정도
연결되어 설치할 수 있는 것을 사용하는 것.

 

 

우리는 지금 가상 환경 3개 만들어서 거기에 개별적인 리눅스 깔고 연결해줄꺼임.

 


1. Vitural Box 설치

( 현재 6.0 버전이지만 5.2 버전 다운로드 )

- https://www.virtualbox.org/ 들어가서 5.2.44 > windows hosts 다운받기

- 같은페이지 Extension Pack 다운받기(확장팩)

- 다 next > install로 설치

 

1. 설치
설치 완료된 화면

 

 

 

2. Vagrant(베이그랜트) 다운로드

https://www.vagrantup.com/ 들어가서 2.2.10 다운로드

- 다 next > 설치 (자동 재부팅됨)

 

 

2 베이그랜트 다운로드

 

 

3. Vagrant(베이그랜트) 설치

- cmd를 관리자모드 실행

- C:\HashiCorp 입력

- vagrant init 입력

 

 

 

- 탐색기 > C:\HashiCorp\Vagrant 폴더 생성된거에 들어가서 생성된 Vagrantfile의 모든 내용을 제거하고 다음 내용을 추가한다.

 

하단 내용 복사>붙여넣기

 

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

config.ssh.insert_key = false

config.vm.define :nn01 do |nn01_config|

nn01_config.vm.box = "centos/7"

nn01_config.vm.hostname = "nn01"

nn01_config.vm.network "private_network", ip: "192.168.56.101"

nn01_config.vm.provider :virtualbox do |vb|

vb.name = "nn01"

vb.memory = "4096"

end

end

config.vm.define :dn01 do |dn01_config|

dn01_config.vm.box = "centos/7"

dn01_config.vm.hostname = "dn01"

dn01_config.vm.network "private_network", ip: "192.168.56.102"

dn01_config.vm.provider :virtualbox do |vb|

vb.name = "dn01"

vb.memory = "4096"

end

end

config.vm.define :dn02 do |dn02_config|

dn02_config.vm.box = "centos/7"

dn02_config.vm.hostname = "dn02"

dn02_config.vm.network "private_network", ip: "192.168.56.103"

dn02_config.vm.provider :virtualbox do |vb|

vb.name = "dn02"

vb.memory = "4096"

end

end

end

<에러> Vagrant failed to initialize at a very early stage: There was an error loading a Vagrantfile....

-> 웹에서 붙여넣은 거기 때문에 공백이 존재할 수 있음. 필요없는 공백 다 지우고 다시 해보면 됨.

 

 

 

4. 가상머신 기동

- 다시 cmd 돌아와서 vagrant up 입력하면 설치됨

 

좌:명령어 우:완료된 화면

 

<에러> 갑자기 다운로드가 잘 되다가 멈춰서 안되면, 도스창에 아래 사진처럼 마우스 커서를 뒀을 확률이 높다.

방향키를 클릭해서 다운로드를 이어서 해주면 된다.

 

이경우 재부팅이 아닌 방향키를 눌러준다.

 

 

- C 드라이브 > user > VirtualBox VMs에 가상 폴더 3개가 만들어져 있어야 함. 없으면 설치가 제대로 되지 않은 것.

 

 

 


Vagrant(베이그랜트)란

경량화된 Virtual machine 관리 서비스이다.

OS를 직접 하나씩 설치하지 않고 단순히 이미지 형태로 OS를 설치할 수 있다는 것을 말한다.

그래서 Vagrant를 이용하기 위해서는 가상머신이 설치되어 있어야 한다.

참고로 default는 virtual box이다.

 

+

가상장치에서는 네트워크 잡는게 제일 어렵다.

(하루가 다르게 안잡히는 등 에러가 많음.)

베이그랜트는 그러한 작업 없이 알아서 네트워크를 잡아주고

오라클 설치, ip를 잡아주는 등 번거로움을 없애준다.

추가로 공부를 원하면 docker를 공부해볼 것.


5. Oracle VM VirtualBox 서버 로그인

- Oracle VM VirtualBox을 관리자권한으로 실행하면 nn01/dn01/dn02 가상머신(서버)이 생김

 

 

 

- 확장판 불러오기 : 파일 > 환경설정 > 확장 > + > 확장판 설치

 

확장판 설치

 

 

- nn01 / dn01 / dn02 각각 더블클릭하면 각각의 가상환경에서 리눅스가 켜진다.

login : root/vagrant

         vagrant/vagrant

2개의 계정이 만들어져 있는데 우선 root 계정으로 접속 확인

 

로그인 : root/vagrant 셋다 root로 접속하기

 

 

마우스가 잡히면 오른쪽 shift 키로 벗어나자.

<참고> 마우스 벗어나는 키 바꾸는 법 : 환경설정 > 입력 > 가상머신 (탭) > 단축키 수정

 

나는 ctrl + alt로 설정함.

 

<참고>파일 >가상환경 내보내기 하고 다른장치에서 불러오면 지금 장치가 그대로 다시 불러올 수 있다.

 

6. putty / MobaXterm 설치

현재까지 서버에 직접 접속한 것이다. 만약 집에서 회사 서버로 접속하려면? -> putty 를 설치한다.- https://putty.ko.softonic.com/ 에서 무료 다운로드 > putty-0.70-installer.msi 더블클릭 후 설치 > 실행

https://mobaxterm.mobatek.net/ 에서 GET MOBAXTERM NOW! > Home Edition Free 다운로드 > potable edition 다운로드(압축 풀고 MobaXterm_Personal_20.3 실행)

 

 

putty 설치

 

 


PUTTY

리눅스 시스템 터미널을 활용하기 위해서는

PUTTY 등의 다양한 SSH(보안셸) 관련 프로그램을 이용하여

원격지에서 호스트 접속을 위한 프로토콜 프로그램을 필요로 한다.

기존 원격접속 기능에 암호화 기능을 추가한 것.

양쪽 리눅스를 GUI로 설치하면 대부분 사용 가능하다.

 

MobaXterm

MobaXterm 은 원격 컴퓨팅 toolbox이다.

단일 윈도우 응용 프로그램으로

다양한 연결방식을 제공한다.

물론 putty 를 사용하는 사람들에게도 필요한 원격 작업들을 제공한다.

Home Edition 으로 무료로 사용할 수 있으나 ,

최대 12 session / 2 SSH tunnels / 4 macros / 360 초 Tftp 의 제한이 걸려 있다.


7. putty IP연결

- 1) Oracle VM Virtual에서 각 노드의 아이피 확인

     CentOS 7의 최소 설치로 되어 ifconfig 명령어도 없다. 우선 ip addr 로 확인

 

dn01의 ip 주소 확인

 

각각 확인해본 ip는 다음과 같다.

nn01 : 192.168.56.101

dn01 : 192.168.56.102

dn02 : 192.168.56.103

 

 

- 2) putty에 연결

Oracle VM Virtual에서 찾은 ip로 putty가 접속할 수 있게 한다.

비밀번호 없이 접속이 가능하게끔 vi 에디터를 사용하자.

 

### 각각의 창에 한줄씩 입력하기 ###

[root@nn01 ~]# vi /etc/ssh/sshd_config
/Password
                  -> PasswordAuthentication 찾기
PasswordAuthentication no를 PasswordAuthentication yes로 변경
(다시 vi /etc/ssh/sshd_config 로 들어가서 바뀌었는지 확인하기)
[root@nn01 ~]# systemctl restart sshd         -> putty에 접속 가능하게 바꿔주기

nn01 외에도 dn01, dn02에도 같은 작업을 한다.

 

vi 화면 no -> yes로 변경

 

 

 

- 그 후 putty 접속 : IP 주소 쓰고 세션 이름 쓰기 -> save

 

 

오른쪽처럼 쓰자.
이런 에러 나면 systemctl restart sshd를 안해준거다.

 

 

- 결과

 

putty로 각각의 컴퓨터에 연결되었다.

 

 

<주의> 아래 작업을 하기 전에 putty는 꺼도 되지만 가상머신(Oracle VM Virtual)은 끄면 안된다.

 

8. MobaXterm 연결

- 각각의 화면으로 띄워서 하면 불편하지 않을까? MobaXterm가 이러한 불편함을 해결해준다.

위 작업을 끝내면 기본적으로 Putty의 세션이 자동으로 로드되어 모든 계정이 뜬다.

(뜨지 않는다면 우클릭 후 session을 업데이트하자)

 

세션에 계정이 전부 뜬다

 

- 왼쪽에 Putty Sessions에 putty 연결이 들어온거 확인하고 하나씩 눌러놓고 MultiExec을 클릭한다.

 상단에 MultiExec 를 클릭하면 복붙도 가능하고 3개의 계정을 한번에 움직일 수 있다. 또한 한 화면에 탭으로 여러 개의 계정을 움직일 수 있기 때문에 관리가 편리하다.

 

 

 

한번에 로그인해보자.

 

 

9. 하둡 설치를 위한 추가 설정

- 3개의 컴퓨터에 하둡 연결을 위한 추가 작업을 진행한다.(임시폴더인 tmp로 가서 설치해주자.)

1) 패키지 업데이트

2) 자주 쓰는 프로그램 설치(install)

[root@nn01 root]# cd tmp
[root@nn01 tmp]# yum update

[root@nn01 tmp]# yum install telnet svn git nc ntp wget vim net-tools

 

좌 : 업데이트 우 : 프로그램 설치

 

3) 방화벽 끄기

 

- 무식하지만 편의성을 위해 방화벽을 전부 꺼버릴꺼다. (disable까지 해버리자. 회사에서는 무식하게 이러면 안된다.)

[root@nn01 tmp]# systemctl stop firewalld
[root@nn01 tmp]# systemctl disable firewalld

 


하핳...많이 했지?

아직 시작도 안했다^^...

본격적인 하둡 설치를 도전하자.


10. 자바 설치 확인

- 다시 root 계정 홈으로 이동하자. 모든 사용자를 위한 java를 설치할 예정이니, root 계정으로 로그인한다.

- 설치되었는지 확인하기

[root@nn01 tmp]# cd ~
[root@nn01 root]$ which java

Master, Slave 역할

nn01 = Master (NameNode, SecondaryNamenode, ResourceManager)

dn01 = Slave (DataNode, NodeManager)

dn02 = Slave (DataNode, NodeManager)

nn01, dn01, dn02 각각에서 JDK의 압축을 해제하고 설치하고 설정

mobaTerm으로 반복 동작을 줄일 수 있다.


 

11. protobuf 설치


Protobuf 

구글에서 공개한 오픈소스 직렬화 라이브러리

프로토콜 버퍼는 데이터를 연속된 비트로 만들고,

이렇게 만들어진 비트를 해석해 원래의 데이터를 만들 수도 있다.

현재 다양한 시스템이 이기종 혹은 내부 프로세스 간의 통신에 프로토콜 버퍼를 사용하고 있으며,

하둡2도 내부 데몬 간의 데이터 통신을 위해 프로토콜 버퍼를 적용했다.

( 도서 ‘시작하세요 하둡프로그래밍’에서 언급하긴 했지만

설치 없어도 우리가 구동하는 것에는 문제가 되지 않았지만 혹시 몰라 설치해본다 )


(1)설치전 필요 툴 ( root 계정에서 )

[root@nn01 root]$ yum install -y autoconf automake libtool curl gcc-c++ unzip

(2) 다운로드 ( 책마다 버전이 중요하다고 강조함 )

[root@nn01 ~]# cd /tmp
[root@nn01 tmp]# wget https://github.com/protocolbuffers/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gz

 

 

 

- 압축풀기

- 이동시키기(mv)

- 이동되었는지 확인

[root@nn01 tmp]# tar -zxvf protobuf-2.5.0.tar.gz
[root@nn01 tmp]# mv protobuf-2.5.0 /opt/
[root@nn01 tmp]# ls /opt

 

파일이 압축이 풀려서 잘 이동했음.

 

 

(3) 설치 ( protobuf 폴더로 이동 )

[root@nn01 tmp]# cd /opt/protobuf-2.5.0/

 

경로이동

 

[root@nn01 protobuf-2.5.0]# ./configure
[root@nn01 protobuf-2.5.0]# make              ( 여기서 에러가 발생하면 ./configure에서 안되는 것임 )
[root@nn01 protobuf-2.5.0]# make install
[root@nn01 protobuf-2.5.0]# protoc --version  (버전 확인 : 만일 에러 발생시 lfconfig ( 소문자 엘) 후 다시 protoc --version)

 

버전확인. 

 

 

12. JDK 8 설치 (nn01,dn01,dn02)

- 이제 tmp 폴더를 임시폴더로 해서 설치할 것. 다시 tmp로 이동 후 install

[root@nn01 protobuf-2.5.0]# cd /tmp
[root@nn01 tmp]# yum install -y vim wget unzip

 

nothing to do라 떠도 괜찮다.

 

- 자바를 다이렉트로 다운로드 하자.

( Local에 이미 다운로드 한 경우 Winscp를 이용하여 업로드 )

- 압축 풀고 디렉토리까지 만들기. 경로를 하나씩 만들지 않기 위해 -p 옵션을 만들어줌.

사진 1번) 1.8.0_131이 있음을 확인할 수 있음

- jdk 옮기자. 131 안에로 전부 이동

- current라는 이름의 바로가기 만들기. 버전관리를 위해 심볼릭 링크를 셋다 걸어주기.

사진 2번) 자바 인스톨하면 에러뜸. -> 왜? 리눅스 자체가 버전관리 대상으로 껴버리기 때문에

[root@nn01 tmp]# wget --no-check-certificate --no-cookies - --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz 
[root@nn01 tmp]# ls jdk*
[root@nn01 tmp]# tar -xvzpf jdk-8u131-linux-x64.tar.gz
[root@nn01 tmp]# mkdir -p /opt/jdk/1.8.0_131
[root@nn01 tmp]# ls /opt/jdk               (-> 사진 1번)
[root@nn01 tmp]# mv jdk1.8.0_131/* /opt/jdk/1.8.0_131/
[root@nn01 tmp]# ln -s /opt/jdk/1.8.0_131 /opt/jdk/current
[root@nn01 tmp]# install java with alternatives (에러)      (-> 사진 2번)

 

 


alternatives명령어

centos의 yum을 통해 java를 install하게 되면 버젼관리 대상으로 들어간다.

그리고 centos는 버젼관리를 위한 명령어를 제공하는데 그것이 바로 alternatives라는 명령어이다.


- 따라서 다음 명령어 지정해서 없애주어야 한다. - >번호는 1

[root@nn01 tmp]# alternatives --install /usr/bin/java java /opt/jdk/1.8.0_131/bin/java 2
[root@nn01 tmp]# alternatives --config java

 

 

번호 누르라고 하면 우리는 1밖에 없어서 1 누르기

 

- 다음 그대로 실행

[root@nn01 tmp]# alternatives --install /usr/bin/jar jar /opt/jdk/1.8.0_131/bin/jar 2
[root@nn01 tmp]# alternatives --install /usr/bin/javac javac /opt/jdk/1.8.0_131/bin/javac 2
[root@nn01 tmp]# alternatives --set jar /opt/jdk/1.8.0_131/bin/jar
[root@nn01 tmp]# alternatives --set javac /opt/jdk/1.8.0_131/bin/javac
[root@nn01 tmp]# java -version

 

버전 1.8.0_131 나오면 잘 된 것.

 

 

 

13. 본격적인 Hadoop 설치 (nn01 / dn01 / dn02)

- 다운 받아서 압축 풀고 2.7.7 디렉토리로 전부 이동. current라는 이름의 바로가기 만들기.

[root@nn01 tmp]# cd /tmp

[root@nn01 tmp]# wget http://apache.tt.co.kr/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz
( 다운로드 속도가 너무 느리면 아래에서 다운받기 )
wget https://archive.apache.org/dist/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz

[root@nn01 tmp]# tar -xvzf hadoop-2.7.7.tar.gz
[root@nn01 tmp]# mkdir -p /opt/hadoop/2.7.7
[root@nn01 tmp]# mv hadoop-2.7.7/* /opt/hadoop/2.7.7/
[root@nn01 tmp]# ln -s /opt/hadoop/2.7.7 /opt/hadoop/current

 

[참고] 만약 위에것으로 다운받다가 중단하고 아래 것으로 다운받았다면?

 

[참고] ll로 용량 봐서 작은거 rm 지우고, mv로 이름 바꿔줌

 

 

14. Hadoop 사용자 추가

- 1) 일단 현재 사용자 root이고 소유권도 root가 가지고 있음. 이걸 하둡으로 옮겨준다.

- 2) 일단 넘겨주기 위해 유저 추가할 것. ( 비밀번호도 hadoop 으로 - 비밀번호 입력시는 글자표시 안됨 )

- 3) 소유권 이동( 루트에서 만든 파일의 권한을 hadoop에게 권함 )

- 4) 하둡으로 유저 변경

(하이푼( - ) 안쓰고 들어가면 설정한 환경변수까지 안가지고 옮겨짐. 하이푼 써야 설정한거까지 가져감.)

[root@nn01 tmp]# useradd hadoop
[root@nn01 tmp]# passwd hadoop
[root@nn01 tmp]# chown -R hadoop:hadoop /opt/hadoop/
[root@nn01 tmp]# su - hadoop
[root@nn01 ~]# 

 

14

 

15. Hadoop 자바 및 Hadoop 환경 변수 추가

- 설정파일 수정할 때는 MultiExe 보다 하나씩 하는 것이 나을 수도 있다.(하단부터 # 제외하겠음)

 

1) vi로 들어간다.

vi ~/.bash_profile

2) esc + o 해서 맨 하단에 아래 내용을 붙여넣자.

#### HADOOP 2.7.7 start ############

PATH=$PATH:$HOME/bin

export HADOOP_HOME=/opt/hadoop/current

export PATH=$PATH:$HADOOP_HOME/bin

export PATH=$PATH:$HADOOP_HOME/sbin

#### HADOOP 2.7.7end############

#### JAVA 1.8.0 start#############

export JAVA_HOME=/opt/jdk/current

export PATH=$PATH:$JAVA_HOME/bin

#### JAVA 1.8.0 end##############

여기 또한 빈칸 조심.

 

3) 소스 명령어로 적용한다.(꼭 필요함)

source ~/.bash_profile

 

하둡 버전 2.7.7로 완료

 

16. 비밀번호없이 각노드를 접속할 수 있도록 공개키 공유(SSH) (중요!!!)

- 아직까지는 권한이 전부 root에게 있다. root로 이동한다.

su - root

 

root로 이동

 

 

- vi 접속한다.

[root@nn01 ~]# vi /etc/hosts

- localhost 꼭 지운다. ( 모든 노드 다 )

아래 내용을 그대로 입력해준다.

192.168.56.101 nn01
192.168.56.102 dn01
192.168.56.103 dn02

 

 

 

- (1) 키만들기 (Hadoop 계정에서 )

서로 다른 컴퓨터의 키값을 확인해보자.

( MultiExec 에서 하면 다른 키값을 생성되는 것을 볼 수 있다. )

[hadoop@nn01 ~]$ ssh-keygen
[hadoop@dn01 ~]$ ssh-keygen
[hadoop@dn02 ~]$ ssh-keygen

엔터만 3번친다.

 

빨간 부분이 얘네 키값이다. (루트가 아닌 하둡 계정으로 봐야함)

 

- (2) 키복사하기

( 여기서는 MultiExec 풀고 작업 - 각 노드별로 작업)

( 자기 자신에게도 복사를 해야 됨 )

[hadoop@nn01 ~]$ ssh-copy-id hadoop@dn01
[hadoop@nn01 ~]$ ssh-copy-id hadoop@nn01
[hadoop@nn01 ~]$ ssh-copy-id hadoop@dn02
[hadoop@dn01 ~]$ ssh-copy-id hadoop@dn01
[hadoop@dn01 ~]$ ssh-copy-id hadoop@nn01
[hadoop@dn01 ~]$ ssh-copy-id hadoop@dn02
[hadoop@dn02 ~]$ ssh-copy-id hadoop@dn01
[hadoop@dn02 ~]$ ssh-copy-id hadoop@nn01
[hadoop@dn02 ~]$ ssh-copy-id hadoop@dn02

yes > 비밀번호 hadoop 으로 설정.

 

- 패스워드없이 이동이 가능하다. ( 나올 때는 exit 또는 logout 으로 나온다 )

[hadoop@nn01 ~]$ ssh dn01

이런식으로 nn 컴퓨터에서 dn으로 로그인한 것이다.

 

17. hadoop설정 (중요!!!)

nn01에서 하고 dn01, dn02 전송하던가, 한 노드씩 같이 하던가 선택하자.

우선 nn01에서 작업하자.

<configuration> 내용 </configuration> -> 이 사이에 파란색 글자 내용 붙여넣기!!!


 

a. [hadoop@nn01 ~]$ vi /opt/hadoop/current/etc/hadoop/core-site.xml

<configuration>

<property>

<name>fs.defaultFS</name>

<value>hdfs://nn01:9000</value>

</property>

</configuration>

 

a번 그림

 

-------------------------------------------------------------

b. [hadoop@nn01 ~]$ vi /opt/hadoop/current/etc/hadoop/hdfs-site.xml

<configuration>

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

<property>

<name>dfs.namenode.http-address</name>

<value>nn01:50070</value>

</property>

<property>

<name>dfs.namenode.secondary.http-address</name>

<value>nn01:50090</value>

</property>

<property>

<name>dfs.namenode.name.dir</name>

<value>file:/home/hadoop/hadoop_data/hdfs/namenode</value>

</property>

<property>

<name>dfs.datanode.data.dir</name>

<value>file:/home/hadoop/hadoop_data/hdfs/datanode</value>

</property>

<property>

<name>dfs.namenode.checkpoint.dir</name>

<value>file:/home/hadoop/hadoop_data/hdfs/namesecondary</value>

</property>

<property>

<name>dfs.webhdfs.enabled</name>

<value>true</value>

</property>

</configuration>

-------------------------------------------------------------

c. [hadoop@nn01 ~]$ vi /opt/hadoop/current/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.scheduler.address</name>

<value>nn01:8030</value>

</property>

<property>

<name>yarn.resourcemanager.resource-tracker.address</name>

<value>nn01:8031</value>

</property>

<property>

<name>yarn.resourcemanager.address</name>

<value>nn01:8032</value>

</property>

<property>

<name>yarn.resourcemanager.hostname</name>

<value>nn01</value>

</property>

</configuration>

-------------------------------------------------------------

d. [hadoop@nn01 ~]$ cp /opt/hadoop/current/etc/hadoop/mapred-site.xml.template /opt/hadoop/current/etc/hadoop/mapred-site.xml

 

-> 실행만

-------------------------------------------------------------

e. [hadoop@nn01 ~]$ vi /opt/hadoop/current/etc/hadoop/mapred-site.xml

<configuration>

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

<property>

<name>mapreduce.jobtracker.hosts.exclude.filename</name>

<value>$HADOOP_HOME/etc/hadoop/exclude</value>

</property>

<property>

<name>mapreduce.jobtracker.hosts.filename</name>

<value>$HADOOP_HOME/etc/hadoop/include</value>

</property>

</configuration>

-------------------------------------------------------------

f. [hadoop@nn01 ~]$ vi /opt/hadoop/current/etc/hadoop/masters

nn01

입력하기

 

 

-------------------------------------------------------------

g. [hadoop@nn01 ~]$ vi /opt/hadoop/current/etc/hadoop/slaves

dn01
dn02

입력하기 (localhost 삭제하고 입력)

-------------------------------------------------------------

h. [hadoop@nn01 ~]$ vi /opt/hadoop/current/etc/hadoop/hadoop-env.sh

들어가서

# The java implementation to use.
export JAVA_HOME=/opt/jdk/current

수정

 

 

-------------------------------------------------------------

h. [hadoop@nn01 ~]$ vi /opt/hadoop/current/etc/hadoop/hadoop-env.sh

들어가서

# some Java parameters
export JAVA_HOME=/opt/jdk/current

수정


 

18. su root 로 계정 변환 가능하게 하기

- root 계정으로 이동하기 위해 버추얼박스에서 실행했던 가상머신 들어가기

 

 

 

### 각 계정마다 vi로 들어간 후 표시 부분을 주석처리한다. ###

- set nu 로 번호 보기.

- 10 11 12 라인 주석처리하기

 

각 게정마다 주석처리 후 하둡으로 계정 변환됨

 

 

- MobaXterm 에서도 계정 변환이 가능해졌다.

 

 

 

19. 계정의 소유권을 다시 설정

- hadoop설정을 nn01에서하고 dn01과 dn02에 복사 (winscp툴을 이용하거나 scp명령을 이용한다.

### 각 계정마다 # 이후 부분을 실행한다. ###

[nn01(root 계정)] 

a. [root@nn01 ~]# scp -r /opt/hadoop/* dn01:/opt/hadoop 
b. [root@nn01 ~]# scp -r /opt/hadoop/* dn02:/opt/hadoop 

[dn01(root 계정)] 심볼릭링크와 소유자를 다시 설정한다.  

a. [root@dn01 ~]# rm -rf /opt/hadoop/current 
b. [root@dn01 ~]# ln -s /opt/hadoop/2.7.7 /opt/hadoop/current 
c. [root@dn01 ~]# chown -R hadoop:hadoop /opt/hadoop/ 

[dn02(root 계정)] 심볼릭링크와 소유자를 다시 설정한다.

a. [root@dn02 ~]# rm -rf /opt/hadoop/current 
b. [root@dn02 ~]# ln -s /opt/hadoop/2.7.7 /opt/hadoop/current 
c. [root@dn02 ~]# chown -R hadoop:hadoop /opt/hadoop/

- ll /opt/hadoop 로 확인해보자.

 

아래처럼 뜨면 완료

 

 

20. 각노드에 Hadoop ~node 디렉토리 생성

- 각노드에서 해야 하니깐 MobaXterm 멀티창 끄기

(1) Hadoop namenode 디렉토리 생성 (nn01 : Namenode)
a. mkdir -p ~/hadoop_data/hdfs/namenode
b. mkdir -p ~/hadoop_data/hdfs/namesecondary

(2)  Hadoop datanode 디렉토리 생성 (dn01 : Datanode)
mkdir -p ~/hadoop_data/hdfs/datanode

(3) Hadoop datanode 디렉토리 생성 (dn02 : Datanode)
mkdir -p ~/hadoop_data/hdfs/datanode

 

21. Namenode 포맷

[hadoop@nn01 ~]# hadoop namenode -format

22. Daemon 시작

[hadoop@nn01 ~]# start-all.sh

 

23. 서비스 정상 확인

- MobaXterm 멀티창 띄워서 확인해본다.

jps

 

이러한 화면 뜨면 완료된 것.

 

24. 종료시 stop-all.sh 꼭 하기




=================================
최대한 복붙으로 해보려 했으나 설치조차 힘든 하둡.... 이번 기록으로 제에발 다음번엔 설치도 못하는 일은 없게 하자....!!!!

반응형
LIST
반응형
SMALL

+ Recent posts

반응형
LIST