導航:首頁 > 程序命令 > hadoop文件操作命令

hadoop文件操作命令

發布時間:2022-10-29 23:30:40

① HDFS操作命令

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

表格:

注意:以上表格中路徑包括hdfs中的路徑和linux中的路徑。對於容易產生歧義的地方,會特別指出「linux路徑」或者「hdfs路徑」。如果沒有明確指出,意味著是hdfs路徑。

HDFS有一個默認的工作目錄/user/$USER,其中$USER是用戶的登錄用戶名。不過目錄不會自動建立,需要mkdir建立它
命令格式:hadoop fs -mkdir

注意:支持級聯創建新目錄,Hadoop的mkdir命令會自動創建父目錄,類似於帶-p的linux命令

put命令從本地文件系統中 復制單個或多個 源路徑到目標文件系統,也支持從標准輸入設備中讀取輸入並寫入目標文件系統。分為本地上傳和上傳到HDFS中。
命令格式:hadoop fs -put filename

最後一個參數是句點,相當於放入了默認的工作目錄,等價於 hadoop fs -put example.txt /user/chen

上傳文件時,文件首先復制到DataNode上,只有所有的DataNode都成功接收完數據,文件上傳才是成功的。
命令格式:hadoop dfs put filename newfilename

從本地文件系統中復制單個或多個源路徑到目標文件系統。也支持從 標准輸入 中讀取輸入寫入目標文件系統。

採用-ls命令列出HDFS上的文件。在HDFS中未帶參數的-ls命令沒有返回任何值,它默認返回HDFS的home目錄下
的內容。在HDFS中,沒有當前工作目錄這樣一個概念,也沒有cmd這樣的命令。
命令格式:user@NameNode:hadoop$ bin/hadoop dfs -ls
如:

通過「-ls 文件夾名」 命令瀏覽HDFS下文件夾中的文件
命令格式:hadoop dfs -ls 文件夾名

通過該命令可以查看in文件夾中的所有文檔文件

通過「-cat 文件名」命令查看HDFS下文件夾中某個文件的內容
命令格式:hadoop$ bin/hadoop dfs -cat 文件名

通過這個命令可以查看in文件夾中所有文件的內容

通過「-get 文件按1 文件2」命令將HDFS中某目錄下的文件復制到本地系統的某文件中,並對該文件重新命名。
命令格式:hadoop dfs -get 文件名 新文件名

-get 命令與-put命令一樣,既可以操作目錄,也可以操作文件

通過「-rmr 文件」命令刪除HDFS下的文件
命令格式:hadoop$ bin/hadoop dfs -rmr 文件

-rmr 刪除文檔命令相當於delete的遞歸版本。

通過-format命令實現HDFS格式化
命令格式:user@NameNode:hadoop$ bin/hadoop NameNode -format

通過運行start-dfs.sh,就可以啟動HDFS了
命令格式:user@NameNode:hadoop$ bin/ start-dfs.sh

當需要退出HDFS時,通過stop-dfs.sh 就可以關閉HDFS
命令格式:user@NameNode:hadoop$ bin/ stop-dfs.sh

HDFS的命令遠不止這些,對於其他操作,可以通過-help commandName 命令列出清單。下面列舉一些命令進行說明。

(1)chgrp改變文件所屬的組命令
chgrp命令的用途是:更改文件或目錄的組所有權。
語法格式:hadoop fs -charg [-R] GROUP URL .....
使用-R將使改變在目錄結構下遞歸進行。命令的使用者必須是文件的所有者或者超級用戶。

(2)chmod改變文件的許可權
chmod用於改變文件或目錄的訪問許可權,這個Linux系統管理員最常用的命令之一。
使用方法:hadoop fs -chmod [-R] ...
使用-R將使改變在目錄結構下遞歸進行。命令的使用者必須是文件的所有者或者是超級用戶

(3)chown改變文件的擁有者
chown命令改變文件的擁有者。
使用方法:hadoop fs -chown [-R]....
使用-R將使改變在目錄結構下遞歸進行。命令的使用者必須是超級用戶。

(4)FromLocal命令
除了限定 源路徑 是只能是一個 本地文件 外,其他方面和put命令相似。
使用方法:hadoop fs -FromLocal <localsrc> URI

(5)ToLocal命令
除了限定 目標路徑 是一個 本地文件 外,其他方面和get命令類似。
使用方法:hadoop fs -ToLocal {-ignorecrc} {-crc} URI <localdst>

(6)cp命令
cp命令是將文件從源路徑復制到目標路徑。這個命令允許有多個源路徑,此時目標路徑必須是一個目錄。
使用方法:hadoop fs -cp URI [URI....] <dest>

返回值:成功返回0 ,失敗返回-1

(7)命令
命令顯示目錄中 所有文件的大小 ,或者當只指定一個文件時,顯示此文件的大小
使用方法:hadoop fs - URI [URI........]

返回值
成功返回0,失敗返回-1

(8)s命令
s是顯示 文件大小 的命令。
使用方法:hadoop fs -s <args>

(9)expunge命令
expunge是清空回收站的命令
使用方法:hadoop fs -expunge

(10)get命令
get是復制文件到本地文件系統的命令
使用方法:hadoop fs -get [-ignorecrc] [-crc] <localdst>
可用-ignorecrc選項復制CRC校驗失敗的文件:使用-CRC選項復制文件以及CRC信息。

返回值
成功返回0,失敗返回-1

(11)getmerge命令
getmerge命令用於接受一個源目錄和一個目標文件作為輸入,並且將源目錄中所有的文件合並成本地目標文件。
使用方法:hadoop fs -getmerge <src> <localdst> [addnl]
參數說明:addl是可選的,用於指定在每個文件結尾添加一個換行符;

假設在你的hdfs集群上有一個/user/hadoop/output目錄
裡面有作業執行的結果(多個文件組成)part-000000,part-000001,part-000002

然後就可以在本地使用vi local_file查看內容了

(12)ls命令
ls命令查看當前目錄下的信息
使用方法:hadoop fs -ls <args>
如果是 文件 ,則按照如下格式返迴文件信息:
文件名 <副本數>文件大小 修改日期 修改時間 許可權 用戶ID 組ID

