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

2016년 10월 7일 금요일

도로명 주소 데이터 인코딩 변환

행정자치부에서 제공하는 도로명 주소가 euc-kr로 인코딩 되어 있다.
원만한 작업을 위해서 utf-8로 인코딩 하는 방법이다.

iconv -f euc-kr -t utf-8 <file-name>

**
iconv
The  iconv  program converts text from one encoding to another encoding.

도로명 주소DB

커버사진,

2016년 10월 6일 목요일

오라클 procedure 수행 로그 남기기 - 예제 코드

오라클(oracle) 환경에서 프로시저(procedure) 작업 수행 시 로그 남기는 코드이다.
로그를 남기기 위한 procedure와 수행 코드를 넣기 위한 procedure 폼 두 가지이다.

사용 방법은 다음과 같다.

작업 수행 procedure의 — start script 와 — end script 사이에 원하는 수행 스크립트를 작성한다.
작업 수행 procedure를 이름만 바꾸고 복제해서 사용하면 로그에서 자동으로 구분할 수 있도록 했다.

작업 수행 procedure 예제 코드,
CREATE OR REPLACE PROCEDURE job_proc01
IS
   err_code   VARCHAR (1024);
   err_msg    VARCHAR (1024);
   job_id     VARCHAR (1024);
   job_nm     VARCHAR (1024);
BEGIN
   job_id := TO_CHAR (SYSTIMESTAMP, 'YYYYMMDDHH24MISS.FF');
   job_nm := $$PLSQL_UNIT;
   etl_job_hist_logger (job_id,
                        job_nm,
                        'N/A',
                        'Started',
                        'N/A');

   -- START SCRIPT


   -- END SCRIPT
   etl_job_hist_logger (job_id,
                        job_nm,
                        'N/A',
                        'Ended',
                        'N/A');
EXCEPTION
   WHEN OTHERS
   THEN
      err_code := SQLCODE;
      err_msg := SUBSTR (SQLERRM, 1, 200);
      etl_job_hist_logger (job_id,
                           job_nm,
                           'N/A',
                           'Fail',
                           err_code || '::' || err_msg);
END;
/

로그 수행 procedure 예제 코드,
CREATE OR REPLACE PROCEDURE etl_job_hist_logger (xJobId        IN STRING,
                                                 xJobNm        IN STRING,
                                                 xJobDesc      IN STRING,
                                                 xJobStat      IN STRING,
                                                 xJobFailMsg   IN STRING)
IS
BEGIN
   DBMS_OUTPUT.PUT_LINE ('--------------------------------------');
   DBMS_OUTPUT.PUT_LINE ('> Job ID: ' || xJobId);
   DBMS_OUTPUT.PUT_LINE ('> Job Name: ' || xJobNm);
   DBMS_OUTPUT.PUT_LINE ('> Job Description: ' || xJobDesc);
   DBMS_OUTPUT.PUT_LINE ('> Job Status: ' || xJobStat);

   IF xJobStat IN ('Fail')
   THEN
      DBMS_OUTPUT.PUT_LINE ('> Job Fail Message: ' || xJobFailMsg);
   END IF;

   DBMS_OUTPUT.PUT_LINE ('--------------------------------------');

   INSERT INTO etl_job_hist (job_id,
                             job_nm,
                             job_desc,
                             job_stat,
                             job_fail_msg)
        VALUES (xJobId,
                xJobNm,
                xJobDesc,
                xJobStat,
                xJobFailMsg);
END;
/


**
기타 참조 사항 정리

토드 SQL 코드 정리 단축 코드 (format)
format -> command + shift + F

토드 문장 수행 단축 코드
run one statement -> command + enter
run all statements -> command + shift + enter

맥북 환경에서는 SQL Developer 보다 Toad가 안정적이고 직관적이었다.
앱스토어에서 받은 토드는 MongoDB, MySQL, PostgreSQL도 기본으로 지원한다.

DBMS_OUTPUT 설정 환경 변수 (for sqlplus)
SET SERVEROUTPUT ON;

토드에서 DBMS_OUTPUT은 AutoCommit OFF에서 확인 할 수 있었다.

2016년 9월 13일 화요일

우분투 초기 설정

서랍에 잠자던 노트북의 다양한 활용을 위해서 우분투를 설치했다.
공인 인증을 위해서 가상박스로 윈도우를 설치하고, 업무를 위해서 크롬 브라우저와 hwp 뷰어를 설치했다.

처음 우분투를 설치하면서 필요했던 내용 들을 요약한다.

1. 한글 자판 사용하기

Ubuntu 16.04에서 키보드 입력기는 기본적으로 fcitx로 설정되어 있다.
따라서 키보드 자판에서 입력 소스에 Hangul(Fcitx)를 선택한다.

자판 전환 기본은 super + space 조합이다. ( super는 윈도우 키였다. )

2. 데미안 패키지 관리

리눅스를 사용한다는 것은 패키지를 잘 관리하는 것이다.
사용 예제로 hwpviewer를 설치하는 과정이다.

가. apt 이용하는 방법

hwp 단어와 관련된 패키지를 찾는다.
apt-cache search hwp

찾은 패키지를 설치 한다.
apt install hancomoffice-hwpviewer

**
필요시에 apt 레포지토리를 등록해서 사용한다.

나. 패키지 파일을 다운받아 설치하는 방법

dpkg를 통해 설치 한다.
dpkg —install hwpviewer_9.20.0.347_amd64.deb

의존성 문제가 있을 경우,
apt -f install
을 통해서 관련 의존성 패키지를 설치한다.

3. 참고

* 데미안 패키지 관리는 레드햇과 비교해 보면 다음과 비슷하다.
rpm -> dpkg
yum -> apt

* Fcitx 란?
X 윈도우 시스템에 입력 방식 확장을 지원하는 프레임워크이다.

2016년 9월 9일 금요일

주요 SNS 공유 버튼 정리

주요 SNS 공유 버튼 가이드 모음이다.
개발 페이지에 대한 링크와 간략한 특징을 서술한다.

카카오 스토리 

접근을 위한 앱을 만들고, 앱 키를 발급 받아 사용한다.
url, text 정보를 지정 할 수 있다.

image 정보는 url 페이지의 open graph protocol을 기반으로 가져온다.

주의: url 페이지에 구성된 og 정의를 사용한다.

트위터 

페이지 정보를 기본으로 가지고 온다.

주의: image 정보는 노출 할 수 없다.

페이스북 

접근을 위한 앱을 만들고, 앱 키를 발급 받아 사용한다.
기본 공유 버튼을 제공하고 있으나,
원하는 아이콘을 사용하기 위해서는 공유 대화 상자를 활용한다.
공유 대화 상자 사용을 위해서는 앱의 설정에 도메인을 추가한다.

주의: url 페이지에 og 프로토콜을 사용한다.

다른 유효한 방법:
<a target="_blank" href="https://www.facebook.com/sharer/sharer.php?u=http://your_domain”>
ShareButton</a>

핀터레스트 

이미지 선별, url, description을 지정 할 수 있다.


주의: 바로 저장하는 Pin과 선별해서 저장하는 Bookmark 기능이 있다.