21
The Cascading (big) data application framework André Kelpe | HUG France | Paris | 25. November 2014

The Cascading (big) data application framework

Embed Size (px)

DESCRIPTION

The Cascading (big) data application framework André Kelpe | Concurrent

Citation preview

Page 1: The Cascading (big) data application framework

The Cascading (big) data application frameworkAndré Kelpe | HUG France | Paris | 25. November 2014

Page 2: The Cascading (big) data application framework

Who am I?

André KelpeSenior Software Engineer at Concurrent

company behind Cascading, Lingual and Driven

http://concurrentinc.com / @concurrent

[email protected] / @fs111

Page 3: The Cascading (big) data application framework

http://cascading.org

Apache licensed Java framework for writing data oriented applications

production ready, stable and battle proven (soundcloud, twitter, etsy, climate corp + many more)

Page 4: The Cascading (big) data application framework

Cascading goals

developer productivity

focus on business problems, not distributed systems knowledge

useful abstractions over underlying „fabrics“

Page 5: The Cascading (big) data application framework

Cascading goals

Testability & robustness

production quality applications rather than a collection of scripts

(hooks into the core for experts)

Page 6: The Cascading (big) data application framework

https://www.flickr.com/photos/theilr/4283377543/sizes/l

Page 7: The Cascading (big) data application framework

Cascading terminology

Taps are sources and sinks for data

Schemes represent the format of the data

Pipes are connecting Taps

Page 8: The Cascading (big) data application framework

Cascading terminology

● Tuples flow through Pipes● Fields describe the Tuples● Operations are executed on Tuples in

TupleStreams● FlowConnector uses QueryPlanner to

translate FlowDef into Flow to run on computational fabric

Page 9: The Cascading (big) data application framework

Compiler

QueryPlanner

FlowDef

FlowDef

FlowDef

Hadoop

TezFlowDef

Spark

User Code TranslationOptimizationAssembly

CPU Architecture

Page 10: The Cascading (big) data application framework

User-APIs

● Fluid - A Fluent API for Cascading– Targeted at application writers

– https://github.com/Cascading/fluid

● „Raw“ Cascading API– Targeted for library writers, code generators,

integration layers

– https://github.com/Cascading/cascading

Page 11: The Cascading (big) data application framework

Counting words

// configuration

String docPath = args[ 0 ];

String wcPath = args[ 1 ];

Properties properties = new Properties();

AppProps.setApplicationJarClass( properties, Main.class );

FlowConnector flowConnector = new Hadoop2MR1FlowConnector( properties );

// create source and sink taps

Tap docTap = new Hfs( new TextDelimited( true, "\t" ), docPath );

Tap wcTap = new Hfs( new TextDelimited( true, "\t" ), wcPath );

...

Page 12: The Cascading (big) data application framework

Counting words (cont.)

// specify a regex operation to split the "document" text lines into a token stream

Fields token = new Fields( "token" );

Fields text = new Fields( "text" );

RegexSplitGenerator splitter =

new RegexSplitGenerator( token, "[ \\[\\]\\(\\),.]" );

// only returns "token"

Pipe docPipe = new Each( "token", text, splitter, Fields.RESULTS );

// determine the word counts

Pipe wcPipe = new Pipe( "wc", docPipe );

wcPipe = new GroupBy( wcPipe, token );

wcPipe = new Every( wcPipe, Fields.ALL, new Count(), Fields.ALL );

...

Page 13: The Cascading (big) data application framework

// connect the taps, pipes, etc., into a flow

FlowDef flowDef = FlowDef.flowDef()

.setName( "wc" )

.addSource( docPipe, docTap )

.addTailSink( wcPipe, wcTap );

Flow wcFlow = flowConnector.connect( flowDef )

wcFlow.complete(); // ← runs the code

}

Counting words (cont.)

Page 14: The Cascading (big) data application framework

https://driven.cascading.io/driven/871A2C66DA1D4841B229CDD2B04B9FDA

Page 15: The Cascading (big) data application framework

Impatient

Cascading for the Impatient

http://docs.cascading.org/impatient/index.html

Page 16: The Cascading (big) data application framework

● Operations– Function

– Filter

– Regex/Scripts

– Boolean operators

– Count/Limit/Last/First

– Scripts

– Unique

– Asserts

– Min/Max

– …

● Splices– GroupBy

– CoGroup

– HashJoin

– Merge

A full toolbox

● Joins

Left, right, outer, inner,

mixed...

Page 17: The Cascading (big) data application framework

A full toolbox

data access: JDBC, HBase, elasticsearch, redshift, HDFS, S3, Cassandra...

data formats: avro, thrift, protobuf, CSV, TSV...

integration points: Cascading Lingual (SQL), Apache Hive, classical M/R apps..

not Java?: Scalding (Scala), Cascalog (clojure)

Page 18: The Cascading (big) data application framework

Status quo

● Cascading 2.6– Production release

● Hadoop 2.x● Hadoop 1.x● Local mode

● Cascading 3.0– public wip builds

● Tez● Hadoop 2.x● Hadoop 1.x● Local mode● Others (Spark...)

Page 19: The Cascading (big) data application framework

Questions? [email protected]

Page 20: The Cascading (big) data application framework

Link Collection

http://www.cascading.org/

https://github.com/Cascading/

http://concurrentinc.com

http://cascading.io/driven/

https://groups.google.com/forum/#!forum/cascading-user

http://docs.cascading.org/impatient/

http://docs.cascading.org/cascading/2.6/userguide/html/

Page 21: The Cascading (big) data application framework

fin.