Hadoop計數器的應用以及數據清洗
數據清洗(ETL)
在運行核心業(yè)務MapReduce程序之前,往往要先對數據進行清洗,清理掉不符合用戶要求的數據。清理的過程往往只需要運行Mapper程序,不需要運行Reduce程序。
1.需求
去除日志中字段長度小于等于11的日志。
(1)輸入數據
web.log
(2)期望輸出數據
每行字段長度都大于11
2.需求分析
需要在Map階段對輸入的數據根據規(guī)則進行過濾清洗。
3.實現(xiàn)代碼
(1)編寫LogMapper類
package com.atguigu.mapreduce.weblog; import java.io.IOException; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.NullWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; public class LogMapper extends Mapper<LongWritable, Text, Text, NullWritable>{ Text k = new Text(); @Override 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) { return; } // 4 設置key k.set(line); // 5 寫出數據 context.write(k, NullWritable.get()); } // 2 解析日志 private boolean parseLog(String line, Context context) { // 1 截取 String[] fields = line.split(" "); // 2 日志長度大于11的為合法 if (fields.length > 11) { // 系統(tǒng)計數器 context.getCounter("map", "true").increment(1); return true; }else { context.getCounter("map", "false").increment(1); return false; } } }
(2)編寫LogDriver類
package com.atguigu.mapreduce.weblog; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.NullWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class LogDriver { public static void main(String[] args) throws Exception { // 輸入輸出路徑需要根據自己電腦上實際的輸入輸出路徑設置 args = new String[] { "e:/input/inputlog", "e:/output1" }; // 1 獲取job信息 Configuration conf = new Configuration(); Job job = Job.getInstance(conf); // 2 加載jar包 job.setJarByClass(LogDriver.class); // 3 關聯(lián)map job.setMapperClass(LogMapper.class); // 4 設置最終輸出類型 job.setOutputKeyClass(Text.class); job.setOutputValueClass(NullWritable.class); // 設置reducetask個數為0 job.setNumReduceTasks(0); // 5 設置輸入和輸出路徑 FileInputFormat.setInputPaths(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); // 6 提交 job.waitForCompletion(true); } }
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接
相關文章
ibmx335/ibmx336服務器做RAID陣列的圖文方法(包括刪除RAID陣列)
X服務器中有一些集成LSI SCSI控制器的機型,在開機自檢時按CTRL C可以配置兩個硬盤的鏡像。但是當升級BIOS之后,CTRL C中的一些設置發(fā)生了變化,配置方法也較以前的版本有些差異2012-06-06服務器錯誤碼500 501 502 503 504 505 詳解
這篇文章主要介紹了服務器錯誤碼500 501 502 503 504 505 詳解,需要的朋友可以參考下2015-07-07阿里云k8s服務springboot項目應用升級時出現(xiàn)502錯誤
這篇文章主要介紹了阿里云k8s服務springboot項目應用升級時出現(xiàn)502錯誤,需要的朋友可以參考下2022-04-04戴爾dell poweredge r730服務器系統(tǒng)安裝配置詳解教程
這篇文章主要介紹了戴爾dell poweredge r730服務器系統(tǒng)安裝配置詳解教程,需要的朋友可以參考下2018-05-05