void calcNormal(float v[3][3], float out[3])
{
    /* function calcNormal()
     : 점 3개를 받아 해당 삼각형의 normal vector를 구하는 함수
    v[3][3] : (x, y, z) 점 좌표 3개
    out[3] : normal 벡터를 반환받을 벡터 3개
    ※ glut함수를 쓰면 느리므로 직접 제작
    */
    float v1[3], v2[3], length;
    static const int x = 0;
    static const int y = 1;
    static const int z = 2;

    v1[x] = v[0][x]-v[1][x]; v1[y] = v[0][y]-v[1][y]; v1[z] = v[0][z]-v[1][z];
    v2[x] = v[2][x]-v[1][x]; v2[y] = v[2][y]-v[1][y]; v2[z] = v[2][z]-v[1][z];
 
    out[x] = v1[y]*v2[z] - v1[z]*v2[y];
    out[y] = v1[z]*v2[x] - v1[x]*v2[z];
    out[z] = v1[x]*v2[y] - v1[y]*v2[x];

    length = (float)sqrt(out[x]*out[x] + out[y]*out[y]+out[z]*out[z]);
    if(length == 0.0f)
        length = 1.0f;

    out[x] /= length;
    out[y] /= length;
    out[z] /= length;
}

void createShip(GLfloat x, GLfloat y, GLfloat z, GLfloat size)
{
    /* function createShip()
    중심 (x,y,z)로 부터 z축으로 길게 배 생성, 옆면 길이는 size * 2, 총 길이는 size * 4
    x : x 좌표
    y : y 좌표
    z : z 좌표
    size : 배 크기의 기본단위
    */
    float v[3][3];
    float out[3];

    glBegin(GL_TRIANGLES);
    glColor3f(0.65f, 0.16f, 0.16f);   //바이킹 뒷 왼쪽 삼각형
    v[0][0] = x-size; v[0][1] = y; v[0][2] = z-size;
    v[1][0] = x; v[1][1] = y; v[1][2] = z-2*size;
    v[2][0] = x; v[2][1] = y-size; v[2][2] = z-size;
    calcNormal(v, out);
    glNormal3fv(out);
    glVertex3f(x-size, y, z-size);
    glVertex3f(x, y, z-2*size);
    glVertex3f(x, y-size, z-size);
 
    v[0][0] = x; v[0][1] = y-size; v[0][2] = z+size;
    v[1][0] = x; v[1][1] = y; v[1][2] = z-2*size;
    v[2][0] = x-size; v[2][1] = y; v[2][2] = z+size;
    calcNormal(v, out);
    glNormal3fv(out);
    glVertex3f(x, y-size, z+size);  //바이킹 앞 왼쪽 삼각형
    glVertex3f(x, y, z+2*size);
    glVertex3f(x-size, y, z+size);
 
    glColor3f(0.65f, 0.16f, 0.16f);   //바이킹 왼쪽 몸통
    v[0][0] = x; v[0][1] = y-size; v[0][2] = z+size;
    v[1][0] = x-size; v[1][1] = y; v[1][2] = z-size;
    v[2][0] = x; v[2][1] = y-size; v[2][2] = z-size;
    calcNormal(v, out);
    glNormal3fv(out);
    glVertex3f(x, y-size, z+size);
    glVertex3f(x-size, y, z-size);
    glVertex3f(x, y-size, z-size);
 
    v[0][0] = x-size; v[0][1] = y; v[0][2] = z-size;
    v[1][0] = x; v[1][1] = y-size; v[1][2] = z+size;
    v[2][0] = x-size; v[2][1] = y; v[2][2] = z+size;
    calcNormal(v, out);
    glNormal3fv(out);
    glVertex3f(x-size, y, z-size);
    glVertex3f(x, y-size, z+size);
    glVertex3f(x-size, y, z+size);

    glColor3f(0.65f, 0.16f, 0.16f);   //바이킹 뒷 오른쪽 삼각형
    v[0][0] = x; v[0][1] = y; v[0][2] = z-2*size;
    v[1][0] = x+size; v[1][1] = y; v[1][2] = z-size;
    v[2][0] = x; v[2][1] = y-size; v[2][2] = z-size;
    calcNormal(v, out);
    glNormal3fv(out);
    glVertex3f(x, y, z-2*size);
    glVertex3f(x+size, y, z-size);
    glVertex3f(x, y-size, z-size);
 
    v[0][0] = x; v[0][1] = y-size; v[0][2] = z+size;
    v[1][0] = x+size; v[1][1] = y; v[1][2] = z+size;
    v[2][0] = x; v[2][1] = y; v[2][2] = z+2*size;
    calcNormal(v, out);
    glNormal3fv(out);
    glVertex3f(x, y-size, z+size);  //바이킹 앞 오른쪽 삼각형
    glVertex3f(x+size, y, z+size);
    glVertex3f(x, y, z+2*size);
 
    glColor3f(0.65f, 0.16f, 0.16f);   //바이킹 오른쪽 몸통
    v[0][0] = x+size; v[0][1] = y; v[0][2] = z-size;
    v[1][0] = x; v[1][1] = y-size; v[1][2] = z+size;
    v[2][0] = x; v[2][1] = y-size; v[2][2] = z-size;
    calcNormal(v, out);
    glNormal3fv(out);
    glVertex3f(x+size, y, z-size);
    glVertex3f(x, y-size, z+size);
    glVertex3f(x, y-size, z-size);
 
    v[0][0] = x+size; v[0][1] = y; v[0][2] = z-size;
    v[1][0] = x+size; v[1][1] = y; v[1][2] = z+size;
    v[2][0] = x; v[2][1] = y-size; v[2][2] = z+size;
    calcNormal(v, out);
    glNormal3fv(out);
    glVertex3f(x+size, y, z-size);
    glVertex3f(x+size, y, z+size);
    glVertex3f(x, y-size, z+size);
    glEnd();

    glBegin(GL_POLYGON);     //바이킹 갑판
    glColor3f(0.65f, 0.16f, 0.16f);
    glNormal3f(0.0f, 1.0f, 0.0f);
    glVertex3f(x+size, y, z-size);
    glNormal3f(0.0f, 1.0f, 0.0f);
    glVertex3f(x, y, z-2*size);
    glNormal3f(0.0f, 1.0f, 0.0f);
    glVertex3f(x-size, y, z-size);
    glNormal3f(0.0f, 1.0f, 0.0f);
    glVertex3f(x-size, y, z+size);
    glNormal3f(0.0f, 1.0f, 0.0f);
    glVertex3f(x, y, z+2*size);
    glNormal3f(0.0f, 1.0f, 0.0f);
    glVertex3f(x+size, y, z+size);
    glEnd();
}
Whites/Pastels
Color NameRGB CODERGB CODE(float)HEX #
Snow25525025010.9803920.980392fffafa
Snow 22382332330.9333330.9137250.913725eee9e9
Snow 32052012010.8039220.7882350.788235cdc9c9
Snow 41391371370.5450980.5372550.5372558b8989
Ghost White2482482550.9725490.9725491f8f8ff
White Smoke2452452450.9607840.9607840.960784f5f5f5
Gainsboro2202202200.8627450.8627450.862745dccdc
Floral White25525024010.9803920.941176fffaf0
Old Lace2532452300.9921570.9607840.901961fdf5e6
Linen2402402300.9411760.9411760.901961faf0e6
Antique White2502352150.9803920.9215690.843137faebd7
Antique White 22382232040.9333330.874510.8eedfcc
Antique White 32051921760.8039220.7529410.690196cdc0b0
Antique White 41391311200.5450980.5137250.4705888b8378
Papaya Whip25523921310.9372550.835294ffefd5
Blanched Almond25523520510.9215690.803922ffebcd
Bisque25522819610.8941180.768627ffe4c4
Bisque 22382131830.9333330.8352940.717647eed5b7
Bisque 32051831580.8039220.7176470.619608cdb79e
Bisque 41391251070.5450980.4901960.4196088b7d6b
Peach Puff25521818510.8549020.72549ffdab9
Peach Puff 22382031730.9333330.7960780.678431eecbad
Peach Puff 32051751490.8039220.6862750.584314cdaf95
Peach Puff 41391191010.5450980.4666670.3960788b7765
Navajo White25522217310.8705880.678431ffdead
Moccasin25522818110.8941180.709804ffe4b5
Cornsilk25524822010.9725490.862745fff8dc
Cornsilk 22382322050.9333330.9098040.803922eee8dc
Cornsilk 32052001770.8039220.7843140.694118cdc8b1
Cornsilk 41391361200.5450980.5333330.4705888b8878
Ivory255255240110.941176fffff0
Ivory 22382382240.9333330.9333330.878431eeeee0
Ivory 32052051930.8039220.8039220.756863cdcdc1
Ivory 41391391310.5450980.5450980.5137258b8b83
Lemon Chiffon25525020510.9803920.803922fffacd
Seashell25524523810.9607840.933333fff5ee
Seashell 22382292220.9333330.8980390.870588eee5de
Seashell 32051971910.8039220.7725490.74902cdc5bf
Seashell 41391341300.5450980.525490.5098048b8682
Honeydew2402552400.94117610.941176f0fff0
Honeydew 22442382240.9568630.9333330.878431e0eee0
Honeydew 31932051930.7568630.8039220.756863c1cdc1
Honeydew 41311391310.5137250.5450980.513725838b83
Mint Cream2452552500.96078410.980392f5fffa
Azure2402552550.94117611f0ffff
Alice Blue2402482550.9411760.9725491f0f8ff
Lavender2302302500.9019610.9019610.980392e6e6fa
Lavender Blush25524024510.9411760.960784fff0f5
Misty Rose25522822510.8941180.882353ffe4e1
White255255255111ffffff
Grays
Color NameRGB CODERGB CODE(float)HEX #
Black00000000000
Dark Slate Gray4979790.1921570.3098040.3098042f4f4f
Dim Gray1051051050.4117650.4117650.411765696969
Slate Gray1121381440.4392160.5411760.564706708090
Light Slate Gray1191361530.4666670.5333330.6778899
Gray1901901900.7450980.7450980.745098bebebe
Light Gray2112112110.8274510.8274510.827451d3d3d3
Blues
Color NameRGB CODERGB CODE(float)HEX #
Midnight Blue25251120.0980390.0980390.439216191970
Navy00128000.501961000080
Cornflower Blue1001492370.3921570.5843140.9294126495ed
Dark Slate Blue72611390.2823530.2392160.545098483d8b
Slate Blue106902050.4156860.3529410.8039226a5acd
Medium Slate Blue1231042380.4823530.4078430.9333337b68ee
Light Slate Blue1321122550.5176470.43921618470ff
Medium Blue00205000.8039220000cd
Royal Blue651052250.2549020.4117650.882353041690
Blue002550010000ff
Dodger Blue301442550.1176470.56470611e90ff
Deep Sky Blue019125500.74902100bfff
Sky Blue1352062500.5294120.8078430.98039287ceeb
Light Sky Blue1352062500.5294120.8078430.98039287cefa
Steel Blue701301800.274510.5098040.7058824682b4
Light Steel Blue1761962220.6901960.7686270.870588b0c4de
Light Blue1732162300.6784310.8470590.901961add8e6
Powder Blue1762242300.6901960.8784310.901961b0e0e6
Pale Turquoise1752382380.6862750.9333330.933333afeeee
Dark Turquoise020620900.8078430.81960800ced1
Medium Turquoise722092040.2823530.8196080.848d1cc
Turquoise642242080.250980.8784310.81568640e0d0
Cyan025525501100ffff
Light Cyan2242552550.87843111e0ffff
Cadet Blue951581600.3725490.6196080.6274515f9ea0
Greens
Color NameRGB CODERGB CODE(float)HEX #
Medium Aquamarine1022051700.40.8039220.66666766cdaa
Aquamarine1272552120.49803910.8313737fffd4
Dark Green0100000.3921570006400
Dark Olive Green85107470.3333330.4196080.184314556b2f
Dark Sea Green1431881430.5607840.7372550.5607848fbc8f
Sea Green46139870.1803920.5450980.3411762e8b57
Medium Sea Green601791130.2352940.7019610.4431373cb371
Light Sea Green321781700.125490.6980390.66666720b2aa
Pale Green1522511520.5960780.9843140.59607898fb98
Spring Green0255127010.49803900ff7f
Lawn Green12425200.4862750.98823507cfc00
Chartreuse12725500.498039107fff00
Medium Spring Green025015400.9803920.60392200fa9a
Green Yellow173255470.67843110.184314adff2f
Lime Green50205500.1960780.8039220.19607832cd32
Yellow Green154205500.6039220.8039220.1960789acd32
Forest Green34139340.1333330.5450980.133333228b22
Olive Drab107142350.4196080.5568630.1372556b8e23
Dark Khaki1891831070.7411760.7176470.419608bdb76b
Khaki2402301400.9411760.9019610.54902f0e68c
Yellow
Color NameRGB CODERGB CODE(float)HEX #
Pale Goldenrod2382321700.9333330.9098040.666667eee8aa
Light Goldenrod Yellow2502502100.9803920.9803920.823529fafad2
Light Yellow255255224110.878431ffffe0
Yellow2552550110ffff00
Gold255215010.8431370ffd700
Light Goldenrod2382211300.9333330.8666670.509804eedd82
Goldenrod218165320.8549020.6470590.12549daa520
Dark Goldenrod184134110.7215690.525490.043137b8860b
Browns
Color NameRGB CODERGB CODE(float)HEX #
Rosy Brown1881431430.7372550.5607840.560784bc8f8f
Indian Red20592920.8039220.3607840.360784cd5c5c
Saddle Brown13969190.5450980.2705880.074518b4513
Sienna16082450.6274510.3215690.176471a0522d
Peru205133630.8039220.5215690.247059cd853f
Burlywood2221841350.8705880.7215690.529412deb887
Beige2452452200.9607840.9607840.862745f5f5dc
Wheat2452221790.9607840.8705880.701961f5deb3
Sandy Brown244164960.9568630.6431370.376471f4a460
Tan2101801400.8235290.7058820.54902d2b48c
Chocolate210105300.8235290.4117650.117647d2691e
Firebrick17834340.6980390.1333330.133333b22222
Brown16542420.6470590.1647060.164706a52a2a
Oranges
Color NameRGB CODERGB CODE(float)HEX #
Dark Salmon2331501220.9137250.5882350.478431e9967a
Salmon2501281140.9803920.5019610.447059fa8072
Light Salmon25516012210.6274510.478431ffa07a
Orange255165010.6470590ffa500
Dark Orange255140010.549020ff8c00
Coral2551278010.4980390.313725ff7f50
Light Coral2401281280.9411760.5019610.501961f08080
Tomato255997110.3882350.278431ff6347
Orange Red25569010.2705880ff4500
Red25500100ff0000
Pinks/Violets
Color NameRGB CODERGB CODE(float)HEX #
Hot Pink25510518010.4117650.705882ff69b4
Deep Pink2552014710.0784310.576471ff1493
Pink25519220310.7529410.796078ffc0cb
Light Pink25518219310.7137250.756863ffb6c1
Pale Violet Red2191121470.8588240.4392160.576471db7093
Maroon17648960.6901960.1882350.376471b03060
Medium Violet Red199211330.7803920.0823530.521569c71585
Violet Red208321440.8156860.125490.564706d02090
Violet2381302380.9333330.5098040.933333ee82ee
Plum2211602210.8666670.6274510.866667dda0dd
Orchid2181122140.8549020.4392160.839216da70d6
Medium Orchid186852110.7294120.3333330.827451ba55d3
Dark Orchid153502040.60.1960780.89932cc
Dark Violet14802110.58039200.8274519400d3
Blue Violet138432260.5411760.1686270.8862758a2be2
Purple160322400.6274510.125490.941176a020f0
Medium Purple1471122190.5764710.4392160.8588249370db
Thistle2161912160.8470590.749020.847059d8bfd8

 

 

