오늘부터 2일동안 자바스크립트 전문가 교육을 듣게 되었습니다.




자바와 자바스크립트의 차이?

햄과 햄스터의 차이라고 볼 수 있다! 비슷할 것 같지만 전혀 다르다.

자바는 객체 지향 언어지만..

엄밀히 프로그래머 입장에서 자바스크립트 언어는 객체 지향 언어가 아니라 객체 기반 언어다. 근데 객체 기반 언어는 없는 말이다. 객체 기반 언어는 그냥 만든 말이다. 정확히 말하면 프로토타입(모형, 시제품) 언어라고 볼 수 있다.


객체 지향 언어 : 모든 것을 객체로 관리한다. 재사용성과 유지보수성을 생각해서 만들어야 된다. Java, C++ 등

  • 객체(object) : 클래스의 인스턴스
    • 명사적 특징 : 그 객체가 가지고 있는 데이터(data) ex) 펜의 경우 - 색깔
    • 동사적 특징 : 그 객체로 할 수 있는 행위(behavior) ex) 펜의 경우 - 쓰다
    • 상태는 행위에 영향을 준다.
    •  

      Java 

      분석/설계 

       명사적 특징(data)

      변수 

      Field 

      attribute 

       동사적 특징(behavior)

      함수 

      Method 

      operation
      (behavior)

  • 클래스(class) : 객체를 만들기 위한 틀
  • 객체(object) 와 인스턴스(instance)의 차이 : 객체는 unique하고, 인스턴스는 infinite하다. 
        예를 들어 책상에 여러 개의 펜이 있을 때 책상 위의 펜들을 인스턴스라고 말하고, 그 중 필기를 위해 한 개를 들었을 때 그것을 객체라고 말한다. (
    객체는 총칭해서 부르는 말이다.)



* 오라클이 다음에 JDK 업데이트 할 때에는 자바가 자바스크립트를 지원하도록 하겠다고 했다고 한다.


자바스크립트 왜 배울까?

가장 많이 사용되는 곳은 Web. (웹의 내용(html), 표현(css), 동작(javascript))

자바스크립트에서는 Ajax(비동기식 요청)와 DOM제어로 많이 사용한다.


자바스크립트의 특징

형(type)을 지정하는 키워드가 없다. 그래서 a=10, a=3.5, a=func() 모두 사용 가능.

즉, 메모리를 효율적으로 관리할 수는 없다. (개발자의 몫)





ECMAScript

javascript는 ECMAScript 표준을 따르고 있다.

그럼 개발자는 EMCAScript 표준을 따르면 어떤 해석기에서도 해석 가능하다는 뜻이다.

ECMAScript 객체는 속성들의 모음

- 객체들은 0개 이상 속성을 가질 수 있다.

- 속성들은 다른 객체, 원시 값(primitive values), 함수(functions)를 포함할 수 있다.

▷ 변수와 method 구분 없이 모두 속성이라고 얘기한다.

▷ 자바스크립트에서 method라고 부를 때가 있고 함수라고 부를 때가 있다.

그럼 언제 함수라고 부르지?

▶ 자바스크립트에서는 클래스가 없기 때문에 함수를 가지고 객체를 만들 경우.

그럼 언제 method라고 부르지?

▶ 동작을 실행하는 경우.


내장 오브젝트

이 객체들은 모두 함수로 구현되어 있는 생성자라고 생각하면 된다. ECMAScript에서는 JSON도 지원한다.

