MapReduce環境搭建以及WordCount案例
一、環境搭建
(伺服器主機名CentOSQ)
①配置資源管理器
//編輯yarn-site檔案
[root@CentOSQ ~]# vi /usr/hadoop-2.9.2/etc/hadoop/yarn-site.xml
//加如下列配置(注意下列配置我們的主機名是什麼下列的配置和我們的主機名是一致的)
<!--配置MapReduce計算框架的核心實現Shuffle-洗牌-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--配置資源管理器所在的目標主機-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>CentOSQ</value>
</property>
<!--關閉實體記憶體檢查-->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!--關閉虛擬記憶體檢查-->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
②配置MapReduce計算框架
//將mapred-site.xml.template檔案使用移動命令mv 改成mapred-site.xml檔案
[root@CentOSQ ~]# mv /usr/hadoop-2.9.2/etc/hadoop/mapred-site.xml.template /usr/hadoop-2.9.2/etc/hadoop/mapred-site.xml
[root@CentOSQ ~]# vi /usr/hadoop-2.9.2/etc/hadoop/mapred-site.xml
//在<configuration>中加入下面的配置
<!--MapRedcue框架資源管理器的實現-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
③啟動計算服務
[root@CentOSQ ~]# start-yarn.sh
//使用jps檢視我們的啟動的服務
[root@CentOSQ ~]# jps
//我們的yarn框架啟動後會有這麼兩個框架服務啟動NodeManager、ResourceManager
1802 NodeManager
1711 ResourceManager
④可以訪問ResourManager內嵌WebUI頁面:http://CentOSQ:8088
我們需要保證在使用主機名訪問的時候我們windows中的主機名對映是配置過的
二、MapReduce任務開發(WordCount案例)
背景
假設我們有如下的一張表,需要統計出每個版塊被點選次數。
日誌級別 類別 點選日期
INFO /product/xxxx1 2020-09-28 10:10:00
INFO /product/xxxx2 2020-09-28 12:10:00
INFO /cart/xxxx2 2020-09-28 12:10:00
INFO /order/xxxx 2020-09-28 12:10:00
如果我們可以將以上的日誌看做成是資料庫中的一張表,這個問題就可以使用以下SQL解決:
select category,sum(1) from t_click group by category
如果使用上面提到的MapReduce計算模型,我們可以使用Map完成group的功能,使用Reduce完成sum的功能。有如下資料格式
INFO /product/xxx/1?name=zhangsan 2020-09-28 10:10:00
INFO /product/xxx/1?name=zhangsan 2020-09-28 10:10:00
INFO /cart/xxx/1?name=lisi 2020-09-28 10:10:00
INFO /order/xxx/1?name=zhangsan 2020-09-28 10:10:00
INFO /product/xxx/1?name=zhaoliu 2020-09-28 10:10:00
INFO /cart/xxx/1?name=win7 2020-09-28 10:10:00
實現
①寫Mapper邏輯
package com.baizhi.mr;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;
/**
* 1、使用者必須首先清楚 資料格式、儲存位置 --讀取資料方式 --Mapper寫法?
* TextInputFormat<LongWritable,Text>:讀取檔案系統中檔案本地系統、HDFS
* 位元組偏移量 文字行
* 2、必須清楚的知道自己想幹嘛? 按__類別__統計 __點選次數__值
* key value
*/
public class URLMapper extends Mapper<LongWritable, Text,Text, IntWritable> {
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
//獲取一行的文字資料
String line = value.toString();
//以空格切分文字行資料
String[] split = line.split("\\s+");
//遍歷以空格切分的單詞進行輸出
for (String s : split) {
context.write(new Text(s),new IntWritable(1));
}
}
}
②Reducer邏輯
package com.baizhi.mr;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
import java.io.IOException;
/**
* 1、你要對哪種Mapper的輸出結果彙總 -- 決定Reducer輸入的Key和Value型別
*
* 2、你要知道最終輸出結果以哪種格式寫出去,輸出Key/Value格式使用者只需要關注他的toString即可
*
* TextOutputFormat<key,value> 將結果寫出到檔案系統:本地、HDFS
*/
public class URLReducer extends Reducer<Text, IntWritable, Text,IntWritable> {
@Override
protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
int total=0;
for (IntWritable value : values) {
total+=value.get();
}
context.write(key,new IntWritable(total));
}
}
③封裝Job物件
package com.baizhi.mr;
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.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
//com.baizhi.mr.URLCountApplication
public class URLCountApplication extends Configured implements Tool {
public int run(String[] strings) throws Exception {
//1.建立一個job物件
Configuration conf =getConf();
Job job = Job.getInstance(conf, "URLCountApplication");
//打包任務釋出需要新增的程式碼
job.setJarByClass(URLCountApplication.class);
//2.設定資料格式
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);
//3.設定從那個檔案裡讀取的資料路徑
TextInputFormat.addInputPath(job,new Path("/logs/word"));
//系統自己建立的的輸出路徑 如果系統檔案存在則自動放棄(這樣做是為了防止資料的覆蓋)
TextOutputFormat.setOutputPath(job,new Path("/logs/wordcount"));
//4.設定處理邏輯
job.setMapperClass(URLMapper.class);
job.setReducerClass(URLReducer.class);
//5.設定輸出的key value
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
//6.提交
return job.waitForCompletion(true)?1:0;
}
public static void main(String[] args) throws Exception {
ToolRunner.run(new URLCountApplication(),args);
}
}
三、任務釋出
遠端部署
需要在job當中新增如下程式碼
job.setJarByClass(URLCountApplication.class);
打包程式
設定程式的類載入路徑,因為任務是打好jar包以後使用hadoop jar命令提交的.
[root@CentOSQ ~]# hadoop jar Hadoop_MR-1.0-SNAPSHOT.jar com.baizhi.mr.URLCountApplication
//或者如下
[root@CentOSQ ~]# yarn jar Hadoop_MR-1.0-SNAPSHOT.jar com.baizhi.mr.URLCountApplication
相關文章
- 使用MapReduce執行WordCount案例
- Mybatis環境搭建以及案例 SqlSession物件的方法MyBatisSQLSession物件
- Spark程式設計環境搭建及WordCount例項Spark程式設計
- MapReduce 程式設計模型 & WordCount 示例程式設計模型
- Java環境搭建與配置、以及Tomcat搭建與配置JavaTomcat
- PCIE XDMA 開發環境搭建以及環路測試開發環境
- PHP環境搭建以及完成本地執行PHP
- Linux筆記01:概述以及環境搭建Linux筆記
- 搭建lamp環境以及安裝配置phpmyadminLAMPPHP
- Linux 下 Go 環境搭建以及 Gin 安裝LinuxGo
- Flutter環境搭建以及開發軟體安裝Flutter
- Jena TDB 環境搭建以及幾個工具的使用
- Hadoop MapReduce之wordcount(詞頻統計)Hadoop
- MapReduce(一):入門級程式wordcount及其分析
- 環境搭建
- 搭建軟體執行平臺以及IDE環境IDE
- 【Kafka】基於Windows環境的Kafka有關環境(scala+zookeeper+kafka+視覺化工具)搭建、以及使用.NET環境開發的案例程式碼與演示KafkaWindows視覺化
- windows環境下Django環境搭建WindowsDjango
- MapReduce 過程詳解 (用WordCount作為例子)
- windows下使用idea maven配置spark執行環境、執行WordCount例子以及碰到的問題WindowsIdeaMavenSpark
- react環境搭建React
- LNMP 環境搭建LNMP
- 搭建Java環境Java
- Vagrant 環境搭建
- Flutter環境搭建Flutter
- swoft 環境搭建
- OpenGL 環境搭建
- 搭建gym環境
- 搭建lnmp環境LNMP
- Angular環境搭建Angular
- JDK環境搭建JDK
- keil環境搭建
- Dubbo環境搭建
- mac搭建環境Mac
- FNA 環境搭建
- FNA環境搭建
- Maven 環境搭建Maven
- spark環境搭建Spark