Who am I? Takeshi NAKANO Senior Researcher / Architect. - - PowerPoint PPT Presentation

who am i
SMART_READER_LITE
LIVE PREVIEW

Who am I? Takeshi NAKANO Senior Researcher / Architect. - - PowerPoint PPT Presentation

genn.ai () Realtime processing for everyone Takeshi Nakano @tf0054 1 Who am I? Takeshi NAKANO Senior Researcher / Architect. Co-authered Getting started with Solr in Japanese. Co-authered Hadoop Hacks in Japanese.


slide-1
SLIDE 1

genn.ai (源内)

Realtime processing for everyone

1

Takeshi Nakano @tf0054

slide-2
SLIDE 2

http://genn.ai/

Who am I?

Takeshi NAKANO

Senior Researcher / Architect. Co-authered Getting started with Solr in Japanese. Co-authered Hadoop Hacks in Japanese.

2

Writing “Getting started with Kafka” in Japanese.

slide-3
SLIDE 3

http://genn.ai/

Agenda

 What is genn.ai?

 Realtime processing  Usecases

3

 Let’s use genn.ai

 Download & get your key  Define a schema and a filter  Make it real!

slide-4
SLIDE 4

A usecase of genn.ai

4

Customer A Customer B Customer C

Realtime Analysis Platform じゃらん Web Sites Client (Hotels) Marketer Analyst

slide-5
SLIDE 5

Visual editor for genn.ai

slide-6
SLIDE 6

http://genn.ai/

Gungnir Thrift Server Gungnir Rest Server Gungnir Cosole Storm nimbus Storm supervisor Gungnir Client

  • n finagle

Kafka broker Storm supervisor Storm supervisor Kafka broker Kafka broker Gungnir Thrift Server

  • n finagle

Gungnir Rest Server Gungnir Rest Server

  • n finagle

MongoDB MetaStore Tuple Topic

Query

genn.ai UI

Query design view Query User account Tuple schema Topology JSON Tuple Tuple Tuple

Kafka MongoD B HDFS

User account Tuple schema

6

Structure of genn.ai

slide-7
SLIDE 7

http://dev.genn.ai/

Preparing for starting.

slide-8
SLIDE 8

http://dev.genn.ai/

Preparing for starting.

> cd gungnir-client > bin/gungnir -u tf0054 -p 2e2232073109 Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8 2013/10/14 22:34:58 com.twitter.finagle.Init$ apply 情報: Finagle version 6.5.1 (rev=59..9cde41) built at 20130626-111057 Gungnir server connected... ec2-xxx.amazonaws.com/54.238.99.212:9290 Welcome tf0054 gungnir>

slide-9
SLIDE 9

Define your schema!

CREATE TUPLE userAction ( userId STRING, hotelId STRING ); CREATE TUPLE commitAction ( userId STRING, hotelId STRING, checkin TIMESTAMP('yyyy-MM-dd'), nights INT );

STRING Java type string TINYINT Java type byte SMALLINT Java type short INT Java type int BIGINT Java type long FLOAT Java type float DOUBLE Java type double TIMESTAMP long value LIST MAP STRUCT

slide-10
SLIDE 10

FROM userAction AS ua, commitAction AS ca USING kafka_spout() EMIT userId, hotelId, name, image USING kafka_emit('${TOPOLOGY_ID}_user') ;

From EMIT

Define your filter! (1/4)

slide-11
SLIDE 11

FROM userAction AS ua, commitAction AS ca USING kafka_spout() JOIN userInfo ON userInfo.uid = userId TO userInfo.name AS name, userInfo.image AS image USING mongo_fetch('getusers', 'userInfo') JOIN hotel ON hotel.hotelId = hotelId TO hotel.name AS hotelname, hotel.photo AS photo USING mongo_fetch('hotelscom', 'hotel') EMIT userId, hotelId, name, image USING kafka_emit('${TOPOLOGY_ID}_user') ;

From JOIN

(user)

JOIN

(hotel)

EMIT

Define your filter! (2/4)

slide-12
SLIDE 12

