Ace-T's Blog 내 검색 [네이버 커넥트 이웃 합니다~^-^/ 요청 大 환영~~]

10월부터 서울·과천·분당 투기과열지구에 분양가상한제 적용

재테크 Info/news 2019.08.12 11:16
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

출처 : https://news.sbs.co.kr/news/endPage.do?news_id=N1005391991&cooper=WEBPUSH

분양가상한제란?

  • 아파트 분양가에 상한선을 정해놓는 제도.

  • 집값 안정화를 위해 주택을 분양할 때 택지비 + 건축비에 건설업체의 적정 이윤을 보탠 분양가격을 산정.
    • 그 이하로만 분양가를 책정하도록 함.

    • 국가가 건설사에게 "내가 정해놓은 가격 이상으로는 집 못판다구!" 라고 말하는 정책.

  • 참고

    • 1989년에 분양원가연동제라는 이름으로 최초로 실시

    • 1990년대 후반 IMF 이후 주택시장이 침체기로 들어서면서 이제도는 잠시 사려졌다가 이후 부동산 경기가 다시 과열되어 집값 안정화를 위해 2007년에 부활.

    • 2007년 개정된 주택법에 따르면, 분양가상한제는 공공택지, 민간택지, 주상복합에 적용되지만, 사실상 공공택지 외에는 적용하기 힘든 유명무실한 제도 였음.

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

const definitions are not supported by current javascript version

Front/Vue.js 2019.06.12 16:37
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

VueJs 셋팅 시 IntelliJ에서 나오는 오류!

해결 방법은 아래와 같이 자바스크립트 버전을 변경하여 주면 된다!

끝~

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

sourceTree 새로 설치 한 후 password를 지속적으로 묻는 경우

CM/Github 2019.06.04 18:12
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

github > SSH and GPG keys를 설정해줬는데도 자꾸 패스워드를 물었다...
cmd창에서 git config --global credential.helper osxkeychain 이 명령어를 통해 해결 하였다.

굳!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