如果是 目錄 ,則返回它直接子文件的一個列表,就像在UNIX中一樣。目錄返回i額表的信息如下:
目錄名<dir>修改日期 修改時間 許可權 用戶ID 組ID

返回值
成功返回0,失敗返回-1

(13)lsr命令
lsr命令是-ls命令的遞歸版,類似於UNIX中的ls-r。
使用方法:hadoop fs -lsr <args>

(14)movefromLocal命令
復制一份本地文件到hdfs,當成功後,刪除本地文件
使用方法:dfs -moveFromLocal <src> <dst>

(14.5)moveToLocal命令
類似於-get,但是當復制完成後,會刪除hdfs上的文件
使用方法:moveToLocal <src> <localDest>

(15)mv命令
將文件從源路徑移動到目標路徑。這個命令允許有多個源路徑,此時目標路徑必須是一個目錄
使用方法:hadoop fs -mv URI [URI.....] <dest>
備註:不允許在不同的文件系統間移動文件。

返回值
成功返回0,失敗返回-1

(16)put 命令
put命令從本地文件系統中復制單個或多個源路徑到目標文件系統,也支持從標准輸入中讀取輸入寫入目標文件系統
使用方法:hadoop fs -put <localsrc> .... <dst>

(17)rm命令
rm命令刪除指定的文件,只刪除非空目錄和文件。
使用方法:hadoop fs -rm URI [URI......]
請參考rmr命令了解遞歸刪除。

(18)rmr命令
rmr命令是delete命令的遞歸版本
使用方法:hadoop fs -rmr URI [URI.......]

返回值
成功返回0,失敗返回-1

(19)setrep命令
setrep命令可以改變一個文件的副本系數。
使用方法:hadoop fs -setrep [-R] <path>
參數說明:-R 選項用於遞歸改變目錄下所有文件的副本系數

返回值
成功返回0,失敗返回-1

(20)stat命令
stat命令用於返回指定路徑的統計信息
使用方法:hadoop fs -stat URI [URI......]

返回值
成功返回0,失敗返回-1

(21)tail命令
tail命令將文件尾部1KB的內容輸出到stdout。支持-f選項,行為和UNIX中一致
使用方法:hadoop fs -tail [-f] URI

返回值
成功返回0,失敗返回-1

(22)test命令
test命令是檢查命令,可以檢查文件是否存在、文件的大小等。
使用方法:hadoop fs -test -[ezd] URI

(23)text命令
text命令用於將源文件輸出問文本格式
使用方法:hadoop fs -text <src>
允許的格式是zip和TextRecordInputStream。

(24)touchz 命令
touchz命令用於創建一個0位元組的空文件。
使用方法: hadoop fs -touchz URI [URI....]

返回值
成功返回0,失敗返回-1

