Hadoop、Hbase基本命令及調優方式


HDFS基本命令

接觸大數據挺長時間了,項目剛剛上完線,趁着空閑時間整理下大數據hadoop、Hbase等常用命令以及各自的優化方式,當做是一個學習筆記吧。

HDFS命令基本格式:Hadoop  fs  -cmd < args >

ls 命令

hadoop fs -ls /  列出hdfs文件系統根目錄下的目錄和文件

hadoop fs -ls -R /  遞歸列出hdfs文件系統所有的目錄和文件

put 命令

hadoop fs -put < local file > < hdfs file >  本地文件上傳到HDFS

hadoop fs -put < local file or dir >...< hdfs dir >  多個本地文件或目錄上傳到HDFS

moveFromLocal 命令

hadoop fs -moveFromLocal < local src > ... < hdfs dst > 與put相類似,命令執行后源文件local src 被刪除,也可以從從鍵盤讀取輸入到hdfs file中

copyFromLocal 命令

hadoop fs -copyFromLocal < local src > ... < hdfs dst > 與put相類似,也可以從從鍵盤讀取輸入到hdfs file中

get 命令

hadoop fs -get < hdfs file > < local file or dir> local file不能和hdfs file名字不能相同,否則會提示文件已存在,沒有重名的文件會復制到本地

hadoop fs -get < hdfs file or dir > ... < local dir > 拷貝多個文件或目錄到本地時,本地要為文件夾路徑

copyToLocal 命令

hadoop fs -copyToLocal < local src > ... < hdfs dst > 與get相類似

rm 命令

hadoop fs -rm < hdfs file > ... hadoop fs -rm -r < hdfs dir>... 每次可以刪除多個文件或目錄

mkdir 命令

hadoop fs -mkdir < hdfs path>  只能一級一級的建目錄,父目錄不存在的話使用這個命令會報錯hadoop fs -mkdir -p < hdfs path> 所創建的目錄如果父目錄不存在就創建該父目錄

cp 命令

hadoop fs -cp < hdfs file > < hdfs file >  目標文件不能存在,否則命令不能執行,相當於給文件重命名並保存,源文件還存在。

hadoop fs -cp < hdfs file or dir >... < hdfs dir > 目標文件夾要存在,否則命令不能執行

mv 命令

hadoop fs -mv < hdfs file > < hdfs file > 目標文件不能存在,否則命令不能執行,相當於給文件重命名並保存,源文件不存在hadoop fs -mv < hdfs file or dir >... < hdfs dir > 源路徑有多個時,目標路徑必須為目錄,且必須存在。

du 命令

hadoop fs -du < hdsf path>

顯示hdfs對應路徑下每個文件夾和文件的大小hadoop fs -du -s < hdsf path> 顯示hdfs對應路徑下所有文件和的大小hadoop fs -du -h < hdsf path>

setrep 命令

hadoop fs -setrep -R 3 < hdfs path > 改變一個文件在hdfs中的副本個數,上述命令中數字3為所設置的副本個數,-R選項可以對一個人目錄下的所有目錄+文件遞歸執行改變副本個數的操作

tail 命令

hadoop fs -tail < hdfs file > 在標准輸出中顯示文件末尾的1KB數據archive 命令

hadoop archive -archiveName name.har -p < hdfs parent dir > < src >* < hdfs dst > 命令中參數。

name:壓縮文件名,自己任意取;< hdfs parent dir > :壓縮文件所在的父目錄;< src >:要壓縮的文件名;< hdfs dst >:壓縮文件存放路徑,*示例:hadoop archive -archiveName hadoop.har -p /user 1.txt 2.txt /des ,示例中將hdfs中/user目錄下的文件1.txt,2.txt壓縮成一個名叫hadoop.har的文件存放在hdfs中/des目錄下,如果1.txt,2.txt不寫就是將/user目錄下所有的目錄和文件壓縮成一個名叫hadoop.har的文件存放在hdfs中/des目錄下顯示har的內容可以用如下命令:hadoop fs -ls /des/hadoop.jar 顯示har壓縮的是那些文件可以用如下命令hadoop fs -ls -R har:///des/hadoop.har

JavaAPI訪問HDFS

FileSystem類主要方法:

get(),create(),append(),listStatus(),copyFromLocal()

HDFS日常管理

安全模式

☆集群啟動后處於安全模式,直到副本數滿足閥值要求才退出

☆命令:Hadoop dfsadmin –safemode enter|leave|get|wait

☆只能瀏覽不能修改

☆通常在系統維護之前使用

HDFS日常管理

☆集群基本信息報告:

Hadoop dfsadmin –report

☆動態刷新

host配置:hadoop dfsadmin –refreshNodes

☆節點間數據均衡:hadoop balancer

☆目錄配額:hadoop dfsadmin -setQuota  文件個數

hadoop dfsadmin – setSpaceQuota  空間大小

HDFS日常管理-文件系統檢查

☆命令:hadoop fsck <path> [-move | -delete | -openforwrite] [-files [-blocks [-locations -racks]]]

<path>  檢查這個目錄中的文件是否完整

-move 破損的文件移至/lost+found目錄

-delete刪除破損的文件

-openforwrite打印正在打開寫操作的文件

-files打印正在check的文件名

-blocks打印block報告(需要和-files參數一起使用)

-locations打印每個block的位置信息(需要和-files參數一起使用)