[acet-#2] Vue.js 무작정 해보기(용어 등 훝어보기!)

Front/Vue.js 2019.06.04 16:09
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

# 바로 코딩을 해보고 싶으신 분은 jsfiddle로 쉽게 해볼수 있습니다. 
https://jsfiddle.net/chrisvfritz/50wL7mdz/

# Vue.js의 특징으로 단일 파일 컴포넌트를 들수 있다.
Componet System : Vue의 또 다른 중요한 개념.

# 호환성
Vue는 ECMAScript5 기능을 사용 -> IE8 이하 버전을 지원하지 않습니다.
하지만 모든 ECMAScript5 호환 브라우저를 지원합니다.

# Vue Devtools
  * https://github.com/vuejs/vue-devtools#vue-devtools

 

vuejs/vue-devtools

⚙️ Browser devtools extension for debugging Vue.js applications. - vuejs/vue-devtools

github.com

# 설치
  * https://kr.vuejs.org/v2/guide/installation.html

 

설치방법 — Vue.js

Vue.js - 프로그레시브 자바스크립트 프레임워크

kr.vuejs.org

# Vue 인스턴스
  모든 Vue 앱은 Vue 함수로 새 Vue 인스턴스를 만드는 것 부터 시작합니다.
  var vm = new Vue({
     // 옵션
  })

위에서 Vue 인스턴스를 만들고 옵션을 넣는 것이 포인트!
옵션은 Vue인스턴스를 인스턴스화 할 때 데이터, 템플릿, 마운트할 엘리먼트, 메소드, 라이프사이클 콜백 등이 있음.
일단 그렇구나~하고 넘어가고 하나씩 하나씩 머릿속에 정리해보자!

# 인스턴스 라이프사이클 훅(HOOK)
종류로 created, mounted, updated, destroyed 가 있으며 created 훅의 경우 인스턴스가 생성된 후에 호출된다.

#인스턴스 라이프사이클 다이어그램

 

# 템플릿 문법
  * 문자열
    데이터 바인딩의 가장 기본 형태는 이중 중괄호를 사용한 텍스트 보간 입니다.
   <span> 메시지: {{ msg }} </span>

일단 여기까지 보고! 코딩을 해보도록 하자!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

[acet-#1] Vue.js 무작정 해보기(기본-Vue.js? 좋은거? 먹는거?)

Front/Vue.js 2019.05.31 13:26
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

공식 홈피 

 https://vuejs.org/

한국어버전 : https://kr.vuejs.org/v2/guide/index.html

 

Vue.js

Vue.js - The Progressive JavaScript Framework

vuejs.org

구글트렌드

Vue.js를 왜 써야하나?

엄청 복잡하게 코딩을 했던 옛날! 이제는 Vue.js같은 프레임워크를 통해 빠르고 쉽게 코딩이 가능하다.

프레임워크에는 angularJS, react등도 있지만 Vue.js는 아래와 같은 특징이 있다고 한다.
약팔기(?)

접근하기 용이! 러닝커브도 낮다?! 레알? 
다목적, 다용도의
고성능!
유지할 수 있는
테스트 가능한

angularJS랑 비슷한 느낌같은데..

 

컴포넌트가 매우 중요한 개념인듯 싶다. 아래처럼 html, js, css등이 한쌍을 이루는? 스터디를 해보면 알겠지!

프로젝트의 구조는 아래처럼 쉽게 만들수 있다.

 

하나의 vue파일의 컴포넌트 구조를 보여준다.

위의 내용들은 공식 홈피에서 약파는 영상에서 캡쳐하였다.
진짜 좋은지 한번 학습을 통해 알아보고 프로젝트를 만들어봐야겠다.

자! 렛츠 기릿!~ 레고~

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

맥북 scp 서버 -> 로컬(port 22: Connection refused)

OS/Linux&Unix 2019.05.27 11:21
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

mac에는 기본적으로 ssh가 셋팅되어있다.
22 port를 열어주기 위해 아래와 같이 공유를 클릭 한뒤

원격 로그인을 체크 해준다!

그리고 서버에서 로컬로 scp명령어를 통해 접근하면 된다!

  끝

'OS > Linux&Unix' 카테고리의 다른 글

맥북 scp 서버 -> 로컬(port 22: Connection refused)  (0) 2019.05.27
리눅스 크론탭 주기 설정  (0) 2019.01.23
-bash: unzip: command not found  (0) 2019.01.23
레지스터(Register), Context Switching란?  (0) 2018.03.14
linux os 확인  (0) 2017.07.03
pokemon skin  (0) 2017.06.22

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

org.apache.catalina.LifecycleException: Failed to start component

OpenSource/Spring Boot 2019.05.10 13:18
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

JDK8을 사용 중이였는데 오류가 나서 톰캣 7에서 8로 변경 해주니 잘되었다.
servlet-api.jar 버전 문제인것 같다.(참고 : https://okky.kr/article/266796)

jar를 교체하지 않고 7에서 그냥 8로 톰캣을 교체했다. ㅋㅋ

끝~

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

intellij X tomcat webapps 연결하기

Was/Tomcat 2019.04.12 16:15
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

이번에 뉴맥북을 신청하여 바꿨다. 
인텔리J를 깔고 맡은 프로젝트들을 하나하나씩 옮기고 톰캣을 연동하는데..!!
War까지는 만들어지는데 요녀석이 tomcat webapps에 안가는것이다.

-_- 딥빡쓰..

그래서 이것저것 해보다보니..아래와 같이 해주니 되었다.
Output directory를 톰캣 webapps로 맞춰주면 된다.

참고사항으로~알아두면 좋을것 같은!

웹 애플리케이션을 배포하기 위한 패키징 유형

  • package(archive)

    • 아카이브(.war, .ear) 파일로 배포
      아카이브는 WAS(Tomcat)에 의해 압축이 풀린다.
      파일이 많은 경우 압축을 푸는 시간이 오래 걸릴 수 있다.
      원격 서버에 배포시 한 개의 파일만 전송하면 된다.
      WAS(Tomcat)에서 제공하는 업로드를 통한 배포 기능을 활용할 수 있다.

  • exploded(expanded)

    • 아카이브를 압축 해제한 형태의 디렉터리로 배포
      별도의 디렉터리에 원본 소스를 복사하여 만든다.
      압축 및 해제 과정이 불필요하다.
      파일이 많은 경우 복사하는 시간이 오래 걸릴 수 있다.
      원본 소스를 건드리지 않고 배포를 원하는 경우에 적합하다.
      원격 서버에 배포시 파일이 많은 경우 전송 시간이 오래 걸릴 수 있다.

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

DigiCert SSL 인증서

network 2019.02.25 15:00
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

미국정부기관에서 공식 인정하는 인증기관 중 하나이며 미국, 유럽, 중국에서는 하이엔드(High-end) 인증서 발급회사로 

인지도 높은 브랜드입니다.

또한 2017년 12월 세계1위 보안회사의 SSL PKI사업부를 인수 하고 2018년 10월 성공적인 인수 합병을 완료 하며 

SSL 인증서는 세계 1위의 위치로 확고히 자리 매김 했습니다.


Tip. 발급자 확인

$ openssl x509 -in 도메인 -issuer -noout
issuer= /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=Thawte TLS RSA CA G1

참고 : https://security.googleblog.com/2018/03/distrust-of-symantec-pki-immediate.html

출처 : https://www.crosscert.com/symantec/digicert.jsp


'network' 카테고리의 다른 글

DigiCert SSL 인증서  (0) 2019.02.25
패킷 분석을 위한 툴 - wireshark  (0) 2017.04.18

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

(소개) 라그나로크 제로 묘르닐섭

game/play 2019.02.13 14:01
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


추억의 라그나로크 

01년도 처음 접했던 게임!

라그나로크는  일랜시아, 아스가르드, 테일즈위버, 트릭스터 등등 내가 즐겨했던 게임 중에 하나이다.

아래의 유튜브는 "라그나로크 제로" 라는 게임을 플레이하는 내용이다. 팍으마 화이팅~

라그나로크는 크게 본섭(라그나로크 온라인) / 라그나로크 제로(클래식 느낌?) / 라그나로크 M(모바일)등이 있다.

TV에서 리니지 선전할 때 향수를 불러일으키는 내용이 있던데..라그나로크가 바로 내겐 그런 게임이다. ㅎㅎ




더 자세한 내용은 아래의 채널을 통해 확인하시면 됩니다.

https://www.youtube.com/channel/UCmRY_bQQquuNX35XIhXd1JQ


라그나로크 제로 흥해라~

 끝 

'game > play' 카테고리의 다른 글

(소개) 라그나로크 제로 묘르닐섭  (0) 2019.02.13
(소개) 요로리의 트릭스터 규닝서버  (0) 2018.11.27

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

함수형과 객체지향형 추상화의 차이점?

업무 관련/용어 2019.01.28 17:47
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


레거시 코드 활용 전략의 저자 마이클 페더스횽이 트위터에 140자로 다음과 같이 차이점을 명시 했다.

https://twitter.com/mfeathers/status/29581296216

OO makes code understandable by encapsulating moving parts. FP makes code understandable by minimizing moving parts.


객체지향은 캡슐화를 통해 움직이는 부분을 캡슐화하여 코드의 이해를 높였고 함수형프로그래밍은 움직이는 부분을 

최소화하여 높였다.

moviing parts?? 이 부분은 상태변화와 연관이 있다.

함수형 언어는 mutable 상태를 제어하는 메커니즘 보다 이런 부분을 제거하는데 주력한다.

함수형 프로그래밍이라..아직은 익숙하지 않지만 언젠가는 잘 알게되겠지!

'업무 관련 > 용어' 카테고리의 다른 글

함수형과 객체지향형 추상화의 차이점?  (0) 2019.01.28
MIME 타입이란?  (0) 2017.03.17
용어정리 : www, http, https, http2  (0) 2017.03.12
Base64 / MIME  (0) 2016.04.13

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

리눅스 크론탭 주기 설정

OS/Linux&Unix 2019.01.23 17:20
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


* * * * *

????What??????

크론탭 주기 설정에서의 별표의 내용은 아래와 같다.

 *                *                 *           *             *

분(0-59)   시간(0-23) 일(1-31) 월(1-12) 요일(0-7)


매 분마다 수행하려면?

답 : * * * * *


10,20,30 * * * * 은? 

답 : 10분, 20분, 30분 마다 수행!


범위 수행은??

답: 10-30 3 * * * 매일 1시 10분~30분까지 매분 마다 수행!


매 10분마다 수행은??

답 : */10 * * * * 


특정 시간 수행은?

10 3 * * 1   = ????

답 : 10분 3시 월요일(1부터 월요일!)  즉 매주 월요일 3시 10분 마다 수행!



'OS > Linux&Unix' 카테고리의 다른 글

맥북 scp 서버 -> 로컬(port 22: Connection refused)  (0) 2019.05.27
리눅스 크론탭 주기 설정  (0) 2019.01.23
-bash: unzip: command not found  (0) 2019.01.23
레지스터(Register), Context Switching란?  (0) 2018.03.14
linux os 확인  (0) 2017.07.03
pokemon skin  (0) 2017.06.22

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

if~else + 하루 이전 날짜 구하기!

OS/Shell Script 2019.01.23 15:25
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

배치Job에서 수동 또는 자동으로 처리하기 위해서 분기처리가 필요하였다.

예시

if [ $2 == 0 ]; then

  export ANAL_DATE=$(date +%Y%m%d --date '1 days ago')

  echo $(date +%Y%m%d --date '1 days ago')

else

  export ANAL_DATE=$2

fi


date +%Y%m%d 이 표현이 현재날짜!
하루전 날짜는 date +%Y%m%d --date '1 days ago'

끄읏~


acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

-bash: unzip: command not found

OS/Linux&Unix 2019.01.23 11:02
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

[코레일 클럽! ㅋㅋㅋㅋ]

unzip conf.zip

-bash: unzip: command not found


yum install -y unzip zip

Loaded plugins: fastestmirror, versionlock

Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast

You need to be root to perform this command.


Install yum-cron? Or run: yum makecache fast을 하라고 해서 아래처럼 수행.


$ yum makecache fast

Loaded plugins: fastestmirror, versionlock

Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast

EPEL7                                                                                                                                                         | 4.7 kB  00:00:00

base                                                                                                                                                          | 3.6 kB  00:00:00

centosplus                                                                                                                                                    | 3.4 kB  00:00:00

extras                                                                                                                                                        | 3.4 kB  00:00:00

update                                                                                                                                                        | 3.4 kB  00:00:00

(1/7): base/7/x86_64/group_gz                                                                                                                                 | 166 kB  00:00:00

(2/7): extras/7/x86_64/primary_db                                                                                                                             | 156 kB  00:00:00

(3/7): EPEL7/7/x86_64/updateinfo                                                                                                                              | 950 kB  00:00:00

(4/7): centosplus/7/x86_64/primary_db                                                                                                                         | 852 kB  00:00:00

(5/7): update/7/x86_64/primary_db                                                                                                                             | 1.3 MB  00:00:00

(6/7): EPEL7/7/x86_64/primary_db                                                                                                                              | 6.6 MB  00:00:00

(7/7): base/7/x86_64/primary_db                                                                                                                               | 6.0 MB  00:00:00

Determining fastest mirrors

Metadata Cache Created


다시 수행~

$ sudo yum install -y unzip zip

Loaded plugins: fastestmirror, versionlock

Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast

EPEL7                                                                                                                                                         | 4.7 kB  00:00:00

base                                                                                                                                                          | 3.6 kB  00:00:00

centosplus                                                                                                                                                    | 3.4 kB  00:00:00

extras                                                                                                                                                        | 3.4 kB  00:00:00

update                                                                                                                                                        | 3.4 kB  00:00:00

(1/7): base/7/x86_64/group_gz                                                                                                                                 | 166 kB  00:00:00

(2/7): extras/7/x86_64/primary_db                                                                                                                             | 156 kB  00:00:00

(3/7): EPEL7/7/x86_64/updateinfo                                                                                                                              | 950 kB  00:00:00

(4/7): centosplus/7/x86_64/primary_db                                                                                                                         | 852 kB  00:00:00

(5/7): EPEL7/7/x86_64/primary_db                                                                                                                              | 6.6 MB  00:00:00

(6/7): update/7/x86_64/primary_db                                                                                                                             | 1.3 MB  00:00:00

(7/7): base/7/x86_64/primary_db                                                                                                                               | 6.0 MB  00:00:00

Determining fastest mirrors


잘 풀림! ㅎㅎㅎ

$ unzip conf.zip

Archive:  conf.zip

  inflating: yarn-conf/hdfs-site.xml

  inflating: yarn-conf/topology.map

  inflating: yarn-conf/ssl-client.xml

  inflating: yarn-conf/mapred-site.xml

  inflating: yarn-conf/yarn-site.xml

  inflating: yarn-conf/log4j.properties

  inflating: yarn-conf/hadoop-env.sh

  inflating: yarn-conf/core-site.xml

  inflating: yarn-conf/topology.py

'OS > Linux&Unix' 카테고리의 다른 글

맥북 scp 서버 -> 로컬(port 22: Connection refused)  (0) 2019.05.27
리눅스 크론탭 주기 설정  (0) 2019.01.23
-bash: unzip: command not found  (0) 2019.01.23
레지스터(Register), Context Switching란?  (0) 2018.03.14
linux os 확인  (0) 2017.07.03
pokemon skin  (0) 2017.06.22

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

SBT + ANSIBLE

CM/ansible 2019.01.23 09:56
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


빌드서버에서 빌드 후 배포(배치 서버로)

build는 shell을 통해 처리 하였다. (음..뭔가 ansible style은 아니다..ㅠㅠ 책을 사서 좀 더 파봐야겠다.)

- name: Execute sbt build
shell: |
cd {{ build_home }}/{{ build_id }}
pwd     ./sbt.sh   

sbt.sh에서는 sbt를 통해 명령어로 처리! sbt가 export가 잘안되어서 그냥 절대경로로 처리!

/daum/program/sbt/bin/sbt clean assembly 

deploy는 간단히 copy해주는 형식으로 처리 하였다. 즉, local jar를 deploy할 서버로 카피!

---
- hosts : spark
serial : 1
tasks :
- name : Make data directory
file : dest="{{ base_data }}" owner={{ user_name }} group={{ group_name }} state=directory

- name : Remove old file
file : path="{{ base_service }}/{{ service_name }}/bin/{{ file_name }}.{{ file_type }}" state=absent

- name : Deploy file
copy : src="{{ data_build_home }}/{{ build_id }}/target/scala-2.10/{{ file_name }}.{{ file_type }}"            dest="{{ base_service }}/{{ service_name }}/bin/{{ file_name }}.{{ file_type }}" 



배치 서버에서 스파크 수행

Spark Submit

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

2018년 12월 24일 차 구입!!

Life of AceT/My Car 2019.01.16 16:06
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


자동차세 연납하면 10% 감면 해준다한다.


손 쉽게 앱으로 해보자~



'Life of AceT > My Car' 카테고리의 다른 글

2018년 12월 24일 차 구입!!  (0) 2019.01.16

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

HDFS부터 DB까지 팁 아닌 팁~

BigDATA/spark 2019.01.15 22:24
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T

애월 - 지금이순간 카페


스칼라 알못 스파크 알못이라..이번에 작업한 내용이 있는데 삽질을 많이 했다...ㅋㅋ 
생각나는 것들을 적어보자.
HDFS를 가져와 RDD에 저장! sc.textFile을 통해서 HDFS를 가져온다.
sc.textFile("hdfs path")
그런데 그냥 가져오면 소용이 없다. 그러므로 map을 통해서 필요한 친구들만 가져온다. 또한 filter를 통해 데이터를 줄여준다.

ex) hdfs의 포맷이 Json이라서 Gson을 사용. filter를 통해 데이터를 줄여준다.

    val rddRaw0 = sc.textFile("hdfs path").map(line => new Gson().fromJson(line, classOf[TestObject])).filter(line=> line.collection.code.contains("ACET") && !line.document.id.isEmpty).cache() 

리고 여러개의(multi) RDD들이 있었고 이 친구들을 한번에 분석을 해야했다. 그래서 union을 사용.
ex) val result  = rddRaw0.union(rddRaw1)

그런뒤 reduceByKey를 하여 word count를 해준다.
rddRaw.map(line => ((line.document.id,device),1)).reduceByKey{ case (x, y) => x + y}

이제 분석되어진 RDD 친구를 List화 하여 JDBC를 통해 DB에 넣는다.
여기에서 중요한 RDD to List는 아래의 내용이다.
val list: List[((String, String), Int)] = result.collect().toList 
그리고 map으로 원하는 형태를 만들어준 뒤,  InsertToDb를 해주면 되는데 여기에서 sirialization 문제가 발생한다.

  def insertDBxx(result: RDD[((String, String), Int)]) {
       val list: List[((String, String), Int)] = result.collect().toList
       val targetList = list.map(line => (line._1._1, line._1._2, line._2))
       new InsertToDb(targetList)
  }  

Serialize 해결은 아래와 같이 하였다.

  @SerialVersionUID(15L)
  class InsertToDb(targetList: List[(String, String, Int)]) extends Serializable{ 

Serializable은 해결방법보다 이녀석이 뭔지 정확히 알필요가 있으니 따로 포스팅을 하겠습니다.

자 이제 InsertToDb에서는 connection을 맺고 db작업을 해주면 된다.
여기에서의 팁은 아래에 보시면 getConnection이 아니라 getPoolConnection()인 것을 알수가 있다.

1) get connection
    val connection = OutputJdbcTask.getPoolConnection()


pool 사용을 위해 build.sbt에 아래를 추가

  "c3p0" "c3p0" % "0.9.0.4" 

소스는 아래와 같다.

val env = MainConfig.env
val driver = ConfigFactory.load().getString(s"$env.driver")
val url = ConfigFactory.load().getString(s"$env.url")
val username = ConfigFactory.load().getString(s"$env.username")
val password = ConfigFactory.load().getString(s"$env.password")

private val cpds: ComboPooledDataSource = new ComboPooledDataSource()
cpds.setDriverClass(driver)
cpds.setJdbcUrl(url)
cpds.setUser(username)
cpds.setPassword(password)
cpds.setMinPoolSize(5)
cpds.setAcquireIncrement(5)
cpds.setMaxPoolSize(35)

def getConnection(){
try {
Class.forName(driver)
DriverManager.getConnection(url, username, password)
} catch {
case e : Exception => e.printStackTrace
}
} def getPoolConnection() = { cpds.getConnection
}


마지막으로 DB Upsert하는 부분 소스는 아래와 같다.

try {
val connection = OutputJdbcTask.getPoolConnection()

val insertSql =
"""
|insert into 테이블명 (dsid, reg_dttm, click_count, device, create_date )
|values (?,?,?,?,?)
|ON DUPLICATE KEY UPDATE dsid = ?, reg_dttm =?, click_count= ?, device =?, create_date =?
""".stripMargin

val insertStmt: PreparedStatement = connection.prepareStatement(insertSql)
val regDttm = MainConfig.currentTimeAsString
val createDate = MainConfig.date
var itemCnt = 1
val chunk = 10000

targetList.foreach {
t =>
val dsid = t._1
val device = t._2
val clickCnt = t._3

insertStmt.setString(1, dsid)
insertStmt.setString(2, regDttm)
insertStmt.setInt(3, clickCnt)
insertStmt.setString(4, device)
insertStmt.setString(5, createDate)
insertStmt.setString(6, dsid)
insertStmt.setString(7, regDttm)
insertStmt.setInt(8, clickCnt)
insertStmt.setString(9, device)
insertStmt.setString(10, createDate)
insertStmt.addBatch()
insertStmt.clearParameters()
if (itemCnt % chunk == 0) {
insertStmt.executeBatch()
}
itemCnt = itemCnt + 1

}
insertStmt.executeBatch()
insertStmt.close()
connection.close()
} catch {
case e: Exception => {
e.printStackTrace()
}
}

참고 사이트)