원문 : http://warmz.tistory.com/450

#define GL_PI 3.1415f

void createCylinder(GLfloat centerx, GLfloat centery, GLfloat centerz, GLfloat radius, GLfloat h)
{
    /* function createCyliner()
    원기둥의 중심 x,y,z좌표, 반지름, 높이를 받아 원기둥을 생성하는 함수(+z방향으로 원에서 늘어남)
    centerx : 원기둥 원의 중심 x좌표
    centery : 원기둥 원의 중심 y좌표
    centerz : 원기둥 원의 중심 z좌표
    radius : 원기둥의 반지름
    h : 원기둥의 높이
    */
    GLfloat x, y, angle;

    glBegin(GL_TRIANGLE_FAN);           //원기둥의 윗면
    glNormal3f(0.0f, 0.0f, -1.0f);
    glColor3ub(139, 69, 19);
    glVertex3f(centerx, centery, centerz);

    for(angle = 0.0f; angle < (2.0f*GL_PI); angle += (GL_PI/8.0f))     {         x = centerx + radius*sin(angle);         y = centery + radius*cos(angle);         glNormal3f(0.0f, 0.0f, -1.0f);         glVertex3f(x, y, centerz);     }     glEnd();     glBegin(GL_QUAD_STRIP); //원기둥의 옆면     for(angle = 0.0f; angle < (2.0f*GL_PI); angle += (GL_PI/8.0f))     {         x = centerx + radius*sin(angle);         y = centery + radius*cos(angle);         glNormal3f(sin(angle), cos(angle), 0.0f);         glVertex3f(x, y, centerz);         glVertex3f(x, y, centerz + h);     }     glEnd();     glBegin(GL_TRIANGLE_FAN); //원기둥의 밑면     glNormal3f(0.0f, 0.0f, 1.0f);     glVertex3f(centerx, centery, centerz + h);     for(angle = (2.0f*GL_PI); angle > 0.0f; angle -= (GL_PI/8.0f))     {         x = centerx + radius*sin(angle);         y = centery + radius*cos(angle);         glNormal3f(0.0f, 0.0f, 1.0f);         glVertex3f(x, y, centerz + h);     }     glEnd(); }


glutInitDisplayMode() : OpenGL 설정하는 함수(buffer, color mode, depth 비교 등)

 

glutInitWindowSize() : 인자로 윈도우의 width, height를 넣으면 윈도우 생성시 해당 크기로 생성.

 

glutCreateWindow() : 윈도우 창을 default 옵션으로 생성. 인자로 window창 제목 설정 가능

 

glutDisplayFunc() : 윈도우를 그릴 때마다 인자로 주어진 함수를 호출하도록 설정하는 함수

 

glutReshapeFunc() : 윈도우의 크기를 변경할 때 인자로 주어진 함수를 호출하도록 설정하는 함수

인자로 주어진 함수의 인자는 현재 윈도우의 width, height 값이 들어온다. 인자 수정 불가.

ex) change(GLsizei width, GLsizei height)

 