② Hadoop系列之HDFS架構

    本篇文章翻譯了Hadoop系列下的 HDFS Architecture ,原文最初經過筆者翻譯後大概有6000字,之後筆者對內容進行了精簡化壓縮,從而使筆者自己和其他讀者們閱讀本文時能夠更加高效快速的完成對Hadoop的學習或復習。本文主要介紹了Hadoop的整體架構,包括但不限於節點概念、命名空間、數據容錯機制、數據管理方式、簡單的腳本命令和垃圾回收概念。

    PS:筆者新手一枚,如果看出哪裡存在問題,歡迎下方留言!

    Hadoop Distributed File System(HDFS)是高容錯、高吞吐量、用於處理海量數據的分布式文件系統。

    HDFS一般由成百上千的機器組成,每個機器存儲整個數據集的一部分數據,機器故障的快速發現與恢復是HDFS的核心目標。

    HDFS對介面的核心目標是高吞吐量而非低延遲。

    HDFS支持海量數據集合,一個集群一般能夠支持千萬以上數量級的文件。

    HDFS應用需要對文件寫一次讀多次的介面模型,文件變更只支持尾部添加和截斷。

    HDFS的海量數據與一致性介面特點,使得遷移計算以適應文件內容要比遷移數據從而支持計算更加高效。

    HDFS支持跨平台使用。

    HDFS使用主從架構。一個HDFS集群由一個NameNode、一個主伺服器(用於管理系統命名空間和控制客戶端文件介面)、大量的DataNode(一般一個節點一個,用於管理該節點數據存儲)。HDFS對外暴露了文件系統命名空間並允許在文件中存儲用戶數據。一個文件被分成一個或多個塊,這些塊存儲在一組DataNode中。NameNode執行文件系統命名空間的打開關閉重命名等命令並記錄著塊和DataNode之間的映射。DataNode用於處理客戶端的讀寫請求和塊的相關操作。NameNode和DataNode一般運行在GNU/Linux操作系統上,HDFS使用java語言開發的,因此NameNode和DataNode可以運行在任何支持Java的機器上,再加上Java語言的高度可移植性,使得HDFS可以發布在各種各樣的機器上。一個HDFS集群中運行一個NameNode,其他機器每個運行一個(也可以多個,非常少見)DataNode。NameNode簡化了系統的架構,只用於存儲所有HDFS元數據,用戶數據不會進入該節點。下圖為HDFS架構圖:

    HDFS支持傳統的分層文件管理,用戶或者應用能夠在目錄下創建目錄或者文件。文件系統命名空間和其他文件系統是相似的,支持創建、刪除、移動和重命名文件。HDFS支持用戶數量限制和訪問許可權控制,不支持軟硬鏈接,用戶可以自己實現軟硬鏈接。NameNode控制該命名空間,命名空間任何變動幾乎都要記錄到NameNode中。應用可以在HDFS中對文件聲明復制次數,這個次數叫做復制系數,會被記錄到NameNode中。

    HDFS將每個文件存儲為一個或多個塊,並為文件設置了塊的大小和復制系數從而支持文件容錯。一個文件所有的塊(除了最後一個塊)大小相同,後來支持了可變長度的塊。復制系數在創建文件時賦值,後續可以更改。文件在任何時候只能有一個writer。NameNode負責塊復制,它周期性收到每個數據節點的心跳和塊報告,心跳錶示數據節點的正常運作,塊報告包含了這個DataNode的所有塊。

    副本存儲方案對於HDFS的穩定性和性能至關重要。為了提升數據可靠性、靈活性和充分利用網路帶寬,HDFS引入了機架感知的副本存儲策略,該策略只是副本存儲策略的第一步,為後續優化打下基礎。大型HDFS集群一般運行於橫跨許多支架的計算機集群中,一般情況下同一支架中兩個節點數據傳輸快於不同支架。一種簡單的方法是將副本存放在單獨的機架上,從而防止丟失數據並提高帶寬,但是增加了數據寫入的負擔。一般情況下,復制系數是3,HDFS存儲策略是將第一份副本存儲到本地機器或者同一機架下一個隨機DataNode,另外兩份副本存儲到同一個遠程機架的不同DataNode。NameNode不允許同一DataNode存儲相同副本多次。在機架感知的策略基礎上,後續支持了 存儲類型和機架感知相結合的策略 ,簡單來說就是在機架感知基礎上判斷DataNode是否支持該類型的文件,不支持則尋找下一個。

    HDFS讀取數據使用就近原則,首先尋找相同機架上是否存在副本,其次本地數據中心,最後遠程數據中心。

    啟動時,NameNode進入安全模式,該模式下不會發生數據塊復制,NameNode接收來自DataNode的心跳和塊報告,每個塊都有一個最小副本數量n,數據塊在NameNode接受到該塊n次後,認為這個數據塊完成安全復制。當完成安全復制的數據塊比例達到一個可配的百分比值並再過30s後,NameNode退出安全模式,最後判斷是否仍然存在未達到最小復制次數的數據塊,並對這些塊進行復制操作。

    NameNode使用名為EditLog的事務日誌持續記錄文件系統元數據的每一次改動(如創建文件、改變復制系數),使用名為FsImage的文件存儲全部的文件系統命名空間(包括塊到文件的映射關系和文件系統的相關屬性),EditLog和FsImage都存儲在NameNode本地文件系統中。NameNode在內存中保存著元數據和塊映射的快照,當NameNode啟動後或者某個配置項達到閾值時,會從磁碟中讀取EditLog和FsImage,通過EditLog新的記錄更新內存中的FsImage,再講新版本的FsImage刷新到磁碟中,然後截斷EditLog中已經處理的記錄,這個過程就是一個檢查點。檢查點的目的是確保文件系統通過在內存中使用元數據的快照從而持續的觀察元數據的變更並將快照信息存儲到磁碟FsImage中。檢查點通過下面兩個配置參數出發,時間周期(dfs.namenode.checkpoint.period)和文件系統事務數量(dfs.namenode.checkpoint.txns),二者同時配置時,滿足任意一個條件就會觸發檢查點。

    所有的HDFS網路協議都是基於TCP/IP的,客戶端建立一個到NameNode機器的可配置的TCP埠,用於二者之間的交互。DataNode使用DataNode協議和NameNode交互,RPC包裝了客戶端協議和DataNode協議,通過設計,NameNode不會發起RPC,只負責響應來自客戶端或者DataNode的RPC請求。

    HDFS的核心目標是即使在失敗或者錯誤情況下依然能夠保證數據可靠性,三種常見失敗情況包括NameNode故障、DataNode故障和network partitions。

    網路分區可能會導致部分DataNode市區和NameNode的連接,NameNode通過心跳包判斷並將失去連接的DataNode標記為掛掉狀態,於是所有注冊到掛掉DataNode的數據都不可用了,可能會導致部分數據塊的復制數量低於了原本配置的復制系數。NameNode不斷地追蹤哪些需要復制的塊並在必要時候進行復制,觸發條件包含多種情況:DataNode不可用、復制亂碼、硬體磁碟故障或者認為增大負值系數。為了避免DataNode的狀態不穩定導致的復制風暴,標記DataNode掛掉的超時時間設置比較長(默認10min),用戶可以設置更短的時間間隔來標記DataNode為陳舊狀態從而避免在對讀寫性能要求高的請求上使用這些陳舊節點。

    HDFS架構兼容數據各種重新平衡方案,一種方案可以在某個DataNode的空閑空間小於某個閾值時將數據移動到另一個DataNode上;在某個特殊文件突然有高的讀取需求時,一種方式是積極創建額外副本並且平衡集群中的其他數據。這些類型的平衡方案暫時還未實現(不太清楚現有方案是什麼...)。

    存儲設備、網路或者軟體的問題都可能導致從DataNode獲取的數據發生亂碼,HDFS客戶端實現了對文件內容的校驗,客戶端在創建文件時,會計算文件中每個塊的校驗值並存儲到命名空間,當客戶端取回數據後會使用校驗值對每個塊進行校驗,如果存在問題,客戶端就會去另一個DataNode獲取這個塊的副本。

    FsImage和EditLog是HDFS的核心數據結構,他們的錯誤會導致整個HDFS掛掉,因此,NameNode應該支持時刻維持FsImage和EditLog的多分復制文件,它們的任何改變所有文件應該同步更新。另一個選擇是使用 shared storage on NFS 或者 distributed edit log 支持多個NameNode,官方推薦 distributed edit log 。

    快照能夠存儲某一特殊時刻的數據副本,從而支持HDFS在發生錯誤時會滾到上一個穩定版本。

    HDFS的應用場景是大的數據集下,且數據只需要寫一次但是要讀取一到多次並且支持流速讀取數據。一般情況下一個塊大小為128MB,因此一個文件被切割成128MB的大塊,且每個快可能分布在不同的DataNode。

    當客戶端在復制系數是3的條件下寫數據時,NameNode通過目標選擇演算法收到副本要寫入的DataNode的集合,第1個DataNode開始一部分一部分的獲取數據,把每個部分存儲到本地並轉發給第2個DataNode,第2個DataNode同樣的把每個部分存儲到本地並轉發給第3個DataNode,第3個DataNode將數據存儲到本地,這就是管道復制。

    HDFS提供了多種訪問方式,比如 FileSystem Java API 、 C language wrapper for this Java API 和 REST API ,而且還支持瀏覽器直接瀏覽。通過使用 NFS gateway ,客戶端可以在本地文件系統上安裝HDFS。

    HDFS使用目錄和文件的方式管理數據,並提供了叫做 FS shell 的命令行介面,下面有一些簡單的命令:

    DFSAdmin命令集合用於管理HDFS集群,這些命令只有集群管理員可以使用,下面有一些簡單的命令:

正常的HDFS安裝都會配置一個web服務,通過可配的TCP埠對外暴露命名空間,從而使得用戶可以通過web瀏覽器查看文件內容。

如果垃圾回收配置打開,通過FS shell移除的文件不會立刻刪除,而是會移動到一個垃圾文件專用的目錄(/user/<username>/.Trash),類似回收站,只要文件還存在於那個目錄下,則隨時可以被回復。絕大多數最近刪除的文件都被移動到了垃圾目錄(/user/<username>/.Trash/Current),並且HDFS每個一段時間在這個目錄下創建一個檢查點用於刪除已經過期的舊的檢查點,詳情見 expunge command of FS shell 。在垃圾目錄中的文件過期後,NameNode會刪除這個文件,文件刪除會引起這個文件的所有塊的空間空閑,需要注意的是在文件被刪除之後和HDFS的可用空間變多之間會有一些時間延遲(個人認為是垃圾回收機制佔用的時間)。下面是一些簡單的理解刪除文件的例子:

    當文件復制系數減小時,NameNode會選擇多餘的需要刪除的副本,在收到心跳包時將刪除信息發送給DataNode。和上面一樣,這個刪除操作也是需要一些時間後,才能在集群上展現空閑空間的增加。

HDFS Architecture

③ spark、hive、impala、hdfs的常用命令

對spark、hive、impala、hdfs的常用命令作了如下總結,歡迎大家補充!

1. Spark的使用:

以通過SecureCRT訪問IP地址:10.10.234.198 為例進行說明:

先輸入:ll //查詢集群是否裝有spark

>su - mr

>/home/mr/spark/bin/beeline -u "jdbc:hive2:/bigdata198:18000/" -n mr -p ""

>show databases; //顯示其中資料庫,例如

>use bigmax; //使用資料庫bigmax

>show tables; //查詢目錄中所有的表

>desc formatted TableName; //顯示表的詳細信息,包括分區、欄位、地址等信息

>desc TableName; //顯示表中的欄位和分區信息

>select count(*) from TableName; //顯示表中數據數量,可以用來判斷表是否為空

>drop table TableName; //刪除表的信息

>drop bigmax //刪除資料庫bigmax

>describe database zxvmax //查詢資料庫zxvmax信息

創建一個表

第一步:

>create external table if not exists lte_Amaze //創建一個叫lte_Amaze的表

( //括弧中每一行為表中的各個欄位的名稱和其所屬的數據類型,並用空格隔開

DateTime String,

MilliSec int,

Network int,

eNodeBID int,

CID int,

IMSI String,

DataType int,

AoA int,

ServerRsrp int,

ServerRsrq int,

TA int,

Cqi0 Tinyint,

Cqi1 Tinyint //注意,最後一個欄位結束後,沒有逗號

)

partitioned by (p_date string, p_hour INT) //以p_date和p_hour作為分區

row format delimited fields terminated by ',' /*/*表中行結構是以逗號作為分隔符,與上邊的表中欄位以逗號結尾相一致*/

stored as textfile; //以文本格式進行保存

第二步:添加分區,指定分區的位置

>alter table lte_Amaze add partition (p_date='2015-01-27',p_hour=0) location'/lte/nds/mr/lte_nds_cdt_uedetail/p_date=2015-01-27/p_hour=0';

//添加lte_Amaze表中分區信息,進行賦值。

//並制定分區對應目錄/lte/nds/mr下表lte_nds_cdt_uedetail中對應分區信息

第三步:察看添加的結果

>show partitions lte_Amaze; //顯示表的分區信息

2. hdfs使用:

#su - hdfs //切換到hdfs用戶下 、

#hadoop fs –ls ///查看進程
# cd /hdfs/bin //進入hdfs安裝bin目錄
>hadoop fs -ls /umtsd/cdt/ //查詢/umtsd/cdt/文件目錄
>hadoop fs -mkdir /umtsd/test //在/umtsd目錄下創建test目錄
>hadoop fs -put /home/data/u1002.csv /impala/data/u5002 //將home/data/u1002.csv這個文件put到hdfs文件目錄上。put到hdfs上的數據文件以逗號「,」分隔符文件(csv),數據不論類型,直接是數據,沒有雙引號和單引號
>hadoop fs -rm /umtsd/test/test.txt //刪除umtsd/test目錄下的test.txt文件
>hadoop fs -cat /umtsd/test/test.txt //查看umtsd/test目錄下的test.txt文件內容

3hive操作使用:
#su - mr //切換到mr用戶下
#hive //進入hive查詢操作界面
hive>show tables; //查詢當前創建的所有表
hive>show databases; //查詢當前創建的資料庫
hive>describe table_name; {或者desc table_name}//查看錶的欄位的定義和分區信息,有明確區分(impala下該命令把分區信息以欄位的形式顯示出來,不怎麼好區分)
hive> show partitions table_name; //查看錶對應數據現有的分區信息,impala下沒有該命令
hive> quit;//退出hive操作界面

hive>desc formatted table_name; 查看錶結構,分隔符等信息

hive> alter table ceshi change id id int; 修改表的列數據類型 //將id數據類型修改為int 注意是兩個id

hive> SHOW TABLES '.*s'; 按正條件(正則表達式)顯示表,

[mr@aico ~]$ exit; 退出mr用戶操作界面,到[root@aico]界面