https://stackoverflow.com/questions/40892800/spark-rdd-to-list

https://alvinalexander.com/scala/how-to-use-serialization-in-scala-serializable-trait

'BigDATA > spark' 카테고리의 다른 글

HDFS부터 DB까지 팁 아닌 팁~  (0) 2019.01.15
sbt lib 연동 안되는 현상  (0) 2019.01.04
spark rdd programining  (0) 2018.12.30
spark-submit deploy-mode option  (0) 2016.11.02
2탄. SPARK를 설치해보자~(클러스터)  (0) 2016.10.19
1탄. SPARK를 설치해보자~  (0) 2016.10.18

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

java.sql.SQLException: No value specified for parameter 3

DataBase/MySql 2019.01.09 14:13
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


해당 에러는 scala + mysql에서 insert + update를 하고자할 때 났다.

쿼리 스트링은 아래와 같다.

val insertSql =
"""
|insert into 테이블 (name, age )
|values (?,?)
|ON DUPLICATE KEY UPDATE name = ?, age =?
""".stripMargin

java.sql.SQLException: No value specified for parameter 3

에러는 아래에서 코드가 추가되지 않아서였다.

targetList.foreach {
t =>
val name = t._1
val age = t._2

if (age > 20){
insertStmt.setString(1, name)
insertStmt.setInt(2, age)
insertStmt.addBatch()
insertStmt.clearParameters()
}
}
insertStmt.executeBatch()
insertStmt.close()
connection.close()

