3. Spark Designer는 Flamingo 2.0의 Workflow Designer를 모형으로 하고 있습니다.
Flamingo2.0WorkflowDesigner의문제점
메타데이터 관리 부재
데이터소스로 HDFS만 지원
MapReduce의 한계
워크플로우 구성의 한계
4. Workflow Designer는 기능적 특성이 다양하게 반영되어야 하나 서로 상충되는 것이 있어서 두 개의 워크플로우 디
자이너로 분리하였습니다.
Flamingo2.0WorkflowDesigner를분리
Oozie
Designer
Spark
Designer
Workflow
Designer
5. • 초보자들이 쉽게 사용할 수 있는 분석 UI 제공
• 전처리, 머신러닝 등을 통합할 수 있는 UI 제공
• 메타데이터를 관리할 수 기능 제공
• 다양한 데이터를 처리할 수 있는 통합 기능 제공
Spark Designer 목적
6. SparkDesigner의유스케이스
Spark Designer는 초보자들이 쉽게 사용할 수 있는 User Interface와 Framework를 제공하는 것을 목표로 합니
다.
Preprocessing
기 보유하고있는데이터를가공하는
역할(머신러닝의입출력데이터를
가공하는데도가능)
Data Quality
Check
데이터품질관리(일관성,유효성,완
전성등…)를위한데이터 처리
Machine
Learning
기 보유하고있는데이터를기반으로
Spark MLlib에서 제공하는머신러닝
알고리즘을수행(예; 추천)
DataSource
Integration
RDBMS, File, HDFS 등등 다양한데
이터소스의데이터를한번에처리
8. 메타데이터관리
• Hadoop의 MapReduce는 병렬/분산 처리 방식에 대한 Framework
• 고성능 처리에는 적합하지만 메타데이터 관리 방안 부재
• Apache Hive의 HCatalog도 대안이 되기에는 대중성 및 활용성 떨어짐
• Spark 최신 버전에서 RDD DataFrame DataSet 지원을 통해 메타데이터 관리가 가능해짐
• File의 Metadata 관리가 가능하게 되어 기존의 Workflow Designer의 메타데이터 관리를 보완
9. Spark의DataFrame& Dataset
• Unified Spark 2.0 API를 통해 데이터를 관리하는 방법이 정교해짐
• 특히, Dataset의 등장은 컬럼 정보의 메타데이터 관리를 유연하게 이끌 수 있음
• Dataset은 Java, Scala만 지원 (Python, R은 DataFrame만 지원)
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. 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. • 이기종의 데이터 소스에서 데이터를 로딩하여 결합 > 암호화 > 데이터 품질검사 > 결과 저장
SparkDesigner의적용시나리오– 데이터품질 관리
HDFS
Input
JDBC Input
Hive
Input
Group By
Module
Join
Module
Encryption
Module
Data
Quality
Module
JDBC Output
Oozie Workflow 대비 Spark
Workflow는 하나의
프로세스에서 모두 처리하여
효율성이 높음
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. 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:
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. 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. 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. 앞으로좀더 고민해야할일
• Spark Designer의 Workflow를 XML로 표현할지, Database로 표현할지
• Spark Designer의 Custom Module을 추가할 수 있는지에 대한 검토 및 설계
• Spark Designer의 Module간 메타데이터를 어떻게 처리할지?
• Spark Designer의 Module간 연결 상태가 변경되었을 때 어떻게 메타데이터를 처리할 것인지?
• Oozie Workflow Designer의 Module로 활용할 수 있는 방안 고려