1. 程式人生 > >[hadoop]MapReduce簡介和安裝(三)

[hadoop]MapReduce簡介和安裝(三)

一、MapReduce概述

MapReduce,簡稱MR,分散式計算框架,Hadoop核心元件。分散式計算框架還有storm, spark等,它們不是誰替換誰關係,而是哪一個更適合的問題。

MapReduce是離線計算框架,Storm是流式計算框架,Spark是記憶體計算框架,適合快速得到結果的專案。

二、MapReduce設計理念

  • 何為分散式計算
  • 移動計算,而不是移動資料
三、MapReduce工作原理 摘自:http://weixiaolu.iteye.com/blog/1474172
流程分析 Map端 1.每個輸入分片會讓一個map任務來處理,預設情況下,以HDFS的一個塊的大小(預設為64M)為一個分片,當然我們也可以設定塊的大小。map輸出的結果會暫且放在一個環形記憶體緩衝區中(該緩衝區的大小預設為100M,由io.sort.mb屬性控制),當該緩衝區快要溢位時(預設為緩衝區大小的80%,由io.sort.spill.percent屬性控制),會在本地檔案系統中建立一個溢位檔案,將該緩衝區中的資料寫入這個檔案。


2.在寫入磁碟之前,執行緒首先根據reduce任務的數目將資料劃分為相同數目的分割槽,也就是一個reduce任務對應一個分割槽的資料。這樣做是為了避免有些reduce任務分配到大量資料,而有些reduce任務卻分到很少資料,甚至沒有分到資料的尷尬局面。其實分割槽就是對資料進行hash的過程。然後對每個分割槽中的資料進行排序,如果此時設定了Combiner,將排序後的結果進行Combia操作,這樣做的目的是讓儘可能少的資料寫入到磁碟。


3.當map任務輸出最後一個記錄時,可能會有很多的溢位檔案,這時需要將這些檔案合併。合併的過程中會不斷地進行排序和combia操作,目的有兩個:1.儘量減少每次寫入磁碟的資料量;2.儘量減少下一複製階段網路傳輸的資料量。最後合併成了一個已分割槽且已排序的檔案。為了減少網路傳輸的資料量,這裡可以將資料壓縮,只要將mapred.compress.map.out設定為true就可以了。


4.將分割槽中的資料拷貝給相對應的reduce任務。有人可能會問:分割槽中的資料怎麼知道它對應的reduce是哪個呢?其實map任務一直和其父TaskTracker保持聯絡,而TaskTracker又一直和JobTracker保持心跳。所以JobTracker中儲存了整個叢集中的巨集觀資訊。只要reduce任務向JobTracker獲取對應的map輸出位置就ok了哦。


到這裡,map端就分析完了。那到底什麼是Shuffle呢?Shuffle的中文意思是“洗牌”,如果我們這樣看:一個map產生的資料,結果通過hash過程分割槽卻分配給了不同的reduce任務,是不是一個對資料洗牌的過程呢? Reduce端
1.Reduce會接收到不同map任務傳來的資料,並且每個map傳來的資料都是有序的。如果reduce端接受的資料量相當小,則直接儲存在記憶體中(緩衝區大小由mapred.job.shuffle.input.buffer.percent屬性控制,表示用作此用途的堆空間的百分比),如果資料量超過了該緩衝區大小的一定比例(由mapred.job.shuffle.merge.percent決定),則對資料合併後溢寫到磁碟中。


2.隨著溢寫檔案的增多,後臺執行緒會將它們合併成一個更大的有序的檔案,這樣做是為了給後面的合併節省時間。其實不管在map端還是reduce端,MapReduce都是反覆地執行排序,合併操作,現在終於明白了有些人為什麼會說:排序是hadoop的靈魂。



3.合併的過程中會產生許多的中間檔案(寫入磁碟了),但MapReduce會讓寫入磁碟的資料儘可能地少,並且最後一次合併的結果並沒有寫入磁碟,而是直接輸入到reduce函式。 四、安裝MapReduce 現在有node1,node2,node3三個伺服器,其中node1是NameNode,node2,node3是DataNode,node2也是SecondaryNameNode,把MapReduce安裝到node1伺服器 1、關閉node1防火牆
systemctl stop iptables.service 
2、node1上配置MapReduce主伺服器 conf/mapred_site.xml,從伺服器是DataNode伺服器
<configuration>
        <property>
                <name>mapred.job.tracker</name>
                <value>node1:9001</value>
        </property>
</configuration>
3、拷貝node1的mapred_site.xml到node2,node3
scp ./mapred-site.xml [email protected]:~/hadoop-1.2.1/conf/
scp ./mapred-site.xml [email protected]:~/hadoop-1.2.1/conf/
4、啟動 node1,進入hadoop-1.2.1/bin 執行 ./hadoop namenode -format ./start-all.sh
結果
node1
node2
node3


相關推薦

[hadoop]MapReduce簡介安裝

一、MapReduce概述 MapReduce,簡稱MR,分散式計算框架,Hadoop核心元件。分散式計算框架還有storm, spark等,它們不是誰替換誰關係,而是哪一個更適合的問題。 MapReduce是離線計算框架,Storm是流式計算框架,Spark是記憶體計算框

Zookeeper簡介安裝

cond AD 2.0 echo agreement log4 分布式鎖 express war 一、簡介: Zookeeper是一個分布式協調服務,提供的服務如下: 命名服務:類似於DNS,但僅對於節點 配置管理:服務配置信息的管理 集群管理:Dubbo使用Zookeep

muleESB簡介安裝

