教室でのテスト - データクレンジング2

トピック:

データファイルの内容を結果:

IP:106.39.41.166、(都市)

日付:10/11月/ 2016:00:01:02 0800、(日付)

デイ:10、(日数)

交通:54、(流量)

タイプ:ビデオ、(種類:ビデオの映像や記事の記事)

ID:8701(IDビデオや記事)

テスト要件:

1、  データクリーニング:クリーニングデータに応じて、インポートデータ洗濯にハイブデータベース。

二段データクリーニング:

(1)第1段階:必要な情報は、元のログから抽出され

IP:199.30.25.88

時間:10/11月/ 2016:00:01:03 0800

交通:62

関連記事:記事/ 11325

ビデオ:ビデオ/ 3235

1 2 3 4 5 6

(2)第二段階:から抽出された情報に基づいて細かい操作を行います

IP --->都会(IP)

日付 - >時間:2016年11月10日夜12時01分03秒

日:10

交通:62

タイプ:記事/ビデオ

ID:11325

(3)ハイブデータベーステーブル構造:

テーブルデータを作成する(IP列、時間文字列、日文字列、交通BIGINT、

文字列型、id文字列)

図2に示すように、データ処理:

・トップ10の訪問の統計で最も人気のあるビデオ/記事(ビデオ/記事)

・最も人気のある都市トップ10コースの統計によると(IP)

・トラフィック統計によると、トップ10で最も人気のあるコース(トラフィック)

図3に示すように、データ視覚化:統計結果は、MySQLデータベースを注ぎグラフィカル表示モードを介して展開。

完成:

現在、我々は最初のステップ2を完了しました。以下は、最初に取るための2番目のステップです。

第2のステップは解決するためのMapReduceステップを使用するのではと思いますが、問題を見始めて、データ処理のための主であるが、唯一の新しいnum個を取得するデータの合計となる映像/記事の同じIDにする必要があり、また、numがなければデータを処理するためのいくつかの大規模なので、二回のMapReduceの困難を解決し、次にハイブをインポートする処理工程を反転、最初の10個のクエリデータは、所望されます。

最初のステップ:2つだけの列とIDデータを保持する新しい和データ取得NUM、numの同じビデオ/記事のidと。