SetupRC() : rendering 전 OpenGL 초기화해주는 함수

 

glClearColor() : window를 clear할 색상 지정. 3가지 인자 각각 RGB, 마지막 인자 투명도 설정 alpha

 

glClear(GL_COLOR_BUFFER_BIT) : 실제 clear 작업

 

glFlush() : queue에 저장된 명령어들 수행

 

glutMainLoop() : 운영체제에 관련된 모든 내용을 프로그램이 종료할 때까지 처리하도록 설정하는 함수.

 

glutTimerFunc() : 첫번째 인자로 준 시간 뒤에 두번째 인자로 주어진 함수를 호출해줌, 마지막 세번째 인자는 함수에게 전달할 int형 값이다.

 

설치환경 : windows7, visual studio 2012

 

1. OpenGL 다운받기

http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip

위 파일을 다운 받아서 압축을 푼다.

 

2. visual studio에서 빈 프로젝트로 프로젝트를 생성한다.


3. 프로젝트에서 오른쪽 버튼을 클릭해

   '속성' -> '링커' -> '입력' -> '추가 종속성'의 맨 앞에 'glut32.lib;'을 추가해 준다.


(※ ssh 설치와 설정을 해주신 뒤 와주셔야 합니다.)

하둡에서는 namenode, jobtracker, datanode, tasktracker, secondarynamenode