-racks打印位置信息的網絡拓撲圖(需要和-files參數一起使用)

HDFS調優

☆dfs.block.size

建議512MB,太小的blocksize會增加NameNode負擔

☆dfs.namenode.handler.count

根據CPU數和內存數設置,推薦100,較大的值可提升文件處理吞吐量

☆dfs.datanode.handler.count DataNode

的接收和發送數據的處理線程數,推薦200,受磁盤繁忙情況制約

☆dfs.data.dir DataNode

存儲Block文件的目錄,設置為多個可提升DataNode吞吐量,多目錄以逗號分割

☆dfs.heartbeat.interval和heartbeat.recheck.interval

DN與NN心跳間隔,計算公式:timeout  = 2 * heartbeat.recheck.interval + 10 * dfs.heartbeat.interval

☆dfs.datanode.max.xcievers DataNode

可同時處理的最大文件數

☆io.file.buffer.size

讀寫緩沖區大小,通常設置為65536以上,可減少IO次數

☆io.bytes.per.checksum

每校驗碼所校驗的字節數,默認512字節,不要超過io.file.buffer.size

HBase

Rowkey設計原則

•長度原則

–Rowkey最長64kb。以byte[]存儲,建議rowkey越短越好,不要超過16字節

•散列原則

–加鹽

–哈希

–反轉

–時間戳反轉

•唯一原則,rowKey必須保證唯一

參數優化

處理線程優化

增加handler個數

參數hbase.regionserver.handler.count配置的是region server開啟的處理對用戶表的請求的線程個數,默認值是10。設置該值的原則是:如果每個請求的負載達到MB,如大的put,scan caching設置很大的scan,那么保持該值比較小;否則,如果負載小,如get,小的put,increment,delete,把該值設大。

緩沖大小

hfile.block.cache.size

regionserver cache的大小,默認是0.2,是整個堆內存的多少比例作為regionserver的cache,調大該值會提升查詢性能,當然也不能過大,如果我們的hbase基本都是大量的查詢,寫入不是很多的話,調到0.5也就夠了,說到這個值,有一個地方需要說明一下,如果生產環境有mapred任務去scan hbase的時候,一些要在mapred scan類中加一個scan.setCacheBlocks(false),避免由於mapred使用regionserver的cache都被替換,造成hbase的查詢性能明顯下降。

Memstore

hbase.hregion.memstore.flush.size

一個regionserver的單個region memstore的大小,默認是64M,在hbase結構中,一個regionserver管理多個region,一個region對應一個hlog和多個store,一個store對應多個storefile和一個memstore,這里的hbase.hregion.memstore.flush.size意思是一個region下面的所有store里面的memstore的達到多少時,開始將這些memstore flush到hdfs中去,配置這個值,需要參考一下,平均每個regionserver管理的region數量,如果每台regionsever管理的region不多的話,可以適當的調大該值,如512M時再flush。

hbase.regionserver.global.memstore.upperLimit/hbase.regionserver.global.me

mstore.lowerLimit

配置一台regionserver所有memstore占整個堆的最大比例,默認是0.4/0.35,二個值的差異在於是做局部的flush,還是全部flush,如果我們的regionserver日志中,頻發出現因為超過hbase.regionserver.global.memstore.lowerLimit而做flush的信息,我覺得有必要調小hbase.hregion.memstore.flush.size,或者適當調大這二個值,當然hbase.regionserver.global.memstore.upperLimit和hfile.block.cache.size的和不能大於1,到0.8我覺得已經夠大了。如果我們的jvm內存回收是使用cms的話,有一個值CMSInitiatingOccupancyFraction(內存使用到時多少時,一始cms回收內存)的大小和覺得和這個有關系,略小於hbase.regionserver.global.memstore.upperLimit和hfile.block.cache.size的和是一個不錯的選擇。

Compaction

hbase.hstore.compactionThreshold/hbase.hregion.majorcompaction

hbase.hstore.compactionThreshold執行compaction的store數量,默認值是3,如果需要提高查詢性能,當然是storefile的數量越小,性能越好,但是執行compaction本身有性能資源的開消,如果regionserver頻繁在compacion對性能影響也很大。hbase.hregion.majorcompaction表示majorcompaction的周期,默認是1 天,majorcompaction與普通的compaction的區別是majorcompaction會清除過期的歷史版本數據,同時合並storefile,而普通的compaction只做合並,通常都是majorcompaction,調為0,然后手工定期的去執行一下majorcompaction,適當調小點compacionThreshold。

Region

hbase.hregion.max.filesize

配置region大小,0.94.12版本默認是10G,region的大小與集群支持的總數據量有關系,如果總數據量小,則單個region太大,不利於並行的數據處理,如果集群需支持的總數據量比較大,region太小,則會導致region的個數過多,導致region的管理等成本過高,如果一個RS配置的磁盤總量為3T*12=36T數據量,數據復制3份,則一台RS服務器可以存儲10T的數據,如果每個region最大為10G,則最多1000個region,如此看,94.12的這個默認配置還是比較合適的,不過如果要自己管理split,則應該調大該值,並且在建表時規划好region數量和rowkey設計,進行region預建,做到一定時間內,每個region的數據大小在一定的數據量之下,當發現有大的region,或者需要對整個表進行region擴充時再進行split操作,一般提供在線服務的hbase集群均會棄用hbase的自動split,轉而自己管理split。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM