Top Banner
#backdaybyxebia Sylvain Lequeux @slequeux Event Ingestion in HDFS
49

Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

Jul 27, 2015

Download

Technology

Xebia France
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Sylvain Lequeux @slequeux

Event Ingestion in HDFS

Page 2: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Back To Basics

Page 3: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Basics : Event ?

Asynchronysm …

… to message systems …

… to event systems

Page 4: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Basics : KafkaA messaging system

Page 5: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Basics : KafkaA distributed messaging system

Page 6: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Basics : KafkaA distributed messaging system

… multi-queues (called “topics”) splitted in partitions

Page 7: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Basics : KafkaA distributed messaging system

… multi-queues (called “topics”) splitted in partitions

… multi-clients

Page 8: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Page 9: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Page 10: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Basics : Hadoop Distributed FileSystem

Distributed & scalable

Highly fault-tolerant

Standard support for BigData jobs to run

“Moving computation is cheaper than moving data”

Page 11: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Page 12: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

VS

Page 13: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Flumehttp://flume.apache.org/

Page 14: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

FlumeConcepts

Page 15: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Flume

➔ Top level Apache project

➔ “Item” streaming based on data flow

Page 16: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Flume

1. An “item” exists somewhereInitially, “items” were log files

Page 17: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Flume

1. An “item” exists somewhereInitially, “items” were log files

2. A source is a way to transform this data into Flume events

Page 18: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Flume

1. An “item” exists somewhereInitially, “items” were log files

2. A source is a way to transform this data into Flume events

3. A channel is a way to transport data (memory, file)

Page 19: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Flume

1. An “item” exists somewhereInitially, “items” were log files

2. A source is a way to pull and transform this data into Flume events

3. A channel is a way to transport data (memory, file)

4. A sink is a way to put a Flume event somewhere

Page 20: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Flume + Kafka = Flafka

Page 21: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

FlumeHow it works

Page 22: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Simple flume configuration file# Name the components on this agenta1.sources = r1a1.sinks = k1a1.channels = c1

# Describe/configure the sourcea1.sources.r1.type = netcata1.sources.r1.bind = localhosta1.sources.r1.port = 44444

# Describe the sinka1.sinks.k1.type = logger

# Use a channel which buffers events in memorya1.channels.c1.type = memorya1.channels.c1.capacity = 1000a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channela1.sources.r1.channels = c1a1.sinks.k1.channel = c1

1 - Define an agent

2 - Explicit the sources

3 - Explicit the sinks

4 - Explicit the channels

5 - Connect the pieces

Page 23: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Flafka source configuration

# Mandatory configa1.sources.r1.type = org.apache.flume.source.kafka.KafkaSourcea1.sources.r1.zookeeperConnect = localhost:2181a1.sources.r1.topic = MyTopic

# Optional configa1.sources.r1.batchSize = 1000a1.sources.r1.batchDurationMillis = 1000a1.sources.r1.consumer.timeout.ms = 10a1.sources.r1.auto.commit.enabled = falsea1.sources.r1.groupId = flume

Page 24: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

HDFS Sink configuration

# Mandatory configa1.sinks.k1.type = hdfsa1.sinks.k1.hdfs.path = hdfs://localhost:54310/data/flume/ \

%{topic}/%y-%m-%d

# A log of optional configs inluding :# Compression# File types : SequenceFile, Avro, etc.# Possibility to use a custom Writable# Kerberos configuration

Page 25: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Flume : data transformation

Page 26: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Flume Interceptors

# Mandatory configa1.sources.r1.interceptors = i1a1.sources.r1.interceptors.i1.type = .....

➔ Transformation executed ◆ After event is generated◆ Before sending it to channel

➔ Some predefined interceptors◆ Timestamp◆ UUID◆ Filtering◆ Morphline◆ ...

➔ Could write your own (pure Java)

Page 27: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Flume : how to run it ?Command line : Included in distribs :

flume-ng agent \

-n a1 \

-c /usr/lib/flume-ng/conf/ \

-f /usr/lib/flume-ng/conf/flume-kafka.conf &

Page 28: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Camuslinkedin/camus

Page 29: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

CamusConcepts

Page 30: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Camus

➔ OpenSource project developped by LinkedIn

➔ Based entirely on MapReduce

Page 31: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Camus

A batch consists in three steps :

- P1 : Gets metadata : topic & partitions, latest offsets

- P2 : Pulls new events

- P3 : Updates local metadatas

Page 32: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

CamusHow it works

Page 33: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Time to write some codeJust explain how to transform

INTO

Page 34: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Time to write some code

Page 35: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Time to write some code

Page 36: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Page 37: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Round 1 : getting started

Flume Camus

Just a simple configuration file make it works

Need a complete dev environment (included maven) to use it

Morphline interceptor’syntax is quite complex

Dev should understand MapReduce concepts

Page 38: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Round 2 : running time

Flume Camus

Flume events are ingested with no delay MapReduce setup adds uncompressable time

31 sec uncompressable+

~ 1 sec / 500 messages / node

=> 111 sec for 1 message=> 117 sec for 50 messages=> 116 sec for 1.000 mesages=> 127 sec for 10.000 messages

Page 39: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Round 3 : maintainability

Flume Camus

When used by CM, server is easy to maintain, but config is not

Full Maven project. Just use a version control system (Git, SVN, aso.)

Page 40: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Round 4 : customization

Flume Camus

Interceptors are fully customizable Morphing data could be done easily

Event headers make HDFS path highly modulable

Page 41: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Round 5 : deployment

Flume Camus

When used by CM, just include your conf, that’s it

MapReduce jobs may be included in any MR orchestrator (Oozie for instance)

Without a manager, everything needs to be done manually

Page 42: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Round 6 : state of the project

Flume Camus

Released 1.0.0 in 2012 Currently in v 0.1.0-SNAPSHOT

Included by default with Hadoop distributions

Highly used by LinkedIn in production

Almost no documentation

Page 43: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

SummaryFlume Camus

Getting Started

Running time

Maintainability

Customization

Deployment

State of the project

Page 44: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Global Feedback

Page 45: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Debugging

Debugging on Flume is quite complex

Some really critical bugs like [FLUME-2578]

Page 46: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Documentation

Flume has really good quality doc

Camus only has a readme file and not up to date !

Page 47: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Camus & M/R

Camus suffers the use of Map/Reduce.

Maybe using some other concept like Spark may result in better perfs.

Page 48: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Flume quantity of files

Flume needs a very precise configuration not to generate a bunch of file.

It is easy to get it generate a lot of little files, which is problematic in term of BigData.

Page 49: Backday Xebia : Retour d’expérience sur l’ingestion d’événements dans HDFS

#backdaybyxebia

Thank youQuestions ?