1. 程式人生 > 其它 >react中進一步封裝axios,對錯誤資訊進行攔截

react中進一步封裝axios,對錯誤資訊進行攔截

技術標籤:大資料

MapReduce是Hadoop上的一個計算框架,計算過程分為Map階段和Reduce階段。使用者只需要編寫map()和reduce()函式即可完成簡單的分散式的程式設計。
map函式以鍵值對為輸入,產生一系列鍵值對作為中間輸出,寫入本地磁碟,MapReduce會自動將中間資料按key值聚集,將key值相同的資料統一交給reduce函式處理。
reduce函式以鍵值對作為輸入,經過彙總計算後將資料寫入HDFS

MapReduce的五個可程式設計元件

  1. InputFormat通過InputFormat類定義如何分割和讀取輸入檔案,Hadoop提供了多種輸入格式,其中有一個抽象類FileInputFormat,所有操檔案的InputFormat類都是從它繼承功能和屬性。
  2. Mapper將輸入的資料轉換成特定的鍵值對
  3. Partitoner確定Mapper產生的key/value傳送給哪個Reducer處理
  4. Reducer對相同或key的資料彙總計算
  5. OutputFormat 指定輸出格式

上程式碼:統計西遊記中“悟空”出現的次數
建立一個Java maven專案,新增依賴。

	<dependency>
	    <groupId>org.apache.hadoop</groupId>
	    <artifactId>hadoop-client</artifactId>
	    <version>3.2.1</
version
>
</dependency>

程式碼有三個類,APP類,Mapper類,Reduce類。APP類配置MapReduce作業資訊,Mapper做對映,Reduce做彙總
App類

package com.yjb.hadoop;
import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.
io.Text; import org.apache.hadoop.mapred.JobConf; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; /** * Hello world! * */ public class App { public static void main( String[] args ) throws IOException, ClassNotFoundException, InterruptedException { Configuration conf=new Configuration(); //叢集名字,配置檔案裡有 conf.set("fs.defaultFS", "hdfs://mycluster"); FileSystem fs = FileSystem.get(conf); //刪除檔案,否則每次重新執行都會提示目錄已存在 fs.delete(new Path("/output"), true); //作業名 Job job = Job.getInstance(conf,"App"); //作業啟動類 job.setJarByClass(App.class); //可程式設計元件InputFormat,設定輸入格式,預設使用TextInputFormat //job.setInputFormatClass(cls); //可程式設計元件Mapper job.setMapperClass(WordCountMapper.class); //可程式設計元件Partitioner //job.setPartitionerClass(cls); //可程式設計元件Reducer job.setReducerClass(WordCountReduce.class); //可程式設計元件OutputFormat,設定輸出格式,預設使用TextInputFormat //job.setOutputFormatClass(cls); //設定reduce作業數量 job.setNumReduceTasks(1); //輸出key型別 job.setOutputKeyClass(Text.class); //輸出值型別 job.setOutputValueClass(Text.class); //輸入目錄 String in ="/input"; //輸出目錄 String out="/output"; Path input = new Path(in); Path output= new Path(out); FileInputFormat.addInputPath(job, input); FileOutputFormat.setOutputPath(job, output); //成功輸出0失敗輸出1 System.out.println(job.waitForCompletion(true)?0:1); } }

這裡注意上面程式碼中的五個可程式設計元件

mapper類

package com.yjb.hadoop;

import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

public class WordCountMapper extends Mapper<Object, Text, Text, Text>{
	@Override
	protected void map(Object key, Text value, Mapper<Object, Text, Text, Text>.Context context)
			throws IOException, InterruptedException {
		//預設一個value一行,統計一行裡有多少"悟空"
		 String s=value.toString();
		 Pattern pattern = Pattern.compile("悟空");    
         Matcher matcher = pattern.matcher(s);    
         int count=0;  
         while(matcher.find()){  
             count++;  
         }  
		context.write(new Text("悟空"), new Text(String.valueOf(count)));	
	}

}

reduce類

package com.yjb.hadoop;

import java.io.IOException;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

public class WordCountReduce extends Reducer<Text, Text, Text, Text>{
	@Override
	protected void reduce(Text key, Iterable<Text> values, Reducer<Text, Text, Text, Text>.Context context)
			throws IOException, InterruptedException {
		int c=0;
		for(Text v:values) {
			String s=v.toString();
			System.out.println("s:"+s);
			c=c+Integer.valueOf(s);
		}
		context.write(key, new Text("出現了:"+c+"次"));
	}
}

將西遊記文件上傳到hdfs的/input/目錄下,注意一定是utf8編碼的檔案。
匯出程式包,在hadoop上執行

hadoop jar ABC.jar #我匯出的jar包

在這裡插入圖片描述
在這裡插入圖片描述
對上面的程式碼做一點改進,分別統計,八戒,大師兄,猴哥,沙師弟出現的次數

package com.yjb.hadoop;

import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

public class WordCountMapper extends Mapper<Object, Text, Text, Text> {
	@Override
	protected void map(Object key, Text value, Mapper<Object, Text, Text, Text>.Context context)
			throws IOException, InterruptedException {
		// 八戒,大師兄,猴哥,沙師弟出現的次數
		String s = value.toString();
		String[] p= {"八戒","大師兄","猴哥","沙師弟"};
		for(String sp:p) {
			Pattern pattern = Pattern.compile(sp);
			Matcher matcher = pattern.matcher(s);
			int count = 0;
			while (matcher.find()) {
				count++;
			}
			context.write(new Text(sp), new Text(String.valueOf(count)));
		}	
	}
}

執行結果:
在這裡插入圖片描述
震驚!西遊記原著中竟然從來沒出現過猴哥,也沒出現過沙師弟!