より複雑カフカ統計データからストリーミング、ここでカフカは小さなケースの等価水路から得られたデータを使用することです。
1.カフカ
スパーク・ストリーミングHDFSは、ケースを数えます
2. [スタート水路
水路-ngのエージェント-c confに-f confに/ kafka_test.conf -n A1 -Dflume.root.logger = INFO、コンソール
水路の設定ファイルは次のよう
#このエージェントのコンポーネント名前 a1.sources = R1 a1.sinks = K1 a1.channelsの= C1の #説明/設定ソース a1.sources.r1.type = EXEC a1.sources.r1.command =尾-f /ルート/code/flume_exec_test.txt #シンク説明 a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink a1.sinks.k1.brokerList =マスタ:9092 a1.sinks.k1.topic =カカ A1を.sinks.k1.serializer.class = kafka.serializer.StringEncoder #メモリ内のイベントをバッファリングし、チャネル使用 a1.channels.c1.typeを=メモリ a1.channels.c1.capacity = 10000 a1.channels.c1.transactionCapacity = 1000 #はソースに結合し、チャネルに沈む a1.sources.r1.channels = C1 a1.sinks.k1.channel = C1
ここでは水路がファイルに限り、このデータとして、ファイルからのデータであり、テストはそれだけ上のファイルにデータを書き込む必要がある場合は、水路を監視することになります。
3.スタートカフカの消費者が観察します
kafka-console-consumer.sh --bootstrap-サーバーマスター:9092 --topicカカ
4.次の統計コードストリーミングであります
com.hw.streamingパッケージ インポートorg.apache.spark.SparkConfの インポートorg.apache.spark.streaming.kafka.KafkaUtilsは org.apache.spark.streamingをインポート{分、秒、StreamingContext}。 オブジェクトKafkaWordCount { DEFメイン(引数:アレイ[文字列]):単位= { IF(args.length <4){ System.err.println( "使用:KafkaWordCount <zkQuorum> <グループ> <トピック> <NumThreadsに>") はSystem.exit(1) } ヴァルアレイ(zkQuorum、グループ、トピック、NumThreadsに)=引数 ヴァルsparkConf =新しいSparkConf()。setAppName( "KafkaWordCount") ヴァルSSC =新しいStreamingContext(sparkConf、秒(2)) のVal topicMap = topics.split( "") .MAP((_、numThreads.toInt))。toMap ラインKafkaUtils.createStream =ヴァル(SSC、zkQuorum、グループ、topicMap)の.map(_._ 2) ヴァル= lines.flatMap言葉(_。スプリット( "")(1)) // 10秒のウィンドウサイズ、スライドのサイズウィンドウサイズが摺動ジョブのサイズの倍数でなければならない2秒、 ヴァルwordCounts = words.map((_、 1L))reduceByKeyAndWindow。(_ + _、_ - _、秒(10)、秒(2)) wordCounts.print() ssc.start() ssc.awaitTermination() } }
5.スクリプトを実行
#のカフカカウントのbash $のSPARK_HOME / binに/火花が提出\ --class com.hw.streaming.KafkaWordCount \ 糸クラスタ\ --master --executor、メモリ1G \ --total-エグゼキュータ・コア2 \ --files $ HIVE_HOME / confに/ハイブ-site.xmlの\ --jars $ HIVE_HOME / libに/ mysqlの-コネクタのjava-5.1.25-bin.jarを、$ SPARK_HOME /瓶/ DataNucleusの-API-JDO-3.2.6.jar、 $ SPARK_HOME /瓶/ DataNucleusのコア・3.2.10.jar、$ SPARK_HOME /瓶/ DataNucleusの-RDBMS-3.2.9.jar、$ SPARK_HOME /瓶/グアバ-14.0.1.jar \ ./SparkPro-1.0-SNAPSHOT -jar-と-dependencies.jar \の マスター:2181 group_id_1カカ1
6.書き込みデータ、およびオンライン水路を監視し、それらをファイルに書き込みます
インポートランダム インポート時間 readFileName = "/ルート/ orders.csv" writeFileName = "/ルート/コード/ flume_exec_test.txt" WFなどを開く(writeFileName、 '+'): Fとして( 'RB'、readFileName)開きます。 :f.readlines()内のラインのための line.split(」「)での単語のため: SS = line.strip() :(SS)<1 lenの場合は 継続 wf.write(SS + '\ n'は) rand_num =ランダムに。ランダム() time.sleep(rand_num)
7.スクリプトを実行すると、次のエラーを見つけ、消費者支出のデータかどうかを確認して、時間の窓は、問題となっているチェックポイントを設定することです。
ウィンドウ時間の設定が間違っている、次のエラーが報告されます
java.lang.IllegalArgumentExceptionが:Userクラスは例外をスローした要求に失敗しました:ReducedWindowedDStream(3000ミリ秒)のウィンドウ期間が親DSTREAM(10000ミリ秒)のスライド継続時間の倍数でなければなりません scala.Predef $ .require(Predef.scalaで:224 ) org.apache.spark.streaming.dstream.ReducedWindowedDStreamでの<init>(ReducedWindowedDStream.scala:39) org.apache.spark.streaming.dstream.PairDStreamFunctions $$ anonfun $ reduceByKeyAndWindow $ 6.applyで(PairDStreamFunctions.scala:348 ) org.apache.spark.streaming.dstream.PairDStreamFunctions $$ anonfun $ reduceByKeyAndWindow $ 6.apply(PairDStreamFunctions.scala時:343) org.apache.spark.rdd.RDDOperationScope $ .withScope(RDDOperationScope.scala時:151) :org.apache.spark.rdd.RDDOperationScope $ .withScope(112 RDDOperationScope.scala)で org.apache.spark.SparkContext.withScope(SparkContext.scala:693)で org.apache.spark.streaming.StreamingContext.withScopeで( StreamingContext.scala:265) org.apache.spark.streaming.dstream.PairDStreamFunctions.reduceByKeyAndWindow(PairDStreamFunctions.scala時:343) org.apache.spark.streaming.dstream.PairDStreamFunctions $$ anonfun $ reduceByKeyAndWindow $ 5.apply(PairDStreamFunctionsで。スカラ:311) org.apache.spark.streaming.dstream.PairDStreamFunctions $$ anonfun $ reduceByKeyAndWindow $ 5.applyで(PairDStreamFunctions.scala:311) org.apache.spark.rdd.RDDOperationScope $ .withScope(RDDOperationScope.scalaにおいて:151 ) :org.apache.spark.rdd.RDDOperationScope $ .withScope(112 RDDOperationScope.scala)で org.apache.spark.SparkContext.withScope(SparkContext.scala:693)で org.apache.spark.streaming.StreamingContext.withScopeで( StreamingContext.scala:265) org.apache.spark.streaming.dstream.PairDStreamFunctions.reduceByKeyAndWindow(PairDStreamFunctions.scala時:310) com.badou.streaming.KafkaWordCount $ .mainで(KafkaWordCount.scala:22) com.badouで。 streaming.KafkaWordCount.main(KafkaWordCount.scala) sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド)で sun.reflect.NativeMethodAccessorImpl.invokeで(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invokeで(DelegatingMethodAccessorImpl.java: 43) java.lang.reflect.Method.invoke(Method.java:498)で org.apache.spark.deploy.yarn.ApplicationMaster $$アノン$ 4.run(:721 ApplicationMaster.scala)で
エラー変更は、ウィンドウの時間をスライドする必要性は、時間の倍数に設定されています。操作上記のインストール手順は、それは間違いを報告しない場合は、上記のスクリプトは、変更されています。
あなたがチェックポイントを増加させない場合は、次のように与えられ、エラーになります。
要件に失敗しました:チェックポイントディレクトリが設定されていません。StreamingContext.checkpointでそれを設定してください()。
対応するチェックポイントを設定します。
#この統計的なコードに次のステートメントを追加します 。#=ヴァルSSC新新StreamingContext(sparkConf、秒急速(2)) ssc.setCheckPointを( "/ルート/チェックポイント")
上記の実行が完了している場合、あなたは、対応する統計情報が表示されます、お使いのブラウザでログを表示することができます。
#192.168.56.122:8080ログ #ビューに対応するログ情報を
テスト中にまとめ、エラーが発生した際に水路を開始し、次のエラー:
: - [(83 Logging.scala)kafka.utils.Logging $ class.warn WARN] なしのレプリカ::ISRメタデータパーティション4リーダーフェッチ中にエラー :isUnderReplicated:トピックパーティションの偽[デフォルト・水路・トピック、4]: [をクラスkafka.common.LeaderNotAvailableException]
エラーの原因は、主水路のプロファイルに遭遇し、カフカのシンクは、あなたがこのトピックはカカで聞くべきで見ることができ、設定につながるものではないが、ここでは、最終的には検査後に発見され、デフォルトのデフォルト・水路・トピックを監視していますエラーがシンクで書か不注意、シンクによって引き起こされる、細部に注意を払うようにしてください、私たちは、ログを見て学ばなければなりません。