등이 존재합니다.

 

이 글의 설치과정에서는

first - namenode, jobtracker

second - secondarynamenode

third - datanode, tasktracker

forth - datanode, tasktracker

위 처럼 설치를 해보겠습니다.

 

hadoop을 설치하기 위해 CentOS에 우선 hadoop 설치파일을 받도록 하겠습니다.

 

우선 wget이 필요하므로 설치가 안되신 분은 설치를 해주셔야 합니다.

# yum -y install wget

 

wget을 우선 설치하신 뒤,

wget으로 hadoop 설치파일을 받기위해 다운로드할 url을 알아봅시다.

 

http://hadoop.apache.org

위 사이트에서 Releases - Download - Download a release now!

까지 들어간 뒤

여러가지 링크 중 하나에 들어가신 뒤

현재 stable 버전을 찾아 다운로드 해주시면 됩니다.

제가 다운받을 때 stable 버전은 1.2.1이었습니다.


 

위에서 볼 때 다운로드 url은

http://apache.mirror.cdnetworks.com/hadoop/common/hadoop-1.2.1/hadoop-1.2.1.tar.gz

입니다.

 

이제 CentOS에서 받도록 하겠습니다.


 

위처럼

# wget http://apache.mirror.cdnetworks.com/hadoop/common/hadoop-1.2.1/hadoop-1.2.1.tar.gz