在開始學習muleESB之前,我們先看什麼是mule和什麼是ESB。可以幫助我們深入的學習和理解。 什麼是mule? mule是一個以Java為核心的輕量級的訊息框架和整合平臺,基於EIP(Enterprise Integeration Patterns,由

SVN的使用安裝--客服端的安裝連線服務端

SVN的使用和安裝(三)--客服端的安裝和連線服務端 一、安裝客服端 1. 根據系統環境選擇安裝包 2.雙擊安裝包 3.下一步 4.下一步 5.下一步,安裝完成後重啟,這樣就可以看到svn圖示 6.出現如下兩個圖示,表示安裝成功 二

Cloudera Manager安裝之Cloudera Manager 5.3.X安裝tar方式、rpm方式yum方式

 前期部落格 ClouderaManager官網安裝 https://www.cloudera.com/documentation/manager/5-0-x/Cloudera-Manager-Installation-Guide/cm5ig_install_path_

SVN服務器搭建使用

進行 文本框 logs 版本 強制寫 移動 對話 刪除文件 對話框 接下來,試試用TortoiseSVN修改文件,添加文件,刪除文件,以及如何解決沖突等. 添加文件 在檢出的工作副本中添加一個Readme.txt文本文件,這時候這個文本文件會顯示為沒有版本控制的狀態,如圖

多線程編程學習筆記——asyncawait

result ask aps nta cti ise 線程編程 學習筆記 top 接上文 多線程編程學習筆記——async和await(一) 接上文 多線程編程學習筆記——async和await(二) 五、 處理異步操

System Center 2016 - Operations Manager 部署安裝

scom2016 system center 2016 operations manager 上一篇文章中,我們講述了如何安裝和準備 SCOM2016 的先決條件。接下來,我們來正式的開始安裝 SCOM 2016了在上文的最後一張圖中,我們已經通過了所有的先決條件檢查我們點擊下一步來進行後續安裝

linux系統程序安裝源碼包安裝程序

efi ron 下載 示例 wget 問題 位置 提示 /usr 源碼包安裝是日常使用過程中最經常的安裝方式,比如nagios套件、apche等重要軟件都是源碼包方式安裝,源碼包編譯安裝技術是運維技術中比較重要的部分。 一、源碼包安裝位置 運維時,最好把要跑的業務包放到/u

System Center 2016 - Configuration Manager 部署安裝

文件 sccm type 準備 系統 cto 安裝介質 manage mar 好了,前兩篇文章我們已經贅述了很多關於 SCCM 2016 安裝之前所需要做的準備工作,今天就來開始安裝SCCM程序了。找到安裝介質如下路徑中的 setup 文件,雙擊開始安裝點擊安裝安裝前的說

CentOS7安裝- 配置阿裏雲yum源

bak source 配置yum源 原來 下載 生效 打開 工具 word CentOS7安裝(三)- 配置阿裏雲yum源 CentOS7安裝好以後,完成網絡配置以後,就是開始配置yum源,因為yum安裝我們需要的各種軟件。 具體步驟如下: 1、打開centos的yu

Saltstack數據系統GrainsPillar

centos服務器 items har zabb ini highstate fqdn clas deb Saltstack數據系統 分為Grains和Pillar SaltStack 數據系統 Grains (谷粒) Pillar (柱子)

Docker簡介安裝

TP width Go src apache container 資源利用率 代碼托管 docker Docker簡介 Docker 是 Docker.Inc 公司開源的一個基於 LXC技術之上構建的Container容器引擎, 源代碼托管在 GitHub 上, 基於Go

HTML常用元素屬性

表頭 cell -type separate caption 寬度 ava 測試表 ont 7:表格相關元素 <table>定表格,可用屬性cellpedding:單元格和內容之間的間距;cellspacing:單元格之間的間距;width:表格的寬度 <

Android實戰——第三方服務之Bmob後端雲的推送服務的集成使用

第一篇 文章 href 第三方服務 log 集成 android實戰 https 分享 第三方服務之Bmob後端雲的推送服務的集成和使用(三) 事先說明:這裏的一切操作都是在集成了BmobSDK之後實現的,如果對Bmob還不了解的話,請關註我第一篇Bmob文章 步驟

詳解C#特性反射

typeinfo ref 都是 system.in 全局 color com 依然 程序   類型信息(Type Information)用來表示類型聲明的信息,通過抽象基類System.Type的實例存儲這些信息,當使用反射時,CLR獲取指定類型的Type對象,通過這個對

『中級篇』k8s的Service簡介演示67

emp containe get title 就是 mas it人 ngios label >原創文章,歡迎轉載。轉載請註明:轉載自IT人故事會,謝謝!>原文鏈接地址:『中級篇』k8s的Service簡介和演示(67) 我們在使用pod的時候,pod之前可以相互

Android 基於Netty的訊息推送方案之字串的接收傳送

在上一篇文章中《Android 基於Netty的訊息推送方案之概念和工作原理(二)》 ,我們介紹過一些關於Netty的概念和工作原理的內容,今天我們先來介紹一個叫做ChannelBuffer的東東。 ChannelBuffer  Netty中的訊息傳遞,都必須以位元

javaEE學習筆記:maven下載安裝1

本文只作學習筆記,僅代表個人觀點,若有雷同,純屬巧合; 工具:編輯器Eclipse,Tomcat7.0(下載地址:https://tomcat.apache.org/) JDK1.8版本 第一步:官網下載地址: http://maven.apache.org/download.cgi

CLR VIA C# 閱讀筆記感悟

前言:如今.NetCore已經進入了2.1版本,但這本書的學習還是很重要,我們繼續學習和總結,以便於在.NetCore新技術的學習上能有個對比,幫助我們學習新知識。 執行緒池:執行緒的建立和銷燬都是要消耗資源的,所以微軟為了優化執行緒的使用,提出了執行緒池,執行緒池中的執行緒是可重用的,線上程初始