1. 程式人生 > >HDFS配置引數及優化之實戰經驗(Linux hdfs)

HDFS配置引數及優化之實戰經驗(Linux hdfs)

HDFS優化之實戰經驗

Linux系統優化

一、禁止檔案系統記錄時間

Linux檔案系統會記錄檔案建立、修改和訪問操作的時間資訊,這在讀寫操作頻繁的應用中將帶來不小的效能損失。在掛載檔案系統時設定noatime和nodiratime可禁止檔案系統記錄檔案和目錄的訪問時間,這對HDFS這種讀取操作頻繁的系統來說,可以節約一筆可觀的開銷可以修改/etc/fstab檔案noatimenodiratime來實現這個設定。

如對/mnt/disk1使用noatime屬性,可以做如下修改:

$ vim /etc/fstab/ ext4 defaults 1 1/mnt/disk1 ext4 defaults,noatime 1 2

/mnt/disk2 ext4 defaults 1 2/mnt/disk3 ext4 defaults 1 2

修改完成後,執行下述命令使之生效:$ mount –o remount /mnt/disk1

二、預讀緩衝預讀技術可以有效的減少磁碟尋道次數和應用的I/O等待時間,增加Linux檔案系統預讀緩衝區的大小(預設為256 sectors,128KB),可以明顯提高順序檔案的讀效能,建議調整到1024或2048 sectors。預讀緩衝區的設定可以通過blockdev命令來完成。下面的命令將/dev/sda的預讀緩衝區大小設定為2048 sectors。$ blockdev –setra 2048 /dev/sda注意:

預讀緩衝區並不是越大越好,多大的設定將導致載入太多無關資料,造成資源浪費,過小的設定則對效能提升沒有太多幫助

HDFS配置及相關優化

根據業務需求和伺服器配置合理設定這些選項可以有效提高HDFS的效能

配置項

優化原理

推薦值

dfs.namenode.handler.count

NameNode中用於處理RPC呼叫的執行緒數,預設為10。對於較大的叢集和配置較好的伺服器,可適當增加這個數值來提升NameNode RPC服務的併發度

64

dfs.datanode.handler.count

DataNode中用於處理RPC呼叫的執行緒數,預設為3。可適當增加這個數值來提升DataNode RPC服務的併發度。 

***執行緒數的提高將增加DataNode的記憶體需求,因此,不宜過度調整這個數值。

10

dfs.replication

資料塊的備份數。預設值為3,對於一些熱點資料,可適當增加備份數。

3

dfs.block.size

HDFS資料塊的大小,預設為64M。資料庫設定太小會增加NameNode的壓力。資料塊設定過大會增加定位資料的時間。

128

dfs.datanode.data.dir

HDFS資料儲存目錄。將資料儲存分佈在各個磁碟上可充分利用節點的I/O讀寫效能。

設定多個磁碟目錄

hadoop.tmp.dir

Hadoop臨時目錄,預設為系統目錄/tmp。在每個磁碟上都建立一個臨時目錄,可提高HDFS和MapReduce的I/O效率。

設定多個磁碟目錄

dfs.data.dir

HDFS資料儲存配置 提高I/O效率

以逗號隔開

dfs.name.dir

HDFS元資料儲存配置, 要想提升hadoop整體IO效能,對於hadoop中用到的所有檔案目錄,都需要評估它磁碟IO的負載,對於IO負載可能會高的目錄,最好都配置到多個磁碟上,以提示IO效能

  --

Io.file.buffer.size

HDFS檔案緩衝區大小,預設為4096(即4K)

131072(128K)

fs.trash.interval

HDFS清理回收站的時間週期,單位為分鐘。預設為0,表示不使用回收站特性。為防止重要檔案誤刪,可啟用該特性

1440(1day)

dfs.datanode.du.reserved

DataNode保留空間大小,單位為位元組。預設情況下,DataNode會佔用全部可用的磁碟空間,該配置項可以使DataNode保留部分磁碟空間工其他應用程式使用。

視具體應用而定

  RAID

獨立硬碟冗餘陣列(RAID, Redundant Array of Independent Disks) 軟體RAID管理工具:mdadm  | 支援的RAID級別:LINEAR、RAID0、1、4、5、6、10

 配置使用【作業 1】