즉, 2번째 ? 까지는 채워졌는데 3,4 번째 ?는 채워지지 않아서 이다.

그러므로 insertStmt.setString(3, name)와 insertStmt.setInt(4, age)가 필요하다.


 - END

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

sbt lib 연동 안되는 현상

BigDATA/spark 2019.01.04 14:47
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T
not found!! dependency에는 있는데 not found....sbt가 꼬인듯 하다..ㅠㅠ 이럴땐? 다시 셋팅 하자..



SBT버전이 중요! 너무 낮거나 높으면 인텔리J에서 제대로 못가져옴.-_-;;
Scala/Spark 버전은 사내 분산 클러스터에 맞게 적용.



build.sbt 내용
name := "neosite-data"

version := "0.1"

scalaVersion := "2.11.11"

val sparkVersion = "1.6.2"

libraryDependencies ++= Seq("org.scala-lang.modules" %% "scala-parser-combinators" % "1.1.0",
  "org.scalatest" %% "scalatest" % "3.0.5" % "test",
  "org.apache.spark"      %%  "spark-core"        % sparkVersion % "provided",
  //   "org.apache.spark" %% "spark-sql" % sparkVersion,
  "mysql"           "mysql-connector-java" % "5.1.+",
  "com.typesafe.play" %% "play-json" % "2.6.10",
  "com.google.code.gson" % "gson" % "1.7.1",
  "com.typesafe"    "config"               % "1.3.0",
  "org.scalikejdbc" %% "scalikejdbc"          % "2.3.5",
  "org.scalikejdbc" %% "scalikejdbc-config"   % "2.3.5",
  "org.scalikejdbc" %% "scalikejdbc-test"     % "2.3.5"     % "test",
  "ch.qos.logback"  "logback-classic"      % "1.1.6"
)

