Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

初めてのSpark streaming 〜kafka+sparkstreamingの紹介〜

7,027 views

Published on

Spark刊行記念に登壇した際の資料

Published in: Technology
  • Be the first to comment

初めてのSpark streaming 〜kafka+sparkstreamingの紹介〜

  1. 1. 初めてのSparkStreaming ~Kafka+SparkStreamingの紹介~ 2015.09.09 R&D Team: tanaka.yuichi
  2. 2. 自己紹介とか 金融系・組み込み系・コミュニティサービス・ゲーム・広告等の各システムを経てDMMへ。 DMM.comラボにおいて、検索システムの刷新、レコメンドエンジンの新規開発など、基 盤技術の開発を担当しております。 サーバーサイド、フロントエンド、ミドルウェア、インフラと領域問わず、提案から構築・実 装まで幅広くやらせてもらっています。その他OSSのcontributor等もやっております。 株式会社 DMM.comラボ CTO室
  3. 3. こんなのやったりしてます リアルタイムなトレンドToアイテムのレコメンド
  4. 4. メニュー • SparkStreamingの概要 • Kafkaの概要 • DMMでの構成サンプル • ちょっとだけコード • パフォーマンスの話と困りごと・ハマりどころ 今日話そうと思ってる事
  5. 5. SparkCoreについての説明 Cluster Manager Yarn Mesos Data Source Stream HDFS Cassandra
  6. 6. SparkDStreamの説明 RDDsのまとまりをDStreamとして扱います RDDと似た関数を持っていて、下記のようなStreamデータを n秒で分けてバッチ処理をする仕組み
  7. 7. SparkStreamingのInputについて Basic Source SocketTextStream(Tcp) FileStream(HDFS,S3) Advanced Source Twitter Kafka Kinesis Flume 今日はKafka+Streamingの話
  8. 8. Kafkaの簡単な紹介 Apache Kafka Pull型のキューイングシステム • 高速 • スケーラブル • 耐久性 • 分散システム
  9. 9. Group2 Kafkaの簡単な紹介 TopicA#partition0 TopicA#partition1 TopicA#partition2 msg Consumer1#group1 Consumer2#group1 Consumer3#group2 Group1 Brokers Consumers
  10. 10. DMMで何をやってるのか
  11. 11. 余談・蛇足・閑話休題 DMM × 行動解析 Σ( ꒪⌓꒪)え“!! 人にされて嫌な事を人にしたらダメってばっちゃが言ってた
  12. 12. DMMのSparkStreaming周辺の図 概要
  13. 13. ちょっとだけコード(KafkaのStream作成部分) object ActivitySummary{ def main(args: Array[String]){ val conf = new SparkConf().setAppName("ActivitySummary") val ssc = new StreamingContext(conf,Seconds(5)) val kafkaParams = Map[String,String](“metadata.broker.list” -> “172.27.xxx.xx:9092,・・・") val kafkaStream = KafkaUtils.createDirectStream[String,String,StringDecoder,StringDecoder](ssc,kafkaParams,Se t("raw_tracking"))
  14. 14. ちょっとだけコード(集計処理の抜粋) //中間データからPVを数えるよ! val pv = middle_data .filter(_._1.contains("_pv_")) .map(x => x._1.substring(0,x._1.lastIndexOf("_"))) .countByValue() //pvの移動平均用 val window_pv = middle_data .filter(_._1.contains("_pv_")) .map(x => "window_" + x._1.substring(0,x._1.lastIndexOf("_"))) .countByValueAndWindow(Seconds(60),Seconds(5)) //中間データからuuの重複排除 var uu = middle_data .filter(_._1.contains("_uu_")) .map(x => x._1) .transform(rdd => rdd.distinct()) .map(x => x.substring(0,x.lastIndexOf("_"))) .countByValue()
  15. 15. ちょっとだけコード(Streamingからの書き出し抜粋) class KafkaProducer private(brokerList:String){ val props:Properties = new Properties() props.put("metadata.broker.list",brokerList) props.put("serializer.class", "kafka.serializer.StringEncoder") props.put("request.required.acks", "1") val config:ProducerConfig = new ProducerConfig(props) val producer:Producer[String,String] = new Producer[String,String](config) def send(topicName:String,msg:String){ val data:KeyedMessage[String,String] = new KeyedMessage[String,String](topicName,msg) producer.send(data) } def close(){} } object KafkaProducer{ private val kProducer = new KafkaProducer(“172.27.100.14:9092,・・・ ") def getInstance():KafkaProducer ={ kProducer } def apply():KafkaProducer ={ getInstance } }
  16. 16. パフォーマンスの話 そもそもSparkStreamingのパフォーマンスってどう見るの?
  17. 17. パフォーマンスの話 そもそもSparkStreamingのパフォーマンスってどう見るの?
  18. 18. 困った話 Spark1.3でkafkaのdirectStream使うとReceiverStatisticsが出ない(1.4で直ってる?) MaxRatePerPartitionの設定がし辛い
  19. 19. Kafka+Streamingのパフォーマンスで詰まった話 spark-submitコマンドでStreamingのjarを投げる際、2つのexecutorが作成されます。 Driver Executor Executor Kafka#partition0 Kafka#partition1 Kafka#partition2 Kafka#partition3 Kafka#partition4 --executor-cores 1 #各Executorに割り当てるCore数 --num-executors 2 #Executor自体の数
  20. 20. 対応例 Driver Executor Executor Kafka#partition0 Kafka#partition1 Kafka#partition2 Kafka#partition3 Kafka#partition4 --executor-cores 1 #各Executorに割り当てるCore数 --num-executors 5 #Executor自体の数 Executor Executor Executor
  21. 21. そもそもパフォーマンスを見ようと思って困った話 CDHのYARNアプリケーション画面 SparkStreaming のアプリ Sparkのアプリ
  22. 22. そもそもパフォーマンスを見ようと思って困った話 CDHのYARNアプリケーション画面(チャート) 色々なチャート が見れる 1つのjobにどれだけ時 間がかかったか? Streamingアプリ 通常のSparkアプリ
  23. 23. 以上 2015.09.09 R&D Team: tanaka.yuichi

×