JSON은 데이터 표현 형식들 중의 하나이다. (http://json.org)

– global object,

– Object object,

– Function object,

– Array object,

– String object,

– Boolean object,

– Number object,

– Math object,

– Date object,

– RegExp object,

– JSON object,

– Error objects

• Error, EvalError, RangeError, ReferenceError, SyntaxError, TypeError and URIError.


Objects

  • EMCAScript는 클래스를 사용하지 않는다. - Javascript 역시 클래스 x
  • 대신에 객체를 만들기 위해서 함수를 이용한다. (생성자함수)
    첫글자가 대문자이면 '아~생성자함수구나!' 라고 생각하면된다. - 메소드와 구분하기 위해서
    • literal notation
    • Constructors

ECMAScript 연산자 : 단항, 다항, 사칙, 비트이동, 관계, 동등비교, 비트, 비트논리, 할당, 콤마 연산자 등

자바스크립트의 독특한 연산자!! - 타입까지 비교해주는 연산자 ( ===, !== )가 있다.

short circuit - &&, || : 이것들의 결과는 T/F가 아니다. 왼쪽 항 또는 오른쪽 항의 결과가 대입된다.
    true && true = true(모두 참일 경우 마지막 항이 결과값), false && ? = false(앞이 F면 비교할 필요도없이 결과가 F)




자바스크립트 디버깅 (크롬 기준 설명)


크롬 - [F12]를 누르면 개발자도구가 나옵니다.

거기서 [Console] 탭을 눌러봅니다.

이곳에서 간단한 명령(자바스크립트) 실행가능합니다.

* 깨알 Tip!

간단한 명령 실행을 할 때 주소창에

about:blank

에 들어가서 실행하는 것을 추천합니다!

깨~끗해요


간단한 명령(자바스크립트)를 실행해보겠습니다.


> console.log("Hello")

Hello

>alert("Hello")

>a=10;
  b=20;
  c=a+b;

  console.log(c);

30

* 참고로 3번째 명령문의 경우 enter가 아닌 shift + enter로 바로 다음줄에 입력가능합니다.



* Tip!
 위의 사진을 보시다시피, 어느정도 입력하다보면 희미하게 회색으로 자동완성이 되면서 밑에 입력가능한 명령어들이 나옵니다. 이때 희미한 회색이 본인이 사용하려는 명령어인경우 [Tab]을 누르시면 자동완성이 됩니다.



* Java는 인터프리터 언어이다. 그것을 확인하는 명령.


> console.log("log");

   console.error("error");
   console.info("info");

   console.debug("debug");
   console.warn("warning");


console.log("헉! %s가 %d층짜리 건물을 뛰어넘습니다.", animal, count);

console.log('%c배경은 green, 글자색은 red로 표시됩니다.', 'color:red; background-color:green');

자바스크립트는 형식 문자열(%s, %d(10진문자), %c(style을 나타낼수있는데, 안될 수도 있으므로 잘 사용 x))을 가질 수 있다.




웹 아키텍처와 웹 어플리케이션 아키텍처

1. HTTP Client-Server Architecture

  • 브라우저가 서버의 페이지를 요청하면 서버는 해당 파일을 찾은 다음 HTTP응답을 통해 클라이언트에 전송
  • 브라우저는 응답된 페이지를 해석하여 화면에 보여준다.
  • request 정보는 사용자가 원하는 파일 또는 리소스의 위치와 브라우저에 관한 정보를 포함
  • reponse 정보는 요청한 자원에 관한 정보를 가지고 있으며, 일반적으로 텍스트 형태이며, 그래픽 등을 바이너리 정보를 포함할 수도 있다.

요청은 2가지가 있다.

  • 내가 클릭하거나 주소를 입력하면 동기 방식
  • 트위터나 페이스북은 화면 전체가 refresh가 안되는데 이것이 비동기 방식(자바스크립트의 역할)


2. HTTP Message

  • Request 메세지 본문에 들어가는 것은 서버에 보내야 할 파라미터들, 업로드할 때는 업로드할 파일들
  • Response 메세지 본문에 있는 것이 html 본문에 나온다.


3. HTTP Request

  • GET : 받는 용도
  • POST : 주는 용도


4. HTTP Response

  • HTTP 응답에는 응답상태와 헤더, 그리고 메시지 바디를 포함한다.
  • 응답 헤더에 간혹 쿠키 정보가 들어있을 수도 있다.


5. 웹사이트 구조와 접근 URL

  • protocol://host:port/path/file


6. 웹 어플리케이션 아키텍처

JSP는 결과를 보여주는 페이지인데, 즉 웹 개발자보다 web publisher 직군이 다루는 것이 낫다.

 - 웹 문서 시대(1990년대) : html + css + jsp가 모두 한 파일에...

 - 웹 표준 시대(2000년대 초반) : 서버단에 돌아가는 페이지에 MVC 패턴을 적용.

 - Ajax 시대(2000년대 후반) : 비동기 호출 사용

 - HTML5 시대(2010년대 초반) : HTML5 + CSS3 + HTML5 API(Javascript)

Posted by 밍쫑
,

타이젠(Tizen)?

타이젠(Tizen)은 휴대 전화를 비롯한 휴대용 장치를 주로 하며, TV, 냉장고와 같은 모든 전자기기에 포함을 목적으로 하는 오픈 소스 모바일 운영 체제이다. 타이젠은 리눅스 파운데이션의 리눅스 커널을 기반으로 하며, HTML5 및 C++ 기반으로 만들어진다. 또한 소프트웨어 개발 키트(SDK)를 통해 응용 프로그램을 개발하기 위해 필요한 각종 도구들과 API를 제공한다.

- Wiki, 위키백과 -




1. 타이젠의 정의

 타이젠 SDK는 네이티브 API와 웹앱 API를 모두 제공한다. 따라서 블루투스, NFC(Near Field Communication) 센서처럼 네이티브(Native) 기반 앱에서만 가능한 기능들을 웹앱에서도 지원한다. 또한 W3C 및 HTML5와 같은 다양한 표준을 준수해 플랫폼 독립적인 웹앱을 개발할 수 있고, C++ 기반 네이티브앱으로 개발하면 하드웨어에서 제공하는 최대한의 성능을 이끌어 낼 수 있다.


2. 타이젠 아키텍쳐


<그림 1> 타이젠 아키텍처 (출처 : 타이젠 공식 웹사이트)


타이젠 아키텍쳐는 다음과 같은 subsystem들을 포함하고 있다.

  • Web framework
타이젠에는 웹애플리케이션을 위한 웹 프레임워크가 있으며 최신 웹 기술을 지원한다. 특히 HTML5 API, 비디오, 오디오, 폼, 2D 캔버스, WebGL, CSS3, 웹소켓, 웹 워커 등과 같이 W3C 및 다양한 표준화 단체에서 정의한 표준이 포함돼 있다. 그리고 표준에서 제공하지 못하는 부족한 부분을 채우고자 블루투스, NFC, 알람, 메시징 등의 다양한 디바이스 API를 제공한다. 이와 함께 웹애플리케이션 실행, 라이프 사키르 관리, 접근 제어 등의 역할을 하는 웹 런타임(Web Runtime)도 제공한다.
  • Native framework
네이티브 프레임워크는 1만여개가 넘는 API를 제공하며 Base, 입출력, 앱, 보안, 그래픽, UI, 네트워크, 메시징, 소셜, 위치기반, 웹 등 네이티브 애플리케이션이 필요로 하는 다양한 기능을 지원한다.
  • Core
코어 프레임워크는 웹 프레임 워크 및 네이티브 프레임워크가 공통으로 필요로 하는 기본적인 기능을 제공한다.
  • Kernel
타이젠 아키텍처의 가장 하위 단인 리눅스 커널과 디바이스 드라이버로 구성돼 있다.

3. 타이젠의 특징
  • 개방형
타이젠의 가장 중요한 특징 중 하나는 오픈소스라는 것이다. 타이젠은 다양한 오픈소스 및 직접 개발된 코드로 이뤄져 있을뿐 아니라 타이젠 자체에 대한 소스 코드가 모두 공개돼 있다.
  • 다양한 종류의 애플리케이션 지원
타이젠은 HTML5, 자바스크립트, CSS3에 기반을 둔 웹애플리케이션뿐만 아니라 C++ 기반 네이티브 애플리케이션 그리고 이 둘을 융합시킨 하이브리드 애플리케이션까지 모두 지원한다.
  • 높은 HTML5 호환성
타이젠은 HTML5와 CSS5 등 W3C 표준 웹 기술을 적극 지원하고 있다.
  • 디바이스 API 지원
타이젠은 다양한 디바이스 API를 지원하여 애플리케이션 개발 과정에서 발생하는 불편함을 최소화하고 있다. 대표적인 디바이스 API로는 블루투스, PIM(Personal Infromation Management), NFC, 알람, 메시징, 전원 제어 등이 있다.
  • WebGL
  • 안드로이드 앱 호환
인프라웨어테크놀로지는 안드로이드 앱을 타이젠 플랫폼 앱으로 변환하는 PAG(Polaris App Generator) 프로그램을 개발했다. 안드로이드 SDK로 개발한 APK 파일을 타이젠 마켓에 등록하기만 하면 자동으로 타이젠 앱으로 변환되고, 사용자는 타이젠으로 별도의 변경과정을 거칠 필요 없이 마켓에서 다운로드해 사용할 수 있다.
  • 아나키 3D 엔진 : 모바일 3D 게임 엔진
  • 코코스2d-x 엔진
  • 크로스 카테고리


<그림 2> 타이젠의 크로스 카테고리 전략 (출처 : 2012 리눅스 코리아 포럼 타이젠 소개 자료)

  • 크로스 아키텍처
타이젠은 x86과 ARM 아키텍처를 모두 지원하는데, 타이젠 에뮬레이터는 x86을, 테스트용 디바이스는 ARM을 각각 지원한다.
  • 라이선스
다양한 오픈소스를 사용하는 만큼 타이젠은 복잡한 라이선스 정책의 영향을 받는다. 각 모둘에 따라서 GPLv2, LGPL, Apache, BSD, Flora 라이선스 등을 따르며, SDK의 경우에는 타이젠 SDK 라이선스라는 별도의 라이선스 정책을 준수해야 한다.
  • 보안
타이젠은 리눅스 커널 단에서 지원하는 Smack(Simplified Mandatory Access Control Kernel)을 적용해 인가되지 않은 데이터나 프로세스 접근을 막아 보안을 강화했다.


Posted by 밍쫑
,

각자마다 설치 경로가 다르고, 사용자명이 다를 것입니다.

그것을 참고하면서 이 포스팅을 보시기 바랍니다.

저와 똑같이 했다고 설치가 한 번에 잘되는 것이 아닙니다!


저는 완전분산모드 (Fully-distributed mode) 환경을 목표로 설치합니다.




1. Introduction

하둡(Hadoop) 공식 홈페이지에 업로드 되어 있는 컴파일 된 하둡을 사용할 때 다음과 같은 문제가 발생할 것입니다.

(하둡만 운영한다면 문제가 될 에러는 아니지만 Java의 native 라이브러리를 사용하려고 하면 해결해야 할 문제입니다.)

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable


이 오류는 32비트 운영체제에서 컴파일 된 것이기 때문에 64비트에서 사용하게 되어 WARNING 에러가 발생한 것입니다. 그래서 이 포스팅은 하둡 2.2.0을 64비트로 컴파일하여 Fully-distributed mode 설정까지 할 것입니다.




2. Environment

  • OS : Ubuntu 12.04 LTS 64bit
  • Hadoop : Hadoop 2.2.0
  • User : hadoop(master) // + slave01, slave02
  • Building Path : /home/hadoop/hadoop


3. Compile
3.1. Support Package
$ sudo apt-get install build-essential maven openjdk-7-jdk cmake libssl-dev.ssh
    • build-essential : 프로그램 개발하는데 필요한 라이브러리를 제공하는 패키지

    • maven : 메이븐은 자바용 프로젝트 관리 도구로써 Hadoop은 메이븐으로 설치

    • openjdk-7-jdk : 메이븐을 운용하기 위해서 자바 설치

    • cmake, libssl-dev : 하둡 설치 시 Common Library와 컴파일로 사용

    • ssh : 하둡에서 ssh 설정에 필요

(↓ 설치 중)

012

$ mkdir tools

$ cd tools

~/tools$ wget http://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz

~/tools$ tar -zxvf protobuf-2.5.0.tar.gz

~/tools$ cd protobuf-2.5.0

~/tools/protobuf-2.5.0$ ./configure

~/tools/protobuf-2.5.0$ make

~/tools/protobuf-2.5.0$ sudo make install

~/tools/protobuf-2.5.0$ sudo ldconfig

~/tools/protobuf-2.5.0$ cd ..

    • Proto buffer : 통신을 통해 데이터를 주고 받을 때 각종 데이터를 byte형태로 바꾸어주는 도구.
           Ubuntu에는 기본으로 2.4.1 버전이 설치되어 있으나, Hadoop 컴파일 때는 2.5.0 이후 버전을 사용해야 하기 때문에 설치해준다.


01


01


01


01


01


01

3.2. Hadoop Compile

소스를 컴파일 할 것이기 때문에 소스를 압축한 hadoop-2.2.0-src.tar.gz을 다운로드 받는다.

~/tools$ wget http://mirror.apache-kr.org/hadoop/common/hadoop-2.2.0/hadoop-2.2.0-src.tar.gz

~/tools$ tar xfz hadoop-2.2.0-src.tar.gz

~/tools$ cd hadoop-2.2.0-src


0123


3.2.1. Apply HADOOP-10110

패치 없이 하둡을 컴파일 할 시 Apache Hadoop Auth 부분에서 에러가 발생하여 컴파일이 중단된다.

아파치 하둡에서 해당 에러를 패치(Patch) 할 수 있게 대응했다.

해당 패치는 Hadoop Auth 설정 파일인 hadoop-common-project/hadoop-auth/pom.xml 파일을 패치한다.

(https://issues.apache.org/jira/browse/HADOOP-10110)


~/tools/hadoop-2.2.0-src$ wget https://issues.apache.org/jira/secure/attachment/12614482/HADOOP-10110.patch

~/tools/hadoop-2.2.0-src$ patch -p0 < HADOOP-10110.patch

patching file hadoop-common-project/hadoop-auth/pom.xml

Hunk #1 succeeded at 55 (offset 1 line)

0123


3.2.2. Command of Hadoop Compile

~/tools/hadoop-2.2.0-src$ mvn package -Pdist,native -DskipTests -Dtar


01

컴파일이 완료되었다면 ~/tools/hadoop-2.2.0-src/hadoop-dist/target 폴더 안에 다음과 같이 압축이 풀린 하둡 폴더와 Tarball로 압축된 두 가지 형태의 하둡을 볼 수 있다. 어느 것이든 가져다 설정하여 쓸 수 있다.



3.3 Error Report

3.3.1. Hadoop Common Error

3.2.1. 에서 Apache Hadoop Auth 말고 Apache Hadoop Common에서 FAILURE가 뜬다면 보조 모듈설치에서 설치하는 cmake와 libssl-dev를 설치하지 않았거나 설치시 문제가 생겼을 경우이다.




4. Setting of Hadoop

4.1. Kind of Hadoop Mode


실행모드 

용도 

필요 장비 

 Standalone 모드
(=로컬 모드)

  •  기본 실행 모드
  • 하둡에서 제공하는 데몬을 구동하지 않기 때문에 분산환경을 고려한 테스트는 불가능
  • 단순하게 맵리듀스 프로그램을 개발하고, 해당 맵리듀스를 디버깅하는 용도에만 적합

 

 Pseudo-distributed
(가상 분산) 모드

  • 하나의 장비에 모든 하둡 환경 설정을 하고, 하둡 서비스도 이 장비에서만 제공하는 방식
  • HDFS와 맵리듀스와 관련된 데몬을 하나의 장비에서만 실행하게 된다.(초보자 추천) 

1대

(윈도우 환경) 

Fully-distributed
(완전 분산) 모드 

  • 하둡으로 라이브 서비스를 할 경우 사용 

최소 2대 이상

(리눅스 환경) 


4.2. Setting of Path

여기서부터 매우 중요합니다. 지금 이 포스팅을 참고하시는 분들도 본인의 설치 경로를 고려하면서 알맞게 설정하세요.


환경 변수를 설정하는 데, 하둡에서 사용하는 환경 변수도 함께 설정하기 때문에 환경 변수명을 바꾸어서는 안된다.

추가로 하둡 설정 파일에서 환경 변수의 JAVA_HOME 경로를 읽어들이는데, 하둡이 사용하는 사용자 그룹과 환경 변수를 사용하는 그룹은 다르다. 이 문서에서는 ~/.bashrc 에 환경 변수를 설정하고 하둡의 설정에서 복수로 설정한다.

하지만 복잡한 설정을 하고 싶지 않으면 모든 사용자가 사용하는 환경변수 설정인 /etc/environment에 설정을 하면된다.

(다만 environment에 설정하면 시스템을 재부팅 해줘야 한다.)


$ vim ~/.bashrc


#Java Setting

export JAVA_HOME=$HOME/jdk

export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH


# Hadoop Path

export HADOOP_PREFIX=$HOME/hadoop

export PATH=$PATH:$HADOOP_PREFIX/bin

export PATH=$PATH:$HADOOP_PREFIX/sbin

export HADOOP_HOME=$HOME/hadoop

export HADOOP_MAPRED_HOME=${HADOOP_PREFIX}

export HADOOP_COMMON_HOME=${HADOOP_PREFIX}

export HADOOP_HDFS_HOME=${HADOOP_PREFIX}

export YARN_HOME=${HADOOP_PREFIX}

export HADOOP_YARN_HOME=${HADOOP_PREFIX}

export HADOOP_CONF_DIR=${HADOOP_PREFIX}/etc/hadoop


# Native Path

export HADOOP_COMMON_LIB_NATIVE_DIR=${YARN_HOME}/lib/native

export HADOOP_OPTS="-Djava.library.path=$YARN_HOME/lib/native"



~$ source ~/.bashrc



4.3. Setting of SSH

하둡이 노드들과 통신을 할 때 기본으로 SSH를 사용한다. Hadoop 시작 및 사용 시 노드간의 비밀번호를 요구하지 않도록 설정하기 위해 각각의 SSH Key를 생성하고 이를 공유한다.


먼저 전체 노드에서 다음과 같이 RSA Key를 생성하고 이를 authorized_keys 파일에 붙여넣도록 한다.


~$ ssh-keygen -t rsa -P ""

~$ cd ~/.ssh

~/.ssh$ cat_id_rsa.pub >> authorized_keys


모든 노드에서 RSA Key 생성이 완료되면 해당 키 값들을 모두 마스터 노드에 모아 저장한다. 마스터 노드에서 전체 노드에 대해 다음의 명령을 수행하도록 한다.


~$ ssh hadoop@slave01 'cat ~/.ssh/id_rsa.pub' >> ~/.ssh/authorized_keys

~$ ssh hadoop@slave02 'cat ~/.ssh/id_rsa.pub' >> ~/.ssh/authorized_keys


마스터 노드로 공개키 복사가 모두 완료되면 각 노드들이 자유롭게 타 노드로 접속할 수 있도록 모든 노드로 공개키를 배포한다.


~$ scp authorized_keys hadoop@slave01:~/.ssh/authorized_keys

~$ scp authorized_keys hadoop@slave02:~/.ssh/authorized_keys


이때 ~/.ssh 폴더의 권한은 700 이며, authorized_keys 파일의 권한은 600으로 설정되어야 한다.


4.4. Setting of Hadoop

Fully-distributed mode 형태로 설정을 진행한다. 설정파일들은 모두 ${HADOOP_PREFIX}/etc/hadoop 디렉토리 안에 존재한다.


파일명 

형식 

설명 

hadoop-env.sh 

bash스크립트 

하둡을 구동하는 스크립트에서 사용되는 환경 변수 

core-site.xml 

하둡 설정 xml 

HDFS와 맵리듀스에 공통적으로 사용되는 IO설정같은 하둡 코어를 위한 환경 설정 구성 

hdfs-site.xml 

하둡 설정 xml

네임노드, 보조네임노드, 데이터노드 등과 같은 HDFS 데몬을 위한 환경 설정 구성 

mapred-site.xml 

하둡 설정 xml 

잡트래커와 태스크트래커같은 맵리듀스 데몬을 위한 환경 설정 구성 

masters 

일반 텍스트 

보조 네임노드를 구동시킬 컴퓨터의 목록(라인당 하나) 

salves 

일반 텍스트 

데이터노드와 태스크트래커를 구동시킬 컴퓨터의 목록(라인당 하나) 

hadoop-metric.properties 

자바 속성 

매트릭스가 하둡에서 어떻게 표시되는지를 제어하는 속성 

log4i.properties 

자바 속성 

시스템 로그 파일을 위한 속성,네임노드의 감시로그, 태스크트래커의 자식 프로세스의 수행 로그 


4.4.1. hadoop-env.sh

하둡이 실행하는 모든 프로세스에 적용되는 시스템 환경 값에 대한 스크립트 파일로, 전체 클러스터 노드에 복사해 사용하는 설정 파일이다.

$ cd /hadoop/etc/hadoop

~/hadoop/etc/hadoop$ vim hadoop-env.sh


export JAVA_HOME=${JAVA_HOME}

export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-"/etc/hadoop"}


4.4.2. yarn-env.sh

yarn(Yet Another Resouce Negotiator)는 분산된 환경을 운영 할 수 있도록 제공하는 환경 설정 파일이다.)