機架感應

對於較大的叢集,建議啟用HDFS的機架感應功能。啟用機架感應功能可以使HDFS優化資料塊備份的分佈,增強HDFS的效能和可靠性。

 配置使用【作業 2】


小檔案合併
 具體操作已實操

SSD儲存介質

注意在全SSD機型的伺服器上,如果應用使用的HDFS客戶端jar包版本與服務端不一致,會導致無法寫入資料的問題。

該問題是由於HDFS客戶端ABI不相容導致的,在HDFS 2.5.x版本中,對儲存策略的編號與HDFS 2.6.x版本的編號不一致,在全SSD機型中,客戶端寫入資料的策略被定義為HOT,而在服務端,該策略被解析為DISK,因為全SSD機型中不存在SATA盤,所以無法獲取可行的磁碟,導致無法寫入資料

HDFS異構儲存解決冷熱資料問題 **

Hadoop從2.6.0版本開始支援異構儲存功能。我們知道HDFS預設的儲存策略,對於每個資料塊,採用三個副本的儲存方式,儲存在不同節點的磁碟上。異構儲存的作用在於利用伺服器不同型別的儲存介質(包括HDD硬碟、SSD、記憶體等)提供更多的儲存策略(例如三個副本一個儲存在SSD介質,剩下兩個仍然儲存在HDD硬碟),從而使得HDFS的儲存能夠更靈活高效地應對各種應用場景。

隨著資料量的不斷增長積累,資料也會呈現出訪問熱度不同的巨大差異。例如一個平臺會不斷地寫入最新的資料,但通常情況下最近寫入的資料訪問頻率會比很久之前的資料高很多。如果無論資料冷熱情況,都採用同樣的儲存策略,是對叢集資源的一種浪費。如何根據資料冷熱程度對HDFS儲存系統進行優化是一個亟待解決的問題。

拓展》》》

排程延遲和可移植性【涉及到後時代的3駕馬車,瞭解即可】

1、排程延遲關於排程延遲主要是發生在兩個階段:a) tasktracker上出現空餘的slot到該tasktracker接收到新的task;b) tasktracker獲取到了新的Task後,到連線上了datanode,並且可以讀寫資料。之所以說這兩個階段不夠高效,因為一個分散式計算系統需要解決的是計算問題,如果把過多的時間花費在其它上,就顯得很不合適,例如執行緒等待、高負荷的資料傳輸。

下面解釋下會經歷上邊兩個階段發生的過程:a) 當tasktracker上出現slot時,他會呼叫heartbeat方法向jobtracker傳送心跳包(預設時間間隔是3秒,叢集很大時可適量調整)來告知它,假設此時有準備需要執行的task,那麼jobtracker會採用某種排程機制(排程機制很重要,是一個可以深度研究的東東)選擇一個Task,然後通過呼叫heartbeat方法傳送心跳包告知tasktracker。在該過程中,HDFS一直處於等待狀態,這就使得資源利用率不高。b) 這個過程中所發生的操作都是序列化的:tasktracker會連線到namenode上獲取到自己需要的資料在datanode上的儲存情況,然後再從datanode上讀資料,在該過程中,HDFS一直處於等待狀態,這就使得資源利用率不高。若能減短hdfs的等待時間;在執行task之前就開始把資料讀到將要執行該task的tasktracker上,減少資料傳輸時間,那麼將會顯得高效很多。未解決此類問題,有這樣幾種解決方案:重疊I/O和CPU階段(pipelining),task預取(task prefetching),資料預取(data prefetching)等。

2可移植性Hadoop是Java寫的,所以可移植性相對較高。由於它遮蔽了底層檔案系統,所以無法使用底層api來優化資料的讀寫。在活躍度較高的叢集裡(例如共享叢集),大量併發讀寫會增加磁碟的隨機尋道時間,這會降低讀寫效率;在大併發寫的場景下,還會增加大量的磁碟碎片,這樣將會大大的增加了讀資料的成本,hdfs更適合檔案順序讀取。對於上述問題,可以嘗試使用下面的解決方案:tasktracker現在的執行緒模型是:one thread per client,即每個client連線都是由一個執行緒處理的(包括接受請求、處理請求,返回結果)。那麼這一塊一個拆分成兩個部分來做,一組執行緒來處理和client的通訊(Client Threads),一組用於資料的讀寫(Disk Threads)。想要解決上述兩個問題,暫時沒有十全十美的辦法,只能儘可能的權衡保證排程延遲相對較低+可移植性相對較高。

