1.第一點:如何理解hdfs分布式文件系統,每臺機器出一塊磁盤,湊成一個大的硬盤,大的硬盤的容量來自各個服務器的硬盤容量之和。
你出5毛,我出5毛,大家湊成1塊。
2. HDFS 是 Hadoop Distribute File System 的簡稱,意為:Hadoop 分布式文件系統。是 Hadoop 核心組件之一,作為最底層的分布式存儲服務而存在。
3.hdfs的特性:
(1)master/slave架構:namenode是我們的主節點,datanode是我們的從節點
??????????????????????????????????????????????????????? ? namenode主要管理元數據信息? datanode主要存儲各種數據
(2)分塊存儲
(3)名字空間(NameSpace)
(4)HDFS 會給客戶端提供一個統一的抽象目錄樹,客戶端通過路徑來訪問文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data。
(5)Namenode 元數據管理;
(6)Datanode 數據存儲;
(7)副本機制;
(8)一次寫入,多次讀出:頻繁的寫入會造成元數據的頻繁的更新改變,比較麻煩。
3. hdfs常用的操作命令:
hdfs? dfs?? -ls? /? 查看根路徑下面的文件或者文件夾
hdfs dfs? -mkdir? -p?? /xx/xxx? 在hdfs上面遞歸的創建文件夾
hdfs? dfs -moveFromLocal? sourceDir(本地磁盤的文件或者文件夾的路徑)?? destDir(hdfs的路徑) (剪切)
hdfs? dfs? -mv? hdfsSourceDir?? hdfsDestDir(剪切,從hdfs上的一個位置移動到另一個位置)
hdfs? dfs -put? localDir? hdfsDir?? 將本地文件系統的文件或者文件夾放到hdfs上面去 (復制)
Usage: hdfs dfs -rm [-f] [-r|-R遞歸] [-skipTrash跳過垃圾桶永久刪除] URI [URI ...] 刪除hdfs上的一個或多個文件或文件夾。
hdfs dfs -tail [-f] URI? (Displays last kilobyte of the file to stdout)
hdfs dfs -appendToFile <localsrc> ... <dst> 將本地系統的一個或多個文件追加到hdfs的一個文件中。
hdfs? dfs -cat? hdfsFiles 查看一個或多個hdfs的文件內容
hdfs? dfs? -cp?? hdfsSourceDIr?? hdfsDestDir?? 拷貝文件或者文件夾,從hdfs上的一個位置拷貝到另一個位置
hdfs的權限管理兩個命令:
hdfs? dfs? -chmod -R? 777? /xxx
hdfs? dfs? -chown -R hadoop:hadoop? /xxx
hdfs dfs -expunge 清空回收站?
?
2.hdfs高級命令使用:主要就是用于限制某個路徑下面的文件的個數,或者限制某個路徑下面文件的大小。
hdfs dfs -mkdir -p /user/root/lisi???? #創建hdfs文件夾
hdfs dfsadmin -setQuota 2 lisi????? # 給該文件夾下面設置最多上傳兩個文件,上傳文件,發現只能上傳一個文件
hdfs dfsadmin -clrQuota /user/root/lisi??? # 清除文件數量限制
hdfs dfsadmin -setSpaceQuota 4k /user/root/lisi?? # 限制空間大小4KB
hdfs dfs -put? /export/softwares/zookeeper-3.4.5-cdh5.14.0.tar.gz /user/root/lisi
hdfs dfsadmin -clrSpaceQuota /user/root/lisi?? #清除空間限額
hdfs dfs -count -q -h /user/root/lisi 查看hdfs文件限額數量
注意:hdfs dfs -count -q -h /user/root/lisi 可以簡寫為hdfs dfs -count -q -h lisi 這里使用了相對路徑,
當前登錄用戶是root,所以當前路徑是/user/root/
?
3.? hdfs的安全模式:文件系統只接受讀數據請求,而不接受刪除、修改等變更請求。hdfs集群剛啟動的時候,默認30S鐘的時間是出于安全期的,去檢測datanode了,只有過了30S之后,集群脫離了安全期,然后才可以對集群進行操作
hdfs? dfsadmin? -safemode [ enter | leave | get? ]
?
4.? hdfs基準測試(壓力測試)
測試寫入速度:
hadoop jar /export/servers/hadoop-2.6.0-cdh5.14.0/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.6.0-cdh5.14.0.jar TestDFSIO? -write -nrFiles 10 -fileSize 10MB
完成之后查看寫入速度結果,寫入速度一般在30M/S左右超不多:
hdfs dfs -text /benchmarks/TestDFSIO/io_write/part-00000
測試讀取速度:
hadoop jar /export/servers/hadoop-2.6.0-cdh5.14.0/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.6.0-cdh5.14.0.jar TestDFSIO -read -nrFiles 10 -fileSize 10MB
查看讀取結果,實際工作當中通過MR讀取速度大概在100M/s左右:
hdfs dfs -text /benchmarks/TestDFSIO/io_read/part-00000
清除測試數據:
hadoop jar /export/servers/hadoop-2.6.0-cdh5.14.0/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.6.0-cdh5.14.0.jar TestDFSIO -clean
注:在執行命令時的當前路徑下,會生成一個測試報告文件:-rw-r--r-- 1 root root ?303 May 23 22:06 TestDFSIO_results.log