이란 명령어를 쳐주면 현재 폴더에 받을 수 있습니다.

 

이제 이 압축을 풀어보도록 하겠습니다.


 

위 사진처럼

# tar -xvzf hadoop-1.2.1.tar.gz

라고 명령어를 치시면 압축이 풀리고

hadoop-1.2.1이란 폴더가 생길 겁니다.

 

(선택사항)

# mv hadoop-1.2.1 /usr/local/hadoop

자신이 편한 장소로 파일을 옮겨 줍니다.

 

그 다음 환경설정을 해 줍니다.


 

위 명령어를 입력해 환경설정을 해줍니다.

 


 

파일 맨 밑에

 

# hadoop Environment

export HADOOP_HOME=/usr/local/hadoop

export PATH=$PATH:$HADOOP_HOME/bin

 

을 추가하고 저장해 줍니다.

그 뒤 

 

# source /etc/profile

 

명령어를 입력해 환경설정을 적용해 줍니다.

 

그 다음

# cd /usr/lcoal/hadoop/conf

# vi hadoop-env.sh

 


위 사진처럼

export JAVA_HOME=/usr/local/java

export HADOOP_HOME_WARN_SUPPRESS="TRUE"

를 추가해 줍니다.

 

그 다음

#vi hdfs-site.xml


 

 

위 사진처럼

<property>

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

<value>/usr/local/hadoop/dfs/name</value>

</property>

<property>

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

<value>/usr/local/hadoop/dfs/data</value>

</property>

<property>

<name>dfs.replication</name>

<value>3</value>

</property>

<property>

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

<value>first:9003</value>               (address 변경)

</property>

 

위 내용을 추가해 줍니다.

 

그 다음

#vi core-site.xml

 


 

 

위 사진처럼

<property>

<name>hadoop.tmp.dir</name>

<value>/usr/local/hadoop/tmp</value>

</property>

<property>

<name>fs.default.name</name>

<value>hdfs://first:9000</value>         (namenode 설정)

</property>

추가해 저장해줍니다.

 

그 다음

#vi mapred-stie.xml


 

위 사진처럼

<property>

<name>mapred.job.tracker</name>   (jobtracker 설정)

<value>first:9001<value>

</property>

<property>

<name>mapred.job.tracker.http.address</name>    (address 변경)

<value>first:9002</value>

</property>

<property>

<name>mapred.local.dir</name>

<value>/usr/local/hadoop/mapred/local</value>

</property>

<property>

<name>mapreduce.jobtracker.staging.root.dir</name>

<value>/tmp</value>

</property>

 

를 추가하고 저장해 줍니다.

 

이제 master 파일과 slaves파일을 수정해 줍시다.

#vi masters   (secnodary namenode 설정)

 

에는

second

를 입력해 주시고 저장해줍니다.

 

#vi slaves   (task tracker, datanode 설정)

 

에는

third

forth

를 입력해 주시고 저장해줍니다.

 

위 처럼 해주시면 설정이 끝납니다.

 

이제 위 과정을 모든 가상머신에서 똑같이 해주셔야 합니다.

하지만 귀찮으므로 위 설정한 파일들을 다른 가상머신에 ssh를 이용하여 보내주도록 합시다.

 

#scp -r /usr/local/hadoop root@second:/usr/local/hadoop

#scp /etc/profile root@second:/etc/profile

 

-r을 붙여주시면 디렉토리의 모든 파일을 복사해주는 설정입니다.

위 명령어로 second 뿐만아니라 third, forth도 복사해 주셔야합니다.

(※ 각 가상머신에 자바도 설치되어 있어야 합니다.)

 

이제 방화벽을 풀어줍시다

#vi /etc/sysconfig/iptables



 

위 사진처럼

-A INPUT -m state -state NEW -m tcp -p tcp --dport 9000:90003 -j ACCEPT

