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

HDFS基本命令

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

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

ls 命令服務器

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

hadoop fs -ls -R /  遞歸列出hdfs文件系統全部的目錄和文件app

put 命令jvm

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

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。

相關文章
相關標籤/搜索