Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Flamingo (FEA) Spark Designer

523 Aufrufe

Veröffentlicht am

Flamingo Analytics에 들어가는 Spark Designer 개요를 설명합니다.

Veröffentlicht in: Daten & Analysen
  • Als Erste(r) kommentieren

Flamingo (FEA) Spark Designer

  1. 1. 초보자의 데이터 분석을 지원하는 Spark Designer 설계안 빅데이터본부 | 김병곤
  2. 2. Spark Designer는 Flamingo 2.0의 Workflow Designer를 모형으로 하고 있습니다. SparkDesigner의모형
  3. 3. Spark Designer는 Flamingo 2.0의 Workflow Designer를 모형으로 하고 있습니다. Flamingo2.0WorkflowDesigner의문제점 메타데이터 관리 부재 데이터소스로 HDFS만 지원 MapReduce의 한계 워크플로우 구성의 한계
  4. 4. Workflow Designer는 기능적 특성이 다양하게 반영되어야 하나 서로 상충되는 것이 있어서 두 개의 워크플로우 디 자이너로 분리하였습니다. Flamingo2.0WorkflowDesigner를분리 Oozie Designer Spark Designer Workflow Designer
  5. 5. • 초보자들이 쉽게 사용할 수 있는 분석 UI 제공 • 전처리, 머신러닝 등을 통합할 수 있는 UI 제공 • 메타데이터를 관리할 수 기능 제공 • 다양한 데이터를 처리할 수 있는 통합 기능 제공 Spark Designer 목적
  6. 6. SparkDesigner의유스케이스 Spark Designer는 초보자들이 쉽게 사용할 수 있는 User Interface와 Framework를 제공하는 것을 목표로 합니 다. Preprocessing 기 보유하고있는데이터를가공하는 역할(머신러닝의입출력데이터를 가공하는데도가능) Data Quality Check 데이터품질관리(일관성,유효성,완 전성등…)를위한데이터 처리 Machine Learning 기 보유하고있는데이터를기반으로 Spark MLlib에서 제공하는머신러닝 알고리즘을수행(예; 추천) DataSource Integration RDBMS, File, HDFS 등등 다양한데 이터소스의데이터를한번에처리
  7. 7. SparkDesigner의구현에서고려해야할점 메타데이터 관리 데이터의메타데이터관리어려움 UI Module의 메타데이터관리필요 워크플로우 관리 워크플로우표현의최적의방법은? 전처리/알고리즘 Module 확장 CustomModule의 확장 전처리Module의 지원범위 머신러닝Module의 지원 범위 워크플로우 실행 Spark Job을 누가관리해야하는가? Spark Job을 실행하는주체?
  8. 8. 메타데이터관리 • Hadoop의 MapReduce는 병렬/분산 처리 방식에 대한 Framework • 고성능 처리에는 적합하지만 메타데이터 관리 방안 부재 • Apache Hive의 HCatalog도 대안이 되기에는 대중성 및 활용성 떨어짐 • Spark 최신 버전에서 RDD  DataFrame  DataSet 지원을 통해 메타데이터 관리가 가능해짐 • File의 Metadata 관리가 가능하게 되어 기존의 Workflow Designer의 메타데이터 관리를 보완
  9. 9. Spark의DataFrame& Dataset • Unified Spark 2.0 API를 통해 데이터를 관리하는 방법이 정교해짐 • 특히, Dataset의 등장은 컬럼 정보의 메타데이터 관리를 유연하게 이끌 수 있음 • Dataset은 Java, Scala만 지원 (Python, R은 DataFrame만 지원)
  10. 10. Spark의DataFrame& Dataset • DataFrame & Dataset의 가장 큰 강점은 테이블 구조의 데이터 표현 가능 • 테이블 구조의 메타데이터 정의 가능
  11. 11. Spark의메타데이터처리 • 데이터에 대한 POJO를 정의하여 메타데이터化 후 데이터 처리 • POJO를 지정해야 하므로 자유도가 매우 떨어짐 // $example on:schema_inferring$ // Create an RDD of Person objects from a text file JavaRDD<Person> peopleRDD = spark.read() .textFile("examples/src/main/resources/people.txt") .javaRDD() .map(new Function<String, Person>() { @Override public Person call(String line) throws Exception { String[] parts = line.split(","); Person person = new Person(); person.setName(parts[0]); person.setAge(Integer.parseInt(parts[1].trim())); return person; } }); // Apply a schema to an RDD of JavaBeans to get a DataFrame Dataset<Row> peopleDF = spark.createDataFrame(peopleRDD, Person.class); // Register the DataFrame as a temporary view peopleDF.createOrReplaceTempView("people"); // SQL statements can be run by using the sql methods provided by spark Dataset<Row> teenagersDF = spark.sql("SELECT name FROM people WHERE age BETWEEN 13 AND 19");
  12. 12. Spark의메타데이터처리 • 데이터 파일에 대해서 문자열 기반의 메타데이터 등록 가능 StructType schema = new StructType(new StructField[]{ new StructField("PRODUCT_CLASSIFICATION", DataTypeUtils.getDataType("STRING"), true, Metadata.empty()), new StructField("PRODUCT_NM", DataTypes.StringType, true, Metadata.empty()), new StructField("BRAND_LINE", DataTypes.StringType, true, Metadata.empty()), new StructField("USE_YN", DataTypes.StringType, true, Metadata.empty()) }); RelationalGroupedDataset grouped = ds.groupBy("PRODUCT_CLASSIFICATION"); Dataset<Row> count = grouped.count(); Dataset<Row> agg = grouped.agg( count("*").as("COUNT"), first("PRODUCT_NM").as("PRODUCT_NM"), first("BRAND_LINE").as("BRAND_LINE") ).filter("COUNT > 1"); agg.show();
  13. 13. • 이기종의 데이터 소스에서 데이터를 로딩하여 결합 > 암호화 > 데이터 품질검사 > 결과 저장 SparkDesigner의적용시나리오– 데이터품질 관리 HDFS Input JDBC Input Hive Input Group By Module Join Module Encryption Module Data Quality Module JDBC Output Oozie Workflow 대비 Spark Workflow는 하나의 프로세스에서 모두 처리하여 효율성이 높음
  14. 14. • 이기종의 데이터 소스에서 데이터를 로딩하여 결합 > 암호화 > 데이터 품질검사 > 결과 저장 SparkDesigner의적용시나리오– 추천엔진(CollaborativeFiltering) HDFS Input (Rating) Clean ETL Remove ETL ALS Recommendation JDBC Input (Movie Title) 추천을 위해서 복잡한 과장을 하나의 Spark Job으로 모두 구현할 수 있도록 하는 유연성 제공 Model Evaluator Model Exporter HDFS Output Join ETL HDFS Output
  15. 15. SparkDesignerUIPrototype Browser DataSource ETL Data Quality Data Quality Incompleteness Data Mining CF Recommendation HDFS Input (Rating) Clean ETL Remove ETL ALS Recommendation JDBC Input (Movie Title) Model Evaluator Model Exporter HDFS Output Join ETL HDFS Output File Output JDBC Output HDFS Input JDBC Input HDFS OutputFile Input Hive Input RunSaveCopyName:
  16. 16. DirectlyAcyclicGraph(DAG) • 단방향 비순환 그래프 • Spark Job 의 처리는 단방향 비순환 그래프의 특성을 가짐 • 하지만 사람은 디자이너를 통해 복잡한 그래프를 구성하기를 원함  그래프 해석 필요
  17. 17. DirectlyAcyclicGraph(DAG)로해석하는그래프 HDFS Input JDBC Input Hive Input Group By Module Join Module Encryption Module Data Quality Module JDBC Output HDFS Input JDBC Input Hive Input Group By Module Join Module Encryption Module Data Quality Module JDBC Output
  18. 18. GraphML을이용한DAG의표현 • 현재 Spark Designer에서 표현한 DAG를 어떻게 표현할 것인가를 결정 • 기존 Flamingo Workflow Designer는 자체 Workflow Schema를 가짐 • 후보 기술로, GraphML 고려 <?xml version="1.0" encoding="UTF-8"?> <graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <graph id="G" edgedefault="undirected"> <node id="n0"/> <node id="n1"/> <edge id="e1" source="n0" target="n1"/> </graph> </graphml>
  19. 19. GraphAlgorithm을통해DAG의순서를결정 • Spark Designer의 Workflow를 그래프로 구성하여 실행 순서를 결정 DirectedGraph<Module, DefaultEdge> g = new DefaultDirectedGraph<>(DefaultEdge.class); Module hdfsInput = new Module("HDFS Input", "INPUT", "HDFS_INPUT"); Module jdbcInput = new Module("JDBC Input", "INPUT", "JDBC_INPUT"); … Module join = new Module("Join", "ETL", "JOIN"); Module encryption = new Module("Encryption", "DQ", "ENC"); Module dataQuality = new Module("Data Quality", "DQ", "DQ"); Module jdbcOutput = new Module("JDBC Output", "OUTPUT", "JDBC_OUTPUT"); // add the vertices g.addVertex(hdfsInput); g.addVertex(jdbcInput); … g.addVertex(join); g.addVertex(encryption); g.addVertex(dataQuality); g.addVertex(jdbcOutput); g.addEdge(hdfsInput, groupBy); g.addEdge(jdbcInput, groupBy); ... g.addEdge(join, encryption); g.addEdge(encryption, dataQuality); g.addEdge(dataQuality, jdbcOutput); OrderIterator<Module, DefaultEdge> orderIterator = new OrderIterator<Module, DefaultEdge>(g); while (orderIterator.hasNext()) { Module module = orderIterator.next(); System.out.println(module); } HDFS Input JDBC Input Hive Input Group By Join Encryption Data Quality JDBC Output
  20. 20. SparkDesigner의Workflow실행하기 Designer Controller Workflow Service Metadata Resolver Execution Planner Closest First Execution Plan Topological Order Execution Plan Depth First Execution Plan Random Walk Execution Plan Breadth First Execution Plan Metadata Repository Oozie Workflow Builder Oozie Workflow Service Oozie Workflow Runner Apache Oozie Spark Designer Job
  21. 21. 앞으로좀더 고민해야할일 • Spark Designer의 Workflow를 XML로 표현할지, Database로 표현할지 • Spark Designer의 Custom Module을 추가할 수 있는지에 대한 검토 및 설계 • Spark Designer의 Module간 메타데이터를 어떻게 처리할지? • Spark Designer의 Module간 연결 상태가 변경되었을 때 어떻게 메타데이터를 처리할 것인지? • Oozie Workflow Designer의 Module로 활용할 수 있는 방안 고려
  22. 22. 감사합니다 빅데이터본부 | 김병곤

×