사랑스러운 나의 도시 #1-2. 타이페이 둘째날

타이페이 첫째날

타이페이 셋째날

타이페이 넷째 날, 그리고 처음의 그 끝

인생 첫 ‘나홀로’ ‘해외 여행’ 목적지 타이페이. 시작은 책 한권 분량의 경험을 가지고 돌아오겠노라 원대했으나 막상 그 원대한 꿈은 너무나도 어려운 것이었다. 나와 다른 말을 쓰는 사람들이 가득찬 이 도시는 오로지 두려움과 신선함 이 둘 말고는 내게 주는 것이 없었다. 그나마 두려움보다 신선함이 더 컸던 것은 큰 행운이었다.

그렇게 첫날을 보내고 부랴부랴 숙소를 찾고 예약을 마쳤다. 둘째 날의 목표는 새 숙소까지 무사히 도착하는 것. 다시 첫날이다. 주섬주섬 짐을 챙기고, 캐리어와 가방을 짊어지고 구글 지도를 따라 길을 걸었다. 큰 사고 없이 도착한 Bouti city capsule Inn. 이른 아침 움직인터라 아직은 체크인 전이었기에 짐을 맡겨두고 다시 거리로 나왔다.

그리고 기억은 잘 안나는 어느 식당에서 먹은 아침. 뭔가 밀가루 반죽을 튀긴 건데 맛은 잘 기억나지 않는다.

또다시 시작된 무작정 걷기. 그렇게 거다 당도한 Wenchang Tepmle. 절이다. 그리고 절 앞은 시장이다. 한국과 다르게 도시 한가운데, 그리고 시장 안에 절이 있다. 또. 절 주위가 시장인건지, 시장 한가운데에 절인건지 아직은 모르겟다. 아무튼 한국인인 내게는 신기한 풍경이었다.

야시장이 아닌 시장에서 무대포 여행초보인 내가 할 일은 없었다. 나름의 고집이 있어 가능하면 가게에 무작정 카메라를 들이미는건 자제하는편이니까. (덕분에 사진을 찍기 위해 쓸모 없는 지출도 하게 되고, ‘더’ 많이 먹게 된다.) 뭔가 관광지 스러운 곳을 찾아보자.

그렇게 도착한 곳은 대만 국립박물관의 Land Bank Exhibition Hall.
(아마 과거 은행으로 쓰였던 건물이었다고 하더라)

국립 대만 박물관에 속한 은행 정시관이 있으니 근처에 국립 대만 박물관도 분명히 있을 터, 그렇다 길을 하나 건너면 얼얼바 평화 기념공원 (228 peace monument), 그 가운데 국립 대만 박물관이 있다.

그렇게 공원과 박물관을 둘러보고 나니 시간 잘지키기로는 둘째가라면 서러운 내 배는 점심 시간을 알렸고 대만에서의 첫 ‘밥’을 먹었다.

이런 종류의 음식을 파는 식당이 많기에 한군데 들어가서 맛있게 밥을 먹고 나와 현지인에게 물어봤더니 이건 홍콩 음식이지 대만풍 음식은 아니란다. (대만에서의 첫 식사가 홍콩풍 음식이라니..)

다시 발을 떼어 마주친 한 건물. 정확한 이름과 용도는 기억이 안나고, 정부? 지자체?의 한 건물이었다. 월요일인가는 관광도 가능 했던 곳. 아쉽지만 입장 가능일은 아니었던터라 들어가보지는 못했다.

