トピック:
データファイルの内容を結果:
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行を問い合わせます。