2016년 11월 3일 목요일

Linux Repository 만들기

hortonworks hdp 2.5 repository 가 느린 이유로 로컬  repository가 필요했다.
ambari-server 에서 cluster 구성 시에 참조하는 repository를 만드는 방법이다.

**
여기서는, 서버를 <hdp_repo> 라 이름한다.

가. repository 를 생성 도구들 설치한다.

yum -y install yum-utils createrepo

나. repository 를 위한 데이터를 다운 받는다.

reposync -r HDP-2.5
reposync -r Updates-ambari-2.4.1.0
reposync -r HDP-UTILS-1.1.0.21

**
쉽게 가기 위해 apache 의 기본 폴더인 /var/www/html 에서 작업했다.
각 호출 이름의 폴더 하위에 패키지들이 다운로드 된다.

다. repository 목차를 만든다.

create repo /var/www/html

라. httpd (아파치 웹 서버) 데몬을 구동한다.

마. repository 를 이용할 client 들에 설정을 등록한다.

hdp.repo
[HDP]
name=HDP PACKAGES
baseurl=http://<hdp_repo>
path=/
enabled=1


참조

다운로드 속도가 빠른 CentOS 6.x repository 이다.
[base]
name=CentOS-$releasever - Base
baseurl=http://centos.mirror.cdnetworks.com/$releasever/os/$basearch
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

[updates]
name=CentOS-$releasever - Updates
baseurl=http://centos.mirror.cdnetworks.com/$releasever/updates/$basearch
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

2016년 11월 2일 수요일

hortonworks 하둡 구성하기

호튼에서는
가볍게 기능적인 부분을 확인 할 수 있는 sandbox와
실제 하둡 구성을 도와주고 관리하는 ambari 기반을 제공한다.

두 가지를 구성 할 때, 주의 할 내용들을 요약한다.

  • HDP 2.5 on hortonworks sandbox
  • HDP 2.5 with Ambari 2.4

HDP 2.5 on hortonworks sandbox

sandbox는 기본 8GB 메모리를 요구한다.
hue는 기본 패키지에 없어서 추가로 설치했다.

**
hue 접속 에러 발생 시에 대응 방안이다.

가. 로그 폴더 권한 문제가 발생했다.

/var/log/hue 에 hue 소유자 권한을 준다.
> chown -R hue /var/log/hue

나. django.db 접속 관련 예외가 발생했다.

db를 재생성 한다.

테스트 db를 새롭게 생성한다.
> /usr/lib/hue/build/env/bin/hue testserver
서비스 db를 덮어쓰기 한다.
> cp /usr/lib/hue/desktop/desktop-test.db /var/lib/hue/desktop.db
hue 서비스를 재시작 한다.
> service hue restart


HDP 2.5 with Ambari 2.4

1. 전체 노드에 사전 작업을 한다.

 - 운영체제 (ex, Centos 6.5) 설치한다.
 - /etc/hosts 파일에 FQDN 이름을 정의한다.
 - 각 노드의 hostname 을 정의한다.
 - ssh-keygen 을 통해서 ambari server에서 키 인증 되도록 한다.
 - ntpd 를 설치해서 전체 노드의 시간을 동기화 한다.

2. ambari 서버를 구성한다.

3. amber UI에 접속해서 하둡 클러스터를 구성한다.


참고 이미지



2016년 10월 22일 토요일

클라우드 데이터 저장소 CLI 사용하기

클라우드에 데이터를 담아 두고, 필요할 때 간편하게 사용하는 시대이다.
다양한 공간 - 환경 - 언어에서 쉽게 접근 할 수 있는 장점을 가지고 있다.

맥이나 리눅스 환경에 익숙한 사용자들은 CLI가 주는 장점을 잘 알고 있을 것이다.
본문은 주요 데이터 저장소의 CLI 연결 정보(방법)를 요약한다.

목차

  • aws s3
  • google drive
  • google cloud storage


아마존 웹 서비스 (AWS: amazon web service) 의 S3

# CLI 설치 : https://aws.amazon.com/ko/cli/
pip install awscli
# id, key, region, output format 지정
aws configure
aws s3 help
aws s3 ls s3://mybucket
aws s3 cp s3://mybucket/myfile ./


**
language: python based
identify: bucket
pricing: per GB per Month and etc...


구글 드라이버 (Google Drive)

# CLI 설치 : https://github.com/prasmussen/gdrive
brew install gdrive
# 최초 수행 시 웹 브라우저 인증, ~/.gdrive 에 토근 생김
gdrive help
gdrive list
gdrive download