하루 종일 걷는 것은 힘들더라.. 숙소로 돌아와 대충 씻고 젖은 수건 따위를 정리하는데 한 방을 쓰게 된 누군가가 들어왔다. 라커를 못 열기에 도움을 주기 위해 대화를 하다보니 이게 무슨일인가! 한국인이었다. 이역만리 타국 땅에서 내 나라 사람을 만나다니! 이렇게 반가울 수가. 서로 이름은 무어네, 나이는 몇이네 어디서 일하네 반가움을 마구 내뱉는 사이 또 한명이 들어왔다. 이번엔 타이중에서 온 대만인이었다. 나이는 대충 (당시에) 29정도 였던 듯.
사내놈들이 모이면 늘 그렇다. 서로 내가 잘났네 자랑도 좀 하고, 여자 이야기도 좀 하다가 결국 술 이야기. 타이중에서 온 친구가 자신의 고향에 한국의 막걸리와 비슷한 탁주가 유명하다 했다. 맛있는 술이 있다는데 짧은 영어가 대수랴 고향을 떠나온 사내 셋은 밤 열한시에 길을 나섰다.
(이것도 역시나 무식하기에 가능 했던 일이다. 다행스럽게도 대만은 안전한 나라이긴 하지만 타국 땅에서 처음 만난 사람과 그것도 밤 열한시에 술을 찾아 길을 나서다니)
하지만 안타깝게도 우린 그 술을 찾을 수 없었고 한시간을 헤맨 끝에 눈에 들어온 펍에 들어갔고 맥주만 마시고 돌아와야 했었다.

사랑스러운 나의 도시 #1-1. 타이페이 첫째날

타이페이 둘째날

타이페이 셋째날

타이페이 넷째 날, 그리고 처음의 그 끝

2016년 가을. 이직을 준비하며 처음으로 ‘홀로’ 한국이 아닌 나라로 향했다.
원체 게으르기도 하고, 준비하고 계획 하는 것은 몸에 안맞는 터라 당연히 계획 따위는 없었다. 다행이라면 다행이랄까, 내년엔 꼭 해외여행을 가리라 마음 먹고 여권을 만들 었던 것이… 아마도 이마저도 없었다면 지금 이곳이 얼마나 사랑스럽고 아름 다운 곳인지 꿈에도 깨닿지 못했을 터.

여권 파워 세계 1~5위 사이를 꿰차고 있는 ‘대한민국’ 여권이다.

사직서를 제출하기 전 두어달 전부터 ‘어딘가 가야지 ‘ 고민만하다 하루하루 시간은 흐르고 결국 퇴직일 보름 전에 이르러서야 부랴부랴 갈 곳을 찾기 시작했다.
무식하면 용감하다 했던가 ‘비행기 탈 때는 신발 벗어야 해요?’ 수준의 무식함으로 비행기 표를 끊었다. 정말이지 용감했다. 내 손으로 여권을 내밀어 본적은 단 한번도 없었다. 당연히 해외여행 시 주의 해야 할 것이라던가 전혀 아는 것이 없었으니…. 심지어, 캐리어 조차 없었다…. 다행히 동생이 가지고 있었으니 망정이지..
아, 심지어 숙소 예약조차 출국 전날 밤 11시에 했다.

아무튼, 그렇게 용감하게 집을 나서 공항으로 향했다.

이 큰 쇳덩어리가 하늘에 뜬다.

인천공항이야 내 나라의 공항이니 내 나라의 언어요 문자인지라 ‘다행히도’ 출국 수속을 마치고, 비행기에 오를 수 있었다. (그리고 또 다행히도, 비행기가 처음은 아니었다.)

문제 없이 하늘로 올라갔던 비행기는 상처 없이 날 타이페이의 타오위안 공항에 내려줬고, 막강한 힘을 지닌 대한민국 여권은 날 ‘Hello’ 와 ‘Thank you’ 이 문장만으로 타이페이에 입국 시켜줬다.
얼마나 다행인가.. 구글 번역기가 없었더라면 가방조차 못 찾았을 터인데.. 어찌어찌 캐리어를 찾고, 구글 지도를 열고 무작정 지도를 따라 걷기 시작했다.
(이 숙소까지의 걸음이 내 여행 스타일이 될 줄이야…)

10월 중순인데도 더웠던 날씨는 날 땀범벅으로 만들었고, 시내 한복판에서 엄마를 잃어버린 아이와 같은 기분을 느끼게 해줬다. 모든 것이 생소했고 신기했다. 아는 이도, 대화를 할 수 있는 이도 없는 이 도시에서 내가 할 수 있는 것은 오로지 하나, ‘걸어서 내가 예약 한 게스트 하우스에 도착하는 것’. 용감함에 대한 보상이었을까 아니면 운이 좋았던 것일까, 대만은 내 나라 대한민국만큼 안전한 나라였고 타국 땅에서 말한마디 할 줄 모르는 30대의 어른아이를 괴롭히지는 않았다.
30여분을 걸었을까.. 난 생에 첫 여행의 첫번째 목표인 ‘숙소 찾기’ 퀘스트를 완료할 수 있었다. 삐쭉삐쭉 게스트하우스 안으로 들어갔고, 되지도 않는 영어로 체크인을 시도하고, 열쇠를 받았다. (오예!)
일단 캐리어와 가방을 대강 정리해서 사물함에 넣고 또한번 무작정 거리로 나가는 순간, 두 명의 외국인이 내 뒤를 따라 게스트하우스에서 나오며 내게 말을 걸어왔다.