FROM userAction AS ua, commitAction AS ca USING kafka_spout() JOIN userInfo ON userInfo.uid = userId TO userInfo.name AS name, userInfo.image AS image USING mongo_fetch('getusers', 'userInfo') JOIN hotel ON hotel.hotelId = hotelId TO hotel.name AS hotelname, hotel.photo AS photo USING mongo_fetch('hotelscom', 'hotel') INTO stream_0 ; FROM stream_0 EMIT userId, hotelId, name, image USING kafka_emit('${TOPOLOGY_ID}_user') ;

From JOIN

(user)

JOIN

(hotel)

stream_0

EMIT

(user)

Define your filter! (3/4)

slide-13
SLIDE 13

FROM userAction AS ua, commitAction AS ca USING kafka_spout() JOIN userInfo ON userInfo.uid = userId TO userInfo.name AS name, userInfo.image AS image USING mongo_fetch('getusers', 'userInfo') JOIN hotel ON hotel.hotelId = hotelId TO hotel.name AS hotelname, hotel.photo AS photo USING mongo_fetch('hotelscom', 'hotel') INTO stream_0 ; FROM stream_0 EMIT userId, hotelId, name, image USING kafka_emit('${TOPOLOGY_ID}_user') ; FROM stream_0 BEGIN GROUP BY hotelId EACH count() AS count, * EMIT hotelId, hotelname, photo, count USING kafka_emit('${TOPOLOGY_ID}_hotel') END GROUP ;

From JOIN JOIN EMIT

(user)

stream_0

GROUP BY EMIT

(hotel)

Define your filter! (4/4)

EACH sum(nights) EACH avg(nights)

slide-14
SLIDE 14

SUBMIT TOPOLOGY; DESC TOPOLOGY; SHOW TOPOLOGIES; STOP TOPOLOGY xxx; DROP TOPOLOGY xxx;

Register your filter! and ...

gungnir> SUBMIT TOPOLOGY; OK gungnir> DESC TOPOLOGY; { "id":"52373363e4b0a525adadb4f2", "explain":" ... ", "status":"RUNNING", "owner":"tf0054@gmail.com", "createTime":"2013-09-16T16:35:47.432Z", "summary":{ ... } } gungnir> STOP TOPOLOGY 52373363e4b0a525adadb4f2 ; gungnir> DELETE TOPOLOGY 52373363e4b0a525adadb4f2 ;

slide-15
SLIDE 15

TRACK userAction {"userId":"siniida","hotelId":"226979"} TRACK commitAction {"userId":"siniida","hotelId":"226979","checkin":"2013-10-18","nights":1}

Testing it!

> bin/kafka-consumer.sh 52373363e4b0a525adadb4f2_user ;

  • r

> bin/kafka-consumer.sh 52373363e4b0a525adadb4f2_hotel; gungnir> DESC TOPOLOGY; { "id":"52373363e4b0a525adadb4f2", "explain":" ... ", "status":"RUNNING", "owner":"tf0054@gmail.com", ...

... USING kafka_emit('${TOPOLOGY_ID}_user')

slide-16
SLIDE 16

Knowing http tuple receiver

> curl -v -H "Content-type: application/json" -X POST

  • d '{"userId":"tf0054","hotelId":"226979"}'

http://api.genn.ai/gungnir/v1.0/track/525e67f8e4b0e7cfca98d040/userAction gungnir> DESC USER; { "id":"525e67f8e4b0e7cfca98d040", "name":"siniida", "password":"CmGOdN2UU/Xtmk0wRCZKzDy/BN65LAHPCp2+1KMDOOM=", "createTime":"2013-10-16T10:18:32.849Z" } gungnir>

slide-17
SLIDE 17

Design of genn.ai

Built on Storm

Converts properly (e.g. building AST) The Good Parts (e.g. Supporting parallelism setting) ..

slide-18
SLIDE 18

genn.ai wants friends!

genn.ai codes will be open-sourced in the future. We are looking for co-challenging partners for

improving genn.ai.

You can use genn.ai on your web sites completely for

free (infrastructure etc..) if we can share the dream together.

Please feel free to contact us!

http://genn.ai/ tf0054@gmail.com

The future of genn.ai

slide-19
SLIDE 19

http://genn.ai/

Thanks!

19

slide-20
SLIDE 20

20