優化策略:Prefetching與preshufflinga) Prefetching包括Block-intra prefetching和Block-inter prefetching:Block-intra prefetching:對block內部資料處理方式進行了優化,即一邊進行計算,一邊預讀將要用到的資料。這種方式需要解決兩個難題:一個是計算和預取同步,另一個是確定合適的預取率。前者可以使用進度條(processing bar)的概念,進度條主要是記錄計算資料和預讀資料的進度,當同步被打破時發出同步失效的通知。後者是要根據實際情況來設定,可採用重複試驗的方法來確定。Block-inter prefetching:在block層面上預讀資料,在某個Task正在處理資料塊A1的時候,預測器能預測接下來將要讀取的資料塊A2、A3、A4,然後把資料塊A2、A3、A4預讀到Task所在的rack上。

b) preshuffling資料被map task處理之前,由預測器判斷每條記錄將要被哪個reduce task處理,將這些資料交給靠近reduce task的map task來處理。

相關推薦

HDFS配置引數優化實戰經驗Linux hdfs

HDFS優化之實戰經驗Linux系統優化一、禁止檔案系統記錄時間 Linux檔案系統會記錄檔案建立、修改和訪問操作的時間資訊,這在讀寫操作頻繁的應用中將帶來不小的效能損失。在掛載檔案系統時設定noatime和nodiratime可禁止檔案系統記錄檔案和目錄的訪問時間,這對HD

HDFS配置參數優化實戰經驗Linux hdfs

機架 reduce abi pro 不同類 暫時 連接 接下來 系統優化 HDFS優化之實戰經驗 Linux系統優化 一、禁止文件系統記錄時間 Linux文件系統會記錄文件創建、修改和訪問操作的時間信息,這在讀寫操作頻繁的應用中將帶來

Redis叢集配置引數優化

Redis的主要引數配置在redis.conf檔案中。 1.      conf 記憶體值 2.     bind ip 預設情況下,如果沒有指定“bind”配置指令,Redis將偵聽伺服器上可用的所有網路介面的連線。 預設情況:bind 127.0.0.1 實際配置:bi

java初中級工程師面試筆試題目心得(全部實戰經驗)答案

JAVA SE部分: 1.string類的常用方法有哪些? 2.String,StringBuffer,StringBuilder的區別。 String 字串常量 執行緒安全 操作少量資料 StringBuffer 字串變數 執行緒安全

Android系列Viewpager+Fragment 優化懶載入預載入的實現

今天帶來的就是fragment的優化,怎麼去實現懶載入 懶載入(預載入) 懶載入字面意思就是當需要的時候才會去載入,不需要就不要載入 為什麼Fragment需要懶載入呢,一般我們都會在onCreate()或者onCreateView()裡去啟動一些資料載入操作,比如從本

PHP全棧工程師實戰經驗程式設計篇