외국인 : “안녕, 너도 여행을 왔구나, 어디서 왔니?”
나 : (두려움에 떨며)”안녕, 난 한국에서 왔어. 너희는 어디에서 왔니?”
외국인 : “우린 OO(기억 안남)에서 왔어, 우리 지금부터 101 타워에 갈건데 너도 같이 갈래?”
나 : (처음 본 날 데리고 어딜 가겠다고???) 우물쭈물…
외국인 : ” 우린 택시를 불렀어 택시를 타고 갈꺼야! 같이 가자”
나 : (다시 또 두려움에 떨며..) ” 아니야, 난 오늘 101타워에 가지 않을꺼야, 아마도 모레쯤?”
외국인 : (쿨하게) ” 그래 그럼 아쉽지만 어쩔 수 없지. 즐거운 여행이 되길 빌께 안녕!”
나 : (안도의 한숨을 쉬며) “그래 너희도! 안녕”
(대충.. 이런 식의 대화였던 것 같다)

사실 그들과 함께 가지 않았던 것이 좋은 선택이었는지, 아닌지는 잘 모르겠다. 어쨌거나 약간의 아쉬움과, 약간의 안도감을 안고 구글 지도에 의지한 채 큰 도로로 향했다.

처음 만난 타이페이 거리의 모습은 ‘어릴적 TV에서 봤던 서울 + 일본’ 의 느낌이었다. 거리는 오토바이가 즐비 했고, 중국을 예상했던 것과는 다르게 매우 깨끗했고, 질서있는 모습이었다.

인상적이었던 대만 도로의 ‘이륜차 ‘ 좌회전 시스템
연두색 화살표가 이륜차의 이동경로이다.
이륜차는 좌회전 신호에 이동하지 않고, 직진 신호에 직진을 한 다음 사진과 그림의 네모 안에 정차한다.
대기 후 ‘다음 직진 신호’에 직진한다.

대만은 야시장이라 했던가, 우선은 가장 가까운 시장을 찾았다. 다행히도 멀지 않은 곳에 야시장이 있었고 그렇게 대한민국 촌놈은 걸어걸어 한 야시장에 도착했다.
Shuangcheng Street Night Market. (당시엔 이름도 모르고 무작정 걸었다)
아직은 해지기 전인지라 이제서야 장사를 준비하는 시점인지라 보는 것 말고는 할 것이 아무 것도 없었고, 더위에 지친 목을 축을 음료를 하나 사고 또다시 걷는 것 말고는 할 수 있는 일이 없었다.
1지금 그 때의 기억을 떠올려보니 굳이 그럴 필요 없었다. 저 사진을 찍은 시각이 17시 경이니까 대충 음료 한잔 먹고 쉬었어도 아무런 문제 없었는데…..

그렇게 일단 발걸음을 떼면서 다시 휴대폰을 들여다 봤다. ‘드디어! 이제서야!’ 타이페이 여행을 검색 했다. 여행을 오기 전에, 여행지에 도착해서 사람들이 어딜 가는지 찾아봤단거다.

그렇게 도착한 곳이 바로 Shilin Market. 금강산도 식후경이라 했던가. 일단 다들 그리도 맛있다 하는 ‘지파이’에 도전 했다.

맛있었다…

여행은.. 둘 이상 다녔어야 한다는 것을 첫날 저녁 지파이를 먹고 바로 깨닳을 수 있었다. 배가 불렀다… 먹을 것 천국인데, 더 먹을 수가 없었다. 이미 내 위장은 고등학교 시절 그 튼튼하던 위장은 아니었고, 이미 몸은 지쳤어도 아직은 숙소로 돌아갈 수 없었다. 왜? 시간이 아까우니까.