~/hadoop/etc/hadoop$ vim yarn-env.sh



export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_PREFIX}/lib/native

export HADOOP_OPTS="-Djava.library.path=$HADOOP_PREFIX/lib/native"



4.4.3. core-site.xml

HDFS와 MapReduce에서 공통으로 사용하는 로그 파일, 네트워크 튜닝, I/O 튜닝, 파일 시스템 튜닝, 압축 등과 같은 하둡 코어를 위한 환경 설정 파일이다. MapReduce에서도 공통으로 사용한다. fs.default.name 에 hdmaster는 namenode 호스트 이름을 적는다. hadoop.tmp.dir는 자신의 설정에 따라 경로를 적도록 한다.

~/hadoop/etc/hadoop$ vim core-site.xml


<configuration>

<property>

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

    <value>hdfs://hdmaster:9000</value>

    <final>true</final>

</property>

<property>

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

<value>${HADOOP_PREFIX}/hdfs/tmp</value>

</property>

</configuration>


4.4.4. hdfs-site.xml

이 파일은 네임노드, 보조 네임노드, 데이터 노드 등과 같은 HDFS 데몬을 위한 환경을 구성한다. dfs.namenode.name.dir은 파일의 디렉토리 정보와 파일 정보 등을 저장하는 폴더이다. 해당 저장위치는 hdfs가 아닌 로컬에 저장을 한다. dfs.datanode.name.dir은 하둡 파일 시스템에 저장되는 모든 파일이 저장되는 위치이다. dfs.replications의 경우 얼마나 많은 노드에 동일한 자료를 복제하여 저장할 것인지 설정하는 것으로  전체 데이터 노드의 개수보다 작아야 한다.

