Hadoopカウンターとデータクリーニングの適用

Hadoopカウンターとデータクリーニングの適用

データクリーニング (ETL)

コアビジネスの MapReduce プログラムを実行する前に、まずデータをクリーンアップして、ユーザーの要件を満たさないデータを削除する必要があることがよくあります。クリーンアップ プロセスでは、多くの場合、Reduce プログラムではなく Mapper プログラムの実行のみが必要になります。

1.必要

フィールドの長さが 11 以下のログを削除します。

(1)入力データ

ウェブログ

(2)期待出力データ

各行フィールドの長さが11より大きい

2.需要分析

入力データは、マップ ステージのルールに従ってフィルタリングおよびクリーンアップする必要があります。

3.実装コード

(1)LogMapperクラスを書く

パッケージ com.atguigu.mapreduce.weblog;
java.io.IOException をインポートします。
org.apache.hadoop.io.LongWritable をインポートします。
org.apache.hadoop.io.NullWritable をインポートします。
org.apache.hadoop.io.Text をインポートします。
org.apache.hadoop.mapreduce.Mapper をインポートします。
パブリッククラス LogMapper は Mapper<LongWritable, Text, Text, NullWritable> を拡張します{
  テキスト k = 新しいテキスト();
  @オーバーライド
  protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
   // 1 1行のデータを取得します。String line = value.toString();
   // 2 ログを解析する boolean result = parseLog(line,context);
   // 3 ログが不正なので終了 if (!result) {
     戻る;
   }
   // 4 キーを設定する
   k.set(行);
   // 5 データを書き込む context.write(k, NullWritable.get());
  }
  // 2 ログを解析する private boolean parseLog(String line, Context context) {
   // 1 インターセプト String[] fields = line.split(" ");
   // 長さが11より大きい2つのログは有効です if (fields.length > 11) {
     // システムカウンター context.getCounter("map", "true").increment(1);
     true を返します。
   }それ以外 {
     context.getCounter("map", "false").increment(1);
     false を返します。
   }
  }
}

(2)LogDriverクラスを書く

パッケージ com.atguigu.mapreduce.weblog;
org.apache.hadoop.conf.Configuration をインポートします。
org.apache.hadoop.fs.Path をインポートします。
org.apache.hadoop.io.NullWritable をインポートします。
org.apache.hadoop.io.Text をインポートします。
org.apache.hadoop.mapreduce.Job をインポートします。
org.apache.hadoop.mapreduce.lib.input.FileInputFormat をインポートします。
org.apache.hadoop.mapreduce.lib.output.FileOutputFormat をインポートします。
パブリッククラスLogDriver {
  パブリック静的void main(String[] args)は例外をスローします{
// 入力パスと出力パスは、コンピューターの実際の入力パスと出力パスに従って設定する必要があります args = new String[] { "e:/input/inputlog", "e:/output1" };
   // 1 ジョブ情報を取得する Configuration conf = new Configuration();
   ジョブ job = Job.getInstance(conf);
   // 2 jar パッケージをロードします job.setJarByClass(LogDriver.class);
   // 3 つの関連マップ
   ジョブを LogMapper.class に設定します。
   // 4 最終出力タイプを設定する job.setOutputKeyClass(Text.class);
   ジョブの出力値クラスを設定します(NullWritable.class)。
   // 削減タスクの数を0に設定する
   ジョブのタスク数を減らす(0)
   // 5 入力パスと出力パスを設定する FileInputFormat.setInputPaths(job, new Path(args[0]));
   FileOutputFormat.setOutputPath(ジョブ、新しいパス(args[1]));
   // 6 送信 job.waitForCompletion(true);
  }
}

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • Hadoop ネームノード フェデレーション
  • Hadoop 2.Xの新機能、ごみ箱機能の説明
  • Ubuntu 16.4 で完全に分散された Hadoop 環境を構築するための実践的なチュートリアル
  • Hadoop 2.x と 3.x の 22 ポイントの比較、Hadoop 3.x の 2.x に対する改善点
  • Ubuntu DockerでHadoopクラスタ環境を構築する方法
  • CentOS で Hadoop を構築する詳細な手順
  • Hadoop ワードカウントのサンプルコード
  • Java/Web が MapReduce 用に Hadoop を呼び出すサンプル コード
  • Hadoop におけるネームノードとセカンダリネームノードの動作メカニズムの説明

<<:  MySQL エラー: ロックを取得しようとしたときにデッドロックが見つかりました。トランザクションの解決策を再起動してください

>>:  JSX を使用してマークアップ コンポーネント スタイルの開発を作成する例 (フロントエンドのコンポーネント化)

推薦する

sqlalchemy に基づいて MySQL で追加、削除、変更、クエリ操作を実装する

需要シナリオ:上司は、クロ​​ーラーを使用してMySQLデータベースにデータを書き込んだり更新したり...

CSS で点線の境界線のスクロール効果を実装するサンプルコード

マウスをある領域の上に置くと、その領域に点線の境界線と線のアニメーションが表示されるというクールな効...

JavaScript のデシェイクとスロットリングの例

目次安定スロットル: 手ぶれ防止: 一定時間内に最後のタスクのみを実行します。スロットル: 一定期間...

フロントエンド制作に関する簡単な議論: 互換性のために IE6 はまだ必要ですか?

国内市場ではIE6~7のサポートに対する一定の需要がまだありますが、フロントエンド開発者として、私た...

Linux lsof コマンドの使用方法の詳細な説明

lsof (開いているファイルのリスト) は、プロセスによって開かれたファイルを表示するツールです。...

Vue で棒グラフを使用し、自分で設定を変更する方法

1. HTMLファイルでechartをインポートする <!-- echarts をインポート ...

WeChat ミニプログラム ユーザー認証のベストプラクティス ガイド

序文WeChat アプレットを開発する際には、ユーザーの権限が必要なページを使用する必要があることが...

CSS が初期読み込み時の白い画面の時間に与える影響

外部 CSS ファイルを使用したレンダリング パイプライン上図では、HTML データの要求から DO...

JSはマップを使用してdouble配列を統合します

目次序文データのシミュレーション結合されたデータ合併のアイデアコードの表示と分析最初のステップステッ...

ElementUI の this.$notify.close() 呼び出しが機能しない問題の解決方法

目次要件の説明問題の説明問題分析問題解決質問の拡張要件の説明このプロジェクトでは、まずユーザーが質問...

XHTML ブロックレベルタグの概要

* 住所 - 住所* blockquote - ブロック引用* center - 中央揃えブロック*...

Docker で Tomcat を使用して Web アプリケーションを迅速にデプロイする方法の例

Docker の基本的な操作を学習した後、コンテナにいくつかの基本的なアプリケーションをデプロイして...

vue keepAlive キャッシュクリア問題事例の詳細な説明

Keepalive は Vue プロジェクトでのキャッシュによく使用され、基本的な要件を満たすのに非...

Vueを使い始める際に習得する必要がある知識について簡単に説明します

最も人気のあるフロントエンド フレームワークの 1 つとして、Vue は多くのフロントエンド開発エン...