PHP全棧工程師實戰經驗(程式設計篇) PDO連線MySQL PDO連線MySQL 建好資料庫和表 <?php $dsn = "mysql:host=localhost;dbname=myhost"; $db = new PDO($

unity 效能優化遮擋剔除Occlusion Culling 官方版

遮擋剔除 (Occlusion Culling) 功能可在物件因被其他物體遮擋,當前在相機中無法看到時,禁用物件渲染。該功能不會在三維計算機圖形中自動開啟,因為在大部分情況下,離相機最遠的物件最先渲染,離相機近的物件覆蓋先前的物體(該步驟稱之為“重複渲染 (overdraw)

R2時間序列分析應用TSA安裝R語言

1,關於時間序列 時間序列分析(Time series analysis)是一種動態資料處理的統計方法。該方法基於隨機過程理論和數理統計學方法,研究隨機資料序列所遵從的統計規律,以用於解決實際問題。 2,安裝TSA 然後安裝TSA,但是TS

Android效能優化檢視篇渲染機制

** 本篇重點是——–如何解決過度繪製 ** 眾所周知的Android系統每隔16ms重新繪製一次activity,也就是說你的app必須在16ms內完成螢幕重新整理的所有邏輯操作,這樣才能達到60幀/s。而使用者一般所看到的卡頓是由於Android的

Unity3D-遊戲場景優化遮擋剔除Occlusion Culling的使用

在大型3D遊戲場景中,如何優化遊戲效能是非常重要的一步。一般遮擋剔除是非常常用的。接下來我們看看如何使用遮擋剔除。 假設這是一個遊戲場景。 下面這是相機的視口,相機的視覺是看不到很大立方體後面的那些小的立方體。   在運行遊戲的過程中,我們為了提高遊戲的效能,我們不希望渲染相機看不到的物體。

YOLO v1總結篇linux+windows

論文解讀篇: YOLO出自2016 CVPR You Only Look Once:Unified, Real-Time Object Detection,也是一個非常值得學習的框架,不得不說facebook的技術就是牛啊。 整個訓練和檢測框架都是端到端,YO

CentOS7安裝配置svnsvn hook實戰

子函數 集合 sha 管理 print 我們 註釋 reat 行處理 一、概述 1、何為svn?Apache Subversion(簡稱SVN,svn),一個開放源代碼的版本控制系統;用來管理文檔,程序代碼等文檔的版本;svn相對git來說有點古老,是一個中心控制的版本控制

性能優化 vmstat

body 物理內存 內存使用率 展現 uri 結束程序 gif adding 技術 vmstat命令是最常見的Linux/Unix監控工具,可以展現給定時間間隔的服務器的狀態值,包括服務器的CPU使用率,內存使用,虛擬內存交換情況,IO讀寫情況。這個命令是我查看Linux/

構建NetCore應用框架實戰:BitAdminCore框架1.0登錄功能細化技術選型

1.0 dmi 也會 繼承 blank bit 技術選型 cor 我會 本篇承接上篇內容,如果你不小心點擊進來,建議從第一篇開始完整閱讀,文章內容繼承性連貫性。 構建NetCore應用框架之實戰篇系列 一、BitAdminCore框架1.0版本 1、1.0版本是指

JVM原理優化二:記憶體管理

1. 記憶體分配策略: 1. 物件優先在Eden分配 2. 大物件直接進入老年代 3. 長期存活物件將進入老年代(當它的年齡增加到一定程度 (預設為15歲 ),就會被晉升到老年代中 。物件晉升老年代的年齡閾值,可以通過引數 -XX:MaxTenuringThreshold來

php-fpm配置引數優化簡要描述

1.nginx下的fpm配置 # 這個指令為FastCGI 快取指定一個路徑,目錄結構等級,關鍵字區域儲存時間和非活動刪除時間。 fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10mina

嵌入式核心驅動開發學習筆記十一 中斷優化處理

ARM cortex-A系列的核心不支援中斷巢狀。在核心中斷函式中,如果中斷處理時間過長,產生中斷巢狀,重者系統崩潰,輕者也會影響其他事件處理。這也是中斷中不能使用延時函式的原因。 但是有些高實時性裝置(比如網絡卡),就是需要處理大量的業務。為了滿足中斷處理時間儘量短的原則

Android知識體系總結實戰經驗部分之Android多渠道打包與apk簽名篇

1.基礎知識 1.1 什麼是打包?   打包就是根據簽名和其它標識生成安裝包。 1.2 簽名是什麼?   在Android中,簽名就是apk中儲存的一串特別的字串。它是用來標識不同的應用開發者,為什麼取名為簽名,就好像一個作家一樣,它完成的小說都要加上署名。因

HDFS基本原理資料存取實戰

--------------------------------------------------------------------------------------------------------------- [版權申明:本文系作者原創,轉載請註明出處]

【Oracle 叢集】ORACLE DATABASE 11G RAC 知識圖文詳細教程RAC 特殊問題和實戰經驗

在需要將一個 LUN (邏輯單元號)對映給多個節點、為叢集提供一個共享的儲存卷時,同一個儲存 LUN 在各個主機端的 LUNID 必須是相同的。比如:  (一) 在為多個 ESX 節點建立一個 VMFS 卷的時候 (二) 在雙機 HA 叢集建立共享儲存的時候 時間一致性 叢集模式下,各