~/hadoop/etc/hadoop$ vim hdfs-site.xml


<configuration>

<property>

<name>dfs.replications</name>

<value>2</value>

</property>

<property>

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

    <value>file:${HADOOP_PREFIX}/hdfs/namenode</value>

    <final>true</final>

</property>

<property>

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

    <value>file:${HADOOP_PREFIX}/hdfs/datanode</value>

    <final>true</final>

</property>

<property>

    <name>dfs.permissions</name>

    <value>false</value>

</property>

<property>

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

<value>hdmaster:50070</value>

</property>

<property>

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

<value>hdmaster:50090</value>

</property>

</configuration>


※ 주의!  

${HADOOP_PREFIX} 뒤에 붙은 경로들은 현재 본인 디렉토리에 없는 경로들이겠지만

4.4.7.에서 디렉토리를 생성할 예정이므로 걱정하지 않으셔도 됩니다.



4.4.5. mapred-site.xml

이 파일은 잡트래커와 태스크트래커와 같이 맵리듀스 데몬을 위한 환경설정 파일이다. 해당 파일은 mapred-site.xml.teplate로 제공되며 mapred-site.xml로 변경하여 사용한다.

~/hadoop/etc/hadoop$ vim mapred-site.xml


<property>

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

    <value>yarn</value>

</property>

<property>

    <name>mapred.system.dir</name>

    <value>file:${HADOOP_PREFIX}/hadoop/mapred/system</value>

    <final>true</final>

</property>

<property>

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

    <value>file:${HADOOP_PREFIX}/hadoop/mapred/local</value>

    <final>true</final>

</property>


※ 주의!  

${HADOOP_PREFIX} 뒤에 붙은 경로들은 현재 본인 디렉토리에 없는 경로들이겠지만

4.4.7.에서 디렉토리를 생성할 예정이므로 걱정하지 않으셔도 됩니다.



4.4.6. yarn-site.xml

yarn과 관련된 데몬을 설정하는 파일이다.

~/hadoop/etc/hadoop$ vim yarn-site.xml


<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>



4.4.7. Create Directories

hdfs-site.xml과 mapred-site.xml에서 설정한 디렉토리 경로에 맞게 디렉토리를 생성한다. 디렉토리 이름들은 사용자가 원하는대로 변경해도 된다.

~$ mkdir –p ${HADOOP_PREFIX}/hadoop/hdfs/namenode

~$ mkdir –p ${HADOOP_PREFIX}/hadoop/hdfs/datanode

~$ mkdir –p ${HADOOP_PREFIX}/hadoop/mapred/system

~$ mkdir –p ${HADOOP_PREFIX}/hadoop/mapred/local


