大數據學習棧記——MapReduce技術

本文介紹hadoop中的MapReduce技術的應用,使用java API。操作系統:Ubuntu24.04。

MapReduce概述

MapReduce概念

MapReduce是一個分布式運算程序的編程框架,核心功能是將用戶編寫的業務邏輯代碼和自帶默認組件整合成一個完整的分布式運算程序,并發運行在一個Hadoop集群上。

MapReduce核心思想

分布式的運算程序往往需要分成至少2個階段。

第一個階段的MapTask并發實例,完全并行運行,互不相干。

第二個階段的ReduceTask并發實例互不相干,但是他們的數據依賴于上一個階段的所有MapTask并發實例的輸出。

MapReduce編程模型只能包含一個Map階段和一個Reduce階段,如果用戶的業務邏輯非常復雜,那就只能多個MapReduce程序,串行運行。

MapReduce 進程

MrAppMaster:負責整個程序的過程調度及狀態調度

MapTask:負責 Map 階段的整個數據處理流程

ReduceTask:負責 Reduce 階段的整個數據處理流程

創建軟件包

新建一個MapReduce軟件包

編寫Mapper類

Mapper類將單詞文本進行切割,切割成一個個的單詞,寫入到上下文中

(1)按行讀取,通過split函數進行切割,將切割出來的一個個單詞放到數組words中

(2)遍歷數組words,將存在的單詞數據存儲到word中,然后將word寫入到context上下文(使Redcue程序能訪問到數據)

核心代碼:

package MapReduce;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;public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {// 輸出Text k = new Text();IntWritable v = new IntWritable(1);@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {// 1 獲取一行String line = value.toString();// 2 切割String[] words = line.split(" ");// 3 輸出for (String word : words) {k.set(word);context.write(k, v);}}
}

編寫Reducer類

Reducer類

(1)將每個單詞統計次數結果進行求和合并

(2)把統計結果依次寫入到context上下文中

核心代碼:

