シナリオを使用してください:私たちは毎日のマシンにまたは定期的に多くのタスクを実行するために、多くの場合、エラータスクが時間内に見つけることができない、それはタスクが長時間ハングアップされてきた時間の発見につながりました。
解決策:水路カフカのフレームワーク+ +ストリーミングスパークに基づいて、これらのタスクのログ出力のリアルタイム監視、情報の担当者は、ログは、プロジェクトへのメール送信にエラーが表示されたときに検出されました。
目的:リアルタイムのログ分析のための水路+カフカ+スパークストリーミングフレームワークに基づいて、この小さなプロジェクトに精通しているために、より良い実際のプロジェクトに使用することができます。
、水路
水路は、収集収集とカフカにログデータを送信するためのものです。ログは、カフカシンクへ複数のソースに複数のタスクに対応して設けられてもよいです。次のようにコンフィギュレーションファイルは、次のとおりです。
#defineエージェント
agent_log.sources = S1 S2
agent_log.channels = C1
agent_log.sinks = K1
#define sources.s1
agent_log.sources.s1.type =幹部
agent_log.sources.s1.command =尾-F /data/log1.log
#define sources.s2
agent_log.sources.s2.type =幹部
agent_log.sources.s2.command =尾-F /data/log2.log
#インターセプタを定義します。
agent_log.sources.s1.interceptors = I1
agent_log.sources.s1.interceptors.i1.type =静的
agent_log.sources.s1.interceptors.i1.preserveExisting =偽
agent_log.sources.s1.interceptors.i1.key = PROJECTNAME
agent_log.sources.s1.interceptors.i1.value = project1に
agent_log.sources.s2.interceptors = I2
agent_log.sources.s2.interceptors.i2.type =静的
agent_log.sources.s2.interceptors.i2.preserveExisting =偽
agent_log.sources.s2.interceptors.i2.key = PROJECTNAME
agent_log.sources.s2.interceptors.i2.value =のProject2
#defineチャンネル
agent_log.channels.c1.type =メモリ
agent_log.channels.c1.capacity = 1000
agent_log.channels.c1.transactionCapacity = 1000
#defineシンク
#受信機カフカを設定します
agent_log.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
#設定カフカのブローカーアドレスとポート番号
CDH1 agent_log.sinks.k1.brokerList =:9092、CDH2:9092、CDH3:9092
#設定カフカのトピック
agent_log.sinks.k1.topic = result_log
#INCLUDEヘッダ
agent_log.sinks.k1.useFlumeEventFormat =真
#セットのシリアライズ
agent_log.sinks.k1.serializer.class = kafka.serializer.StringEncoder
agent_log.sinks.k1.partitioner.class = org.apache.flume.plugins.SinglePartition
agent_log.sinks.k1.partition.key = 1
agent_log.sinks.k1.request.required.acks = 0
agent_log.sinks.k1.max.message.size = 1000000
agent_log.sinks.k1.agent_log.type =同期
agent_log.sinks.k1.custom.encoding = UTF-8
#チャンネルのソースとシンクをバインド
agent_log.sources.s1.channels = C1
agent_log.sources.s2.channels = C1
agent_log.sinks.k1.channel = C1
フルーム-ngのコマンドの実行開始水路:
水路-ngのエージェント-cの/ etc /水路-NG / confに-f result_log.conf -n agent_log
二、カフカ
カフカは、メッセージング・システムでは、メッセージがバッファリングされてもよいです。水路カフカは、次いで、ストリーミングが消費さスパーク、及びデータが失われないことを保証することができるメッセージキュー(プロデューサとしてフリューム)にログを収集します。カフカ特定の知識を読むことができます。https://www.cnblogs.com/likehua/p/3999538.html
#result_logテーマを作成します。
CDH1 --zookeeperカフカ-トピック:2181、CDH1:2181、CDH3:2181 --create --topic result_log --partitions 3 --replication-因子1
#テスト - トピックの表示カフカリスト、成功観測result_logを作成するかどうか
カフカ-トピック--list --zookeeper CDH1:2181、CDH1:2181、CDH3:2181
#テスト - このリンクをカフカへの消費者テスト送信ログ水路を起動が正常に機能しています
カフカ・コンソール・消費者--bootstrapサーバCDH1:9092、CDH1:9092、CDH3:9092 --topic result_log
三、スパークストリーミング(プログラミング言語:スカラ、開発ツール:アイデア)
新しいMavenプロジェクトを作成し、依存のpom.xml設定を追加します。//特定のプロジェクトのコードを参照してください
私たちは、ストリーミング飼育係の消費者がオフセット火花を管理するために使用されます。コール
KafkaUtils.createDirectStream [文字列、文字列](SSC、PreferConsistentは、購読[文字列、文字列](トピック、kafkaParams、newOffset))
カフカとの接続の確立、データ・ストリームを取得し、InputDStreamを返し、
stream.foreachRDD(RDD => {//ハンドラ})//プロセスデータストリーム。
ヴァルSSC =新しいStreamingContext(SC、Durations.seconds(60))
ssc.start()SSCを起動します//
このパッケージHTML電子メールこのクラス、メールを送信HtmlEmail.sendを呼び出すorg.apache.commons.mail電子メール機能の設定を送信します。
Start.shはストリーミング番組、最後のsh start.sh起動スクリプトをスパーク起動するスクリプトを記述します。
#!/ binに/ bashの
輸出HADOOP_USER_NAME = HDFS
spark2提出\
糸--master \
--deployモードクライアント\
--executor 3色\
--num-執行10 \
--driver-メモリ2グラム\
--executor-メモリ1G \
--conf spark.default.parallelism = 30 \
--conf spark.storage.memoryFraction = 0.5 \
--conf spark.shuffle.memoryFraction = 0.3 \
--conf spark.reducer.maxSizeInFlight = 128メートル\
--driverクラスパスのmysql-コネクタ-javaの-5.1.38.jar \
--jarsのmysql-コネクタ-javaの-5.1.38.jar、qqwry-javaの-0.7.0.jar、fastjson-1.2.47.jar、火花ストリーミング・カフカ-10_2.11-2.2.0.jar、ハイブ-hbaseハンドラ-1.1.0-cdh5.13.0.jar、コモンズ・メール-1.5.jar、コモンズ・メール-1.5-sources.jar、メール-1.4.7.jar \
--class com.lin.monitorlog.mianer.Handler \
monitorLog.jar