5. Start Hadoop

5.1. NameNode Format

최초 실행시 NameNode를 포맷해준다.

~$ hdfs namenode -format


5.2. 데몬 실행

데몬 실행 스크립트는 ${HADOOP_PREFIX}/sbin 에 위치해 있다. start-all.sh로 모든 데몬을 실행한다.


 

 실행

종료 

전체 데몬 

start-all.sh 

stop-all.sh 

HDFS만 

start-dfs.sh 

stop-dfs.sh 

YARN만 

start-yarn.sh 

stop-yarn.sh 


※ 모두 stop한 이후에 재부팅을 해야할 때!!

sudo init 6


5.3. 데몬 실행 확인

5.3.1. JPS

jps 명령으로 자바 가상 머신(JVM)의 프로세스 상태를 확인한다. 다음과 같이 하둡과 관련된 5개의 데몬과 jps 명령 1개의 데몬 총 6개의 데몬이 실행 되어있으면 된다.

Posted by 밍쫑
,

          MapReduce 이란?           


맵리듀스(MapReduce) 구글에서 대용량 데이터 처리를 분산 병렬 컴퓨팅에서 처리하기 위한 목적으로 제작하여 2004년 발표한 소프트웨어 프레임워크다. 이 프레임워크는 페타바이트 이상의 대용량 데이터를 신뢰도가 낮은 컴퓨터로 구성된 클러스터 환경에서 병렬 처리를 지원하기 위해서 개발되었다. 이 프레임워크는 함수형 프로그래밍에서 일반적으로 사용되는 Map과 Reduce라는 함수 기반으로 주로 구성된다.

현재 MapReduce는 Java와 C++, 그리고 기타 언어에서 적용이 가능하도록 작성되었다. 대표적으로 아파치 하둡에서 오픈 소스 소프트웨어로 적용된다.


- WIKI, 위키백과 -

 

맵리듀스는 배치 기반의 분산 컴퓨팅 프레임워크다.



  • 맵리듀스 모델은 연산 병렬화, 작업 분산, 비안정적 하드웨어 및 소프트웨어를 다루는 복잡성 같은 요소를 추상화함으로써 병렬 처리를 단순화해준다.
  • 맵리듀스는 클라이언트에서 전송한 잡을 병렬화된 작은 맵과 리듀스 작업자로 분배한다.




  • 프로그래머가 할 일맵과 리듀스 함수를 정의하는 것이다.
    • 맵 함수는 키/값 튜플(tuple)을 출력
    • 출력된 튜플은 리듀스 함수에 의해 처리돼 최종 결과를 도출
      • 맵 : (key1, value1) → list(key2, value2)
                    ①                        ②
        ① : 맵 함수는 입력 데이터 소스의 논리적 레코드를 나타내는 키/값 쌍을 입력값으로 받는다.
            파일의 경우 이 값은 한 줄이 될 수 있고, 입력 소스가 DB의 테이블인 경우 한 행이 될 수 있다.
        ② : 맵 함수는 한 개의 입력값 쌍에 대해 0개 이상의 출력 키/값 쌍을 내보낸다.
            예를 들어 맵 함수가 필터링 맵 함수이면 특정 조건이 리듀스 함수에서는 충족될 때만 결과를 출력할 수 있다. 또는 한개의 입력 키/값이 여러 개의 키/값 출력 쌍을 반환하는 역다중화 작업을 수행할 수도 있다.
      • 리듀스 : (key2, list(value2)) → list(key3, value3)
            ①                        ②                    ③
        ① : 리듀스 함수는 고유 맵 출력. 키별로 한 번씩 
        ② : 'key2'에 대해 모든 매퍼에서 내보낸 맵. 출력값이 한 개의 목록으로 제공된다.
        ③ : 맵 함수와 마찬가지로 리듀스 함수도 0개 이상의 키/값 쌍을 출력할 수 있다. 리듀서 출력값은 HDFS 내 플랫 파일에 쓰거나, NoSQL DB에서 행을 삽입/업데이트하거나, 다른 요구 조건에 따라 임의의 데이터 싱크에 쓸 수 있다.