package MapReduce;import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;public class WordCountReducer extends Reducer<Text, IntWritable, Text, LongWritable> {@Overrideprotected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {// 聲明變量 用于存儲聚合完的結果long count = 0;// 遍歷相同的 key 獲取對應的所有 valuefor (IntWritable value : values) {count += value.get();}// 將聚合完的結果寫到 MapReduce 框架context.write(key, new LongWritable(count));}
}

編寫Driver類

Driver類中,需要進行以下操作:

獲取job 設置jar包路徑

關聯Mapper、Reducer

設置map輸出的k,v類型

最終輸出的k,v類型

設置輸入路徑和輸出路徑

提交job

核心代碼:

package MapReduce;import org.apache.hadoop.conf.Configuration;
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.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class WordCountDriver {public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {// 0. 自定義配置對象Configuration conf = new Configuration();// 1. 創建 Job 對象,參數可取消Job job = Job.getInstance(conf);// 2. 給 Job 對象添加 Mapper 類的 Classjob.setMapperClass(WordCountMapper.class);// 3. 給 Job 對象添加 Reduce 類的 Classjob.setReducerClass(WordCountReducer.class);// 4. 給 Job 對象添加 Driver 類的 Classjob.setJarByClass(WordCountDriver.class);// 5. 設置 Mapper 輸出的數據的 key 類型job.setMapOutputKeyClass(Text.class);// 6. 設置 Mapper 輸出的數據的 value 類型job.setMapOutputValueClass(IntWritable.class);// 7. 設置 Reduce 輸出的數據的 key 類型job.setOutputKeyClass(Text.class);// 8. 設置 Reduce 輸出的數據的 value 類型job.setOutputValueClass(LongWritable.class);// 定義uri字符串// String uri = "hdfs://master:9000";// 9. 設置 MapReduce 任務的輸入路徑FileInputFormat.setInputPaths(job, new Path(args[0]));// 10.設置 MapReduce 任務的輸出路徑FileOutputFormat.setOutputPath(job, new Path(args[1]));// 11.提交任務boolean result = job.waitForCompletion(true);// 12.退出返回System.exit(result ? 0 : 1);}
}

打包

在IDEA中,選擇最右邊的“Maven”選項卡,展開旁邊的” Lifecycle → package”,雙擊,在最左邊的Project面板中,找到” src → target”,就能發現生成了一個jar文件,我這里是“Spark-1.0-SNAPSHOT.jar”。

找到這個文件,在文件資源管理器打開,上傳這個文件。可以修改成一個簡單的名字,如“mr.jar”,然后放到一個你容易找到的地方,例如桌面上。利用XShell把這個文件上傳到hadoop集群中

在hadoop集群中執行MapReduce程序

先準備好需要統計詞頻的文件,用瀏覽器打開hadoop的Web UI,輸入地址:

http://hadoop101:9870/

然后選擇“Utilities”菜單下的“Browser the file system”,我創建了一個文件夾“wordcount”

進入“wordcount”文件夾,我繼續創建了一個文件夾“input”。繼續進入“input”文件夾,我上傳了兩個文件“”file01.txt 和“file02.txt”,內容分別為:

Hello MapReduce Bye MapReduce
Hello Hadoop Goodbye Hadoop

進入主機master,打開命令行窗口,輸入下列命令來執行上傳的MapReduce程序:

cd /home/youka

hadoop jar mr.jar mr.WordCountDriver /wordcount/input /wordcount/output

系統執行后,報錯了

Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster:

這里給出的報錯信息非常明確,就是mapreduce配置文件沒有配好,先打開hadoop中mapreduce配置文件:

vim /usr/local/hadoop/etc/hadoop/mapred-site.xml

在configuration中增加一下配置:

<property><name>yarn.app.mapreduce.am.env</name><value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property><name>mapreduce.map.env</name><value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property><name>mapreduce.reduce.env</name><value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>

重新執行,成功

在“wordcount”中增加了一個”output”文件夾

打開后多了兩個文件

“part-r-00000”文件顯示了統計結果

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/902219.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/902219.shtml
英文地址,請注明出處:http://en.pswp.cn/news/902219.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Centos9 離線安裝 MYSQL8

centos 9 離線安裝 mysql 8 參考教程 1. 官網下載mysql 下載地址 2. 將文件傳輸到Centos中解壓 軟件全部安裝到了/opt中 在opt中新建mysql目錄&#xff0c;解壓到mysql目錄中 tar -xvf mysql壓縮文件 mysql[rootcentoshost mysql]# ls mysql-community-client-8.4.5-1.e…

helm的go模板語法學習

1、helm chart 1.0、什么是helm&#xff1f; 介紹&#xff1a;就是個包管理器。理解為java的maven、linux的yum就好。 安裝方法也可參見官網&#xff1a; https://helm.sh/docs/intro/install 通過前面的演示我們知道&#xff0c;有了helm之后應用的安裝、升級、查看、停止都…

display的一些學習記錄

收集的SDM的log&#xff1a; 01-01 00:00:15.311 933 933 I SDM : Creating Display HW Composer HAL 01-01 00:00:15.311 933 933 I SDM : Scheduler priority settings completed 01-01 00:00:15.311 933 933 I SDM : Configuring RPC threadpool 0…

【Rust 精進之路之第2篇-初體驗】安裝、配置與 Hello Cargo:踏出 Rust 開發第一步

系列&#xff1a; Rust 精進之路&#xff1a;構建可靠、高效軟件的底層邏輯 **作者&#xff1a;**碼覺客 發布日期&#xff1a; 2025-04-20 引言&#xff1a;磨刀不誤砍柴工&#xff0c;裝備先行&#xff01; 在上一篇文章中&#xff0c;我們一起探索了 Rust 誕生的緣由&…

【深度學習】計算機視覺(17)——ViT理解與應用

文章目錄 Embedding1 概念2 Q&A &#xff08;1&#xff09;3 Positional Encoding4 Q&A &#xff08;2&#xff09; ViT樣例及Embedding可視化理解1 簡化ViT練習2 CLS Token3 Embedding可視化4 多頭注意力可視化 Embedding技術體系結構參考來源 在研究中對特征的編碼和…

肖特基二極管詳解:原理、作用、應用與選型要點

一、肖特基二極管的基本定義 肖特基二極管&#xff08;Schottky Diode&#xff09; 是一種基于金屬-半導體結&#xff08;肖特基勢壘&#xff09;的二極管&#xff0c;其核心特性是低正向壓降&#xff08;Vf≈0.3V&#xff09;和超快開關速度。 結構特點&#xff1a;陽極采用金…

DeepSeek在數據倉庫的10大應用場景

一、智能數據集成與清洗 多源數據整合&#xff1a;DeepSeek能夠從多種數據源中提取、轉換和加載數據&#xff0c;實現跨系統數據的高效整合。 數據清洗與標準化&#xff1a;通過智能算法自動識別并糾正數據中的錯誤、不一致性和缺失值&#xff0c;提升數據質量。 二、數據倉…

提示詞構成要素對大語言模型跨模態內容生成質量的影響

提示詞構成要素對大語言模型跨模態內容生成質量的影響 提示詞清晰度、具象性與質量正相關 限定指向性要素優于引導指向性要素 大語言模型生成內容保真度偏差 以訊飛星火大模型為實驗平臺,選取100名具備技術素養的人員,從提示詞分類、構成要素和實踐原則歸納出7種提示詞組…

BeautifulSoup 庫的使用——python爬蟲

文章目錄 寫在前面python 爬蟲BeautifulSoup庫是什么BeautifulSoup的安裝解析器對比BeautifulSoup的使用BeautifulSoup 庫中的4種類獲取標簽獲取指定標簽獲取標簽的的子標簽獲取標簽的的父標簽(上行遍歷)獲取標簽的兄弟標簽(平行遍歷)獲取注釋根據條件查找標簽根據CSS選擇器查找…

關于MacOS使用Homebrew的詳細介紹

Homebrew 是 macOS&#xff08;和 Linux&#xff09;上最流行的包管理工具&#xff08;Package Manager&#xff09;&#xff0c;用于快速安裝、更新和管理各種開發工具、命令行程序、開源軟件等。它類似于&#xff1a; Ubuntu/Debian 的 aptCentOS/RHEL 的 yumWindows 的 Cho…

最新扣子空間實操指南

一、首先要先獲取到內部測試的邀請碼&#xff0c; 我們先打開扣子空間官網&#xff1a;https://space.coze.cn/ 輸入邀請碼后進入該頁面&#xff1a; 它這里支持文件上傳&#xff0c;擴展里面有很多插件&#xff0c;頁支持MCP各種插件. 探索模式有兩種&#xff0c;一種是ai自…

ubuntu22.04安裝dukto

1.添加源 sudo add-apt-repository ppa:xuzhen666/dukto2.進行更新和安裝 sudo apt update sudo apt install dukto3.報錯 $ sudo apt install dukto 正在讀取軟件包列表... 完成 正在分析軟件包的依賴關系樹... 完成 正在讀取狀態信息... 完成 您也許需要…

Java編程基礎(第四篇:字符串初次介紹)

前言 HelloWorld寫的多了&#xff0c;語法熟悉一點了吧&#xff0c;其中有段代碼還沒介紹&#xff0c;它就是字符串 public class HelloWorld { public static void main(String[] args) { printBaby(); } static void printBaby() { System.out.print("baby"); } } …

安卓手機怎樣配置數據加速

利用系統自帶功能&#xff1a; 選擇網絡模式&#xff1a;進入手機 “設置”&#xff0c;找到 “網絡” 或 “移動網絡” 選項&#xff0c;點擊 “高級設置”&#xff0c;選擇合適的網絡模式&#xff0c;如優先選擇 4G 或 5G 網絡&#xff0c;以獲得更快的速度。開啟網絡加速功能…

Day3:個人中心頁面布局前端項目uniapp壁紙實戰

接下來我們來弄一下個人中心頁面布局user.vue <template><view class"userLayout"><view class"userInfo"><view class"avatar"><image src"../../static/Kx.jpg" mode"aspectFill"></im…

線性回歸之正則化(regularization)

文章目錄 機器學習中的"防過擬合神器"&#xff1a;正則化全解析1. 正則化&#xff1a;不只是"規矩"那么簡單1.1 魯棒性案例說明 2. L1正則化&#xff1a;冷酷的特征選擇器3. L2正則化&#xff1a;溫柔的約束者4. L1 vs L2&#xff1a;兄弟間的較量5. 正則化…

mapbox基礎,加載視頻到地圖

????? 主頁: gis分享者 ????? 感謝各位大佬 點贊?? 收藏? 留言?? 加關注?! ????? 收錄于專欄:mapbox 從入門到精通 文章目錄 一、??前言1.1 ??mapboxgl.Map 地圖對象1.2 ??mapboxgl.Map style屬性1.3 ??raster 柵格圖層 api二、??加載視頻到…

Linux系統的遠程終端登錄、遠程圖形桌面訪問、 X圖形窗口訪問

目錄 一、配置Ubuntu系統的網絡和用戶 1、設置虛擬機網絡為橋接模式 2.查看當前ip、子網掩碼、網關 3.修改配置文件 二、遠程終端登錄Ubuntu 三、使用XShell遠程連接 1、確保SSH服務已啟動 2、檢查SSH服務狀態 3、獲取樹莓派IP地址 4、Xming安裝好之后打開讓它在后臺…

多模態大語言模型arxiv論文略讀(三十一)

From GPT-4 to Gemini and Beyond: Assessing the Landscape of MLLMs on Generalizability, Trustworthiness and Causality through Four Modalities ?? 論文標題&#xff1a;From GPT-4 to Gemini and Beyond: Assessing the Landscape of MLLMs on Generalizability, Tr…

基于Matlab求解矩陣電容等效容值

1需求 仿真測試8*10階舉證電容等效容值。 2模型搭建 2.1打開simscape 在打開simulink之后打開simscape庫&#xff0c;Simscape庫位置如下 2.2搭建模型 在庫中尋找需要的元件搭建電路。 2.2.1基本元件 電阻電容電感等基礎器件&#xff0c;搭建電路之后需要對其進行幅值&…