impala操作使用:
#su - mr //切換到mr用戶下
#cd impala/bin //進入impala安裝bin目錄
#/impala/bin> impala-shell.sh -i 10.10.234.166/localhost //進入impala查詢操作界面
[10.10.234.166:21000] >show databases; //查詢當前創建的資料庫
[10.10.234.166:21000] >use database_name; //選擇使用資料庫,默認情況下是使用default資料庫
[10.10.234.166:21000] > show tables; //查詢當前資料庫下創建的所有表
[10.10.234.166:21000] >describe table_name; //查看錶的欄位的定義,包括分區信息,沒有明確區分
[10.10.234.166:21000] > describe formatted table_name; //查看錶對應格式化信息,包括分區,所屬資料庫,創建用戶,創建時間等詳細信息。
[10.10.234.166:21000] >refresh table_name; //刷新一下,保證元數據是最新的
[10.10.234.166:21000] > alter TABLE U107 ADD PARTITION(reportDate="2013-09-27",rncid=487)LOCATION '/umts/cdt/
MREMITABLE/20130927/rncid=487' //添加分區信息,具體的表和數據的對應關系
[10.10.234.166:21000] > alter TABLE U100 drop PARTITION(reportDate="2013-09-25",rncid=487); //刪除現有的分區,數據與表的關聯
[10.10.234.166:21000] >quit; //退出impala操作界面

[mr@aicod bin]$ impala-shell; 得到welcome impala的信息,進入impala 查詢操作界面

[aicod:21000] > 按兩次tab鍵,查看可以用的命令

alter describe help profile shell values

connect drop history quit show version

create exit insert select unset with

desc explain load set use

④ 在Hadoop中,使用put命令,在test中生成文件myfile,可以直接創建嗎命令是什麼呢

1. 創建本地的示例數據文件:
依次進入【Home】-【hadoop】-【hadoop-1.2.1】創建一個文件夾file用來存儲本地原始數據。

並在這個目錄下創建2個文件分別命名為【myTest1.txt】和【myTest2.txt】或者你想要的任何文件名。
分別在這2個文件中輸入下列示例語句:

2. 在HDFS上創建輸入文件夾
呼出終端,輸入下面指令:
bin/hadoop fs -mkdir hdfsInput
執行這個命令時可能會提示類似安全的問題,如果提示了,請使用
bin/hadoop dfsadmin -safemode leave
來退出安全模式。
當分布式文件系統處於安全模式的情況下,文件系統中的內容不允許修改也不允許刪除,直到安全模式結 束。安全模式主要是為了系統啟動的時候檢查各個DataNode上數據塊的有效性,同時根據策略必要的復制或者刪除部分數據塊。運行期通過命令也可以進入 安全模式。

意思是在HDFS遠程創建一個輸入目錄,我們以後的文件需要上載到這個目錄裡面才能執行。
3. 上傳本地file中文件到集群的hdfsInput目錄下
在終端依次輸入下面指令:
cd hadoop-1.2.1
bin/hadoop fs -put file/myTest*.txt hdfsInput

4. 運行例子:
在終端輸入下面指令:
bin/hadoop jar hadoop-examples-1.2.1.jar wordcount hdfsInput hdfsOutput
注意,這里的示常式序是1.2.1版本的,可能每個機器有所不一致,那麼請用*通配符代替版本號
bin/hadoop jar hadoop-examples-*.jar wordcount hdfsInput hdfsOutput
應該出現下面結果:

Hadoop命令會啟動一個JVM來運行這個MapRece程序,並自動獲得Hadoop的配置,同時把類的路徑(及其依賴關系)加入到Hadoop的庫中。以上就是Hadoop Job的運行記錄,從這里可以看到,這個Job被賦予了一個ID號:job_201202292213_0002,而且得知輸入文件有兩個(Total input paths to process : 2),同時還可以了解map的輸入輸出記錄(record數及位元組數)

⑤ 大數據:Hadoop入門