결과


테스트

warn등을 발견할 수 있다.
하라는데로 1.0.4로 수정 후 다시 sbt를 돌려보자.(scala-parser-combinators 1.0.4로 수정.)

수정 후 결과

이제 환경이 구축 되었다.
자기 입맛에 맞게 개발하면 된다.

내가 해야 할 것
  1. hdfs 연동. 즉, 다른쪽에 저장되어있는 친구를 불러온다(raw data)
  2. Spark 분석(map-reduce)
  3. Mysql에 저장.
    1. scala application.conf의 정보 읽어와서 JDBC 접속 후 INSERT 등 수행.



OH MY GOD~~~

sbt lib 연동이 안되어지는 현상.. 원인은 바로...
jar 파일들이 포함이 되이 않아서이다..

그러므로 plugins.sbt 에 아래와 같이 addSbtPlugin을 추가 후 sbt clean compile assembly 를 해주어야 한다.
버전은 spark에 맞게 해줘야 합니다.


  logLevel := Level.Warn
  addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.5") 


 








'BigDATA > spark' 카테고리의 다른 글

HDFS부터 DB까지 팁 아닌 팁~  (0) 2019.01.15
sbt lib 연동 안되는 현상  (0) 2019.01.04
spark rdd programining  (0) 2018.12.30
spark-submit deploy-mode option  (0) 2016.11.02
2탄. SPARK를 설치해보자~(클러스터)  (0) 2016.10.19
1탄. SPARK를 설치해보자~  (0) 2016.10.18

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

