CentOS 7에 Hadoop 설치

설치&설정|2015. 3. 9. 21:10

CentOS 7에 Hadoop 설치

이전 글에서 CentOS 7을 AWS에 설치 했었습니다.

AWS에 CentOS 7 설치

사실 Hadoop + HBase를 설치하기 위한 사전 작업이어서 오늘은 먼저 Hadoop을 설치해 봅니다.

먼저 JDK를 설치하는 등 기본 환경을 설정합니다.

[centos@ip-172-31-3-215 ~]$ sudo -i

# Oracle JDK 8을 다운로드합니다. 혹 아래 명령으로 다운로드가 안되면 직접 사이트에서 다운로드 해서 가져옵니다
[  root@ip-172-31-3-215 ~]# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u25-b17/jdk-8u25-linux-x64.tar.gz"

# /opt 디렉토리에 압축을 해제합니다
[  root@ip-172-31-3-215 ~]# tar -zxvf jdk-8u25-linux-x64.tar.gz -C /opt

# 방금 설치한 Oracle JDK를 기본 JDK로 설정합니다
[  root@ip-172-31-3-215 ~]#  /usr/sbin/alternatives --install /usr/bin/java java /opt/jdk1.8.0_25/bin/java 100

# java 버전을 확인합니다
[  root@ip-172-31-3-215 ~]# java -version
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

# /etc/profile 파일에 JAVA_HOME 환경 변수를 추가합니다
[  root@ip-172-31-3-215 ~]# vi /etc/profile
export JAVA_HOME=/opt/jdk1.8.0_25

JDK 설치가 완료됐으면 이제 hadoop 계정을 추가하고 SSH 키를 생성합니다.

# root 계정으로 전환한 후 hadoop 계정을 추가합니다
[centos@ip-172-31-3-215 ~]$ sudo -i
[  root@ip-172-31-3-215 ~]# useradd hadoop
[  root@ip-172-31-3-215 ~]# su - hadoop

# 생성한 hadoop 계정으로 전환한 후 ssh-keygen 명령으로 SSH 키를 생성합니다
[hadoop@ip-172-31-3-215 ~]$ ssh-keygen -t rsa
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:
92:14:bd:ff:f6:26:bd:4d:ad:39:99:c6:ce:2e:a4:73 hadoop@ip-172-31-3-215
The key's randomart image is:
+--[ RSA 2048]----+
|      ..         |
|       ..        |
|      .  .       |
|     . ..        |
|      o S.       |
|       .  . .   .|
|           + o oo|
|          o E.O= |
|           + OOo.|
+-----------------+