什麼是大數據:
(1.)大數據是指在一定時間內無法用常規軟體對其內容進行抓取,管理和處理的數據集合,簡而言之就是數據量非常大,大到無法用常規工具進行處理,如關系型資料庫,數據倉庫等。這里「大」是一個什麼量級呢?如在阿里巴巴每天處理數據達到20PB(即20971520GB).
2.大數據的特點:
(1.)體量巨大。按目前的發展趨勢來看,大數據的體量已經到達PB級甚至EB級。
(2.)大數據的數據類型多樣,以非結構化數據為主,如網路雜志,音頻,視屏,圖片,地理位置信息,交易數據,社交數據等。
(3.)價值密度低。有價值的數據僅佔到總數據的一小部分。比如一段視屏中,僅有幾秒的信息是有價值的。
(4.)產生和要求處理速度快。這是大數據區與傳統數據挖掘最顯著的特徵。
3.除此之外還有其他處理系統可以處理大數據。
Hadoop (開源)
Spark(開源)
Storm(開源)
MongoDB(開源)
IBM PureDate(商用)
Oracle Exadata(商用)
SAP Hana(商用)
Teradata AsterData(商用)
EMC GreenPlum(商用)
HP Vertica(商用)
註:這里我們只介紹Hadoop。
二:Hadoop體系結構
Hadoop來源:
Hadoop源於Google在2003到2004年公布的關於GFS(Google File System),MapRece和BigTable的三篇論文,創始人Doug Cutting。Hadoop現在是Apache基金會頂級項目,「
Hadoop」一個虛構的名字。由Doug Cutting的孩子為其黃色玩具大象所命名。
Hadoop的核心:
(1.)HDFS和MapRece是Hadoop的兩大核心。通過HDFS來實現對分布式儲存的底層支持,達到高速並行讀寫與大容量的儲存擴展。
(2.)通過MapRece實現對分布式任務進行處理程序支持,保證高速分區處理數據。
3.Hadoop子項目:
(1.)HDFS:分布式文件系統,整個Hadoop體系的基石。
(2.)MapRece/YARN:並行編程模型。YARN是第二代的MapRece框架,從Hadoop 0.23.01版本後,MapRece被重構,通常也稱為MapRece V2,老MapRece也稱為 MapRece V1。
(3.)Hive:建立在Hadoop上的數據倉庫,提供類似SQL語音的查詢方式,查詢Hadoop中的數據,
(5.)HBase:全稱Hadoop Database,Hadoop的分布式的,面向列的資料庫,來源於Google的關於BigTable的論文,主要用於隨機訪問,實時讀寫的大數據。
(6.)ZooKeeper:是一個為分布式應用所設計的協調服務,主要為用戶提供同步,配置管理,分組和命名等服務,減輕分布式應用程序所承擔的協調任務。
還有其它特別多其它項目這里不做一一解釋了。
三:安裝Hadoop運行環境
用戶創建:
(1.)創建Hadoop用戶組,輸入命令:
groupadd hadoop
(2.)創建hser用戶,輸入命令:
useradd –p hadoop hser
(3.)設置hser的密碼,輸入命令:
passwd hser
按提示輸入兩次密碼
(4.)為hser用戶添加許可權,輸入命令:
#修改許可權
chmod 777 /etc/sudoers
#編輯sudoers
Gedit /etc/sudoers
#還原默認許可權
chmod 440 /etc/sudoers
先修改sudoers 文件許可權,並在文本編輯窗口中查找到行「root ALL=(ALL)」,緊跟後面更新加行「hser ALL=(ALL) ALL」,將hser添加到sudoers。添加完成後切記還原默認許可權,否則系統將不允許使用sudo命令。
(5.)設置好後重啟虛擬機,輸入命令:
Sudo reboot
重啟後切換到hser用戶登錄
安裝JDK
(1.)下載jdk-7u67-linux-x64.rpm,並進入下載目錄。
(2.)運行安裝命令:
Sudo rpm –ivh jdk-7u67-linux-x64.rpm
完成後查看安裝路徑,輸入命令:
Rpm –qa jdk –l
記住該路徑,
(3.)配置環境變數,輸入命令:
Sudo gedit /etc/profile
打開profile文件在文件最下面加入如下內容
export JAVA_HOME=/usr/java/jdk.7.0.67
export CLASSPATH=$ JAVA_HOME/lib:$ CLASSPATH
export PATH=$ JAVA_HOME/bin:$PATH
保存後關閉文件,然後輸入命令使環境變數生效:
Source /etc/profile
(4.)驗證JDK,輸入命令:
Java –version
若出現正確的版本則安裝成功。
配置本機SSH免密碼登錄:
(1.)使用ssh-keygen 生成私鑰與公鑰文件,輸入命令:
ssh-keygen –t rsa
(2.)私鑰留在本機,公鑰發給其它主機(現在是localhost)。輸入命令:
ssh--id localhost
(3.)使用公鑰來登錄輸入命令:
ssh localhost
配置其它主機SSH免密登錄
(1.)克隆兩次。在VMware左側欄中選中虛擬機右擊,在彈出的快捷鍵菜單中選中管理---克隆命令。在克隆類型時選中「創建完整克隆」,單擊「下一步」,按鈕直到完成。
(2.)分別啟動並進入三台虛擬機,使用ifconfig查詢個主機IP地址。
(3.)修改每台主機的hostname及hosts文件。
步驟1:修改hostname,分別在各主機中輸入命令。
Sudo gedit /etc/sysconfig/network
步驟2:修改hosts文件:
sudo gedit /etc/hosts
步驟3:修改三台虛擬機的IP
第一台對應node1虛擬機的IP:192.168.1.130
第二台對應node2虛擬機的IP:192.168.1.131
第三台對應node3虛擬機的IP:192.168.1.132
(4.)由於已經在node1上生成過密鑰對,所有現在只要在node1上輸入命令:
ssh--id node2
ssh--id node3
這樣就可以將node1的公鑰發布到node2,node3。
(5.)測試SSH,在node1上輸入命令:
ssh node2
#退出登錄
exit
ssh node3
exit
四:Hadoop完全分布式安裝
1. Hadoop有三種運行方式:
(1.)單機模式:無須配置,Hadoop被視為一個非分布式模式運行的獨立Java進程
(2.)偽分布式:只有一個節點的集群,這個節點即是Master(主節點,主伺服器)也是Slave(從節點,從伺服器),可在此單節點上以不同的java進程模擬分布式中的各類節點
(3.)完全分布式:對於Hadoop,不同的系統會有不同的節點劃分方式。
2.安裝Hadoop
(1.)獲取Hadoop壓縮包hadoop-2.6.0.tar.gz,下載後可以使用VMWare Tools通過共享文件夾,或者使用Xftp工具傳到node1。進入node1 將壓縮包解壓到/home/hser目錄下,輸入命令: #進入HOME目錄即:「/home/hser」
cd ~
tar –zxvf hadoop-2.6.0.tar.gz
(2.)重命名hadoop輸入命令:
mv hadoop-2.6.0 hadoop
(3.)配置Hadoop環境變數,輸入命令:
Sudo gedit /etc/profile
將以下腳本加到profile內:
#hadoop
export HADOOP_HOME=/home/hser/hadoop
export PATH=$HADOOP_HOME/bin:$PATH
保存關閉,最後輸入命令使配置生效
source /etc/profile
註:node2,和node3都要按照以上配置進行配置。
3.配置Hadoop
(1.)hadoop-env.sh文件用於指定JDK路徑。輸入命令:
[hser@node1 ~]$ cd ~/hadoop/etc/hadoop
[hser@node1 hadoop]$ gedit hadoop-env.sh
然後增加如下內容指定jDK路徑。
export JAVA_HOME=/usr/java/jdk1.7.0_67
(2.)打開指定JDK路徑,輸入命令:
export JAVA_HOME=/usr/java/jdk1.7.0_67
(4.)core-site.xml:該文件是Hadoop全局配置,打開並在元素中增加配置屬性如下:

