EMC Effect Day 2014.11.11

EMC Effect Day 2014

파일

 

[R] 기본 군집 분석 방법

 
 
R Language에서 군집 분석을 하기 위해서 여러가지 기법을 사용할 수 있습니다.
 
여기서는 가장 기본이 되고 사용하기 쉬운 몇가지 군집 분석 방법을 살펴 보려고 합니다.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
#— 데이터 준비
data <- iris[, 1:4] #— 원본 데이터
cls <- iris[, 5] #--- 원본 데이터의 분류
group <- 3 #--- 군집수, Clustering - 군집수 결정 참조
 
 
#--- 군집 분석 (아래에서 한가지 선택)
library(stats)
m <- kmeans(data, group) #--- K-평균군집
 
library(cluster)
m <- pam(data, group) #--- PAM (Partitioning Around Medoids)
 
library(cluster)
m <- fanny(data, group) #--- Fuzzy Clustering
 
library(fpc)
m <- dbscan(data, eps = 0.5), MinPts = 5) #--- Density-based Clustering
#— eps : Maximum distance
#— MinPts : 최소 데이터 개수
#— eps 범위내에 MinPts 개수의 데이터가 있으면 군집으로 분류
 
#--- data로부터 군집 산정
pred <- m$cluster

 
 
시각화를 위해서는 아래 방식을 사용해 보세요.
  plot(m)                         #— pam, fanny
  plot(data, col = pred)     #— kmeans, pam, fanny
  plot(m, data)                 #— dbscan
  plotcluster(data, pred)   #— dbscan
 
 
군집 분석의 제대로 되고 있는지 확인 하려면 아래와 같이 수작업을 하세요.
table(pred, cls)
#— predStr : 숫자로 표시된 pred를 문자로 변경하기 위해 사용
#— data 별로 다르므로 매번 수작업이 필요 합니다.
predStr <- c("setosa", "versicolor", "virginica")   
print(paste(round(mean(predStr[pred] == cls) * 100, 2), "% of predicted clusters correct", sep=""))

 
 
 
파일
 

CentOS에서 ElasticSearch 설치

 
 
ElasticSearch의 최신 버전은 1.2.0으로 JDK 1.7 이상을 필요로 합니다.
 
 
JDK 1.7 설치
 
 
 
yum -y install java-1.7.0-openjdk
java -version

 
 
ElasticSearch 1.2.0 설치
 
ElasticeSearch는 보안상 hduser:hdgroup 사용자가 사용할 수 있도록 설치를 합니다.
 
 
 
 
 
 
 
cd install
wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.2.0.tar.gz
 
tar -xvzf elasticsearch-1.2.0.tar.gz
chown -R hduser:hdgroup elasticsearch-1.2.0
mv elasticsearch-1.2.0 /nas/appl/elasticsearch

 
 
hduser 사용자 환경 설정
 
 
vi  ~hduser/.bash_profile 명령어로 설정 파일을 수정 합니다.

 
 
 
export ELASTICSEARCH_HOME=/nas/appl/elasticsearch
export PATH=$PATH:$ELASTICSEARCH_HOME/bin

 

 
ElasticSearch 1.2.0 환경 설정
 
데이터와 로그 저장용 폴더를 생성 합니다.
 
 
 
 
 
cd /nas/appl/elasticsearch
mkdir data
mkdir logs
chown hduser:hdgroup data logs

 
vi /nas/appl/elasticsearch/config/elasticsearch.yml 설정 파일을 수정 합니다.
 
 
 
 
 
 
 
 
cluster.name: elasticsearch
node.name: "node201"
path.data: /nas/appl/elasticsearch/data
path.logs: /nas/appl/elasticsearch/logs
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: [“node201”]
bootstrap.mlockall: true

 
 
ElasticSearch 서비스 실행 및 확인
 
데이터와 로그 저장용 폴더를 생성 합니다.
 
 
 
 
su – hduserelasticsearch #— Foreground로 실행
elasticsearch -d #— Daemon으로 실행
curl localhost:9200 #— 서비스 확인

 
아래와 같이 브라우저로 접속하여 서비스를 확인할 수 있습니다.
    http://node201.hadoop.com:9200/    
    http://node201.hadoop.com:9200/_status

 
 
 
 
 
파일
 

 

Flume 개요

Flume은 Hadoop 빅데이터 환경에서 준 실시간으로 데이터 수집을 위해서 사용 됩니다. 기본적으로 제공하고 있는 Source, Channel, Sink는 설정을 통해서 간단하게 사용할 수 있으며 구성이 간단하므로 Customize을 통한 확장이 용이 합니다.

Flume Architecture


Source

  • 데이터를 수집 합니다.

Interceptor

  • 수집한 데이터를 변경 또는 삭제 합니다.
  • 종류 – 삽입 : Timestamp, Host, Static, UUID
  • 종류 – 변형/삭제 : Morphline, Regex Filtering, Regex Extractor

Channel Selector

  • Source에서 Channel로 연동시 Channel을 지정 합니다.
  • 종류 : Replicating (Default), Multiplexing, Custom

Channel

  • 데이터를 Source에서 Sink로 전달하는 통로

Sink

 

Sink Processor

  • Sink할 대상을 다중 선택 합니다.
  • 종류 : Default, Failover, Loadbalancing, Custom
  • Sink Group : 여러개의 Sink를 하나의 그룹으로 관리

Source/Channel/Sink 종류

Source

Channel

Sink

Avro : Avro 프로토콜로 수집 Memory : Memory 사용 Avro : Avro 프로토콜로 전송
Thrift : Thrift 프로토콜로 수집 JDBC : DB 사용 Thrift : Thrift 프로토콜로 전송
Syslog : Syslog 프로토콜로 수집

  • Syslog TCP, Multiport Syslog TCP
  • Syslog UDP