-A INPUT -m state -state NEW -m tcp -p tcp --dport 50000:50010 -j ACCEPT

을 추가해 줍니다.

 

그뒤

#scp /etc/sysconfig/iptables root@호스트명:/etc/sysconfig/iptables

를 해서 모든 가상머신에 방화벽설정을 복사해 줍니다.

 

이제 각 가상머신에서

#service iptables restart

명령어를 입력해 주시면 방화벽 설정도 끝이 납니다.

 

위 설정을 다 끝내셨다면 이제 namenode를 포맷해 줍니다.

# hadoop namenode format

 

포맷을 해주신 뒤 이제 하둡을 시작해 봅시다.

# start-all.sh

 

이제 하둡이 시작되었습니다.

 

이제 host os에서

http://first의 ip:9002 (jobtracker를 볼 수 있음)



위 주소로 들어가시면 위 같은 사이트가 뜹니다.

 

http://first의 ip:9003 (dfs의 상태를 볼 수 있음)



위 주소로 들어가시면 위 같은 사이트가 뜹니다.

 

여기까지 되셨다면 성공입니다.

이제 테스트를 해봅시다.

 

#cd /usr/local/hadoop

#hadoop dfs -mkdir input

#hadoop dfs -put NOTICE.txt input

#hadoop jar hadoop-examples-1.2.1.jar wordcount input output

위 명령어까지 하시면 하둡이 돌아가시는 것을 보실 수 있고

#hadoop dfs -cat output/*


 

위 사진처럼 되신다면 성공입니다.

 

참고 : http://blog.naver.com/adonis50/178774994

         http://blog.naver.com/gyrbsdl18/173310038

CentOS를 최소설치 한 경우에는 ssh가 설치 되어있지 않으므로

아래 처럼 설치를 하기위해 명령어를 입력해 줍니다.

 

 

# yum -y install openssh-server openssh-clients

 

위 명령어를 치시면 자동으로 설치가 됩니다.(인터넷이 연결되었을 경우입니다.)

위 설치를 ssh를 연결할 가상머신에 모두 설치해 줍니다.

 

이제 접속할 때 비밀번호를 묻지않고 접속이 가능하도록 각각의 가상머신의 공개키를 생성해 줍니다.


위 명령어를 입력한뒤

따로 입력하라는 명령은 전부다 엔터만 쳐서 넘어가 주시면 됩니다.

 


위 처럼 나오게 되면 성공입니다.

 

이제 공개키를 각 가상머신에 배포해야 합니다.

각 가상머신의 공개키 파일의 이름이 똑같으므로 이름을 바꿔주도록 하겠습니다.


# cd .ssh

# mv id_rsa.pub forth.pub

 

위 과정은 모든 가상머신에 필요한 과정입니다.

 

이제 연결할 가상머신들의 ip주소가 필요합니다.

저의 경우 4대의 가상머신을 연결할텐데요.

호스트명     ip

first            192.168.0.16

second      192.168.0.17

third           192.168.0.15

forth           192.168.0.14


위 네대의 가상머신을 연결해 보겠습니다.

 

우선 위 네대의 가상머신을 호스트명으로 인식할 수 있도록 설정해 봅시다.

 

우선 forth의 변경을 해보겠습니다.

 

 

# vi /etc/hosts

위 명령어를 입력하면

 

위 사진처럼 되어 있는 것을 볼 수 있습니다.


위 처럼 파일을 바꿔줍니다.

맨 윗줄의 localhost를 해당 가상머신에 해당하는 호스트명으로 바꿔주고

아래에 다른 가상머신들의 ip와 호스트명을 입력해 줍니다.

한줄당 한 가상머신의 'ip     호스트명' 순으로 입력해 줍니다.

 

그 다음 현재 가상머신의 호스트명을 바꿔줍니다.

다음 명령어를 입력해 줍니다.

 

# vi /etc/sysconfig/network

 


여기서 HOSTNAME='호스트명'

호스트명에 해당 가상머신의 호스트명을 적어주고 저장해 주면 됩니다.

그리고 가상머신을 다시 재부팅해주시면 호스트명이 바뀌게 됩니다.

 

이제 각각의 가상머신에서 만들었던 공개키를 다른 가상머신에게 보내봅시다.

 

위 사진처럼

 

# cd ~/.ssh

# scp 보낼파일명 계정명@호스트명:~/.ssh

(보낼파일은 위에서 만든 .pub파일입니다. 계정명과 호스트명는 보낼 가상머신의 계정명과 호스트명을 적습니다.)

명령어를 입력하면

yes/no를 물어보며 이 때는 yes

보낼 가상머신의 비밀번호를 넣으면 전송이 완료됩니다.

 

pub파일의 전송은 (위에서 말한 호스트명을 예로 설명드리겠습니다.)

first 에서 second, third, forth

second에서 first, third, forth

third에서 first, second, forth

forth에서 first, second, third

이렇게 위 전송을 시행해 줍니다.

 

그 뒤에는 공개키를 저장해야 합니다.


모든 가상장치에서

# cd ~/.ssh

# cat first.pub >> authorized_keys

# cat second.pub >> authorized_keys