fs.defaultFs hdfs://node1:9000 hadoop.tmp.dir file:/home/hser/hadoop/tmp 這里給出了兩個常用的配置屬性,fs.defaultFS表示客戶端連接HDFS時,默認路徑前綴,9000是HDFS工作的埠。Hadoop.tmp.dir如不指定會保存到系統的默認臨時文件目錄/tmp中。 (5.)hdfs-site.xml:該文件是hdfs的配置。打開並在元素中增加配置屬性。 (6.)mapred-site.xml:該文件是MapRece的配置,可從模板文件mapred-site.xml.template中復制打開並在元素中增加配置。 (7.)yarn-site.xml:如果在mapred-site.xml配置了使用YARN框架,那麼YARN框架就使用此文件中的配置,打開並在元素中增加配置屬性。 (8.)復制這七個命令到node2,node3。輸入命令如下: scp –r /home/hser/hadoop/etc/hadoop/ hser@node2:/home/hser/hadoop/etc/ scp –r /home/hser/hadoop/etc/hadoop/ hser@node3:/home/hser/hadoop/etc/ 4.驗證: 下面驗證hadoop是否正確 (1.)在Master主機(node1)上格式化NameNode。輸入命令: [hser@node1 ~]$ cd ~/hadoop [hser@node1 hadoop]$ bin/hdfs namenode –format (2)關閉node1,node2 ,node3,系統防火牆並重啟虛擬機。輸入命令: service iptables stop sudo chkconfig iptables off reboot (3.)輸入以下啟動HDFS: [hser@node1 ~]$ cd ~/hadoop (4.)啟動所有 [hser@node1 hadoop]$ sbin/start-all.sh (5.)查看集群狀態: [hser@node1 hadoop]$ bin/hdfs dfsadmin –report (6.)在瀏覽器中查看hdfs運行狀態,網址:http://node1:50070 (7.)停止Hadoop。輸入命令: [hser@node1 hadoop]$ sbin/stop-all.sh 五:Hadoop相關的shell操作 (1.)在操作系統中/home/hser/file目錄下創建file1.txt,file2.txt可使用圖形界面創建。 file1.txt輸入內容: Hello World hi HADOOP file2.txt輸入內容 Hello World hi CHIAN (2.)啟動hdfs後創建目錄/input2 [hser@node1 hadoop]$ bin/hadoop fs –mkdir /input2 (3.)將file1.txt.file2.txt保存到hdfs中: [hser@node1 hadoop]$ bin/hadoop fs –put -/file/file*.txt /input2/ (4.)[hser@node1 hadoop]$ bin/hadoop fs –ls /input2

⑥ hadoop基本操作

啟動HDFS

通過可視化界面查看HDFS的運行情況

使用方法:

如果是文件,則按照如下格式返迴文件信息:
文件名 <副本數> 文件大小 修改日期 修改時間 許可權 用戶ID 組ID
如果是目錄,則返回它直接子文件的一個列表,就像在Unix中一樣。目錄返回列表的信息如下:
目錄名 <dir> 修改日期 修改時間 許可權 用戶ID 組ID
示例:

返回值:
成功返回0,失敗返回-1

使用方法:

將文件從源路徑移動到目標路徑。這個命令允許有多個源路徑,此時目標路徑必須是一個目錄。不允許在不同的文件系統間移動文件。
示例:

返回值:

成功返回0,失敗返回-1。

使用方法:

從本地文件系統中復制單個或多個源路徑到目標文件系統。也支持從標准輸入中讀取輸入寫入目標文件系統。

返回值:

成功返回0,失敗返回-1。

使用方法:

刪除指定的文件。只刪除非空目錄和文件。請參考rmr命令了解遞歸刪除。
示例:

返回值:

成功返回0,失敗返回-1。

分布式文件系統的設計思路:

添加環境變數

保存退出後, 讓.bash_profile立即生效

進入到解壓後的hadoop目錄 修改配置文件

集群

⑦ hadoop中命令經常含有-fs,-dfs,fs和dfs有什麼區別作用是什麼

You can see definitions of the two commands (hadoop fs & hadoop dfs) in
可以看一下hadoop的源代碼

$HADOOP_HOME/bin/hadoop
...elif [ "$COMMAND" = "datanode" ] ; then CLASS='org.apache.hadoop.hdfs.server.datanode.DataNode' HADOOP_OPTS="$HADOOP_OPTS $HADOOP_DATANODE_OPTS"elif [ "$COMMAND" = "fs" ] ; then CLASS=org.apache.hadoop.fs.FsShell HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS"elif [ "$COMMAND" = "dfs" ] ; then CLASS=org.apache.hadoop.fs.FsShell HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS"elif [ "$COMMAND" = "dfsadmin" ] ; then CLASS=org.apache.hadoop.hdfs.tools.DFSAdmin HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS"...
So, they are exactly the same.
所以,發現兩者是完全一樣的功能。

謝謝

⑧ hadoop面試題之HDFS

1、簡單介紹下hadoop吧?

    廣義上hadoop是指與hadoop相關的大數據生態圈。包含hive、spark、hbase等。

    狹義上hadoop指的是apache的開源框架。有三個核心組件:

----hdfs:分布式文件存儲系統

----yarn:分布式資源管理調度平台

----mr:分布式計算引擎

2、介紹下hdfs?

全稱為Hadoop Distributed File System。有三個核心組件:

namenode:有三個作用,第一是負責保存集群的元數據信息,第二是負責維護整個集群節點的正常運行。

第三是負責處理客戶端的請求。

datanode:負責實際保存數據。實際執行數據塊的讀寫操作。

secondarynamenode:輔助namenode進行元數據的管理。不是namenode的備份。

3、namenode的工作機制?

    namenode在內存中保存著整個內存系統的名稱空間和文件數據塊的地址映射。整個hdfs可存儲的文件數受限於namenode的內存大小。所以hdfs不適合大量小文件的存儲。

---namenode有三種元數據存儲方式來管理元數據:

    》內存元數據:內存中保存了完整的元數據

    》保存在磁碟上的元數據鏡像文件(fsimage):該文件時hdfs存在磁碟中的元數據檢查點,裡面保存的是最後一次檢查點之前的hdfs文件系統中所有目錄和文件的序列化信息。

    》數據操作日誌文件(edits):用於銜接內存meta data和持久化元數據鏡像fsimage之間的操作日誌文件。保存了自最後一次檢查點之後所有針對hdfs文件系統的操作。如對文件的增刪改查。

4、如何查看元數據信息?

    因為edits和fsimage文件是經過序列化的,所以不能直接查看。hadoop2.0以上提供了查看兩種文件的工具。

----命令:hdfs oiv 可以將fsimage文件轉換成其他格式,如xml和文本文件。-i 表示輸入fsimage文件。-o 輸出文件路徑,-p 指定輸出文件

                hdfs oev可以查看edits文件。同理需要指定相關參數。

詳情查看: https://www.imooc.com/article/79705

4、datanode的工作機制?

    1)以數據塊的形式存儲hdfs文件

    2)datanode響應客戶端的讀寫請求

    3)周期性的向namenode匯報心跳信息、數據塊信息、緩存數據塊信息

