1. 程式人生 > >LInux 網站基於地域維度的UV分析 以及eclipse將包打包成jar包

LInux 網站基於地域維度的UV分析 以及eclipse將包打包成jar包

PV: Page View 網頁瀏覽量

UV:Unique View 使用者唯一訪問量

Ip:網路IP地址訪問網站的訪問量

VV:Visit View 遊客的訪問數量

回顧:Hadoop 一個由Apache基金會所開發的分散式系統基礎架構,其功能是為了解決大資料的儲存和大資料的計算。

             hdfs:是Hadoop用來解決大資料儲存的方式,又名分散式檔案系統

             MapReduce:是一種程式設計模型,用於大規模資料集(大於1TB)的並行運算。學習Hadoop主要學習的是其思想。

hdfs的特點:分散式:

                             特點:  

                                     主從結構:namenode:主節點 作用:儲存元資料,接受處理使用者的請求,管理所有從節點

                                      分塊 、有副本:保證資料不丟失

Map Reduce V2 分散式計算模型  ——》input——》mapper——》shuffle——》reduce——》output

yarn:分散式 

                    resource manager;作用:資源管理,任務排程,管理從節點

                     Map Reduce 執行過程:——》input:預設從hdfs中讀取資料:Text Input Format  / File Input Format ——》路徑:Path path = new

Path(args[0]);——》將每一行轉換為一個keyvalue——》輸出

                        mapper——》輸入:input的輸出   Longwritable /Text ; map():方法,一行呼叫一次map方法。map思路:1)設計輸出,構造輸出的keyvalue

2) 對每一行內容進行分割——》輸出

                            shuffle:功能:分割槽,分組,排序

                            reduce:每一條keyvalue呼叫一次reduce方法   reduce,將相同key的List<value>,進行相加求和

                            output:輸出,預設將reduce的輸出寫入hdfs中。

MapReduce開發模板
-》Driver:
-》不繼承不實現
-》繼承及實現
extends Configured implements Tool

-》不繼承只實現
implements Tool
-》Mapper

-》Reducer

自定義資料型別
-》要求keyvalue中包含多列
-》在map中
輸出的key:自定義資料型別
輸出的value:nullwritable
-》實現介面
-》Writable
-》write
-》readFields
-》WritableComparable
-》capareTo
-》其他方法
-》get and set
-》建構函式
-》toString

-》hashcode and equals

UV:unique view 唯一訪問數,一個使用者記一次   統計每個城市的UV數

import java.io.IOException;
import java.util.HashSet;
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;


public class UrMrtest extends Configured implements Tool {
	
	public static class WebLogUVMapper extends Mapper<LongWritable, Text, Text, Text>{
		private Text outputKey = new Text();
		private Text outputValue = new Text();

		@Override
		protected void map(LongWritable key, Text value,Context context)
				throws IOException, InterruptedException {
			// TODO Auto-generated method stub
			//分割每一行的內容
			String line = value.toString();
			String[] items = line.split("\t");
			if (36<=items.length) {
				if (StringUtils.isBlank(items[5])) {
					return;
				}
				
				this.outputKey.set(items[23]);
				this.outputValue.set(items[5]);
				
				context.write(outputKey, outputValue);
			}else{
				return;
			}
		}	
	}
	
	
	public static class WebLogUVReduce extends Reducer<Text, Text, Text, IntWritable>{

		@Override
		protected void reduce(Text key, Iterable<Text> values,Context context)
				throws IOException, InterruptedException {
			// TODO Auto-generated method stub
			HashSet<String> a = new HashSet<>();
			for(Text value:values){
				a.add(value.toString());
			}
			context.write(key, new IntWritable(a.size()));
		}
	}
	
	
	@Override
	public int run(String[] arg0) throws Exception {
		// TODO Auto-generated method stub
		//job
		Job job = Job.getInstance(this.getConf(),"uvtest");
		job.setJarByClass(UrMrtest.class);
		//input
		FileInputFormat.setInputPaths(job, new Path(arg0[0]));
		//map
		job.setMapperClass(WebLogUVMapper.class);
		job.setMapOutputKeyClass(Text.class);
		job.setMapOutputValueClass(Text.class);
		//reducer
		job.setReducerClass(WebLogUVReduce.class);
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(IntWritable.class);
		
		job.setNumReduceTasks(2);
		//output
		FileOutputFormat.setOutputPath(job, new Path(arg0[1]));
		
		return job.waitForCompletion(true)?0:1;
	}

	public static void main(String[] args){
		Configuration conf = new Configuration();
		
		try {
			int status = ToolRunner.run(conf, new UrMrtest(),args);
			System.exit(status);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

將程式碼打包成jar





next——》next


finish 之後


執行OK就好了。


將jar包匯入到Linux中,準備好資料


執行檢測。