그렇게 홀로 야시장을 배회하다 만난 절.

한국인 입장에서는 나름 신기한 풍경이었다. 그도 그럴것이 한국의 절은 대부분 산속에 있으니까. 한참을 헤집고 다닌 북적거리는 시장 한 가운데에 절이라니..
(왜 시장 한가운데에 절이 있는지는 삼일째가 되어서야 알 수 있었다.)

그렇게 또 얼마나 걸었을까… 이미 게으름에 찌든 내 몸은 더 움직일 수 없다는 신호를 보냈고 숙소로 돌아와 생에 첫 여행의 첫날을 마무리 해야 했다.

편의점에서 사온 우육면과 육포

CentOS swap 영역 해제하기

swap 의 사전적 의미. (daum 사전)

개요

Linux의 swap 메모리, swap 영역은 정확히 사전적 의미그대로의 영역을 말한다.
(윈도우는 가상 메모리)

CPU(Cache) – RAM – HDD (혹은 SSD를 포함하는 모든스토리지) 가 있는 컴퓨터는
사용자가 특정한 프로그램을 실행하면
1. HDD에서 필요한 데이터를 읽어서
2. RAM에 일정량을 저장하고
3. 다시 CPU의 Cache 메모리에 일정량을 저장하고
4. CPU에서 연산을 하고
5. 결과를 반환한다.


보통은 위 5단계에서 아무런 문제가 일어나지 않지만 요즘 게임을 하거나, 사진을 찍어서 편집을 하고 하다보면 메모리(RAM) 사용량이 늘어나는 것을 볼 수 있다.

예컨대 RAM이 4GB인데 동영상 편집을 할 때 동영상의 크기가 8GB를 넘어간다면?

바로 이 때 Paging(단편화1 복잡하게 생각 할 필요 없다. 책을 한권 램에 올려야 하는데 램의 크기가 작아서 페이지를 떼어서 올리는 것이라고 생각하면 된다. 우리가 실행하는 게임이건 포토샵이건 다 매 한가지다.) 이라는 작업이 일어나고 swapping 이 필요해 진다.

일단 동양상 편집을 위해 4GB램의 PC에서 8GB짜리 동영상을 로드하게 되면
1. 우선 HDD에 있는 8GB의 데이터 중 4GB의 데이터가 램으로 이동한다.
2. 사용자가 현재 램에 있는 4GB의 동영상 편집을 수행한다.

그런데 이 때 현재 램에 있는 4GB 말고 나머지 반쪽의 내용을 불러와야 한다면?
1. 현재 4GB의 동영상을 HDD의 스왑 파티션으로 이동한다. 2여기서 램에 있는 내용을 삭제 하지 않는 이유는 사용자가 아직 기존에 램에 있던 4GB의 데이터의 작업을 완료하지 않았기 때문이다.
2. HDD에 남아있던 나머지 뒤쪽 4GB를 램에 올린다.
3. 다시 편집 작업을 한다.

그래서 보통 물리 메모리(RAM)의 1배~2배 정도로 설정을 하는데 익히 알고 있다시피 HDD건, SSD건 RAM보다 느린데다가, swap 되는 데이터의 크기 두배3RAM에 있는 데이터를 읽어서, swap에 쓰고 다시 HDD의 데이터를 읽어서 RAM에 올려야 하므로swap으로 만큼 읽고 쓰기가 일어나므로 swapping 이 잦아지면 작업 지연이 생길 수 밖에 없다. 4지금이야 대부분의 PC에 SSD가 달려있어서 잘 못느끼지만 HDD가 주류이던 시절 게임을 하다 지역 이동을 하거나 할 때 본체의 빨간불이 깜빡이며 열심히 HDD가 돌아가고 화면이 멈춰있거나 느려지거나.. 경험 했을 것이다.

swap 영역 해제

 # 현재 swap 정보 확인
[root@centos7:~]# free -h
              total        used        free      shared  buff/cache   available
Mem:            62G        5.5G         54G        264M        2.9G         56G
Swap:           31G          0B         31G