**
language: golang based
identify: account
pricing: free 15G


구글 클라우드 저장소 (Google Cloud Storage)

# CLI 설치 : https://cloud.google.com/storage/docs/quickstart-gsutil
# 설치 파일 다운로드 후,
./google-cloud-sdk/install.sh
# 환경 설정
gcloud init
gcloud help
gcloud info
gsutil help
gsutil cp gs://mybucket/file ./


**
language: python2.7 based (currently not supported python 3.x)
identify: bucket
pricing: per GB per Month and etc...


참조 이미지
구글 이미지 검색: http://www.mixturecloud.com


spark에서 aws s3 접근하기

spark standalone 모드에서 s3 접근 테스트를 시도했다.

2016년 10월 21일 기준,

스파크 홈페이지에서 hadoop 2.4 빌드 버전 가져온다.

spark-2.0.1-bin-hadoop2.4

**
하둡 2.7 버전에서는 다양한 에러가 발생했다.

s3 접근을 위한 환경 설정을 한다.

 * conf/spark-defaults.conf 에서 변경하는 방법
spark.hadoop.fs.s3n.awsAccessKeyId      <aws_accesss_key>
spark.hadoop.fs.s3n.awsSecretAccessKey  <aws_accesss_key>

 * 수행 코드에서 변경하는 방법
sc.hadoopConfiguration.set("fs.s3n.awsAccessKeyId", <aws_accesss_key>)
sc.hadoopConfiguration.set("fs.s3n.awsSecretAccessKey", <aws_accesss_key>)

**
sc : SparkContext

s3n protocol을 사용한다.

rdd = sc.textFile(“s3n://<bucket_name>/<path>”)
rdd.count()

**
최초 한번의 질의 시에 에러가 발생하고, 이후 질의 부터는 괜찮다.
SignatureVersion 문제로 차후 fix 버전이 나올 것으로 기대된다.


참조 이미지

2016년 10월 18일 화요일

MacOS에서 Spark 테스트 환경 구성

맥북에서 스파크 환경 구성 방법이다.
테스트를 위해서 마스터 노드 하나를 띄위 사용하는 기본 설정이다.
IntelliJ 도구에서 파이썬/스칼라 환경 설정을 추가로 다룬다.

목록

  • 스파크 구성
  • 도구 구성
  • 수행 예제 코드


스파크 구성

가. 미리 빌드된 맥용 스파크 다운로드
나. 압축 풀고 환경 설정
export SPARK_HOME=<스파크 경로>
export PATH=$SPARK_HOME/bin:$PATH
export PYSPARK_PYTHON=python3
export PYTHONPATH=$SPARK_HOME/python:$PYTHONPATH


도구 구성

스칼라

가. IntelliJ IDEA 설치
나. Plug-in으로 scala 설치
다. scala 기본 플랫폼 설정
Platform Setting -> SDKs : MacOS의 자바 플랫폼 위치 (자동 검색됨)
Platform Setting -> Global Library : 스칼라 플랫폼 컴파일러 + 라이브러리  위치 ( SPARK_HOME의 jars 폴더 )
라. 프로젝트 종속 라이브러리 설정
Project Setting -> Libraries : 필요 라이브러리 지정
마. 모듈 정보 확인
Project Setting -> Modules -> Dependencies

파이썬

가. IntelliJ PyCharm 설치
나. python 기본 플랫폼 설정
다. pip를 통한 패키지 관리


수행 예제 코드

스칼라

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.mllib.fpm.FPGrowth
import org.apache.spark.rdd.RDD

object SimpleApp {
  def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("Simple Application").setMaster("local")
    val sc = new SparkContext(conf)
    val data = sc.textFile("sample*.txt")

    val transactions: RDD[Array[String]] = data.map(s => s.trim.split(' '))

    val fpg = new FPGrowth()
      .setMinSupport(0.2)
      .setNumPartitions(10)
    val model = fpg.run(transactions)

    model.freqItemsets.collect().foreach { itemset =>
      println(itemset.items.mkString("[", ",", "]") + ", " + itemset.freq)
    }

    val minConfidence = 0.8
    model.generateAssociationRules(minConfidence).collect().foreach { rule =>
      println(
        rule.antecedent.mkString("[", ",", "]")
          + " => " + rule.consequent.mkString("[", ",", "]")
          + ", " + rule.confidence
      )
    }
  }
}