Shuffling : 셔플 및 정렬 단계에서는 두 개의 주요 작업을 처리한다. 맵 출력 키/값 쌍을 수신할 리듀서를 판단하는 작업(파티셔닝이라고 부름)과 해당 리듀서에 대해 모든 입력 키가 정렬되게끔 하는 기능.


각 화살표 별로 설명을 하자면!!

  1. 입력 데이터 분리 : 맵리듀스는 입력 파일을 키와 값 형식의 데이터로 분류한다. 이 예제에서 키는 라인 번호이고 값은 문장이다.
  2. 맵 메서드1 : 키와 값 형식의 데이터는 맵 메서드의 입력 데이터로 전달된다.
  3. 맵 메서드2 : 맵 메서드는 라인 번호별로 문장을 체크해 키에 해당하는 글자별로 글자 수를 출력한다.
  4. 정렬과 병합 : 맵리듀스는 맵 메서드의 출력 데이터를 정렬하고, 병합한다.
  5. 리듀스 메서드 : 4번의 결과가 리듀스 메서드의 입력 데이터로 전달된다.
  6. 저장 : 리듀스 메서드는 새로운 키인 글자별로 각 글자 수를 합산해서 출력하고, 리듀스 메서드의 출력 데이터를 하둡 파일 시스템에 저장한다.



[ 맵리듀스 시스템 ]



  1. 클라이언트
    사용자가 실행한 맵리듀스 프로그램과 하둡에서 제공하는 맵리듀스 API를 의미한다.
    사용자는 맵리듀스 API로 맵리듀스 프로그램을 개발하고, 개발한 프로그램을 하둡에서 실행할 수 있다.
  2. 잡트래커(JobTracker)
    클라이언트가 하둡으로 실행을 요청하는 맵리듀스 프로그램은 (job)이라는 하나의 작업 단위로 관리된다.
    잡트래커는 하둡 클러스터에 등록된 전체 잡의 스케줄링을 관리하고 모니터링한다.
    전체 하둡 클러스터에서 하나의 잡트래커가 실행되며, 보통 하둡의 네임노드 서버에서 실행된다.(반드시 네임노드 서버에서 실행할 필요는 없음)
    사용자가 새로운 잡을 요청하면 잡트래커는 잡을 처리하기 위해 몇 개의 맵과 리듀스를 실행할지 계산한다.
    이렇게 계산된 맵과 리듀스를 어떤 태스크트래커에서 실행할지 결정하고, 해당 태스크트래커에 잡을 할당한다. 이 때 태스크트래커는 잡트래커의 작업 수행 요청을 받아 맵리듀스 프로그램을 실행한다. 잡트래커와 태스크트래커는 하트비트라는 메서드로 네트워크 통신을 하면서 태스크트래커의 상태와 작업 실행 ㅈ어보를 주고받게 된다. 만약 태스크트래커에 장애가 ㅂ라생하면 잡트래커는 다른 대기 중인 태스크트래커를 찾아 태스크를 재실행하게 된다.
  3. 태스크트래커(TaskTracker)
    사용자가 설정한 맵리듀스 프로그램을 실행하며, 하둡의 데이터노드에서 실행되는 데몬이다.
    태스크트래커는 잡트래커의 작업을 요청받고, 잡트래커가 요청한 맵과 리듀스 개수만큼 맵 태스크(map task)와 리듀스 태스크(reduce task)를 생성한다. 






Posted by 밍쫑
,

              Hadoop 이란?              


하둡에 대해서 알기 전에 역사를 아는 것도 매우 재미있습니다. 시간이 되시는 분들은 찾아보시길..


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


- WIKI, 위키백과 -/

 


  • 하둡은 분산 저장소와 연산 기능을 모두 제공하는 플랫폼
  • 하둡은 오픈소스 프로젝트 (∴라이선스 비용에 대한 부담 x)
  • 아파치 하둡 프로젝트의 특징
    • 안정적이고, 신뢰할 수 있다(reliable)
    • 확장이 용이(scalable)
    • 분산 컴퓨팅(distributed computing) 환경 지원




[ 하둡 분산 파일 시스템 (HDFS; Hadoop Distributed File System) ]

  • 하둡은 저장을 위한 하둡 분산 파일 시스템(HDFS; Hadoop Distributed File System)으로 구성된 마스터-슬레이브 아키텍처와 연산을 위한 맵리듀스로 이뤄진다.
    • 마스터 : 슬레이브 노드에서 실행 예약할 연산 작업을 관리하는 책임을 담당
    • HDFS 마스터 : 슬레이브 노드 사이의 저장 공간 파티셔닝과 데이터 저장 위치를 관리하는 책임을 담당
  • 하둡의 저장 공간과 연산 능력은 하둡 클러스터에 호스트를 추가함에 따라 늘어나고, 수천 개의 호스트를 클러스터에 추가해 페타바이트 크기의 데이터까지 처리 할 수 있다.