[root@centos7:~]# blkid
/dev/sda1: UUID="d8888888-80c0-4156-8b73-6b5323dd2c01" TYPE="xfs"
/dev/sda2: UUID="p22222-84DI-Hvny-RZ7Z-FbHq-QBq2-tTl5yK" TYPE="LVM2_member"
/dev/sdb1: UUID="45555555-0ca0-4b99-86b5-33e45689fc10" TYPE="xfs"
/dev/mapper/centos-root: UUID="5999999-877a-4fe9-a464-5376cb476310" TYPE="xfs"
/dev/mapper/centos-swap: UUID="2333333-b2d1-4f58-9123-865739a3c2eb" TYPE="swap"    

 # 현재 swap 영역을 사용하고 있으면 해제할 수 없다.
 # swap 영역이 여러개일 때
[root@centos7:~]# swapoff  /dev/mapper/centos-swap

 # 현재 모든 swap을 해제 할 때
[root@centos7:~]# swapoff -a

# 해제 여부 확인.
 # swap 이 모두 0B인 것을 확인할 수 있다.
[root@centos7:~:]# free -h
              total        used        free      shared  buff/cache   available
Mem:            62G        7.7G         52G        161M        3.0G         54G
Swap:            0B          0B          0B
# swap 파티션 마운트 정보 변경
[root@centos7:~:]# vi /etc/fstab
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=d675d2d3-80c0-1234-8j72-6b5323dd2c01 /boot                   xfs     defaults        0 0
# type이 swap 인 파티션에 대해 주석 처리 해 준다.
# 삭제 해도 된다.
#/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/sdb1       /data  xfs     defaults        0       0

Hadoop # 2. 싱글 Namenode 설치,설정

Hadoop #1. 개요

사전 작업

하둡을 구동할 계정은 hadoop, 그룹도 hadoop 으로 한다. hadoop 계정의 홈 디렉토리는 /home/hadoop 이다. 키-쌍 생성 관련 내용은 별도의 포스트를 통해 설명하겠다

 # 사용자 생성
[root@hadoop01 ~]# useradd -g hadoop hadoop
[root@hadoop01 ~]# su - hadoop
[root@hadoop01 ~]# passwd hadoop
hadoop 사용자의 비밀 번호 변경 중
새  암호:
새  암호 재입력:
passwd: 모든 인증 토큰이 성공적으로 업데이트 되었습니다.
 #여기까지 모든 서버에서 작업한다.
 # 키 쌍 생성
