インストール まず、Java と Scala をインストールし、次に Spark をダウンロードしてインストールし、PATH と JAVA_HOME が設定されていることを確認してから、Scala の SBT を使用して次のように Spark をビルドする必要があります。 $ sbt/sbt アセンブリ ビルド時間は比較的長くなります。ビルドが完了したら、次のコマンドを実行してインストールが成功したことを確認します。 $ ./bin/spark-shell scala> val textFile = sc.textFile("README.md") // README.md への参照を作成します scala> textFile.count // このファイルの行数をカウントします scala> textFile.first // 最初の行を出力します Apache アクセス ログ アナライザー まず、Scala を使用して Apache アクセス ログのアナライザーを作成する必要があります。幸いなことに、すでに誰かが作成しています。Apache ログファイル パーサー コードをダウンロードしてください。 SBT を使用してコンパイルおよびパッケージ化します。 sbt コンパイル sbt テスト sbt パッケージ パッケージ名は AlsApacheLogParser.jar であると想定されます。 // これは動作します $ MASTER=local[4] SPARK_CLASSPATH=AlsApacheLogParser.jar ./bin/spark-shell Spark 0.9 では、いくつかのメソッドが機能しません。 // 動作しません $ MASTER=local[4] ADD_JARS=AlsApacheLogParser.jar ./bin/spark-shell // 動作しません spark> :cp AlsApacheLogParser.jar アップロードが成功したら、Spark REPL で AccessLogParser インスタンスを作成します。 com.alvinalexander.accesslogparser._ をインポートします。 val p = 新しい AccessLogParser これで、以前の readme.cmd を読むのと同じように、Apache アクセス ログ accesslog.small を読むことができます。 scala> val log = sc.textFile("accesslog.small") 14/03/09 11:25:23 INFO MemoryStore: curMem=0、maxMem=309225062 で EnsureFreeSpace(32856) が呼び出されました 14/03/09 11:25:23 INFO MemoryStore: ブロックbroadcast_0が値としてメモリに保存されました (推定サイズ 32.1 KB、空き容量 294.9 MB) ログ: org.apache.spark.rdd.RDD[String] = MappedRDD[1]、textFile、<console>:15 scala> log.count (ここには大量の出力があります) res0: ロング = 100000 Apache ログの分析 Apache ログに 404 がいくつあるかを分析できます。作成方法は次のとおりです。 def getStatusCode(行: Option[AccessLogRecord]) = { 行一致 { ケース Some(l) => l.httpStatusCode なしの場合 => "0" } } Option[AccessLogRecord]はアナライザーの戻り値です。 次に、Spark コマンドラインで次のように使用します。 log.filter(line => getStatusCode(p.parseRecord(line)) == "404").count この統計は、httpStatusCode が 404 である行の数を返します。 さらに深く掘り下げる ここで、URL 内のスペースによって 404 エラーが発生するなど、どの URL に問題があるのかを知りたい場合は、当然次の手順が必要です。
次のメソッドを作成します。 // アクセスログレコードから `request` フィールドを取得します def getRequest(rawAccessLogString: String): オプション[String] = { val accessLogRecordOption = p.parseRecord(rawAccessLogString) accessLogRecordOption 一致 { ケース Some(rec) => Some(rec.request) ケースなし => なし } } このコードを Spark REPL に貼り付けて、次のコードを実行します。 log.filter(line => getStatusCode(p.parseRecord(line)) == "404").map(getRequest(_)).count val recs = log.filter(line => getStatusCode(p.parseRecord(line)) == "404").map(getRequest(_)) val distinctiveRecs = log.filter(line => getStatusCode(p.parseRecord(line)) == "404").map(getRequest(_)).distinct 個別のRecs.foreach(println) 要約する アクセス ログの単純な分析には、もちろん grep の方が適していますが、より複雑なクエリには Spark が必要です。単一のシステム上で Spark のパフォーマンスを判断するのは困難です。これは、Spark が大きなファイルを扱う分散システム向けに設計されているためです。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: Mysql5.7.17 winx64.zip 解凍バージョンのインストールと設定のグラフィックチュートリアル
CentOS8 に最小限のデプロイメントで OpenStack Ussuri をインストールするため...
目次1. Vueルーター1. 説明2. 選択したルートのレンダリング: 3. 基本的な動作原理2. ...
目次LAMPアーキテクチャ1.ランプの紹介2. WebサービスワークフローWebサーバーのリソースは...
インターネット上には多くのチュートリアルがありますが、基本的には同じです。ただし、細かい原因でソフト...
年末なので仕事も少なくなっています。私が何もせずにいるのを見ると、上司はきっと不快に思うでしょう。そ...
MySQL では、ほとんどのインデックス (PRIMARY KEY、UNIQUE、INDEX、FUL...
目次概要達成方法具体的な実装評価関数の終了を決定する生成関数の範囲変換関数マップフィルター割り込み機...
目次G2チャートについて使用テンプレートで使用される完全なコード (棒グラフ)世界地図を追加するG2...
目次1. 概要2. MySQLデータ型の詳細な説明1) 文字列型2) 整数型3) 浮動小数点型4) ...
この記事では、カウンター表示を実現するためのVueの具体的なコードを例として紹介します。具体的な内容...
百度入力方式の担当者は、百度入力方式のオープンAPIの最大の利点は操作が便利であることであり、プラッ...
私は数年間 vi エディタを使ってきましたが、実用的な用途で使ったことはありませんでした。今日 Py...
tomcat7 のデフォルトのプログラム公開パスは tomcat/webapps/ROOT/ です。...
アンカータグの使用法:同じドキュメント内の特定の場所にリンクすることをアンカー リンクと呼びます。ア...
背景事業が発展するにつれ、会社の事業内容や規模は拡大し続け、ウェブサイトには大量のユーザー情報やデー...