# cat third.pub >> authorized_keys

# cat forth.pub >> authorized_keys

 

위 명령어들을 실행합니다.

 

그 다음

# ssh 호스트명

(접속할 호스트명을 넣으시면 됩니다.)

이라고 명령어를 입력하면 비밀번호를 묻지 않고 접속이 된다면 성공입니다.

이번엔 여러 가상머신의 CentOS와 연결하기 위한 네트워크 설정을 해보도록 하겠습니다.

※네트워크 설정1에서 설정한 NAT는 가상머신 끼리는 연결이 되지 않습니다.

 

우선 가상머신을 선택한 뒤, '설정(S)'버튼을 눌러줍니다.


 

'어댑터 2'를 클릭해 위 사진처럼

'브리지 어댑터'로 설정해 줍니다.

 


위 사진처럼

 

# cd /etc/udev/rules.d

# vi 70-persistent-net.rules
이라고 명령어를 치면


현재 연결된 네트워크 어댑터의 정보가 표시되는 파일입니다.

 


 

위 정보에서 보면 'eth0'와 'eth1'이 있습니다. 현재 저희는 브리지 어댑터를 어댑터 2에 연결하였으므로 브리지 어댑터의 정보는 eth1입니다.

위 파일에서 필요한 정보는 'eth1'의 'ATTR{address}'의 값이 필요합니다.

ATTR값을 잠시 저장해두고, 다음으로 갑니다.

 


 

 

위 사진처럼 

# cd /etc/sysconfig/network-scripts

# ls

명령어를 치면 위 사진처럼 나옵니다.

 

여기서 ifcfg-eth1이 있을 경우

# vi ifcfg-eth1

 

여기서 ifcfg-eth1이 없을 경우

# cp ifcfg-eth0 ifcfg-eth1

# vi ifcfg-eth1

 


 

위 사지처럼 'ifcfg-eth1'을 수정해 줍니다.

 


 

그 다음 위 사진처럼

# service network restart

라고 쳐주면 네트워크가 다시 시작됩니다.

 


 

다시

# ifconfig

위 명령어를 쳐주면

 

eth1이 추가된 것을 볼 수 있습니다.

이렇게 되면 성공입니다. 

음... 저도 VirtualBox에 대해 자세히 공부한 것이 아니라서

직접 설명하기는 힘들고 찾다가 자세히 설명된 곳을 링크 걸겠습니다.

http://solatech.tistory.com/263

 

그럼 위 설명된 글을 토대로 CentOS에 인터넷을 연결해 보도록 하겠습니다.

 

우선 단순히 NAT만으로 인터넷에 연결해 보도록 하겠습니다.

 

VirtualBox에서 새로 생성한 가상머신을 선택해 '설정(S)' 버튼을 눌러 '네트워크'탭에 들어갑니다.


 

대부분 다음과 같이 설정이 되어있을 겁니다.

만약 NAT가 선택이 되어있지 않다면 NAT로 설정해 주세요.

그리고 확인을 누른 뒤 '시작(I)'버튼을 눌러 가상머신을 실행시켜 줍니다.

 

실행시킨 뒤

# ifconfig

라고 치면


 

위의 사진처럼 lo밖에 나오지 않습니다.

 

저희는 위에 VirtualBox에서 설정한 NAT를 동작하도록 설정해보겠습니다.

#cd /etc/sysconfig/network-scripts

#vi ifcfg-eth0

 


 

위 사진에서 엔터를 쳐주시면 

 


 

다음과 같은 창이 뜨는데 여러분은 ONBOOT의 설정이 no로 되어있을 겁니다.

이 부분을 'ONBOOT=yes'로 설정해 주시고 저장해주시면 됩니다.

 

그다음

#service network restart

라고 명령어를 쳐주시면 network가 다시 시작됩니다.


 

 

그다음 다시

#ifconfig



보면 eth0이 추가되었음을 볼 수 있습니다.

 

이걸로 인터넷에 연결되었습니다.

 

저희는 가난한 공대생이니 virtualbox를 써서 centOS를 설치하도록 하겠습니다.

 

https://www.virtualbox.org/wiki/Downloads

우선 위 사이트에서 현재 자신의 컴퓨터에 맞는 virtualbox를 받습니다.

 

http://ftp.daum.net/centos/6.4/isos/

그 다음 위 사이트에 들어가 자신의 컴퓨터에 맞는 CentOS를 받습니다.

저는 'i386'폴더에 들어가서 'CentOS-6.4-i386-bin-DVD1to2.torrent'파일을 받아

토렌트를 이용하여 받았습니다.

 



설치 후 실행해 '새로 만들기(N)'버튼을 눌러줍니다.

 


 

버튼을 클릭하면 다음과 같은 창이 뜹니다. 

이름을 정해주시고 종류는 'Linux', 버전은 'Red Hat'을 선택해 줍니다.

그 다음 '다음(N)'버튼을 눌러줍니다.

 


 

버튼을 눌러주면 다음과 같은 메모리 크기 설정해 주는 창이 뜹니다.

저는 1024MB로 설정했습니다.

'다음(N)' 버튼을 누릅니다.

 


 