1つの インポートにjava.io.IOException。
2  インポートorg.apache.hadoop.conf.Configuration。
3  インポートorg.apache.hadoop.fs.Path。
4  インポートorg.apache.hadoop.io.Text。
5  輸入org.apache.hadoop.mapreduce.Job。
6  インポートorg.apache.hadoop.mapreduce.Mapper。
7  インポートorg.apache.hadoop.mapreduce.Reducer。
8  インポートorg.apache.hadoop.mapreduce.lib.input.FileInputFormat。
9  インポートorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat。
10  
11  パブリック クラスtext_2_1 {
12      パブリック 静的 クラスマップ延びマッパー<オブジェクト、テキスト、テキスト、テキスト> {
 13          プライベート 静的テキストNEWKEY = 新しいテキスト();
14          プライベート 静的のテキストNEWVALUE = 新しいテキスト( "1" );
15          パブリック ボイドマップ(オブジェクトキー、テキスト値、コンテキスト・コンテキスト)がスローにIOException、InterruptedExceptionある{
 16          列ライン= value.toStringを();
17          文字列ARR [] = line.split(」 " )。
18          newKey.set(ARR [5 ])。
19         context.write(NEWKEY、NEWVALUE)。
20          }
 21      }
 22          パブリック 静的 クラス減らし延び減速を<テキスト、テキスト、テキスト、テキスト> {
 23              プライベート 静的テキストNEWKEY = 新しいテキスト();
24              プライベート 静的のテキストNEWVALUE = 新しいテキスト();
25              保護された ボイドは、(テキストキー、反復処理可能<テキスト>値は、コンテキスト・コンテキスト)が低減スローにIOException、InterruptedExceptionある{
 26                  INT NUM = 0 27                      のための(本文テキスト:値){
 28                          NUM ++ 29                      }
 30                      newkey.set( "" + NUM)。
31                      newvalue.set(キー)。
32                      context.write(NEWKEY、NEWVALUE)。
33              }
 34          }
 35      公共 静的 ボイドメイン(文字列[]引数)がスローにIOException、ClassNotFoundExceptionが、InterruptedExceptionある{
 36      構成CONF = 新しい設定を();
37      conf.set( "mapred.textoutputformat.separator"、 "");
38      のSystem.out.println( "開始" )。
39        ジョブのジョブ= Job.getInstance(CONF)。 
40        job.setJarByClass(text_2_1。クラス)。
41        job.setMapperClass(地図。クラス);
42        job.setReducerClass(減らし。クラス)。
43        job.setOutputKeyClass(テキスト。クラス)。 
44        job.setOutputValueClass(テキスト。クラス)。 
45        でパス= 新しいパス( "HDFS:// localhostを:9000 /テキスト/中/データ" );
46        パスアウト= 新しいですパス( "HDFS:// localhostを:9000 /テキスト/ OUT1" );
47        (ジョブ)FileInputFormat.addInputPath。
48        FileOutputFormat.setOutputPath(ジョブ、出);
49        ブーリアンフラグ= job.waitForCompletion()。
50          のSystem.out.println(フラグ)。
51          でSystem.exit(フラグ0:1? )。
52    }
 53 }

処理NUMの第二段階は、反転されてもよいです。デフォルトは、新しく定義したクラスの比較ので、正のシーケンスのMapReduceの一種であるためです。

1つの インポートにjava.io.IOException。
2  インポートorg.apache.hadoop.conf.Configuration。
3  インポートorg.apache.hadoop.fs.Path。
4  インポートorg.apache.hadoop.io.IntWritable。
5  インポートorg.apache.hadoop.io.Text。
6  インポートorg.apache.hadoop.mapreduce.Job。
7  インポートorg.apache.hadoop.mapreduce.Mapper。
8  インポートorg.apache.hadoop.mapreduce.Reducer。
9  インポートorg.apache.hadoop.mapreduce.lib.input.FileInputFormat。
10  インポートorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat。
11 パブリック クラスM {
 12      パブリック 静的 クラス地図延びマッパーを<オブジェクト、テキスト、IntWritable、テキスト> {
 13          プライベート 静的 IntWritable NEWKEY = 新しいIntWritable()。
14          プライベート 静的のテキストNEWVALUE = 新しいテキスト();
15          パブリック ボイドマップ(オブジェクトキー、テキスト値、コンテキスト・コンテキスト)がスローにIOException、InterruptedExceptionある{
 16          列ライン= value.toStringを();
17          文字列ARR [] = line.split(」 " )。
18         newKey.set(Integer.parseInt(ARR [0 ]));
19          newvalue.set(ARR [1 ])。
20          context.write(NEWKEY、NEWVALUE)。
21          }
 22      }
 23          パブリック 静的 クラス削減延び減速<IntWritable、テキスト、IntWritable、テキスト> {
 24が             保護 ボイド(IntWritableキー、反復処理可能<テキスト>値は、コンテキスト・コンテキスト)が低減スローIOExceptionが、InterruptedExceptionある{
 25                      のための(テキストのテキスト:値){
 26                          context.write(キー、テキスト)。
27                     }
 28              }
 29          }
 30          パブリック 静的 クラス IntWritableDecreasingComparatorは延び    IntWritable.Comparator 
 31          {        
 32              公衆 INTは比較(バイト [] B1、INT S1、INT L1、バイト [] B2、INT S2、INT L2) 
 33              {            
 34                  リターン - スーパー。 (B1、S1、L1、B2、S2、L2)を比較します。        
35                  }    
36              }
 37      公共 静的 ボイドメイン(文字列[]引数)がスローにIOException、ClassNotFoundExceptionが、InterruptedExceptionある{
 38      構成CONF = 新しい設定を();
39      conf.set( "mapred.textoutputformat.separator"、 "" );
40      のSystem.out.println( "スタート" );
41        ジョブのジョブ= Job.getInstance(CONF)。 
42        job.setJarByClass(M。クラス)。
43        job.setMapperClass(地図。クラス);
44        job.setReducerClass(リデュース。クラス);
45        job.setOutputKeyClass(IntWritable。クラス)。 
46        job.setOutputValueClass(テキスト。クラス); 
47        job.setSortComparatorClass(IntWritableDecreasingComparator。クラス)。
48        でパス= 新しいパス( "HDFS:// localhostを:9000 /テキスト/ OUT1 /パート-R-00000" )。
49        アウトパス= 新しいパス( "HDFS:// localhostを:9000 /テキスト/ OUT2" );
50        (ジョブ)FileInputFormat.addInputPath。
51        FileOutputFormat.setOutputPath(ジョブ、出);
52        ブーリアンフラグ= job.waitForCompletion();
53          のSystem.out.println(フラグ)。
54          でSystem.exit(フラグ0:1? )。
55    }
 56 }

 

上記2つのプロセス工程の後、得られたデータは、そのようなものです

 

 次いでハイブデータベースをインポートし、それがまた、所望され、最初の10行を問い合わせます。

 

おすすめ

転載: www.cnblogs.com/123456www/p/11859287.html