File : File 사용 IRC : IRC 프로토콜로 전송
HTTP : HTTP 프로토콜로 수집   ElasticSearch : Elastic에 저장
JMS : JMS 프로토콜로 수집

  • Pluggable converter 지원
  MorphlineSolr : Solr에 저장
NetCat : TCP/IP 데이터 수집   HDFS : HDFS에 저장
Exec : Linux 명령어로 수집  

HBase : HBase에 저장

  • HBaseSink, AsyncHBaseSink
Spooling Directory : 폴더에 신규로 추가된 파일 수집   Logger : 테스트 또는 디버깅을 위해 로깅
Sequence Generator : 0부터 1씩 증가하는 event 생성   File Roll : 파일로 저장
Legacy : 이전 버전의 Flume으로부터 데이터 수집

  • Avro Legacy, Thrift legacy
  Null : 아무 일도 하지 않음
Custom Custom Custom



Namecard 10.png

하둡 업무 영역과 Architecture

하둡의 업무 영역과 각 구성요소의 Architecture를 그려 보았습니다. 전체 관점에서 하둡을 이해하는데 도움이 됩니다.

 

Hadoop 업무 영역


 

HDFS Architecture


 

MapReduce Architecture


 

YARN Architecture




Namecard 10.png

 

 

하둡에서 한글 사용 설정

문자셋과 인코딩

문자셋 (charset, Character Set)

하나의 언어권에서 사용하는 언어를 표현하기 위한 모든 문자(활자)의 모임을 문자셋이라고 합니다. 다시 말하면 우리가 얘기하는 언어를 책으로 출판할 때 필요한 문자(활자)를 모두 모은 것이라고 보면 됩니다. 그러므로 부호와 공백 등과 같은 특수 문자도 문자셋에 포함 됩니다. 영어의 경우 알파벳 대소문자와 특수 문자 등으로 간단하게 문자셋을 구성할 수 있지만 한글의 경우 출판에서 가나다 등으로 출판함으로 훨씬 다양한 문자셋을 가지고 또한 한자를 병행해서 사용함으로 문자셋의 범위는 더욱 넓어 집니다.

  • 추상적인 글자 셋으로 여러개의 인코딩을 가질 수 있습니다.
  • MIME 문자셋은 IANA에서 정의하며 인터넷 및 XML 파일에서 사용 합니다.

인코딩 (encoding)

인코딩은 문자셋을 컴퓨터가 이해할 수 있는 바이트와의 매핑 규칙 입니다. 예를 들면 ASCII Code에서 ABC 등은 문자셋이고 A는 코드 65, B는 코드 66 등 바이트 순서와 매핑한 것이 인코딩 입니다. 따라서 문자셋을 어떻게 매핑 하느냐에 따라 하나의 문자셋이 다양한 인코딩을 가질 수 있습니다.

  • 추상적인 문자셋을 구체적인 bit-stream으로 표기하는 방법 입니다.
  • 여러가지 문자셋을 동시에 표시할 수 있습니다.
  • 대부분의 인코딩에서는 대소문자를 구분하지 않습니다.
  • 대한민국에서 가장 많이 사용하는 인코딩은 “UTF-8”, “KSC5601”, “ISO-8859-1” 입니다.

문자셋(인코딩)의 예

  • 한글 : 8bit KSC5601 (8bit EUC-KR, 7bit ISO-2022-KR, ISO-2022-Int)
  • 영문 : KSC5636, US-ASCII (둘 간의 차이는 화페 단위 뿐)
  • 한글+영문 : KSC5861 (EUC-KR), KSC5636 + KSC5601를 모두 포함한다.
  • 유니코드 : 4byte Unicode < ISO-10646 UCS (ISO-8859-1, UTF-8, UTF-16)

문자셋과 인코딩은 동일한 명칭을 가질 수 있어 서로 혼용하여 사용되는 경우가 많습니다.

EUC-KR은 원래 유닉스용 표준이었는데 인터넷으로 확장되어 사용 됩니다.

KSC5601은 인터넷에서 원활한 한글(완성형) 사용을 위하여 정의된 표준 입니다.

EUC (Extended UNIX Code), UTF (UCS Transformation format)

 

Java에서 문자셋과 인코딩 설정

 

일반적으로 LANG 환경 변수를 설정해 주면 자동으로 설정 됩니다.

locale -a : Linux 명령어로 지원 가능한 encoding을 확인 합니다.

csh

set LANG ko
setenv LANG ko

ksh

LANG=ko
export LANG

 

JVM 옵션 설정 (UTF-8, ISO-8859-1, KSC5601)

-Dfile.encoding=8859_1 : 필수 항목

-Dfile.client.encoding=8859_1

-Dclient.encoding.override=8859_1 : JVM 버전에 따라 (사용 안함)

 

Hadoop에서 문자셋과 인코딩 설정

Hadoop은 Job을 실행 시키는 환경과 각각의 task가 실행되는 환경이 동일하지 않을 수 있습니다. Map task와 Reduce task는 디폴트 설정이 별도의 JVM에서 실행이 됩니다.

MapReduce의 task에서 한글을 사용하기 위해서는 인코딩을 아래와 같이 설정해 주세요.

vi conf/mapred-site.xml

<?xml version=”1.0″?>
<?xml-stylesheet type=”text/xsl” href=”configuration.xsl”?>

<configuration>

<property>

<name>mapred.child.java.opts</name>

<value>-Xmx200m -Dfile.encoding=UTF-8 -Dfile.client.encoding=UTF-8 -Dclient.encoding.override=UTF-8</value>

</property>

</configuration>

Namecard 10.png