버튼을 눌러주면 하드 드라이브를 설정하는 창이 뜹니다.

'지금 가상 하드 드라이브 만들기(C)'를 선택해 주고,

'만들기'버튼을 눌러줍니다.

 


 

버튼을 눌러주면 하드 드라이브 파일 종류 설정하는 창이 뜹니다.

여기서 'VDI (VirtualBox 디스크 이미지)를 선택해 주고

'다음(N)'버튼을 눌러줍니다.

 



버튼을 눌러주면 물리적 하드 드라이브에 저장이라는 창이 뜹니다.

여기서 '동적할당(D)'를 선택하고

'다음(N)'버튼을 눌러줍니다.

 


 

버튼을 눌러주면 가상 하드 드라이브 파일 위치 및 크기를 설정해 주는 창이 뜹니다.

여기서 하드 드라이브를 최대 40GB로 설정해 주었습니다.

다음은 '만들기'버튼을 눌러줍니다.

 


 

버튼을 눌러주면 다음과 같이 새로운 centOS가 생성되었음을 보실 수 있습니다.

새로 만든 가상머신을 클릭하고 위 '설정(S)'버튼을 눌러줍니다.

 


 

저장소를 선택합니다.

위 처럼 비어있음을 선택하고,

왼쪽에 IDE 세컨더리 옆 CD버튼을 클릭해 줍니다.

그럼 위 처럼 선택 할 수 있는 메뉴가 뜨는데 여기서 '가상 CD/DVD 디스크 파일 선택...'을 클릭해 줍니다.

 


 

위에서 토렌트로 받은 centOS 가상 디스크 파일이 있는 폴더로 가서

자신 컴퓨터에 해당하는 DVD1 iso 파일을 선택해 줍니다.

그 뒤 '확인'버튼을 눌러 설정을 나옵니다.

 

다시 가상머신을 선택한 뒤 '시작(I)'버튼을 누릅니다.

※ 시작 버튼을 누르면 부팅 중 여러 창이 뜰텐데요 다시는 물어보지 않는다고 선택하고 닫기를 눌러주시면 됩니다.

※ 가산머신 실행 중에는 해당 창에서 마우스든 키보드든 가상머신 내에서만 실행이 됩니다.

그러므로 만약에 가상머신 밖에 볼일이 있을 경우 'Ctrl + Alt + Shift + Delete'를 눌러주시면 다시 Host OS의 마우스가 뜹니다.


 

그럼 부팅되어 다음과 같은 창이 뜹니다.

여기서 'Install or upgrade an existing system'을 엔터를 눌러 선택해 줍니다.

 



막 이상한 글자들이 뜨고 난 뒤 다음과 같은 창이 뜹니다.

여기서 화살표키로 'Skip'에 커서를 옮긴뒤 엔터를 눌러줍니다.

 


 

엔터를 눌러주면 조금 있다가 다음과 같은 화면이 뜹니다.

우린 여기서 'Next'를 눌러줍니다.

 


 

그 다음 English를 선택하고 Next를 눌러줍니다.

 


 

그 다음 U.S.English를 선택해 주고 Next를 눌러줍니다.

 


 

다음과 같이 'Basic Storage Devices'를 선택해 주시고 Next를 눌러줍니다.

 


 

다음과 같이 창이 떴을 때 'Yes, discard any data'를 클릭해 줍니다.

 


 

나라를 선택하는 화면입니다. 여기서 'Asia/Seoul'을 선택해 주시고(지도에서 선택하시는게 빠릅니다.)

'Next'버튼을 눌러줍니다.

 


 

여기서 root의 비밀번호를 넣어주시고(까먹으시면 안되심돠)

'Next'버튼을 눌러줍니다.

 


 

여기서 'Replace Existing Linux System(s)'를 선택해 줍니다.

그다음 'Next'버튼을 눌러줍니다.

 


 

여기서 'Write changes to disk'를 선택해 줍니다.

 


 

여기서 'Minimal'을 선택한 뒤 'Next'버튼을 눌러줍니다.

이제 CentOs의 설치가 시작됩니다.

 


 

이 창이 뜨면 설치 완료입니다.

전 밑에 'Reboot'버튼을 누르면 에러가 생기는 현상이 발생하더군요.

reboot이 아닌 종료시켜주기 위해 위 X버튼을 눌러주면 

 



다음과 같은 창이 뜨고 '시스템 전원 끄기(P)'를 선택하고 '확인'을 눌러줍니다. 

 

다시 가상머신을 선택하셔서 '설정(S)'에 들어가 저장소에서 "비어있음"으로 돌아와 있는지 확인해 줍니다.

만약 '비어있음으로 돌아와 있지 않다면 다시 씨디 버튼을 누르셔서 꺼내기를 해주시면 '비어있음'상태가 됩니다.

 

위 설정 뒤 다시 '시작(I)'버튼을 누르시면


 

부팅 뒤 다음과 같은 화면이 뜹니다.

localhost login: root 를 입력해 주시고

그다음 아까 설정해 주었던 root 비밀번호를 입력한 뒤

엔터를 눌러주면

 


 

다음과 같이 성공적으로 로그인이 되면 성공입니다.

+ Recent posts