spark rdd programining

BigDATA/spark 2018.12.30 20:08
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T


https://spark.apache.org/docs/latest/rdd-programming-guide.html

spark rdd

Overview

At a high level, every Spark application consists of a driver program that runs the user’s main function and executes various parallel operations on a cluster. 

The main abstraction Spark provides is a resilient distributed dataset (RDD), which is a collection of elements partitioned across the nodes of the cluster that can be operated on in parallel. RDDs are created by starting with a file in the Hadoop file system (or any other Hadoop-supported file system), or an existing Scala collection in the driver program, and transforming it. Users may also ask Spark to persist an RDD in memory, allowing it to be reused efficiently across parallel operations. Finally, RDDs automatically recover from node failures.

A second abstraction in Spark is shared variables that can be used in parallel operations. 
By default, when Spark runs a function in parallel as a set of tasks on different nodes, it ships a copy of each variable used in the function to each task. Sometimes, a variable needs to be shared across tasks, or between tasks and the driver program. Spark supports two types of shared variables: broadcast variables, which can be used to cache a value in memory on all nodes, and accumulators, which are variables that are only “added” to, such as counters and sums.

This guide shows each of these features in each of Spark’s supported languages. It is easiest to follow along with if you launch Spark’s interactive shell – either bin/spark-shell for the Scala shell or bin/pyspark for the Python one.


  1. flatMap[U](f: (T) ⇒ TraversableOnce[U])(implicit arg0: ClassTag[U])RDD[U]

    Permalink

    Return a new RDD by first applying a function to all elements of this RDD, and then flattening the results.

map[U](f: (T) ⇒ U)(implicit arg0: ClassTag[U])RDD[U]

Permalink

Return a new RDD by applying a function to all elements of this RDD.







'BigDATA > spark' 카테고리의 다른 글

HDFS부터 DB까지 팁 아닌 팁~  (0) 2019.01.15
sbt lib 연동 안되는 현상  (0) 2019.01.04
spark rdd programining  (0) 2018.12.30
spark-submit deploy-mode option  (0) 2016.11.02
2탄. SPARK를 설치해보자~(클러스터)  (0) 2016.10.19
1탄. SPARK를 설치해보자~  (0) 2016.10.18

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::