Haoop基本操作
一.HDFS的常用操作
(一)、HDFS文件的權(quán)限
與Linux文件權(quán)限類似
r: read; w:write; x:execute,權(quán)限x對于文件忽略,對于文件夾表示是否允許訪問其內(nèi)容。
如果Linux系統(tǒng)用戶hdp使用hadoop命令創(chuàng)建一個文件,那么這個文件在HDFS中owner就是hdp。
HDFS的權(quán)限目的:阻止好人錯錯事,而不是阻止壞人做壞事;HDFS相信,你告訴我你是誰,我就認(rèn)為你是誰。
(二)、HDFS下的文件操作
1、列出HDFS文件
通過“-ls”命令列出HDFS下的文件
bin/hadoop dfs -ls
bin/hadoop fs -lsr /user/admin/hdfs
注意:在HDFS中未帶參數(shù)的“-ls”命令沒有返回任何值,它默認(rèn)返回HDFS的“home”目錄下的內(nèi)容。在HDFS中,沒有當(dāng)前工作目錄這樣的概念,也沒有cd這個命令。
2、列出HDFS目錄下某個文檔中的文件
此處展示的是“-ls ?文件名”命令瀏覽HDFS下名為in的文檔中的文件
$ bin/hadoop dfs -ls in
3、上傳文件到HDFS
此處展示的是“-put ?文件1 ?文件2”命令將hadoop-0.20.2目錄下的test1文件上傳到HDFS上并重命名為test
$ bin/hadoop dfs -put test1 test
注意:在執(zhí)行“-put”時只有兩種可能,即是執(zhí)行成功和執(zhí)行失敗。在上傳文件時,文件首先復(fù)制到DataNode上,只有所有的DataNode都成功接收完數(shù)據(jù),文件上傳才是成功的。
4、將HDFS中的文件復(fù)制到本地系統(tǒng)中
此處展示的是“-get ?文件1 ?文件2”命令將HDFS中的in文件復(fù)制到本地系統(tǒng)并命名為getin:
$ bin/hadoop dfs -get in getin
5、刪除HDFS下的文檔
此處展示的是“-rmr ?文件”命令刪除HDFS下名為out的文檔:
$ bin/hadoop dfs -rmr out
6、查看HDFS下的某個文件
此處展示的是“-cat ?文件”命令查看HDFS下in文件中的內(nèi)容:
$ bin/hadoop dfs -cat in/*
輸出:
hello world
hello hadoop
PS:bin/hadoop dfs 的命令遠不止這些,對于其他的操作,可以通過“-help commandName”命令所列出的清單查看
(三)、管理與更新
1、報告HDFS的基本統(tǒng)計信息
通過“-report”命令查看HDFS的基本統(tǒng)計信息:
$ bin/hadoop dfsadmin -report
2、退出安全模式
NameNode在啟動時會自動進入安全模式。安全模式是NameNode的一種狀態(tài),在這個階段,文件系統(tǒng)不允許有任何的修改。安全模式的目的是在系統(tǒng)啟動時檢查各個DataNode上數(shù)據(jù)塊的有效性,同時根據(jù)策略對數(shù)據(jù)塊進行必要的復(fù)制和刪除,當(dāng)數(shù)據(jù)塊的最小百分比數(shù)滿足配置的最小副本數(shù)條件時,會自動退出安全模式。
$ bin/hadoop dfsadmin -safemode leave
3、進入安全模式
$ bin/hadoop dfsadmin -safemode enter
4、添加節(jié)點
可擴展性是HDFS的一個重要的特性,向HDFS集群中添加節(jié)點是很容易實現(xiàn)的。添加一個新的DataNode節(jié)點,首先在新加的節(jié)點上安裝好hadoop,要和NameNode使用相同的配置,修改HADOOP_HOME/conf/master文件,加入NameNode主機名。然后在NameNode節(jié)點上修改HADOOP_HOME/conf/slaves文件,加入新節(jié)點主機名。再建立到新節(jié)點無密碼SSH連接,運行啟動命令:
$ bin/start-all.sh
通過http://(主機名):50070可查看到新的DataNode節(jié)點添加成功
5、負(fù)載均衡
用戶可以使用下面的命令來重新平衡DataNode上的數(shù)據(jù)塊的分布:
$ bin/start-balancer.sh
(四)、其他相關(guān)有用命令
1.count
hadoop fs -count < hdfs path >
統(tǒng)計hdfs對應(yīng)路徑下的目錄個數(shù),文件個數(shù),文件總計大小 顯示為目錄個數(shù),文件個數(shù),文件總計大小,輸入路徑
2.put
hadoop fs -put < local file > < hdfs file >
hdfs file的父目錄一定要存在,否則命令不會執(zhí)行
hadoop fs -put ?< local file or dir >...< hdfs dir >
hdfs dir 一定要存在,否則命令不會執(zhí)行
hadoop fs -put - < hdsf ?file>
從鍵盤讀取輸入到hdfs file中,按Ctrl+D結(jié)束輸入,hdfs file不能存在,否則命令不會執(zhí)行
2.1.moveFromLocal
hadoop fs -moveFromLocal ?< local src > ... < hdfs dst >
與put相類似,命令執(zhí)行后源文件 local src 被刪除,也可以從從鍵盤讀取輸入到hdfs file中
2.2.copyFromLocal
hadoop fs -copyFromLocal ?< local src > ... < hdfs dst >
與put相類似,也可以從從鍵盤讀取輸入到hdfs file中
3.get
hadoop fs -get < hdfs file > < local file or dir>
local file不能和 hdfs file名字不能相同,否則會提示文件已存在,沒有重名的文件會復(fù)制到本地
hadoop fs -get < hdfs file or dir > ... < local ?dir >
拷貝多個文件或目錄到本地時,本地要為文件夾路徑
注意:如果用戶不是root, local 路徑要為用戶文件夾下的路徑,否則會出現(xiàn)權(quán)限問題,
3.1.moveToLocal
當(dāng)前版本中還未實現(xiàn)此命令
3.2.copyToLocal
hadoop fs -copyToLocal < local src > ... < hdfs dst >
與get相類似
4.distcp
用來在兩個HDFS之間拷貝數(shù)據(jù)
5.setrep
hadoop fs -setrep -R 3 < hdfs path >
改變一個文件在hdfs中的副本個數(shù),上述命令中數(shù)字3為所設(shè)置的副本個數(shù),-R選項可以對一個人目錄下的所有目錄+文件遞歸執(zhí)行改變副本個數(shù)的操作
(五)、附HDFS常用命令集合使用格式及含義
-ls ? ? ?-ls <路徑> ? ? ?查看指定路徑的當(dāng)前目錄結(jié)構(gòu)
-lsr ? ? ?-lsr <路徑> ? ? ?遞歸查看指定路徑的目錄結(jié)構(gòu)
-du ? ? ?-du <路徑> ? ? ?統(tǒng)計目錄下個文件大小
-dus ? ? ?-dus <路徑> ? ? ?匯總統(tǒng)計目錄下文件(夾)大小
-count ? ? ?-count [-q] <路徑> ? ? ?統(tǒng)計文件(夾)數(shù)量
-mv ? ? ?-mv <源路徑> <目的路徑> ? ? ?移動
-cp ? ? ?-cp <源路徑> <目的路徑> ? ? ?復(fù)制
-rm ? ? ?-rm [-skipTrash] <路徑> ? ? ?刪除文件/空白文件夾
-rmr ? ? ?-rmr [-skipTrash] <路徑> ? ? ?遞歸刪除
-put ? ? ?-put <多個linux上的文件> <hdfs路徑> ? ? ?上傳文件
-copyFromLocal ? ? ?-copyFromLocal <多個linux上的文件> <hdfs路徑> ? ? ?從本地復(fù)制
-moveFromLocal ? ? ?-moveFromLocal <多個linux上的文件> <hdfs路徑> ? ? ?從本地移動
-getmerge ? ? ?-getmerge <源路徑> <linux路徑> ? ? ?合并到本地
-cat ? ? ?-cat <hdfs路徑> ? ? ?查看文件內(nèi)容
-text ? ? ?-text <hdfs路徑> ? ? ?查看文件內(nèi)容
-copyToLocal ? ? ?-copyToLocal [-ignoreCrc] [-crc] [hdfs源路徑] [linux目的路徑] ? ? ?從本地復(fù)制
-moveToLocal ? ? ?-moveToLocal [-crc] <hdfs源路徑> <linux目的路徑> ? ? ?從本地移動
-mkdir ? ? ?-mkdir <hdfs路徑> ? ? ?創(chuàng)建空白文件夾
-setrep ? ? ?-setrep [-R] [-w] <副本數(shù)> <路徑> ? ? ?修改副本數(shù)量
-touchz ? ? ?-touchz <文件路徑> ? ? ?創(chuàng)建空白文件
-stat ? ? ?-stat [format] <路徑> ? ? ?顯示文件統(tǒng)計信息
-tail ? ? ?-tail [-f] <文件> ? ? ?查看文件尾部信息
-chmod ? ? ?-chmod [-R] <權(quán)限模式> [路徑] ? ? ?修改權(quán)限
-chown ? ? ?-chown [-R] [屬主][:[屬組]] 路徑 ? ? ?修改屬主
-chgrp ? ? ?-chgrp [-R] 屬組名稱 路徑 ? ? ?修改屬組
-help ? ? ?-help [命令選項] ? ? ?幫助
二.Hadoop回收站機制
1、簡介
在HDFS里,刪除文件時,不會真正的刪除,其實是放入回收站/trash,回收站里的文件可以快速恢復(fù)。
可以設(shè)置一個時間閥值,當(dāng)回收站里文件的存放時間超過這個閥值或是回收站被清空時,文件才會被徹底刪除,并且釋放占用的數(shù)據(jù)塊。
2、回收站功能啟用
Hadoop的回收站trash功能默認(rèn)是關(guān)閉的,所以需要在core-site.xml中手動開啟。
修改core-site.xml,增加[在每個節(jié)點(不僅僅是主節(jié)點)上添加配置 /etc/hadoop/conf/core-site.xml,增加如下內(nèi)容]:
[html]?view plain?copy
?print?
1.?? <property>???
2.?? <name>fs.trash.interval</name>???
3.?? <value>1440</value>???
4.?? <description>Number?of?minutes?between?trash?checkpoints.???
5.?? If?zero,?the?trash?feature?is?disabled.???
6.?? </description>???
7.?? </property>??
默認(rèn)是0,單位是分鐘,這里設(shè)置為1天。
刪除數(shù)據(jù)rm后,會將數(shù)據(jù)move到當(dāng)前文件夾下的.Trash目錄。
3、回收站日常操作
存放位置
hadoop fs -ls /user/hadoop/.Trash/Current/
查看hdfs存儲空間使用情況
hadoop dfsadmin -report
查看回收站占用空間及內(nèi)容
hadoop dfs -du -h /user/hadoop/.Trash/
hadoop fs -ls /user/hadoop/.Trash/Current/
hadoop dfs -ls /user/hadoop/.Trash/
清空回收站
刪除.Trash目錄
hadoop fs -rmr .Trash
hadoop fs -rmr .Trash ?
hadoop dfs -rmr /user/hadoop/.Trash/*
清空回收站命令(經(jīng)測試,基本沒用)
hdfs dfs -expunge?
bin/hadoop dfs -expunge
bin/hadoop dfs -ls .Trash/Current/user/grid
?
4、hdfs文件直接刪除不進回收站
-- ?hadoop dfs -rmr /tmp/nisj/oss/
-- ?hadoop dfs -rmr -skipTrash /tmp/nisj/oss/
5、hive表刪除情況
hive的表及分區(qū)刪除,如果回收站功能啟用,實際上也是將文件放到回收站的。如果想快速利用空間,實際上也要進行手工清空回收站操作。目前,沒有找到刪除hive表不進入回收站的方法。
在一次系統(tǒng)跑批中,由于空間有限,要將從oss上下載的數(shù)據(jù)文件處理完后,立即刪除;但表數(shù)據(jù)文件實際上是進入了回收站,還是占用hdfs空間,所以編寫了一個定時腳本進行回收站的清空操作。
[hadoop@emr-header-1 getDataFromOss]$ cat truncate_trash.sh?
[java]?view plain?copy
?print?
1.?? #!/usr/bin/env?bash??
2.?? ??
3.?? source?/etc/profile;??
4.?? /usr/lib/hadoop-current/bin/hadoop?dfs?-rmr?/user/hadoop/.Trash/*?>>/home/hadoop/nisj/getDataFromOss/trash_truncate.log?2>&1??
?
?
?
?
?
?
三.Hadoop任務(wù)查看管理相關(guān)
1.查看 Job 信息:
hadoop job -list?
2.殺掉 Job:?
hadoop ?job –kill ?job_id
3.指定路徑下查看歷史日志匯總:
hadoop job -history output-dir?
4.作業(yè)的更多細節(jié):?
hadoop job -history all output-dir?
5.打印map和reduce完成百分比和所有計數(shù)器:
hadoop job –status job_id?
6.殺死任務(wù)。被殺死的任務(wù)不會不利于失敗嘗試:
hadoop jab -kill-task <task-id>?
7.使任務(wù)失敗。被失敗的任務(wù)會對失敗嘗試不利:
hadoop job ?-fail-task <task-id>
8、yarn資源管理器相關(guān)
yarn application -list
如需殺死當(dāng)前某個作業(yè),使用kill application-id的命令如下:
yarn application -kill application_1437456051228_1725
四.Hbase常用shell命令
1.進入hbase shell console
$HBASE_HOME/bin/hbase shell
如果有kerberos認(rèn)證,需要事先使用相應(yīng)的keytab進行一下認(rèn)證(使用kinit命令);認(rèn)證成功之后再使用hbase shell進入可以使用whoami命令可查看當(dāng)前用戶?
hbase(main)>?whoami
?
2.表的管理
1)查看有哪些表?
hbase(main)>?list
2)創(chuàng)建表
# 語法:create <table>, {NAME => <family>, VERSIONS => <VERSIONS>}
# 例如:創(chuàng)建表tab1,有兩個family name:fied1,fied2,且版本數(shù)均為2
hbase(main)>?create 'tab1',{NAME => 'fied1', VERSIONS => 2},{NAME => 'fied2', VERSIONS => 2}
3)刪除表
分兩步:首先disable,然后drop
例如:刪除表tab1
hbase(main)>?disable 'tab1'
hbase(main)>?drop 'tab1'
4)查看表的結(jié)構(gòu)
# 語法:describe <table>
# 例如:查看表tab1的結(jié)構(gòu)
hbase(main)>?describe 'tab1'
5)修改表結(jié)構(gòu)
修改表結(jié)構(gòu)必須先disable
# 語法:alter 'tab1', {NAME => 'fied1'}, {NAME => 'fied2', METHOD => 'delete'}
# 例如:修改表tab1的cf的TTL為180天
hbase(main)>?disable 'tab1'
hbase(main)>?alter 'tab1',{NAME=>'body',TTL=>'15552000'},{NAME=>'meta', TTL=>'15552000'}
hbase(main)>?enable 'tab1'
?
3.表數(shù)據(jù)的增刪改查
1)添加數(shù)據(jù)?
# 語法:put <table>,<rowkey>,<family:column>,<value>,<timestamp>
# 例如:給表tab1的添加一行記錄:rowkey是rowkey001,family name:fied1,column name:col1,value:value01,timestamp:系統(tǒng)默認(rèn)
hbase(main)>?put 'tab1','rowkey001','fied1:col1','value01'
用法比較單一。
2)查詢數(shù)據(jù)
a)查詢某行記錄
# 語法:get <table>,<rowkey>,[<family:column>,....]
# 例如:查詢表tab1,rowkey001中的fied1下的col1的值
hbase(main)>?get 'tab1','rowkey001', 'fied1:col1'
# 或者:
hbase(main)>?get 'tab1','rowkey001', {COLUMN=>'fied1:col1'}
# 查詢表tab1,rowke002中的fied1下的所有列值
hbase(main)>?get 'tab1','rowkey001'
b)掃描表
# 語法:scan <table>, {COLUMNS => [ <family:column>,.... ], LIMIT => num}
# 另外,還可以添加STARTROW、TIMERANGE和FITLER等高級功能
# 例如:掃描表tab1的前5條數(shù)據(jù)
hbase(main)>?scan 'tab1',{LIMIT=>5}
c)查詢表中的數(shù)據(jù)行數(shù)
# 語法:count <table>, {INTERVAL => intervalNum, CACHE => cacheNum}
# INTERVAL設(shè)置多少行顯示一次及對應(yīng)的rowkey,默認(rèn)1000;CACHE每次去取的緩存區(qū)大小,默認(rèn)是10,調(diào)整該參數(shù)可提高查詢速度
# 例如,查詢表tab1中的行數(shù),每100條顯示一次,緩存區(qū)為500
hbase(main)>?count 'tab1', {INTERVAL => 100, CACHE => 500}
3)刪除數(shù)據(jù)
a )刪除行中的某個列值
# 語法:delete <table>, <rowkey>,? <family:column> , <timestamp>,必須指定列名
# 例如:刪除表tab1,rowkey001中的fied1:col1的數(shù)據(jù)
hbase(main)>?delete 'tab1','rowkey001','fied1:col1'
注:將刪除改行fied1:col1列所有版本的數(shù)據(jù)
b )刪除行
# 語法:deleteall <table>, <rowkey>,? <family:column> , <timestamp>,可以不指定列名,刪除整行數(shù)據(jù)
# 例如:刪除表tab1,rowk001的數(shù)據(jù)
hbase(main)>?deleteall 'tab1','rowkey001'
c)刪除表中的所有數(shù)據(jù)
# 語法: truncate <table>
# 其具體過程是:disable table -> drop table -> create table
# 例如:刪除表tab1的所有數(shù)據(jù)
hbase(main)>?truncate 'tab1'
?
4.其他命令
1)status命令
hbase(main):008:0>?status
2)version命令
hbase(main):007:0>?version
3)exists 命令——查看表是否存在
hbase(main):014:0>?exists 'tab1'
4)incr 命令
給'tab1'這個列增加 uid 字段,并使用counter實現(xiàn)遞增
連續(xù)執(zhí)行incr以上,COUNTER VALUE 的值會遞增,通過get_counter
hbase(main):010:0>?incr 'tab1', 'row2', 'uid', 2
COUNTER VALUE = 2
hbase(main):011:0>?incr 'tab1', 'row2', 'uid', 3
COUNTER VALUE = 5
?
轉(zhuǎn)載于:https://www.cnblogs.com/fiberhome/p/6829601.html
總結(jié)
- 上一篇: QRCode简介(收藏)
- 下一篇: 安卓开发实用库