HDFS는 하둡의 저장소 컴포넌트이다.
  1. 큰 블록 크기 밍 데이터 로컬리티(data locality)를 통한 최적화를 활용해 네트워크 입/출력을 줄인다.
  2. 확장성과 가용성 또한 HDFS의 핵심 특징이다.
  3. HDFS는 설정된 횟수만큼 파일을 복제하고, 소프트웨어 및 하드웨어의 장애를 견뎌낼 수 있으며, 장애가 생긴 노드에서는 데이터 블록을 자동으로 재복제한다.
  4. 마스터노드데이터 노드를 갖지 않고, JobTracker를 갖는다.
  5. 슬레이브 노드 중 하나 Secondary NameNode를 갖고, 슬레이브 노드들은 TaskTracker를 갖는다.








[ 하둡 에코시스템 ]



Posted by 밍쫑
,





Big Data의 소개 

 


"BigData"

빅 데이터란 기존 데이터베이스 관리도구로 데이터를 수집, 저장, 관리, 분석 할 수 있는 역량을 넘어서는 대량의 정형 또는 비정형 데이터 집합 및 이러한 데이터로부터 가치를 추출하고 결과를 분석하는 기술을 의미한다.


- WIKI (http://ko.wikipedia.org/wiki/빅_데이터)



빅 데이터의 3대 요소(3V)

  • 크기(Volume)
     급격하게 데이터의 양이 증가하고 있는데, 이때문에 확장 가능한 방식으로 데이터를 저장하고 분석하는 분산 컴퓨팅 기법으로 접근해야 한다.

  • 속도(Velocity)
    - 실시간 처리 : 오늘날 디지털 데이터는 매우 빠른속도로 생성되기 때문에 데이터의 생산, 저장,유통, 수집, 분석이 실시간으로 처리돼야 한다.
    - 장기적인 접근 : 수집된 대량의 데이터를 다양한 분석 기법
    (ex. 데이터 마이닝, 기계학습, 자연어 처리, 패턴 인식)과 표현 기술로 분석

  • 다양성(Variety)
    - 정형(Structured) 데이터 : 정형화된 데이터로, 고정된 필드에 저장되있는 일정한 형식을 갖추고 저장되는 데이터
        온라인 주문할 때 이름, 주소 등을 입력한 후 주문을 하면 DB에 미리 생성돼 있는 테이블(고정된 필드)에 저장된다.
    - 반정형(Semi-Structured) : 고정된 필드로 저장돼 있지는 않지만, XML이나 HTML 같이 메타데이터나 스키마 등을 포함하는 데이터
    - 비정형(Unstructed) : 고정된 필드에 저장돼 잇지 않은 데이터
        ex. 블로그에서 저장하는 사진, 메신저로 주고받은 대화 내용 등

Posted by 밍쫑
,
<빅데이터 스터디 일정>9주 + 프로젝트
매 주 본인 파트 발표자료 준비(파일은 한 곳에 모읍시다.) +
모임시간 : 불같은 금요일, 3~6시
1

03월 12일

시작하세요!
(Hadoop 완벽가이드)
하둡
01. 하둡소개
(1장. 하둡과의 만남)


2 03월 16일

02. 하둡 개발 준비

서버 Com 준비

3

04월 11일

하둡&
맵리듀스
03. 하둡 분산 파일 시스템
(3장. 하둡 분산 파일 시스템)
04. 맵리듀스 시작하기
(2장. 맵리듀스)


4

04월 18일

맵리듀스
05. 맵리듀스 기초 다지기
(5-3장. 유닛테스트 작성하기


5

04월 11일

06. 정렬 구현하기
(8-2장. 정렬)
07. 조인 구현하기
(8-3장. 조인)


6 04월 11일 08. 맵리듀스 튜닝하기 대회 일정 공지 예정일
7 04월 15일
Hadoop 완벽 가이드
(하둡 인 프랙티스)
PIG 11. 피그
(11. 피그를 이용한 파이프라인 프로그래밍)


8 04월 25일 HIVE 12. 하이브
(10. 하이브 공략하기)


9 05월 02일
Hbase 완벽가이드
Hbase
1. 소개
2. 설치


10 05월 09일 3. 클라이언트 API : 기본기능
5. 클라이언트 API : 관리기능


11 05월 13일 4. 클라이언트 API : 고급기능



저는 빅데이터라는 분야도 멤버십에 와서 처음 알게 되었습니다. 눈을 사로잡는 기술이면서도, 되게 대단하다고 생각했었는데요.


한 번 공부해보고싶다고 생각하고 있었는데, 운이 좋게도 기존 회원분 중에 빅데이터를 같이 공부하자고 해주신 분이 계셔서
스터디를 하게됬습니다.


일단은 저희만의 커리큘럼을 위와 짰습니다.

그리고 돌아가면서 발표 자료를 만들고, 세미나 형식으로 진행하기로 했습니다.

앞으로 11번의 모임으로 빅데이터를 전부 자세히 알 수는 없겠지만, 지금보다는 많이 알게 될 것이라 기대합니다.ㅎㅎ


어려운 분야이고, 전부 처음들어보는 것들이지만 열심히 해야죠!

Posted by 밍쫑
,