**
스파크를 로컬 환경으로 구동할때, 마스터를 .setMaster("local") 로 설정한다.
외부에 스파크를 활용할 때는 .setMaster("spark://master:7077") 형식이다.

파이썬

from pyspark import SparkContext, SparkConf
from pyspark.mllib.fpm import FPGrowth

conf = SparkConf().setAppName('FPGrowth Test')
sc = SparkContext(conf=conf)

data = sc.textFile("sample*.txt")
transactions = data.map(lambda line: line.strip().split(' '))
model = FPGrowth.train(transactions, minSupport=0.01, numPartitions=1)
result = model.freqItemsets().collect()
for fi in result:
    print(fi)


참조

MacOS 자체 스칼라 사용
brew install scala

Scala : 스칼라
Spark : 스파크

스파크 기본 환경
마스터 포트 : 7077
모니터링 UI : 8080


커버사진

2016년 10월 12일 수요일

맥OS <-> 오라클 접속

MacOS에서 오라클(Oracle)에 접속하는 방법을 소개한다.

  • 파이썬 cx_Oracle 인터페이스를 통한 연결
  • SQLPLUS 도구를 통한 연결


먼저 파이썬 cx_Oracle 인터페이스를 통한 접근 방법이다.

오라클에서 다음 두 가지 파일을 다운 받아서 압축을 푼다.
unzip instantclient-basic-macos.x64-11.2.0.4.0.zip
unzip instantclient-sdk-macos.x64-11.2.0.4.0.zip

압축을 풀면 다음 디랙토리가 생성된다.
instantclient_11_2

환경 변수를 등록한다.
export ORACLE_HOME=$(pwd)/instantclient_11_2
export DYLD_LIBRARY_PATH=$ORACLE_HOME:$DYLD_LIBRARY_PATH

cx_Oracle을 설치한다.
pip install cx_Oracle

**
ORACLE_HOME에 풀려 있는 파일을 참조하여 설치된다.
cx_Oracle이 호출 될때 필요한 라이브러리를 DYLD_LIBRARY_PATH에서 참조한다.

수행 예제 코드이다.
<code>
import cx_Oracle as cx

dsn = cx.makedsn(HOST, PORT, SID)
dbc = cx.connect('ecpadmin', 'ecpadmin', dsn)
print('ORACLE VERSION: ', dbc.version)
csr = dbc.cursor()
csr.execute('SELECT systimestamp FROM dual')
print('TIME: ', csr.fetchone())
dbc.close()

<output>
ORACLE VERSION:  11.2.0.2.0
TIME:  (datetime.datetime(2016, 10, 12, 12, 40, 46, 653846),)


다음은 SQLPLUS 도구를 통해서 접속하는 방법이다.

오라클에서 다음 파일을 다운 받아서 압축을 푼다.
unzip instantclient-sqlplus-macos.x64-11.2.0.4.0.zip

압축을 풀면 다음 디랙토리가 생성된다.
instantclient_11_2

환경 변수를 등록한다.
export PATH=$ORACLE_HOME:$PATH

접속 명령 예제이다.
sqlplu <user>/<password>@<host>/<sid>


**
추가로 한글 데이터 비정상 출력 (ex, ????) 해결 방법이다.

먼저 서버의 문자셋을 확인한다.
<sql>
SELECT *
  FROM sys.props$
 WHERE name = 'NLS_CHARACTERSET';
<output>
NLS_CHARACTERSET
AL32UTF8
Character set

오라클 9i 부터는 UTF8 대신에 AL32UTF8를 사용하고 있고,
NLS_LANG 환경 변수 수정을 통해서 해결 할 수 있다.

터미널 환경에서 적용하는 방법이다.
export NLS_LANG=.AL32UTF8

파이썬 스크립트에서 적용하는 방법이다.
import os 
os.environ["NLS_LANG"] = ".AL32UTF8"


참조

OCI (Oracle Call Interface)
오라클에서 제공하는 C 언어로 만든 인터페이스다.
편리하고 높은 성능과 안정성을 제공한다.

라이브러리 경로
On UNIX platforms you must ensure that LIBPATH environment variable is set properly to pick up the shared libraries at runtime. (UNIX gurus will understand here that LIBPATH actually translates to LD_LIBRARY_PATH on Solaris and Linux, SHLIB_PATH on HP-UX, DYLD_LIBRARY_PATH on Mac OS X, and stays as LIBPATH on AIX).

테스트 환경
MacOS Sierra
Python 3.5.1