[hadoop@hadoop01 ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hadoop/.ssh/id_rsa):
Created directory '/home/hadoop/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/hadoop/.ssh/id_rsa.
Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:kQyuv0LCUMDOBwicLr4VyFSskm0wYIGHLIv1pTbALF0 hadoop@centos7
The key''s randomart image is:
+---[RSA 2048]----+
|%O=oE .          |
|XBO. ..o .       |
|O@+o o. +        |
|BBoo=.   .       |
|++..o.  S        |
| .o...           |
|  oo  .          |
| .  .  .         |
|     ..          |
+----[SHA256]-----+
[hadoop@hadoop01 ~]$ chmod 700 ~/.ssh
[hadoop@hadoop01 ~]$ cat ~/.ssh/id_rsa.pub >> authorized_keys
[hadoop@hadoop01 ~]$ chmod 600 ~/.ssh/*
[hadoop@hadoop01 ~]$ ls -l ~/.ssh/
합계 12
-rw------- 1 hadoop hadoop  396  9월 14 15:32 authorized_keys
-rw------- 1 hadoop hadoop 1675  9월 14 15:24 id_rsa
-rw------- 1 hadoop hadoop  396  9월 14 15:24 id_rsa.pub
 # 하둡 클러스터로 사용할 모든 서버에 키를 복사하고 권한을 변경한다.
[hadoop@hadoop01 ~]$ scp ~/.ssh/authorized_keys hadoop@hadoop02:/home/hadoop/.ssh/authorized_keys
The authenticity of host 'hadoop02 (192.168.0.2)' can't be established.
ECDSA key fingerprint is SHA256:nhIT6XvSamWF1mgXDkAuM64eZj5XCJww5T2NEojH2iU.
ECDSA key fingerprint is MD5:7b:a5:40:02:c3:cd:0f:e7:36:77:dd:3c:cc:3b:ba:d2.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
hadoop@hadoop02's password:
authorized_keys     
[hadoop@hadoop01 ~]$  ssh hadoop02 chmod 700 /home/hadoop/.ssh
[hadoop@hadoop01 ~]$  ssh hadoop02 chmod 600 /home/hadoop/.ssh/authorized_keys
hadoop@hadoop02's password:

설치

Apache Hadoop 홈페이지에서 바이너리를 다운로드 하고 압축을 해제한다.
※ hadoop 계정으로 진행

[hadoop@hadoop01 ~]$ wget http://mirror.apache-kr.org/hadoop/common/hadoop-3.1.4/hadoop-3.1.4.tar.gz
--2020-09-14 15:28:30--  http://mirror.apache-kr.org/hadoop/common/hadoop-3.1.4/hadoop-3.1.4.tar.gz
Resolving mirror.apache-kr.org (mirror.apache-kr.org)... 125.209.216.167
Connecting to mirror.apache-kr.org (mirror.apache-kr.org)|125.209.216.167|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 348326890 (332M) [application/octet-stream]
Saving to: ‘hadoop-3.1.4.tar.gz’
100%[=====================================================================================================================================>] 348,326,890 37.9MB/s   in 11s
2020-09-14 15:28:41 (30.1 MB/s) - ‘hadoop-3.1.4.tar.gz’ saved [348326890/348326890]
[hadoop@hadoop01 ~]$ tar -xvzf  hadoop-3.1.4.tar.gz
hadoop-3.1.4/
hadoop-3.1.4/lib/
중략
hadoop-3.1.4/libexec/mapred-config.sh
hadoop-3.1.4/libexec/hadoop-config.cmd
hadoop-3.1.4/libexec/hdfs-config.cmd
[hadoop@hadoop01 ~]$ ln -s  ~/hadoop-3.1.4 ~/hadoop
[hadoop@hadoop01 ~]$ ls -l
합계 340164
lrwxrwxrwx 1 hadoop hadoop        12  9월 14 15:31 hadoop -> hadoop-3.1.4
drwxr-xr-x 9 hadoop hadoop       169  9월 14 15:31 hadoop-3.1.4
-rw-rw-r-- 1 hadoop hadoop 348326890  8월 24 21:40 hadoop-3.1.4.tar.gz
drwxrwxr-x 2 hadoop hadoop         6  9월 14 15:22 perl5
 #나머지 노드에서 모두 동일한 작업을 수행한다. (다운로드, 압축 풀기, 심볼릭 링크 생성)
[hadoop@hadoop01 ~]$  vi  ~/.bas_profile
 # 여기부터 파일의 맨 뒤에 붙여넣기 한다.
export HADOOP_HOME=/home/hadoop/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
[hadoop@hadoop01 ~]$  source ~/.bas_profile
 나머지 노드들에서 동일하게 수행 해 준다.

설정

 # Hadoop 환경변수 설정 (하둡이 구동될 때 읽어들이는 환경변수)
[hadoop@hadoop01 ~]$ vi $HADOOP_HOME/etc/hadoop/hadoop-env.sh
 # 기존 내용을 모두 지우고 여기서부터 붙여넣기 한다.
 export HADOOP_HOME=/home/hadoop/hadoop
 export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop

 # 시스템 사양에 맞추어 적절히 증감한다.
 export HADOOP_HEAPSIZE_MAX= 8g
 export HADOOP_HEAPSIZE_MIN=8g

export HADOOP_OS_TYPE=${HADOOP_OS_TYPE:-$(uname -s)}
 # core-site.xml
[hadoop@hadoop01 ~]$ vi $HADOOP_HOME/etc/hadoop/core-site.xml
<!-- 모두 지우고 여기서부터 붙여넣기 한다. -->
<configuration>
  <property>
      <name>fs.defaultFS</name>
      <value>hdfs://hadoop01:8020</value>
<!-- 기본 HDFS 주소. 예를 들어 "hdfs dfs -ls / " 를 수행하면  / 앞에 value의 주소가 들어간다고 이해하면 된다 -->
  </property>
  <property>
      <name>hadoop.proxyuser.hive.groups</name>
      <value>*</value>
  </property>
  <property>
      <name>hadoop.proxyuser.hive.hosts</name>
      <value>*</value>
  </property>
</configuration>
 # hdfs-site.xml
[hadoop@hadoop01 ~]$ vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml
<!-- 모두 지우고 여기서부터 붙여넣기 한다. -->
<configuration>
   <property>
        <name>dfs.replication</name>
        <value>3</value>
<!-- 
데이터 복제 횟수 
-->
   </property>
   <property>
        <name>dfs.namenode.name.dir</name>
        <value>/home/hadoop/namenode</value>
<!--
로컬(리눅스 시스템의) 디렉토리 경로이며, 반드시 hadoop을 구동하는 계정이 디렉토리에 대한 모든 권한을 가지고 있어야 한다.
-->
   </property>
   <property>
        <name>dfs.namenode.checkpoint.dir</name>
        <value>/home/hadoop/namesecondary</value>
<!-- 
namenode 디렉토리와 동일하게 로컬 디렉토리이고 모든 권한을 부여해야 한다. 
-->
   </property>
   <property>
        <name>dfs.datanode.data.dir</name>
        <value>/home/hadoop/datanode</value>
<!-- 
실제 hdfs 에 쌓인 데이터가 저장되는 경로. 여유공간이 넉넉한 파티션의 디렉토리를 지정해야 한다.
 datanode로 동작하는 클라이언트, 즉 workers 파일에 등록되어있는 호스트에 모두 동일하게 적용해야 한다.
 당연히 hadoop을 구동하는 계정이 모든 권한을 가진 디렉토리여야 한다.
-->
   </property>
   <property>
         <name>dfs.http.address</name>
         <value>hadoop01:50070</value>
<!--namenode http 주소 및 포트. hadoop web-UI -->
   </property>
   <property>
         <name>dfs.secondary.http.address</name>
         <value>hadoop01:50090</value>
<!-- 
Secondary namenode http 주소 및 포트
주의 할 점은 secondary-namenode는 백업, 복구를 담당하는 것이 아니라 보조의 역할이라는 점이다. 
-->
   </property>

<property>
         <name>dfs.block.size</name>
         <value>16777216</value>
<!-- 
HDFS의 block size, Byte 단위.  다음 값들을 참고하자.
8MB=8,388,608 / 16MB=16,777,216 / 32MB=33,554,432 / 64MB=67,108,864 / 128MB=134,217,728
-->
    </property>
    <property>
      <name>dfs.permissions.enabled</name>
      <value>false</value>
<!-- 
값이 false일 경우 파일 시스템의 퍼미션 관련 기능이 비활성화된다. 
-->
    </property>
    <property>
      <name>fs.trash.interval</name>
      <value>3</value>
<!-- 
휴지통과 같은 기능이다. 파일을 삭제하면 임시 공간으로 이동되고 지정한 시간 이후 삭제된다.
value의 값(=분)에 따라 휴지통이 비워진다.  
-->
    </property>
</configuration>
 # yarn-site.xml
[hadoop@hadoop01 ~]$ vi $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>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop02</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>hadoop02:8025</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>hadoop02:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>hadoop02:8050</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>hadoop02:8055</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
<!--
org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler
- FIFO : 먼저 들어온 작업을 먼저 처리한다. 후순위 작업은 이전 작업이 끝날 때까지 대기한다.
org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler
- FAIR : 작업에 균등하게 자원을 할당한다.
org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
- 트리 형태로 큐를 선언하고 각 큐 별로 이용할 수 있는 자원의 용량을 정하여 할당한다. 
-->
        </property>
</configuration>
 # mapreduce-site.xml
[hadoop@hadoop01 ~]$ vi $HADOOP_HOME/etc/hadoop/mapreduce-site.xml
<!-- 모두 지우고 여기서부터 붙여넣기 한다. -->
<configuration>
     <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
     </property>
     <property>
        <name>mapred.local.dir</name>
        <value>/home/hadoop/mapred</value>
     </property>
     <property>
        <name>mapred.system.dir</name>
        <value>/home/hadoop/mapred</value>
     </property>
     <property>
        <name>mapred.map.memory.mb</name>
        <value>2048</value>
<!-- map 작업을 위한 최대 리소스 제한 -->
     </property>
     <property>
        <name>mapred.map.java.opts</name>
        <value>-Xmx1024M</value>
<!-- map 작업을 위한 최대 child jvms  -->
     </property>
     <property>
        <name>mapred.reduce.memory.mb</name>
        <value>3072</value>
<!-- reduce 작업을 위한 최대 리소스 제한  -->
     </property>
     <property>
        <name>mapred.reduce.java.opts</name>
        <value>-Xmx2560M</value>
     <!-- reduce 작업을 위한 최대 child jvms  -->
     </property>
     <property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop02:10020</value>
<!-- Job history server 주소 (기본 포트는 10020)  -->
     </property>
     <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop02:19888</value>
<!-- Job history server Web UI주소 (기본 포트는 19888)  -->
     </property>
     <property>
        <name>mapreduce.jobhistory.intermediate-done-dir</name>
        <value>/home/hadoop/mr-history/tmp</value>
     </property>
     <property>
        <name>mapreduce.jobhistory.done-dir</name>
        <value>/home/hadoop/mmr-histroy/done</value>
     </property>
</configuration>
[hadoop@hadoop01 ~]$ vi $HADOOP_CONF_DIR/workers
 # datanode 구동을 위한 노드를 기록한다.
hadoop01
hadoop02
192.168.0.3
hadoop04.net
 # 수정한 설정 파일을 모든 노드에 복사한다.
[hadoop@hadoop01 ~]$ scp $HADOOP_HOME/etc/hadoop/* hadoop02:/home/hadoop/etc/hadoop/


구동 및 확인. 그리고 종료

 # 구동 스크립트를 이용한 방법

 # 하둡 구동
[hadoop@hadoop01 ~]$  $HADOOP_HOME/sbin/start-all.sh
WARNING: Attempting to start all Apache Hadoop daemons as hadoop in 10 seconds.
WARNING: This is not a recommended production deployment configuration.
WARNING: Use CTRL-C to abort.
Starting namenodes on [centos7]
Starting datanodes
Starting secondary namenodes [centos7]
Starting resourcemanager
Starting nodemanagers

 # 프로세스 확인
[hadoop@hadoop01 ~]$  jps -l
92880 org.apache.hadoop.yarn.server.nodemanager.NodeManager
92339 org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode
93780 sun.tools.jps.Jps
92685 org.apache.hadoop.yarn.server.resourcemanager.ResourceManager
92111 org.apache.hadoop.hdfs.server.datanode.DataNode

 # 종료
[hadoop@hadoop01 ~]$  sbin/stop-all.sh
WARNING: Stopping all Apache Hadoop daemons as hadoop in 10 seconds.
WARNING: Use CTRL-C to abort.
Stopping namenodes on [centos7]
Stopping datanodes
Stopping secondary namenodes [centos7]
Stopping nodemanagers
Stopping resourcemanager

Hadoop # 1. 개요

개요

아파치 하둡(Apache Hadoop, High-Availability Distributed Object-Oriented Platform)은 대량의 자료를 처리할 수 있는 큰 컴퓨터 클러스터에서 동작하는 분산 응용 프로그램을 지원하는 프리웨어 자바 소프트웨어 프레임워크이다. 원래 너치의 분산 처리를 지원하기 위해 개발된 것으로, 아파치 루씬의 하부 프로젝트이다. 분산처리 시스템인 구글 파일 시스템을 대체할 수 있는 하둡 분산 파일 시스템(HDFS: Hadoop Distributed File System)과 맵리듀스를 구현한 것이다.

베이스 아파치 하둡 프레임워크는 다음의 모듈을 포함하고 있다:

하둡 커먼(Hadoop Common)
하둡 분산 파일 시스템(HDFS)
하둡 YARN
하둡 맵리듀스

쉽게 설명하면 자바로 만든 네트워크 클러스터링이 가능한 가상 파일 시스템 이다.

이런… 느낌이려나…

컨셉 자체는 매우 단순하다.
1. 네트워크로 연결 되어있다.
2. 데이터를 쪼개서 각 노드에 분산 저장한다.
3. 노드의 장애에 대비해 중복 저장한다.
4. 어디까지나 ‘파일을 저장하기 위한 파일 시스템이다.’