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

推薦する

Ubuntu ターミナル マルチウィンドウ 分割画面 ターミネーター

1. インストールターミネーターの最大の特徴は、1つのウィンドウで複数のターミナルを開くことができる...

WeChatアプレットで計算機機能を実装する

この記事は、WeChat アプレットを使用して作成された簡単な計算機です。興味のある方はご覧ください...

HTML+CSSプロジェクト開発経験概要(推奨)

ここ数日ブログを更新していませんでした。簡単な HTML+CSS プロジェクトを終えたところです。数...

Windows で Mysql を起動したときに 1067 が表示される場合の解決策

数日前に仕事を始めて、Mysql をインストールしたところ、開くことができました。今日、会社に行った...

Linux の一般的なハードディスク管理コマンドの紹介

目次1. dfコマンド2. duコマンド3. fsckファイルシステム修復コマンド4. ディスクステ...

JavaScript でシンプルな Web 時計を実装する

JavaScript を使用して Web ページ クロックを実装します。効果は次の図に示されています...

MySqlを最適化するためにnot inを使用する方法

最近、プロジェクトで選択クエリを使用する際に、未使用の主キー ID を除外するために not in ...

Vue SPA ファースト スクリーン最適化ソリューション

目次序文最適化ソ連オンデマンドインポート1. ルーティングファイルでコンポーネントをオンデマンドでイ...

js 加算、減算、乗算、除算の正確な計算方法のサンプルコード

序文コンピュータの数値は浮動小数点であるため、計算プロセス中に取得されるデータは通常正確ではなく、そ...

最小限の展開で CentOS8 に OpenStack Ussuri をインストールする方法の詳細なチュートリアル

CentOS8 に最小限のデプロイメントで OpenStack Ussuri をインストールするため...

MySQL シリーズ 12 バックアップとリカバリ

目次チュートリアルシリーズ1. バックアップ戦略の説明1. バックアップの種類2. バックアップで考...

友達やグループを見つけるためのJavaScriptのLayim

現在、layuiの関係者はlayim友達検索ページの構造とスタイルを提供していません。私は個人的に非...

IE環境では、divの高さはフォントの高さよりも大きくなければならないと規定されています。

コードをコピーコードは次のとおりです。 <div class="content&qu...

Windows システムでの MySQL 8.0.21 インストール チュートリアル (図とテキスト)

インストールの提案: インストールには .exe を使用せず、圧縮パッケージを使用してください。これ...

ログインボックスのメールプロンプトを実装するネイティブJS

この記事では、登録またはログイン時に電子メール アドレスを入力する際のドロップダウン プロンプトのネ...