5、secondary namenode工作機制?

    當發生checkpoint機制時會觸發second namenode進行工作。checkpoint:

    新的edists文件不會立即和fsimage文件合並,是在edits文件大小超過(默認)64m,或者時間超過(默認)1小時,會觸發checkpoint操作。當checkpoint時,namenode會新建一個edits.new的文件,此時second namenode將文件fsimage文件和edits文件(http get)到本地,然後載入到內存中進行合並,完成的文件名稱為fsimage.ckpt。最後 second namenode將該文件(http post)到namenode,然後edits.new和fsimage.ckpt文件轉換為fsimage和edits。

6、hdfs的文件副本機制?

    所有的文件都是以塊的形式保存到hdfs中。塊的大小默認為128m。在hdfs-site文件中進行指定。

    動態副本創建策略:默認副本數是3,可以在上傳文件時,顯式設定replication。也可以通過指令修改文件的副本數 hadoop fs -setrep -R 1

7、為實現高可用,hdfs採用了哪些策略?

    副本機制、機架感知、心跳機制、安全模式、校驗和、回收站、元數據保護、快照機制(具體介紹導航- https://www.jianshu.com/writer#/notebooks/44567747/notes/66453316 )

8、hdfs的存儲過程?

    ①client向hdfs發起寫請求,通過RPC與namenode建立通訊。namenode檢查文件是否存在等信息,返回是否可以存儲。

    ②client將文件切割為一個個block塊,client申請存儲第一塊block。namenode返回可以存儲這個block塊的datanode的地址,假設為ABC。

    ③A到B到C逐級構建pipeline。client向A上傳第一個packet,默認為64k。A收到一個packet後會將packet傳給B,再傳給C。pipeline反方向返回ack信息。最終由第一個節點A將pipelineack發送給client

    ④一個block完成之後,再進行下一個block的存儲過程。

9、hdfs的讀過程?

10、hdfs的垃圾桶機制?

    hdfs的垃圾桶機制默認是關閉的,需要手動開啟。hdfs刪除的文件不會立刻就刪除,而是在設定的時間後進行刪除。

11、hdfs的擴容和縮容



12、

⑨ hadoop常用shell命令怎麼用

一、常用的hadoop命令
1、hadoop的fs命令
#查看hadoop所有的fs命令

1

hadoop fs

#上傳文件(put與FromLocal都是上傳命令)

1
2

hadoop fs -put jdk-7u55-linux-i586.tar.gz hdfs://hucc01:9000/jdk
hadoop fs -FromLocal jdk-7u55-linux-i586.tar.gz hdfs://hucc01:9000/jdk

#下載命令(get與ToLocal都是下載命令)

1
2

hadoop fs -get hdfs://hucc01:9000/jdk jdk1.7
hadoop fs -ToLocal hdfs://hucc01:9000/jdk jdk1.7

#將本地一個或者多個文件追加到hdfs文件中(appendToFile)

1

hadoop fs -appendToFile install.log /words

#查詢hdfs的所有文件(ls)

1

hadoop fs -ls /

#幫助命令(help)

1

hadoop fs -help fs

#查看hdfs文件的內容(cat和text)

1
2

hadoop fs -cat /words
hadoop fs -text /words

#刪除hdfs文件(rm)

1

hadoop fs -rm -r /words

#統計hdfs文件和文件夾的數量(count)

1

hadoop fs -count -r /

#合並hdfs某個文件夾的文件,並且下載到本地(getmerge)

1

hadoop fs -getmerge / merge

#將本地文件剪切到hdfs,相當於對本地文件上傳後再刪除(moveFormLocal)

1

hadoop fs -moveFromLocal words /

#查看當前文件系統的使用狀態(df)

1

hadoop fs -df

二、常用的hdfs命令(這個用的比較多)
用法跟hadoop命令一樣,推薦2.0之後使用hdfs命令

1

hdfs dfs

⑩ 把hadoop/bin添加到path下 以後隨便什麼地方都可以直接執行start-all,sh具體

設置臨時環境變數(只在單個終端 內起作用)
1、首先設置HADOOPHOME環境變數,執行命令:export HADOOPHOME=/../hadoop/hadoop-2.5.2/bin (後面參數為Hadoop安裝位置下的bin目錄)---刪除環境變數的命令為 unset HADOOPHOME
2、把HADOOPHOME添加到PATH變數中,執行命令:PATH=$PATH:$HADOOPHOME(當然可以省略第一步,直接把路徑添加到PATH中也可以)至此可以在任何位置操作Hadoop的命令了
設置永久環境變數
通過修改 /etc/profile 文件來修改環境變數
修改位置如下:
# Path manipulation
if [ "$EUID" = "0" ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
else
pathmunge /usr/local/sbin after
pathmunge /usr/sbin after
pathmunge /sbin after
pathmunge /home/hadoop/hadoop-2.5.2/bin
fi

其中 pathmunge /home/hadoop/hadoop-2.5.2/bin為要添加的,
然後執行命令:source /etc/profile 使其生效
執行命令:echo $PATH 查看就會多出/home/hadoop/hadoop-2.5.2/bin這個路徑,就可以在任意地址下執行Hadoop的命令了

閱讀全文

與hadoop文件操作命令相關的資料

熱點內容
截圖怎麼保存文件夾然後壓縮 瀏覽:4
幻影伺服器怎麼樣 瀏覽:27
具體哪些廣東公司招程序員 瀏覽:867
嵌入式編譯器教程 瀏覽:302
ssl數據加密傳輸 瀏覽:86
51單片機定時器方式2 瀏覽:330
命令行查看開機時間 瀏覽:812
python微博復雜網路分析 瀏覽:550
rf3148編程器 瀏覽:505
浙江標准網路伺服器機櫃雲主機 瀏覽:587
設置網路的伺服器地址 瀏覽:600
java圖形界面設計 瀏覽:751
純前端項目怎麼部署到伺服器 瀏覽:538
瓜子臉程序員 瀏覽:505
如何保證伺服器優質 瀏覽:94
小微信aPP怎麼一下找不到了 瀏覽:299
演算法纂要學術價值 瀏覽:975
程序員你好是什麼意思 瀏覽:803
倩女幽魂老伺服器如何玩 瀏覽:563
電子鍾單片機課程設計實驗報告 瀏覽:1001