Data & Execution Lineage in HADOOP/HIVE
많은 구성원들이 사용하는 대규모 하둡 클러스터의 데이터를 관장하고 또 이곳에서 구동되는 수많은 작업들을 개발/관리하는 업무를 수행하다 보니 데이터의 흐름과 사용패턴 등을 확인가능한 툴을 만들고 싶어서 짬이 날때마다 POC를 진행해 보았습니다. 손쉬운 관리를 위해 만드는 툴이기 때문에 개발컨셉은 다음과 같은 제약사항에 중점을 두었습니다. - 클러스터가 대규모 이기 때문에 audit, history, system 로그 등을 한 곳으로 집중시키기 않는다. - 작업 정보를 추출하기 위한 가이드라인이나 템플릿을 제공하여 분석가들의 생산성을 저하시키지 않는다. - 관리이슈를 줄이기 위해 가능한 한 별도의 오픈소스나 외부도구를 이용하지 않.......
2016-04-27 13:22:48 |
산소소년
Data & Execution Lineage in HADOOP/HIVE
많은 구성원들이 사용하는 대규모 하둡 클러스터의 데이터를 관장하고 또 이곳에서 구동되는 수많은 작업들을 개발/관리하는 업무를 수행하다 보니 데이터의 흐름과 사용패턴 등을 확인가능한 툴을 만들고 싶어서 짬이 날때마다 POC를 진행해 보았습니다. 손쉬운 관리를 위해 만드는 툴이기 때문에 개발컨셉은 다음과 같은 제약사항에 중점을 두었습니다. - 클러스터가 대규모 이기 때문에 audit, history, system 로그 등을 한 곳으로 집중시키기 않는다. - 작업 정보를 추출하기 위한 가이드라인이나 템플릿을 제공하여 분석가들의 생산성을 저하시키지 않는다. - 관리이슈를 줄이기 위해 가능한 한 별도의 오픈소스나 외부도구를 이용하지 않.......
2016-04-27 13:22:48 |
산소소년
Data & Execution Lineage in HADOOP/HIVE
많은 구성원들이 사용하는 대규모 하둡 클러스터의 데이터를 관장하고 또 이곳에서 구동되는 수많은 작업들을 개발/관리하는 업무를 수행하다 보니 데이터의 흐름과 사용패턴 등을 확인가능한 툴을 만들고 싶어서 짬이 날때마다 POC를 진행해 보았습니다. 손쉬운 관리를 위해 만드는 툴이기 때문에 개발컨셉은 다음과 같은 제약사항에 중점을 두었습니다. - 클러스터가 대규모 이기 때문에 audit, history, system 로그 등을 한 곳으로 집중시키기 않는다. - 작업 정보를 추출하기 위한 가이드라인이나 템플릿을 제공하여 분석가들의 생산성을 저하시키지 않는다. - 관리이슈를 줄이기 위해 가능한 한 별도의 오픈소스나 외부도구를 이용하지 않.......
2016-04-27 04:22:48 |
산소소년
Data & Execution Lineage in HADOOP/HIVE
많은 구성원들이 사용하는 대규모 하둡 클러스터의 데이터를 관장하고 또 이곳에서 구동되는 수많은 작업들을 개발/관리하는 업무를 수행하다 보니 데이터의 흐름과 사용패턴 등을 확인가능한 툴을 만들고 싶어서 짬이 날때마다 POC를 진행해 보았습니다. 손쉬운 관리를 위해 만드는 툴이기 때문에 개발컨셉은 다음과 같은 제약사항에 중점을 두었습니다. - 클러스터가 대규모 이기 때문에 audit, history, system 로그 등을 한 곳으로 집중시키기 않는다. - 작업 정보를 추출하기 위한 가이드라인이나 템플릿을 제공하여 분석가들의 생산성을 저하시키지 않는다. - 관리이슈를 줄이기 위해 가능한 한 별도의 오픈소스나 외부도구를 이용하지 않.......
2016-04-27 04:22:48 |
산소소년
OOZIE 병렬작업(fork) 및 대기(join) 그리고 결과분기 하기
MR의 최대 단점이 응답성이라고 생각하는데 oozie는 MR을 이용하여 작업을 호출하기 때문에 작업을 순차적으로 배열한다면 간단한 작업도 굉장한 수행시간을 소요하게 됩니다. 이럴경우 fork를 이용하여 병렬로 작업을 수행 할 수 있습니다. 1234<fork name='fork_CATES'> <path start='check_CATE1' /> <path start='check_CATE2' /></fork>cs check_CATE1, check_CATE2라는 action-node가 동시에 수행되게 됩니다. 이때 주의하실 점은 먼저 명시했다고 먼저수행되고 먼저끝나는 것이 아닙니다. (java의 thread를 생각하시면 편할 듯 합니다.) 이렇게 수행된 작업은 완료되면 join-node로 보내 다른 action이 종료될 때.......
2015-12-24 17:08:41 |
산소소년
OOZIE 병렬작업(fork) 및 대기(join) 그리고 결과분기 하기
MR의 최대 단점이 응답성이라고 생각하는데 oozie는 MR을 이용하여 작업을 호출하기 때문에 작업을 순차적으로 배열한다면 간단한 작업도 굉장한 수행시간을 소요하게 됩니다. 이럴경우 fork를 이용하여 병렬로 작업을 수행 할 수 있습니다. 1234 cs check_CATE1, check_CATE2라는 action-node가 동시에 수행되게 됩니다. 이때 주의하실 점은 먼저 명시했다고 먼저수행되고 먼저끝나는 것이 아닙니다. (java의 thread를 생각하시면 편할 듯 합니다.) 이렇게 수행된 작업은 완료되면 join-node로 보내 다른 action이 종료될 때.......
2015-12-24 17:08:41 |
산소소년
OOZIE 병렬작업(fork) 및 대기(join) 그리고 결과분기 하기
MR의 최대 단점이 응답성이라고 생각하는데 oozie는 MR을 이용하여 작업을 호출하기 때문에 작업을 순차적으로 배열한다면 간단한 작업도 굉장한 수행시간을 소요하게 됩니다. 이럴경우 fork를 이용하여 병렬로 작업을 수행 할 수 있습니다. 1234<fork name='fork_CATES'> <path start='check_CATE1' /> <path start='check_CATE2' /></fork>cs check_CATE1, check_CATE2라는 action-node가 동시에 수행되게 됩니다. 이때 주의하실 점은 먼저 명시했다고 먼저수행되고 먼저끝나는 것이 아닙니다. (java의 thread를 생각하시면 편할 듯 합니다.) 이렇게 수행된 작업은 완료되면 join-node로 보내 다른 action이 종료될 때.......
2015-12-24 08:08:41 |
산소소년
OOZIE 병렬작업(fork) 및 대기(join) 그리고 결과분기 하기
MR의 최대 단점이 응답성이라고 생각하는데 oozie는 MR을 이용하여 작업을 호출하기 때문에 작업을 순차적으로 배열한다면 간단한 작업도 굉장한 수행시간을 소요하게 됩니다. 이럴경우 fork를 이용하여 병렬로 작업을 수행 할 수 있습니다. 1234<fork name='fork_CATES'> <path start='check_CATE1' /> <path start='check_CATE2' /></fork>cs check_CATE1, check_CATE2라는 action-node가 동시에 수행되게 됩니다. 이때 주의하실 점은 먼저 명시했다고 먼저수행되고 먼저끝나는 것이 아닙니다. (java의 thread를 생각하시면 편할 듯 합니다.) 이렇게 수행된 작업은 완료되면 join-node로 보내 다른 action이 종료될 때.......
2015-12-24 08:08:41 |
산소소년
OOZIE shell action에서 streaming or hadoop mr 돌리기
실제 데이터를 핸들링 하는 작업을 보면 쉘스크립트 action, MR action, Hive action 등으로 확연하게 구분 지을 수 없는 애매한 과정들이 있습니다. 예를들어 "다른 클러스터의 데이터를 distcp해서 가져오고 rsync로 다른곳의 데이터를 가져온 후 그 파일을 mapper에서 사용할 cache로 등록하여 MR을 구동하고 생성된 결과물을 /user/hadoop/result 로 옮겨라!" 같은 작업은 oozie에서 개발한다면 fs action -> shell action -> mr action -> fs or shell action 등으로 세분화 해야하죠... 귀찮게... 또 이렇게 나누어 놓으면 보기에도 좋고 정상적인 운영에는 편하지만 에러가 빈번하여 부분적 복구를 자주해야 하는 작업은 환장할.......
2015-11-25 14:27:40 |
산소소년
OOZIE shell action에서 streaming or hadoop mr 돌리기
실제 데이터를 핸들링 하는 작업을 보면 쉘스크립트 action, MR action, Hive action 등으로 확연하게 구분 지을 수 없는 애매한 과정들이 있습니다. 예를들어 "다른 클러스터의 데이터를 distcp해서 가져오고 rsync로 다른곳의 데이터를 가져온 후 그 파일을 mapper에서 사용할 cache로 등록하여 MR을 구동하고 생성된 결과물을 /user/hadoop/result 로 옮겨라!" 같은 작업은 oozie에서 개발한다면 fs action -> shell action -> mr action -> fs or shell action 등으로 세분화 해야하죠... 귀찮게... 또 이렇게 나누어 놓으면 보기에도 좋고 정상적인 운영에는 편하지만 에러가 빈번하여 부분적 복구를 자주해야 하는 작업은 환장할.......
2015-11-25 14:27:40 |
산소소년
OOZIE shell action에서 streaming or hadoop mr 돌리기
실제 데이터를 핸들링 하는 작업을 보면 쉘스크립트 action, MR action, Hive action 등으로 확연하게 구분 지을 수 없는 애매한 과정들이 있습니다. 예를들어 "다른 클러스터의 데이터를 distcp해서 가져오고 rsync로 다른곳의 데이터를 가져온 후 그 파일을 mapper에서 사용할 cache로 등록하여 MR을 구동하고 생성된 결과물을 /user/hadoop/result 로 옮겨라!" 같은 작업은 oozie에서 개발한다면 fs action -> shell action -> mr action -> fs or shell action 등으로 세분화 해야하죠... 귀찮게... 또 이렇게 나누어 놓으면 보기에도 좋고 정상적인 운영에는 편하지만 에러가 빈번하여 부분적 복구를 자주해야 하는 작업은 환장할.......
2015-11-25 05:27:40 |
산소소년
OOZIE shell action에서 streaming or hadoop mr 돌리기
실제 데이터를 핸들링 하는 작업을 보면 쉘스크립트 action, MR action, Hive action 등으로 확연하게 구분 지을 수 없는 애매한 과정들이 있습니다. 예를들어 "다른 클러스터의 데이터를 distcp해서 가져오고 rsync로 다른곳의 데이터를 가져온 후 그 파일을 mapper에서 사용할 cache로 등록하여 MR을 구동하고 생성된 결과물을 /user/hadoop/result 로 옮겨라!" 같은 작업은 oozie에서 개발한다면 fs action -> shell action -> mr action -> fs or shell action 등으로 세분화 해야하죠... 귀찮게... 또 이렇게 나누어 놓으면 보기에도 좋고 정상적인 운영에는 편하지만 에러가 빈번하여 부분적 복구를 자주해야 하는 작업은 환장할.......
2015-11-25 05:27:40 |
산소소년
Z file을 hadoop에서 읽어보자
유닉스 시절에 테입 백업 용으로 사용된다는 Z압출 파일을 최근 이직한 회사에서 처음 접해봤습니다. 뭐 zcat으로 보여지길레 TextInputFormat이 알아서 읽어주겠지 하며 때려박고 작업을 구동했지만 ㅠ.ㅠ 몇 기가씩 되는 Z 압축 파일들을 단일장비에서 gz등으로 변환 하기엔 너무나 아까워서 (hadoop 노드들이 노는 꼴을 보기 싫어서) hadoop에서 직접 읽어드릴 수 있게 시도를 해보겠습니다. 우선 Z파일을 읽는 방법을 인터넷에서 뒤져 inputstream 클래스를 구현합니다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384.......
2015-11-24 10:16:27 |
산소소년
Z file을 hadoop에서 읽어보자
유닉스 시절에 테입 백업 용으로 사용된다는 Z압출 파일을 최근 이직한 회사에서 처음 접해봤습니다. 뭐 zcat으로 보여지길레 TextInputFormat이 알아서 읽어주겠지 하며 때려박고 작업을 구동했지만 ㅠ.ㅠ 몇 기가씩 되는 Z 압축 파일들을 단일장비에서 gz등으로 변환 하기엔 너무나 아까워서 (hadoop 노드들이 노는 꼴을 보기 싫어서) hadoop에서 직접 읽어드릴 수 있게 시도를 해보겠습니다. 우선 Z파일을 읽는 방법을 인터넷에서 뒤져 inputstream 클래스를 구현합니다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384.......
2015-11-24 10:16:27 |
산소소년
Z file을 hadoop에서 읽어보자
유닉스 시절에 테입 백업 용으로 사용된다는 Z압출 파일을 최근 이직한 회사에서 처음 접해봤습니다. 뭐 zcat으로 보여지길레 TextInputFormat이 알아서 읽어주겠지 하며 때려박고 작업을 구동했지만 ㅠ.ㅠ 몇 기가씩 되는 Z 압축 파일들을 단일장비에서 gz등으로 변환 하기엔 너무나 아까워서 (hadoop 노드들이 노는 꼴을 보기 싫어서) hadoop에서 직접 읽어드릴 수 있게 시도를 해보겠습니다. 우선 Z파일을 읽는 방법을 인터넷에서 뒤져 inputstream 클래스를 구현합니다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384.......
2015-11-24 01:16:27 |
산소소년
Z file을 hadoop에서 읽어보자
유닉스 시절에 테입 백업 용으로 사용된다는 Z압출 파일을 최근 이직한 회사에서 처음 접해봤습니다. 뭐 zcat으로 보여지길레 TextInputFormat이 알아서 읽어주겠지 하며 때려박고 작업을 구동했지만 ㅠ.ㅠ 몇 기가씩 되는 Z 압축 파일들을 단일장비에서 gz등으로 변환 하기엔 너무나 아까워서 (hadoop 노드들이 노는 꼴을 보기 싫어서) hadoop에서 직접 읽어드릴 수 있게 시도를 해보겠습니다. 우선 Z파일을 읽는 방법을 인터넷에서 뒤져 inputstream 클래스를 구현합니다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384.......
2015-11-24 01:16:27 |
산소소년
FTP 스크립트
FTP에 많은 파일을 올려야 하는 상황이 생겨 급하게 만들어 봤습니다. 옵션 중 i는 prompt를 무시해라 n은 auto-login, v는 verbose 입니다. #!/bin/sh PWD=$(cd `dirname $0` ; pwd) WORK_DATE=$1 if [ -z "$WORK_DATE" ] ; then echo "WORK_DATE is null" echo "usage ./sendCDR.sh yyyymmdd" exit 1 fi SERVER="255.255.255.255" USER="username" PASS="password" LOCAL_PATH="/airguy/pds/$WORK_DATE" UPLOAD_PATH="PDS" #입력받은 일자의 sub-dir에서 dat파일을 parent로 이동시킵니다. find $LOCAL_PATH/dt=$WORK_DATE -name "*.dat" -exec mv {} $LOCAL_PATH \; ftp -in $SERVER << EOS user $USER $PASS bin cd $UPLOAD_PATH lcd $.......
2015-10-29 16:21:54 |
산소소년
FTP 스크립트
FTP에 많은 파일을 올려야 하는 상황이 생겨 급하게 만들어 봤습니다. 옵션 중 i는 prompt를 무시해라 n은 auto-login, v는 verbose 입니다. #!/bin/sh PWD=$(cd `dirname $0` ; pwd) WORK_DATE=$1 if [ -z "$WORK_DATE" ] ; then echo "WORK_DATE is null" echo "usage ./sendCDR.sh yyyymmdd" exit 1 fi SERVER="255.255.255.255" USER="username" PASS="password" LOCAL_PATH="/airguy/pds/$WORK_DATE" UPLOAD_PATH="PDS" #입력받은 일자의 sub-dir에서 dat파일을 parent로 이동시킵니다. find $LOCAL_PATH/dt=$WORK_DATE -name "*.dat" -exec mv {} $LOCAL_PATH \; ftp -in $SERVER
2015-10-29 16:21:54 |
산소소년
FTP 스크립트
FTP에 많은 파일을 올려야 하는 상황이 생겨 급하게 만들어 봤습니다. 옵션 중 i는 prompt를 무시해라 n은 auto-login, v는 verbose 입니다. #!/bin/sh PWD=$(cd `dirname $0` ; pwd) WORK_DATE=$1 if [ -z "$WORK_DATE" ] ; then echo "WORK_DATE is null" echo "usage ./sendCDR.sh yyyymmdd" exit 1 fi SERVER="255.255.255.255" USER="username" PASS="password" LOCAL_PATH="/airguy/pds/$WORK_DATE" UPLOAD_PATH="PDS" #입력받은 일자의 sub-dir에서 dat파일을 parent로 이동시킵니다. find $LOCAL_PATH/dt=$WORK_DATE -name "*.dat" -exec mv {} $LOCAL_PATH \; ftp -in $SERVER << EOS user $USER $PASS bin cd $UPLOAD_PATH lcd $.......
2015-10-29 07:21:54 |
산소소년
FTP 스크립트
FTP에 많은 파일을 올려야 하는 상황이 생겨 급하게 만들어 봤습니다. 옵션 중 i는 prompt를 무시해라 n은 auto-login, v는 verbose 입니다. #!/bin/sh PWD=$(cd `dirname $0` ; pwd) WORK_DATE=$1 if [ -z "$WORK_DATE" ] ; then echo "WORK_DATE is null" echo "usage ./sendCDR.sh yyyymmdd" exit 1 fi SERVER="255.255.255.255" USER="username" PASS="password" LOCAL_PATH="/airguy/pds/$WORK_DATE" UPLOAD_PATH="PDS" #입력받은 일자의 sub-dir에서 dat파일을 parent로 이동시킵니다. find $LOCAL_PATH/dt=$WORK_DATE -name "*.dat" -exec mv {} $LOCAL_PATH \; ftp -in $SERVER << EOS user $USER $PASS bin cd $UPLOAD_PATH lcd $.......
2015-10-29 07:21:54 |
산소소년