Open Cloud Engine 빅데이터플랫폼과 Flamingo 홗용사례 Open Cloud Engine Flamingo Project 김명하커미터 2014.08.05 v1.0
Flamingo Project In Open Cloud Engine 웹기술을활용하여빅데이터인프라및데이터를편리하게사용하도록한다. 사용자가데이터를잘활용할수있도록한다. 하나의화면에서자유롭게다양한작업을할수있는작업공간을제공한다. 다양한분석및처리 MapReduce 를쉽게재활용할수있도록한다. 오픈소스기반으로모든시스템을제대로갖추고진행한다. 남의것에의존하지않고직접다만든다. 현장의업무를중심으로설계한다. 다국어지원을통해다양한사람들이사용할수있도록한다. Hadoop EcoSystem 을잘지원한다.
Future of Big Data Platform 빅데이터분석및서비스플랫폼 모바일 Browser 인포메이션카탈로그 Search 인포메이션유형 보안등급 생성주기 형식 사용자친밀도 1 매일새벽2시 XML 서비스요청 시스템 Open API 6 아이템추천 2 매일새벽 1 시 JSON 구매성향 3 매일저녁 8 시 XML/JSON 오피니언리더점수 2 매일오젂 10 시 XML/JSON 5 데이터이용자 데이터이용자 4 분석결과를외부에제공하기위해 Open API 로노출 분석결과를재사용 7 Browser 디자이너 Search 수집 로그데이터 MapReduce 분석모듈 그래프분석 리더선출 분석결과검증 1 형태소분석 사용자별평가 3 데이터분석가 로그데이터 오피니언리더점수 데이터시각화를위한 Chart 2 워크플로우디자인 데이터분석가서비스기획자
Flamingo Project 현장에서오랫동안경험한결과 Hadoop 기반 Big Data 환경은기능성이매우중요 많은오픈소스들이통합되면서관리의어려움이발생하고있고통합환경을제공하는 UI도필요
Flamingo 도입및운영처
Flamingo Project User Interface Scheduler Manager File System Manager Hive Manager Workflow Designer Resource Monitor Logging Monitor Metadata Catalog Job Manager Usage Statistics Workflow Management Graph Builder Workflow Structure Runner Task Job Tracker Resource Monitoring Application Manager Schedule Management Scheduler Scheduler Scheduler Manager Distributed Parallel Task Management Worker Worker Worker MapReduce MapReduce MapReduce Algorithm ETL Collector Metrics Agent
Spring IO Flamingo Project Spring Framework 4, Spring Boot 1, Spring Web MVC Web Rich UI Framework Sencha ExtJS 4 (GPL v3) Persistence : MyBATIS Hadoop EcoSystem : Hadoop 1.x & 2.x MySQL5.1 or higher JDK 1.7 Hadoop Distribution Vanilla Hadoop Cloudra CDH Pivotal HD (With HAWQ)
Flamingo 의통합환경 (Workbench) 사용자는작업공간내에서자유롭게이동하면서작업을할수있도록구성 각화면은최대한독립개발이가능하도록분리하여구성 재사용가능한것은컴포넌트화여코드작성을최소화 누구나추가할수있도록최대한구조를단순화하고대중적인프레임워크를사용 개발방법도모두표준화 ( 도구, 절차, 매뉴얼, 환경등등 )
Flamingo Architecture
File System Browser Hadoop 이파일을다루므로파일시스템브라우저의기능은상당히중요한메인기능 사용자가 Windows Explorer 스타일의친숙한 UX 를따라가도록설계
File System Browser FLAMINGO 에서는사용자가주로하는행위에최적화하여기능을제공 디렉토리를 Hive DB 와 Table 로젂홖 브라우저에서는 Hive DB 와 Table 경로를다른아이콘으로표시하여확인
File System Browser 주요이슈 하나의디렉토리에수없이많은파일및디렉토리 아주많이존재하는경우 UI 표현의문제발생 ( 예 ; 20 만개 ) 대용량파일의업로드및다운로드그리고통제 사용자의등급별접근제어및표시여부 특정등급의사용하는사용자는해당경로의디렉토리 / 파일이보이지않아야함 파일의내용표시 압축파일, 사용자만의 Writable 을사용한바이너리파일은표시가어려움 Object Storage 가백엔드인경우파일처리레이어의추상화가매우어려움 ( 파일방식자체가상이 )
File System Browser 기능고도화 파일내용및 Block Location 보기기능 사용자의등급별디렉토리및파일표시및기능제한 (Hadoop 자체기능은없음 ) 예 ) 일반사용자의경우 /tmp 디렉토리는표시하지않음 디렉토리및파일의 permission 설정기능 사용자의홈디렉토리기능 (Hadoop 자체기능은없음 ) 디렉토리 Quota 설정기능 파일시스템의크기정보를주기적으로덤프를생성하는기능추가 ( 모니터링 )
Audit Log HDFS 등과같은 File System 상에서발생하는로그의기록을모두남기고조회
Workflow Designer 다양한분석모듈을탑재할수있도록설계 ( 예 ; Mahout) UI를통해미리제공하는분석및처리모듈을드래그앤드롭으로처리 현재분석알고리즘및기초통계모듈은통합완료, Mahout, Giraph 통합진행중. 추후 MR ETL 통합예정.
Workflow Designer 주요이슈 데이터프로세싱을위한워크플로우디자인 각노드간의존성관리 다양한 MapReduce 의파라미터처리 hadoop jar test.jar wordcount input in.txt output out.txt hadoop jar test.jar wordcount input.txt output.txt 스케줄러에등록한워크플로우가실행할때경로처리 복잡한워크플로우의해석및실행 ( 예 ; 분기처리 ) 워크플로우스케줄링시변수값변경 기개발한 MapReduce 의 UI 화를통해재사용하기위한통합방안 Apache Oozie 의경우 MR 처리시제약이많음
Big Workflow Case 현장에서필요하다면다수의노드로구성핛수있는워크플로우를실제로구현하여사용함.
Workflow Designer MapReduce 개발자마다모두파라미터처리가틀리고표준화되어있지않음 이러한다양한 MapReduce 를빠르게어떻게통합할것인가?
Workflow Designer 대부분의 UI 컴포넌트는재사용가능하도록설계하여컴포넌트형태로제공 MapReduce Module과 UI 통합방식이표준화되어있으며프레임워크로제공되어빠르게개발및통합가능재사용컴포넌트 UI 구성
Workflow Designer 모듈의아이콘도메타데이터를통해서정의하여별도코드작성을최소화하고 관련기능을통합프레임워크로위임하고사용자는메타데이터만으로핸들링
Workflow Designer 의 Module 분류내용주요출력결과 MapReduce 처리내용 수치데이터기초통계 합계, 평균 (4 종 ) 분산, 표준편차최대 / 최소 / 중앙값 데이터의분핛및분핛데이터의통계산출 분핛산출된통계의합산및최종통계산출 수치 / 범주데이터기초통계분석 범주데이터기초통계 수치데이터확싞도기반합계 발생빆도, 발생비율 확싞도 (Certainty Factor) 기반합계 데이터의속성값별빆도수산출 빆도에대핚젂체데이터대비비율산출 데이터의분핛및분핛데이터의확싞도산출 분핛산출된통계의합산및최종확싞도산출 젂처리 수치데이터 Min/Max 기반정규화 Min/Max 정규화값 데이터의 Min/Max 수치산출 Min/Max 값기반데이터정규화 유사 / 상관분석 이진벡터데이터기반 수치벡터데이터기반 문자열데이터기반 Hamming, Jaccard/Tanimoto, Dice Euclidean, Manhattan, Cosine, Pearson Hamming, Edit(Levenshtein) 데이터의속성별분해레코드생성 분해된속성별데이터레코드를이용핚유사 / 상관수치계산 Clustering K-Means, EM 데이터최근접핛당 ( 거리 / 확률빇도 ) 군집별핛당데이터를이용핚군집중심정보갱싞 ( 거리평균 / 데이터분포 ) 마이닝기계학습 Classification ID3 의사결정트리의분류노드선택을위핚속성별정보량계산 Recommendation Collaborative Filtering Item/Use based Recommendation 사용자및아이템간상관계수도출 아이템속성별이진유사도계산 사용자별추천아이템생성 공통 Hadoop EcoSystem Program MapReduce, Hive, Pig, Java, Python, Bash
Workflow Designer 의 Module ( 예정 ) 분류내용주요출력결과예정일정 젂처리 MapReduce ETL Grep, Filter, Encrypt, Group By, Remove 등등 형태소분석핚글형태소분석 완료 Flamingo 1.3 에서지원 Clustering Canopy Flamingo 1.4 에서지원 마이닝기계학습 Classification Logistic Regression, Random Forest Naïve Bayes Flamingo 1.4 에서지원 Graph Apache Giraph, GraphBuilder Flamingo 1.4 에서지원 공통 Hadoop EcoSystem Program Sqoop Flamingo 1.2에서지원 Apache Spark & Shark Flamingo 1.4에서지원 PL/Java Flamingo 1.4에서지원 R Statistics Flamingo 1.3에서지원 Commercial SQL On Hadoop Pivotal HAWQ Flamingo 1.5 에서지원 Input Format Binary File Format Flamingo 1.3 에서지원 기타 File Format PDF Text Extractor Flamingo 1.3 에서지원 Excel Text Processor 현재적용완료 Framework 비정형처리 Apache UIMA Framework 현재적용완료 Log 처리 Apache Web Server Access Log To CSV 현재적용완료
Apache Access Log To CSV
Apache Access Log To CSV MapReduce JAR 파일과 Driver 클래스 작성핚 MapReduce 의파라미터옵션 CSV 파일변홖시필요핚컬럼구분자 패턴과다른로그의경우표준출력으로기록핛지여부 ( 디버깅용 ) Apache Access Log 의위치와 CSV 파일의위치를지정
Workflow Designer 최종결과물을생성하기위해서는복잡한워크플로우를구성하게됨 MapReduce 의특성상파일을가공하는데한번의작업이아닌다수의작업으로해야하는경우빈번하여워크플로우를복잡하게만듬 국내엔지니어들은절대적으로 Apache Hive 의 SQL like Query Language 를선호하여 MapReduce 를많이사용하지않으므로워크플로우디자이너의중요성이많이부각되지않음 현업에서다양한로그파일을다루는경우워크플로우디자이너와 MapReduce 는매우중요함
Workflow Monitoring 워크플로우디자이너에서디자인한워크플로의실행을모니터링. 실행로그를정확하게확인할수 있음.
Workflow Monitoring 워크플로우의노드는다수의 MAPREDUCE JOB 으로동작핛수있으므로추적이가능해야함 사용자관점의 MapReduce 실행이력 root@n02:~/flamingo_data/tmp/2014/03/31/90/job_20140331_172000_90_157566920/26385942 $> ls -lsa 합계 40 4 drwxr-xr-x 2 root root 4096 2014-03-31 17:23. 4 drwxr-xr-x 20 root root 4096 2014-03-31 17:23.. 16 -rw-r--r-- 1 root root 12731 2014-03-31 17:23 action.log 실행로그 4 -rwxrwxrwx 1 root root 1259 2014-03-31 17:23 core-site.xml 0 -rw-r--r-- 1 root root 0 2014-03-31 17:23 hadoop.job_201403300831_0471 MapReduce Job ID 4 -rwxrwxrwx 1 root root 852 2014-03-31 17:23 script.sh 커맨드라인 root@n02:~/flamingo_data/tmp/2014/03/31/90/job_20140331_172000_90_157566920/26385942 $>
Hadoop Job Monitoring Hadoop Job 모니터링에서도반대로추적이모두가능해야함.
Hadoop Job Monitoring 주요이슈 동적인값들을얻고자할때 Workflow Designer 에서활용 예 ) 오늘날짜 : dateformat( yyyymmdd ) dateformat( yyyy-mm-dd ) 워크플로우가실행할때특정한값들은해당시간으로대체되어야하는경우가발생 예 ) 오늘실행하는워크플로우는어제날짜의디렉토리에기록 ( 일배치 ) 제공하는 Expression Language dateformat( DATE FORMAT ) dateformat( yyyymmddhhmmss ) hostname, escapestring, yesterday, tommorow month, day, hour, minute, day( yyyymmdd, -1) :: 어제날짜 (20131111) trim, concat, urlencode, firstnotnull
Expression Language (EL) 동적인값들을얻고자할때 Workflow Designer 에서활용 예 ) 오늘날짜 : dateformat( yyyymmdd ) dateformat( yyyy-mm-dd ) 워크플로우가실행할때특정한값들은해당시간으로대체되어야하는경우가발생 예 ) 오늘실행하는워크플로우는어제날짜의디렉토리에기록 ( 일배치 ) 제공하는 Expression Language dateformat( DATE FORMAT ) dateformat( yyyymmddhhmmss ) hostname, escapestring, yesterday, tommorow month, day, hour, minute, day( yyyymmdd, -1) :: 어제날짜 (20131111) trim, concat, urlencode, firstnotnull
Expression Language (EL) 입력필드에 ${EL} 형식으로입력하는경우동적으로해석하여값이변경됨.
Expression Language (EL) 주요이슈 상수및변수에대한정의가생각보다다양함 실패한배치작업을재실행하는경우워크플로우에정의한 Expression 이제대로동작하지못함 워크플로우이실행실패시재실행하는경우큰문제발생 ${dateformat( yyyymmdd -1) 의경우어제와오늘재실행은값이틀려짐 워크플로우단계에서정의한워크플로우변수가배치작업정의단계에서재정의될수있음
Hadoop Job Tracker Monitoring Hadoop 의 Job Tracker 상세정보를그래프로보여주는모니터링기능
Hadoop Job Tracker Monitoring Hadoop Job 의상세정보를원격에서모두모니터링하고추적가능
Job & Workflow Monitoring 주요이슈 Workflow 가실행하는 Job 을추적할수없음 Pig Latin/Hive QL은다수의 Hadoop Job을생성 워크플로우가얼마나많은자원을사용했는지파악이매우어려움 Hadoop 의 Job Tracker, History Server 를외부에공개하는데보안상이슈가있음 Job Tracker, History Server 를별도 API 로추출하는데상당한한계가있고, 정보도완전히수집되지않음
Hive Editor & Hive Metastore Browser 파일시스템의파일을 SQL로조회, 브라우징, 다운로드 Hive Metastore 관리기능을제공하여데이터베이스와테이블을통합관리할수있도록기능을제공
Hive Editor & Hive Metastore Browser 주요이슈 다양한배포판간호환성 Protocol Buffer, Thrift 호환성은동일배포판도버전에따라서매우상이 배포판에따라서관련기능이커스터마이징되어있어서연계어려움 Hive QL 처리시장시간실행하는 Hive QL 의경우웹세션종료문제 Hive 에서제공하는 SERDE 지원문제 Hive QL 을실행하는 Hive Server 1/2 의접근방식의차이와호환성 유사하게제공하는 API 가분산되어있고명세서가없음 Managed/External Table 과 Complex Data Type 지원 Table Partitioning 지원
Hive 편집기적용사례 시스템의사용자접근이력로그를 Hive 로조회하는사례 대상로그의형식이반정형이나비정형인경우문제발생 칼럼안에 Array, Map 등의이상한구조를가진로그의경우문제발생 대상로그는 CSV 형식과같은잘정리된형식이아닌반정형로그형식 TYPE="IPINSIDE" TIME="2014-03-20 17:40:37" ID="guest0899349" MAC="AA-BB-01-18-68-68" N AT_IP="10.24.104.104" NAT_IP_NATION="USA" PROXY_USE="Y" VPN_USE="Y" REMOTE_USE="Y" PROXY_IP="192.24.104.104" PROXY_IP_NATION="USA" VPN_IP="192.24.104.104" VPN_IP_NATION= "USA" SVC_CODE="SVC_CODE_0899349" HDD_DISK="HDD_DISK_0899349" CPU_INFO="CPU_INFO_ 0899349" USE_OS_NATION="USA" MESG="mesg... time[1395284830] rnd[875899349] unq[500000 0]" TYPE="IPINSIDE" TIME="2014-03-20 17:40:37" ID="guest0899349" MAC="AA-BB-01-18-68-68" N AT_IP="10.24.104.104" NAT_IP_NATION="USA" PROXY_USE="Y" VPN_USE="Y" REMOTE_USE="Y" PROXY_IP="192.24.104.104" PROXY_IP_NATION="USA" VPN_IP="192.24.104.104" VPN_IP_NATION= "USA" SVC_CODE="SVC_CODE_0899349" HDD_DISK="HDD_DISK_0899349" CPU_INFO="CPU_INFO_ 0899349" USE_OS_NATION="USA" MESG="mesg... time[1395284830] rnd[875899349] unq[500000 0]"
TYPE="IPINSIDE" TIME="2014-03-20 17:40:37 " ID="guest0899349" MAC="AA-BB-01-18-68-68 " NAT_IP="10.24.104.104" NAT_IP_NATION="USA" PROXY_USE="Y" VPN_USE="Y" REMOTE_USE="Y" PROXY_IP="192.24.104.104" PROXY_IP_NATION="USA" VPN_IP="192.24.104.104" VPN_IP_NATION="USA" SVC_CODE="SVC_CODE_089 9349" HDD_DISK="HDD_DISK_0899 349" CPU_INFO="CPU_INFO_0899 349" USE_OS_NATION="USA" MESG="mesg... time[13952 84830] rnd[875899349] unq[ 5000000] Hive 편집기적용사례
Hive 편집기적용사례 CREATE DATABASE TEST LOCATION '/RAW'; CREATE EXTERNAL TABLE TEST.MAS ( type string, time string, id string, mac string, nat_ip string, nat_ip_nation string, proxy_use string, vpn_use string, remote_use string, proxy_ip string, proxy_ip_nation string, vpn_ip string, vpn_ip_nation string, svc_code string, hdd_disk string, cpu_info string, use_os_nation string, mesg string) PARTITIONED BY ( yyyy string, mm string, dd string) ROW FORMAT SERDE 'kr.cloudine.poc.masserde' LOCATION '/RAW/MAS'; ALTER TABLE MAS ADD PARTITION (YYYY='2014', MM='03', DD= 25');
Hive 편집기적용사례
Hive 편집기적용사례 public class MasSerde implements SerDe { private StructTypeInfo rowtypeinfo; private ObjectInspector rowoi; private List<String> colnames; private List<Object> row = new ArrayList<Object>(); HIVE QUERY 실행시로그파일을로딩할때 DESERIALIZE 한다. Pattern p = Pattern.compile("\"(.*?)\""); // 로그파일의정규표현식 @Override public Object deserialize(writable blob) throws SerDeException { row.clear(); Matcher m = p.matcher(blob.tostring()); // 로그파일을정규식으로패턴매칭 List list = new ArrayList(); while (m.find()) { list.add(m.group(1)); // 패턴매칭을통해추출핚칼럼정보를저장 } String[] split = (String[]) list.toarray(new String[list.size()]); int i = 0; for (String fieldname : rowtypeinfo.getallstructfieldnames()) { TypeInfo fieldtypeinfo = rowtypeinfo.getstructfieldtypeinfo(fieldname); row.add(parsefield(split[i], fieldtypeinfo)); i++; } } return row; }... 생략
Hive 편집기적용사례
Pig Latin Script 를편집하고저장 Pig Script Editor Pig Latin Script 를실행하고관련이력을관리하여빠르게데이터를프로세싱
배치작업의동작현황을보여주는 UI Dashboard
Job Management 작성한워크플로우는운영시배치스케줄링필요 스케줄링작업이증가하는경우노드증가시스케줄러용량도증가 Cron Expression 기반스케줄링요구 워크플로우작성시워크플로우변수를스케줄링시점에서변경하여적용 ( 예 ; HR 부서코드 ) 배치작업의생명주기관리
Job Management 워크플로우를주기적으로실행하도록배치작업을등록하고모니터링 엔진의메모리상태 작업스케줄링현황 등록되어있는배치작업현황
Job Management Cron Expression 을 100% 지원
Hadooop 2 지원 데이터노드의상태정보
Hadooop 2 지원 Resource Manager 상태정보
Hadooop 2 지원 YARN 애플리케이션실행목록 MapReduce Job 목록
Hadooop 2 지원 MapReduce Job 의기본요약정보
Hadooop 2 지원 MapReduce Job Tasks Hadoop Job Counter
구분 Flamingo 1.1 기준기능목록 기능 모니터링 Namenode 모니터링 (HDFS Usage, Datanode, Bad Block 등등 ) Job Tracker 모니터링 (MapReduce Task, JVM Heap, Task Tracker, Job) Hadoop Job 모니터링 (Job Info, MapReduce Progress, MapReduce Counter, MapReduce Configuration) 워크플로우모니터링 ( 실행이력및상세정보 ) 배치작업모니터링 ( 작업현황, 엔진의메모리상태 ) 워크플로우관리 워크플로우저장, 실행, 복사, 삭제 드래그앤드롭 워크플로우변수 데이터처리모듈제공 (MapReduce, Pig, Hive, Java, Bash, Python, Apache Log, Unstructure Analysis :: UIMA, Clustering, Classification, Normalization, Statistics, Similarity, Recommendation 등등 ) 배치작업관리 배치작업등록, 일시중지, 재시작, 종료 등록한배치작업목록및상태현황보기 ( 다음실행시간, 등록한사용자포함 ) Pig 편집기 Pig Latin Script 편집및저장 Pig Latin Script 실행이력보기 Pig Latin Script 실행및로그보기 Hive 편집기 Hive 쿼리편집및실행 Hive 쿼리실행이력 Hive 쿼리실행결과브라우징 ( 전 / 후 ) Hive 쿼리실행결과다운로드 파일시스템관리 디렉토리관리 파일관리 파일업로드 ( 멀티, 드래그앤드롭 ) 및다운로드 파일및디렉토리정보보기 Hive DB, Table 생성 파일처리이력감시 기타 웹브라우저로모든동작가능 (Chrome, Safari, IE) Multi Hadoop Cluster 지원 Amazon Elastic MapReduce 지원 Hadoop 2 지원 바닐라 Hadoop 2
Flamingo 에추가되어야하는기능 타 Hadoop EcoSystem 지원필요 Apache Spark, Apache ZooKeeper, Apache HBase ETL & Log Search Function ETL 은타도구벤치마킹및 MapReduce Module 제공 Log Search 는 Open Cloud Engine 내에 Realtime Stream 프로젝트로보충 BI & Visualization Tool 과연계 타상용도구지원 ( 예 ; Pivotal HAWQ) 도메인에특화된도구들 ( 예 ; MapReduce 기반 Pivot 기능 )
Flamingo Project 의발젂방향 Public Cloud Provider에서제공하는인프라를홗용핚 SaaS 서비스 (Amazon AWS, Rackspace, KT) Hadoop Cluster Provisioning + Flamingo In-Memory, NoSQL, Machine Learning, R Object Storage와연계핚 Tenant 개념의설계 Machine Learning as a Service Appliance에탑재핚 Big Data Application & Service Development/Operation Toolkit Flamingo + Netra on OpenStack
Source Forge ( 다운로드 ) 프로젝트정보 http://www.sourceforge.net/projects/hadoop-manager 위키 ( 설명서및각종기술자료 ) http://wiki.opencloudengine.org/pages/viewpage.action?pageid=81 9205 이슈관리 ( 버그및신규기능 ) http://jira.opencloudengine.org 빌드서버 http://build.opencloudengine.org 구글그룹스 : flamingo-project-kr@googlegroups.com facebook : https://www.facebook.com/groups/flamingo.workflow 서브스크립션 ( 기업기술지원 ) : sales@cloudine.co.kr
참여와공유!! www.opencloudengine.org