# 암호 없이 ssh 접속이 가능하도록 공개키를 authorized_keys 파일에 추가합니다
[hadoop@ip-172-31-3-215 ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[hadoop@ip-172-31-3-215 ~]$ chmod 0600 ~/.ssh/authorized_keys
[hadoop@ip-172-31-3-215 ~]$ ssh localhost
Last login: Sun Mar  8 07:01:41 2015

이제 hadoop을 내려받고 설치합니다.

[hadoop@ip-172-31-3-215 ~]$ wget http://apache.mirror.cdnetworks.com/hadoop/common/hadoop-2.5.2/hadoop-2.5.2.tar.gz
[hadoop@ip-172-31-3-215 ~]$ tar xvfz hadoop-2.5.2.tar.gz

.bashrc 파일에 관련 환경 변수를 추가합니다

[hadoop@ip-172-31-3-215 ~]$ cd hadoop-2.5.2
[hadoop@ip-172-31-3-215 hadoop-2.5.2]$ vi ~/.bashrc
export HADOOP_HOME=/home/hadoop/hadoop-2.5.2
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH

source 명령을 이용해서 환경 변수를 현재 환경에 읽어 들입니다.

[hadoop@ip-172-31-3-215 hadoop-2.5.2]$ source ~/.bashrc

$HADOOP_HOME/etc/hadoop/core-site.xml 파일을 열고

[hadoop@ip-172-31-3-215 hadoop-2.5.2]$ vi etc/hadoop/core-site.xml

아래와 같이 내용을 추가합니다.

<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://localhost:9000</value>
  </property>
</configuration>

$HADOOP_HOME/etc/hadoop/hdfs-site.xml 파일을 열고

[hadoop@ip-172-31-3-215 hadoop-2.5.2]$ vi etc/hadoop/hdfs-site.xml

아래와 같이 내용을 추가합니다.

<configuration>

  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>

  <property>
    <name>dfs.name.dir</name>
    <value>file:///home/hadoop/hadoopdata/hdfs/namenode</value>
  </property>

  <property>
    <name>dfs.data.dir</name>
    <value>file:///home/hadoop/hadoopdata/hdfs/datanode</value>
  </property>

</configuration>

$HADOOP_HOME/etc/hadoop/mapred-site.xml 파일을 열고

아래와 같이 내용을 추가합니다.

<configuration>

  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>

</configuration>

namenode를 포맷합니다.

[hadoop@ip-172-31-3-215 hadoop-2.5.2]$ hdfs namenode -format

Hadoop을 시작합니다.

# dfs daemon을 시작합니다
[hadoop@ip-172-31-3-215 hadoop-2.5.2]$ start-dfs.sh
Starting namenodes on [localhost]
localhost: starting namenode, logging to /home/hadoop/hadoop-2.5.2/logs/hadoop-hadoop-namenode-ip-172-31-3-215.ap-northeast-1.compute.internal.out
localhost: starting datanode, logging to /home/hadoop/hadoop-2.5.2/logs/hadoop-hadoop-datanode-ip-172-31-3-215.ap-northeast-1.compute.internal.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: starting secondarynamenode, logging to /home/hadoop/hadoop-2.5.2/logs/hadoop-hadoop-secondarynamenode-ip-172-31-3-215.ap-northeast-1.compute.internal.out

# yarn daemon을 시작합니다
[hadoop@ip-172-31-3-215 hadoop-2.5.2]$ start-yarn.sh
starting yarn daemons
starting resourcemanager, logging to /home/hadoop/hadoop-2.5.2/logs/yarn-hadoop-resourcemanager-ip-172-31-3-215.ap-northeast-1.compute.internal.out
localhost: starting nodemanager, logging to /home/hadoop/hadoop-2.5.2/logs/yarn-hadoop-nodemanager-ip-172-31-3-215.ap-northeast-1.compute.internal.out

jps(Java Virtual Machine Process Status Tool)로 java 프로세스를 확인합니다.

[hadoop@ip-172-31-3-215 hadoop-2.5.2]$ $JAVA_HOME/bin/jps
4981 NodeManager
5400 Jps
4889 ResourceManager
4747 SecondaryNameNode
4494 NameNode


댓글()

GitHub 저장소 Fork 하기

Developer Tools|2015. 3. 5. 20:50

다른 사람의 저장소에 있는 코드를 수정하려면 그 저장소를 Fork한 후에 수정을 하고 pull request를 저장소 소유자에게 보내야합니다.

APM 툴인 Pinpoint 프로젝트를 마음껏 수정해 보려고 Fork를 해 봤습니다.

Fork

브라우저에서 Pinpoint 저장소 페이지로 이동한 후, Fork를 클릭하여 저장소를 나의 Repositories로 복사합니다.

Fork가 완료되면 복사된 저장소로 화면이 이동합니다.

Clone

저장소 페이지 우측에 있는 저장소 주소를 복사합니다.

명령 프롬프트를 실행하고 적당한 디렉토리로 이동한 후 git clone 명령으로 저장소를 clone합니다.

$ git clone git clone git@github.com:GITHUB-ID/pinpoint.git
Cloning into 'pinpoint'...
remote: Counting objects: 91067, done.
remote: Total 91067 (delta 0), reused 0 (delta 0), pack-reused 91067
Receiving objects: 100% (91067/91067), 151.06 MiB | 229.00 KiB/s, done.
Resolving deltas: 100% (47414/47414), done.
Checking connectivity... done.
Checking out files: 100% (4180/4180), done.

clone이 완료되면 생성된 pinpoint 디렉토리로 이동한 후 git remote add 명령을 사용하여 원본 저장소를 upstream이라는 이름으로 추가합니다.

추가한 후에는 git remote -v 명령으로 원격 저장소 목록을 확인할 수 있습니다.

$ git remote add upstream git@github.com:naver/pinpoint.git

$ git remote -v
origin  git@github.com:GITHUB-ID/pinpoint.git (fetch)
origin  git@github.com:GITHUB-ID/pinpoint.git (push)
upstream        git@github.com:naver/pinpoint.git (fetch)
upstream        git@github.com:naver/pinpoint.git (push)

댓글()

Trello 일정을 구글 캘린더와 연동하기

DevOps|2015. 2. 26. 11:16

Trello 보드에 있는 카드에 누군가 Due date를 설정하면 이게 하나의 일정이 됩니다.

그런데 저는 일정 관리를 모두 구글 캘린더를 통해 하고 있기 때문에 이 관리 안되는 Trello 일정이 꽤나 거슬렸습니다. Sunrise라는 Trello를 지원하는 캘린더 앱을 사용하고 있지만 캘린더 앱 두 개를 사용하는건 쉽지 않습니다.

찾아 보니 Trello는 iCal 형식의 캘린더 주소를 제공하고 있었습니다. 그것도 모르고 이래저래 괜한 시간낭비를 한 저 자신을 원망하면서 연동 방법을 남깁니다.

Trello 보드에서 iCalendar Feed URL 얻기

Trello 보드 우상단에 있는 Menu의 하위 메뉴 Power-Ups를 클릭합니다.

Power-Ups에서 Calendar를 클릭하고 Enable을 클릭하여 Calendar를 활성화합니다. 이렇게 하면 위 이미지 좌상단에 보이는 Calendar 메뉴가 생기며, 이 메뉴를 통해 달력 형식으로 보드에 있는 일정을 볼 수 있습니다.

Enable iCalendar Feed? 항목에 있는 Enable을 클릭하면 바로 아래에 있는 Your Personal iCalendar Feed에 Feed URL이 생성됩니다. 이 URL을 복사합니다.

구글 캘린더에 추가하기

이제 구글 캘린더로 이동한 후 화면 좌측 중간쯤에 있는 다른 캘린더 > URL로 추가를 클릭합니다.

URL란에 아까 복사한 Feed URL을 붙여넣기 한 후 캘린더 추가를 클릭하면 연동이 완료됩니다.

아쉽지만 캘린더를 추가한 후에 바로 Trello 일정이 구글 캘린더에 나타나지는 않습니다. 하루 한 번 정도 구글 마음대로 동기화를 한다고 합니다.


댓글()

angular-translate를 이용해서 Angular 앱에 국제화(i18n) 적용하기

JavaScript|2015. 2. 25. 00:48

개요

여러 언어를 지원하는 Angular 앱을 만들려면 i18n을 지원하는 모듈이 필요합니다. 찾아 보면 여러 가지가 있겠지만 여기에서는 angular-translate라는 모듈을 소개합니다.

angular-translate는 최소한의 기능만 간편하게 사용하거나, 따로 제공되는 여러 확장점을 이용해서 강력하고 복잡한 기능을 구현할 수 있는 유연한 모듈입니다.

angular-translate 홈페이지로 이동

설치

Bower를 이용해서 설치할 수 있습니다. Bower를 설치한 후 아래의 명령을 실행하면 됩니다.

$ bower install angular-translate

간단 사용법

먼저 angular-translate.js의 경로를 명시한 script 태그를 angular.js 에 넣어줍니다.

<script src="angular.js"></script>
<script src="angular-translate.js"></script>

pascalprecht.translate 모듈에 대한 의존성을 설정해 줍니다.

var app = angular.module('myApp', ['pascalprecht.translate']);

번역어 목록(translation table)을 작성하고 이를 language key en과 함께 $translateProvider의 translations 메소드로 전달합니다. 아래 예제에서는 영어(en)에 대한 번역어 목록만 전달했지만 여러번 호출하여 다른 언어에 대한 번역어 목록도 추가로 전달할 수 있습니다.

$translateProvider의 preferredLanguage 메소드에 language key en을 전달하여 영어를 기본 언어로 설정합니다.

var app = angular.module('myApp', ['pascalprecht.translate']);

var translations = {
    HEADLINE: 'What an awesome module!',
    PARAGRAPH: 'Srsly!',
    NAMESPACE: {
        PARAGRAPH: 'And it comes with awesome features!'
    },
    PASSED_AS_TEXT: 'Hey there! I\'m passed as text value!',
    PASSED_AS_ATTRIBUTE: 'I\'m passed as attribute value, cool ha?',
    PASSED_AS_INTERPOLATION: 'Beginners! I\'m interpolated!'
};

app.config(['$translateProvider', function ($translateProvider) {
    $translateProvider
        .translations('en', translations)
        .preferredLanguage('en');
}]);

이제 filter, directive, interpolation을 아래와 같이 사용하면 번역어가 출력됩니다.

<p>{{ 'HEADLINE' | translate }}</p>
<p>{{ 'PARAGRAPH' | translate }}</p>

<p translate>PASSED_AS_TEXT</p>
<p translate="PASSED_AS_ATTRIBUTE"></p>
<p translate>{{ 'PASSED_AS_INTERPOLATION' }}</p>
<p translate="{{ 'PASSED_AS_INTERPOLATION' }}"></p>

angular-translate 사이트의 Using translate directive 페이지로 이동한 후 하단에 있는 Source 부분 우측에 있는 Edit를 클릭 후 다시 In JsFiddle을 클릭하면 동작하는 예제를 볼 수 있습니다.

여기까지 간단한 angular-translate 사용법이었습니다.


'JavaScript' 카테고리의 다른 글

Enyo 기반 webOS TV 앱 개발 팁  (0) 2014.08.04
webOS TV SDK 설치 방법  (0) 2014.07.29

댓글()

XnConvert를 이용한 이미지 일괄 변환

기타|2015. 2. 22. 17:33

브로셔 등의 문서 자료를 카메라로 찍은 후 스마트폰으로 볼 때 가독성이 문제가 되는 경우가 많습니다.
이럴 때 저는 이미지 편집툴을 사용해서 아래와 같이 몇 가지 전처리를 한 후에 사용합니다.

  • 흑백(Greyscale)으로 변환
  • 선명하게 처리(Sharpen)
  • 대비(Contrast) 조정

이렇게 전처리를 하면 글자가 선명해져서 눈이 좀 더 편합니다.
지금까지는 Comic4Portable을 사용해서 위와 같은 전처리를 해왔습니다.

그런데 이미지의 양쪽을 일정 부분 잘라내어야 하는 일이 생겨서 오늘은 다른 툴을 찾아봤습니다.
그래서 찾아낸 툴이 XnConvert! 저에게 필요한 전처리와 잘라내기(Crop)을 모두 지원합니다.
아래 링크에서 내려받아서 무료로 사용할 수 있습니다.

XnConvert 내려받기

간단 사용법

XnConvert를 실행하면 Input 탭에서 시작합니다. 먼저 처리가 필요한 이미지를 끌어다 놓기 하거나 좌측 하단에 있는 Add files, Add folder를 클릭해서 가져옵니다.

Input

가져온 이미지를 일괄 변환하기 위해서 Actions 탭을 클릭하여 이동한 후, 다시 Add action을 클릭하여 Image, Map, Filter, Misc 등의 여러가지 전처리기를 적용합니다. 저는 Filter > Sharpen, Map > Automatic contrast, Image > Change color depth, Image > Crop을 추가하고 각각의 세부 옵션을 조정했습니다(세부 옵션은 아래 이미지를 참조하세요).

Actions

이제 Output 탭을 클릭하여 이동한 후, 변환된 파일을 저장할 위치나 파일명을 조정할 수 있습니다. 저는 D:\ImageOutput로 저장 위치를 지정하고 파일명 형식으로는 원본 파일명 뒤에 _result 문자열을 덧붙이는 {Filename}_result을 선택했습니다.

Output

마지막으로 우하단에 있는 Convert를 클릭하여 이미지 일괄 변환을 시작합니다. 변환이 완료되면 자동으로 Status 탭으로 이동하면서 변환 내역을 보여주며, 지정한 Output folder에는 변환된 이미지가 생성됩니다.

Status


댓글()