大數(shù)據(jù)技術(shù)原理與操作應用 第3章 HDFS分布式文件系統(tǒng)_第1頁
大數(shù)據(jù)技術(shù)原理與操作應用 第3章 HDFS分布式文件系統(tǒng)_第2頁
大數(shù)據(jù)技術(shù)原理與操作應用 第3章 HDFS分布式文件系統(tǒng)_第3頁
大數(shù)據(jù)技術(shù)原理與操作應用 第3章 HDFS分布式文件系統(tǒng)_第4頁
大數(shù)據(jù)技術(shù)原理與操作應用 第3章 HDFS分布式文件系統(tǒng)_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第3章HDFS分布式文件系統(tǒng)

·Hadoop的文件系統(tǒng)·HDFS的簡介·HDFS的框架及原理·HDFS的shell操作1·HDFS的讀寫數(shù)據(jù)流程·HDFS的JavaAPI操作2?學習目標了解掌握掌握掌握了解HDFS的概念與特性12掌握HDFS的特點4掌握HDFS的架構(gòu)與原理3掌握HDFS的Shell和JavaAPI操作本章通過對文件系統(tǒng)的簡介、HDFS的設計特點、HDFS的架構(gòu)與原理、HDFS的shell操作、HDFS的JavaAPI操作及HDFS的讀寫數(shù)據(jù)流程進行詳細講解。章節(jié)概要HDFS

是一種將系統(tǒng)數(shù)據(jù)存儲在集群中多個節(jié)點或機器上,并且這些數(shù)據(jù)允許多個用戶訪問的文件系統(tǒng)。分布式文件系統(tǒng)解決了數(shù)據(jù)集的大小超過一臺獨立物理計算機的存儲能力的問題,龐大的數(shù)據(jù)集被存放在多臺機器上,分布式文件系統(tǒng)可以組織這些在不同機器上的數(shù)據(jù)通過網(wǎng)絡對數(shù)據(jù)進行讀寫,這使得人們感覺所有的數(shù)據(jù)都存儲在一臺機器上。

3.1Hadoop的文件系統(tǒng)文件系統(tǒng)的介紹Hadoop整合了很多的文件系統(tǒng),而HDFS只是Hadoop文件系統(tǒng)中比較優(yōu)秀的一種,Hadoop可以集成除了HDFS的其他文件系統(tǒng),這點也充分體現(xiàn)出Hadoop的可擴展性。Hadoop定義了一個文件系統(tǒng)的抽象類,在Java中這個抽象類是“org.apache.hadoop.fs.FileSystem”,一個文件系統(tǒng)只有實現(xiàn)了這個抽象類的方法才可以成為支持Hadoop的文件系統(tǒng)。

3.1Hadoop的文件系統(tǒng)文件系統(tǒng)的介紹文件系統(tǒng)URI方案Java實現(xiàn)(org.apache.hadoop)定義LocalFileFs.localFileSystem支持有客戶端校驗和本地文件系統(tǒng)。帶有校驗和的本地系統(tǒng)文件在fs.RawLocalFileSystem中實現(xiàn)HDFSHdfsHdfs.DistributionFileSystemHadoop的分布式文件系統(tǒng)WebHDFSWebhdfsHdfs.web.WebHdfsFileSystem使用HTTP方式讀寫HDFS數(shù)據(jù)的文件系統(tǒng)SecureWebHDFSSwebhdfsHdfs.web.SWebHdfsFileSystemWebHDFS的HTTPS傳輸方式ViewViewfsViewfs.ViewFileSystem一種Hadoop文件系統(tǒng)的掛載表,通常被用來創(chuàng)建namenode的掛載點HFTPHftphdfs.HftpFileSystem支持通過HTTP方式以只讀的方式訪問HDFS,distcp經(jīng)常用在不同的HDFS集群間復制數(shù)據(jù)HSFTPHsftphdfs.HsftpFileSystem支持通過HTTPS方式以只讀的方式訪問HDFSHARHarfs.HarFileSystem構(gòu)建在Hadoop文件系統(tǒng)之上,對文件進行歸檔。Hadoop歸檔文件主要用來減少NameNode的內(nèi)存使用FTPftpfs.ftp.FtpFileSystem由FTP服務器支持的文件系統(tǒng)S3(本地)s3nfs.s3native.NativeS3FileSystem基于AmazonS3的文件系統(tǒng)S3(基于塊)s3fs.s3.NativeS3FileSystem基于AmazonS3的文件系統(tǒng),以塊格式存儲解決了S3的5GB文件大小的限制SwiftSwiftfs.swift.snative.SwiftNativeFileSystem對接Openstack的swift服務的文件系統(tǒng)

3.1Hadoop的文件系統(tǒng)Hadoop文件系統(tǒng)對外接口Hadoop提供了很多文件系統(tǒng)的訪問接口,由于Hadoop是用Java進行開發(fā)的,所以可以通過調(diào)用JavaAPI實現(xiàn)與Hadoop文件系統(tǒng)的交互操作。除此之外,使用文件系統(tǒng)的方法還有:命令行、HTTP、C語言API、NFS、FUSER等方式。HTTP調(diào)用JAVA接口C語言庫WebDAVFuseThrift

3.2HDFS的簡介HDFS的設計特點Hadoop分布式文件系統(tǒng)(HDFS)是一種可以在低成本計算機硬件上運行的高容錯性分布式文件系統(tǒng)。HDFS提供對應用程序數(shù)據(jù)的高吞吐量訪問,并且適用于具有大數(shù)據(jù)集的應用程序。大數(shù)據(jù)處理流式數(shù)據(jù)訪問高容錯性檢測和快速應對硬件故障

3.2HDFS的簡介HDFS的局限性HDFS雖然有著大數(shù)據(jù)處理、流式數(shù)據(jù)訪問、高容錯性、檢測和快速應對硬件故障等優(yōu)勢,但是,現(xiàn)在的HDFS在處理某些特定問題時不但沒有優(yōu)勢,反而會存在一定的局限性,因此,了解HDFS的優(yōu)勢和劣勢對以后使用HDFS解決特定問題很有幫助。不適合大量的小文件存儲不適合低延遲數(shù)據(jù)訪問不支持多用戶的并行寫入和文件修改

3.3HDFS的架構(gòu)及原理HDFS的架構(gòu)一個HDFS的分布式集群由單個NameNode、多個DataNode和Client組成。NameNode是一個中心服務器,也稱為主節(jié)點,它主要用來管理HDFS的名稱空間、處理客戶端讀寫請求、管理數(shù)據(jù)塊映射信息、配置副本策略等。DataNode是數(shù)據(jù)節(jié)點,也稱為從節(jié)點,它主要負責存儲實際的數(shù)據(jù)塊和執(zhí)行數(shù)據(jù)塊的讀寫操作,一個文件被分解成一個或多個數(shù)據(jù)塊,這些塊數(shù)據(jù)被存儲在一組DataNode上。

3.3HDFS的架構(gòu)及原理HDFS的架構(gòu)

3.3HDFS的架構(gòu)及原理HDFS的架構(gòu)——數(shù)據(jù)塊數(shù)據(jù)塊是HDFS中每個磁盤都有的默認存儲最小單位,數(shù)據(jù)塊是文件存儲處理的邏輯單元,這種概念與Linux文件系統(tǒng)中的磁盤塊類似。HDFS上的文件系統(tǒng)被劃分為多個塊作為獨立的存儲單元,其大小可以已通過Hadoop的配置參數(shù)“dfs.blocksize”來規(guī)定,在Hadoop2.x版本中Block的默認大小被定義為128MB,而在老版本中一般大小為64MB。

3.3HDFS的架構(gòu)及原理HDFS的架構(gòu)——數(shù)據(jù)塊數(shù)據(jù)塊信息可以通過Hadoop的Web界面查看到,存儲在HDFS的文件名稱為“helloworld.txt”,且該文件存儲在slave2和slave1兩個DataNode上,數(shù)據(jù)塊池ID為“BP-1743969542-00-1578923091266”,該存儲塊的BlockID為“1073741993”,可以在節(jié)點slave1和節(jié)點slave2上找到該文件的數(shù)據(jù)塊,并查看其內(nèi)容。

3.3HDFS的架構(gòu)及原理HDFS的架構(gòu)——副本存放策略為了保證數(shù)據(jù)節(jié)點或機架出現(xiàn)故障后數(shù)據(jù)的完整性,每個塊都會被復制到多臺DataNode上,默認復制三份,并且分布在兩個機架內(nèi)的三個節(jié)點上,當一個DataNode出現(xiàn)故障后,因為A數(shù)據(jù)塊存儲在兩個機架上且有三個副本,所以可以保證數(shù)據(jù)不丟失且正常運行。

3.3HDFS的架構(gòu)及原理HDFS的架構(gòu)——副本存放策略副本存放原則:①Block副本放在與Client所在的Node里(如果所在Node太忙,也會隨機選擇)。②副本放置在與第一個節(jié)點不同的機架中的Node中。③副本與第二個在同一個機架,隨機放在不同的Node中。

3.3HDFS的架構(gòu)及原理HDFS的架構(gòu)——NameNodeNameNode是分布式系統(tǒng)中的主節(jié)點,也稱為中心服務器,它是HDFS的主從結(jié)構(gòu)中的中心樞紐,存儲著元數(shù)據(jù)等重要信息。元數(shù)據(jù)包括兩個部分:文件與數(shù)據(jù)塊的映射表、數(shù)據(jù)塊與數(shù)據(jù)節(jié)點的映射表。NameNode的四個功能:管理HDFS的名稱空間、配置副本策略、管理數(shù)據(jù)塊的映射信息、處理客戶端讀寫請求。

3.3HDFS的架構(gòu)及原理HDFS的架構(gòu)——NameNodeNameNode將元數(shù)據(jù)保存到磁盤上的流程,如下圖所示。該元數(shù)據(jù)包括兩個文件,即Fsimage和Editlogs。Fsimage是在NameNode啟動時對整個文件系統(tǒng)的快照,Editlogs是在NameNode啟動后對文件系統(tǒng)的改動序列。只有在NameNode重啟時,Editlogs才會合并到Fsimage文件中,從而得到一個文件系統(tǒng)的最新快照。

3.3HDFS的架構(gòu)及原理HDFS的架構(gòu)——DataNodeDataNode

是分布式系統(tǒng)中的從節(jié)點,也稱為slaver。它是HDFS中的工作節(jié)點,用于存放數(shù)據(jù)塊Block,一個集群中可以一個NameNode和多個DataNode。DataNode

通常以機架的形式組織,機架之間通過交換機將整個系統(tǒng)連接起來。DataNode

的功能有兩個:存儲實際的數(shù)據(jù)塊和執(zhí)行數(shù)據(jù)塊的讀寫操作。

3.3HDFS的架構(gòu)及原理HDFS的架構(gòu)——SecondaryNameNode只有在NameNode重啟時,Editlogs才會合并到Fsimage文件中,從而得到一個文件系統(tǒng)的最新快照。但是,在產(chǎn)品集群中NameNode是很少重啟的,而在運行過程中Editlogs就會變得越來越大,使得其很難管理。SencondaryNameNode

就是用來解決這種問題的,它的主要作用是合并NameNode的editlogs到Fsimage文件中,從而解決Editlogs越來越大的問題。

3.3HDFS的架構(gòu)及原理HDFS的架構(gòu)——SecondaryNameNodeSecondaryNameNode

的工作流程如下:①SecondaryNameNode

定時到NameNode去獲取Editlogs,并更新到Fsimage上。②一旦它有了新的Fsimage文件,它將其拷貝回NameNode中。③NameNode在下次重啟時會使用這個新的Fsimage文件,從而減少重啟的時間。

3.4HDFS的Shell操作HDFS的Shell操作HDFS

是一種能夠?qū)Υ罅课募M行存儲和讀取的分布式文件系統(tǒng),HDFS

將這些文件分成數(shù)據(jù)塊以后再將其副本存儲到不同的DataNode中。Hadoop提供了很多對外操作文件的方式,其中包括Web方式、API方式、Shell

方式等。本節(jié)主要介紹HDFS分布式文件系統(tǒng)的Shell操作,Hadoop支持很多Shell

命令,比如:“hadoopversion、hadoopjar、hadoopchecknative、hadoopfs”等。

3.4HDFS的Shell操作Hadoop相關(guān)命令Hadoop使用方法:

3.4HDFS的Shell操作查看Hadoop版本使用命令“hadoopversion”查看Hadoop運行版本,可以看到使用的是Hadoop2.7.7版本,正在運行的Jar包的位置等信息。

3.4HDFS的Shell操作檢查Hadoop本地代碼可用性使用命令“hadoopchecknative-a”查看Hadoop本地代碼的可用性,在默認情況下,此命令只檢查libhadoop的可用性,也可以使用該命令檢查環(huán)境的安裝情況。除此之外,也可以使用“hadoopchecknative-h”查看命令的具體解釋情況。

3.4HDFS的Shell操作執(zhí)行Jar包運行命令“hadoopjarhadoop-mapreduce-examples-2.7.7.jarpi1010”通過啟動10個“map”和10個“reduce”任務求pi值。

3.4HDFS的Shell操作修改與查看Log日志級別使用“hadoopdaemonlog-getlevel”獲取日志級別。使用“hadoopdaemonlog-setlevel”設置日志級別。可以設置的節(jié)點包括HDFS、NameNode、SecondaryNameNode、DataNode、JournalNode、YARN、ResourceManager、NodeManager

3.4HDFS的Shell操作修改與查看Log日志級別查看NameNode的Log日志級別使用命令“hadoopdaemonlog-getlevel:50070node.NameNode”。

3.4HDFS的Shell操作修改與查看Log日志級別使用命令“hadoopdaemonlog-setlevel:50070node.NameNodeWARN”將NameNode的日志級別從“INFO“改為“WARN”級別。

3.4HDFS的Shell操作集群間拷貝DistCPDistCP

是ApacheHadoop上下文中的DistributedCopy(分布式拷貝)的縮寫。它是一個用于大規(guī)模集群內(nèi)部和集群之間拷貝的工具。DisctCP使用MapReduce實現(xiàn)文件分發(fā)、數(shù)據(jù)錯誤處理與恢復、報告生成等功能。由于其MapReduce的使用,使得DisctCP可以在集群中的多個可用節(jié)點上進行操作,從而提高效率。上述命令會將nn1集群的“/source”目錄下的所有文件或目錄展開并存儲到一個臨時文件中,這些文件內(nèi)容的拷貝工作被分配給多個Map任務,然后每個NodeManager分別執(zhí)行從nn1到nn2的拷貝操作。

3.4HDFS的Shell操作Hadoop文件處理命令Hadoop對于文件處理包括很多種類型的命令,比如hadoopfs、hadoopdfs和hdfsdfs都是HDFS最常用的Shell命令,用來查看HDFS文件系統(tǒng)的目錄結(jié)構(gòu)、上傳和下載數(shù)據(jù)、創(chuàng)建文件等。這三個命令既有聯(lián)系有又區(qū)別:①hadoopfs:適用于任何不同的文件系統(tǒng),比如本地文件系統(tǒng)和HDFS文件系統(tǒng)。②hadoopdfs:只能適用于HDFS文件系統(tǒng)。③hdfsdfs:與“hadoopdfs”命令的作用一樣,也只能適用于HDFS文件系統(tǒng)。

3.4HDFS的Shell操作Hadoop文件處理命令Hadoopfs使用方法

3.4HDFS的Shell操作Hadoop文件處理命令——幫助參數(shù)查看命令“rm”的使用方法,輸入“hadoopfs-helprm”。除此之外,該命令可以查看很多其他的命令,包括mkdir、put、get等。

3.4HDFS的Shell操作Hadoop文件處理命令——顯示目錄查看HDFS中根路徑下的文件目錄,輸入命令“hadoopfs-ls/”。除此之外,還可以使用命令“hadoopfs-lsr”遞歸列出匹配Pattern的文件信息,類似ls,只不過遞歸列出所有子目錄信息。

3.4HDFS的Shell操作Hadoop文件處理命令——創(chuàng)建目錄創(chuàng)建文件夾目錄“/sanguo/shuguo”,輸入命令“hadoopfs-mkdir-p/sanguo/shuguo”。

3.4HDFS的Shell操作Hadoop文件處理命令——刪除目錄刪除文件夾“/test”,輸入命令“hadoopfs-rm/test”。使用命令“hadoopfs-rmr[skipTrash]<src>”,可以遞歸刪除所有的文件和目錄,等價于UNIX下的“rm-rf<src>”。

3.4HDFS的Shell操作Hadoop文件處理命令——剪切粘貼在/tmp目錄下,創(chuàng)建“helloworld.txt”文件;然后將該文件剪切到HDFS中已經(jīng)創(chuàng)建好的“/sanguo/shuguo”目錄下,使用命令“hadoopfs-moveFromLocal/tmp/helloworld.txt/sanguo/shuguo”。

3.4HDFS的Shell操作Hadoop文件處理命令——剪切粘貼在/tmp目錄下,創(chuàng)建“helloworld.txt”文件;然后將該文件剪切到HDFS中已經(jīng)創(chuàng)建好的“/sanguo/shuguo”目錄下,使用命令“hadoopfs-moveFromLocal/tmp/helloworld.txt/sanguo/shuguo”。

3.4HDFS的Shell操作Hadoop文件處理命令——粘貼將剛才保存在HDFS中的“helloworld.txt”文件復制粘貼到“/tmp”目錄下,可以使用命令“hadoopfs-copyToLocal/sanguo/shuguo/helloworld.txt/tmp。與copyToLocal相同的參數(shù)還有“-get”,可以使用命令“hadoopfs-get/sanguo/shuguo/helloworld.txt/tmp/test.txt”,將HDFS文件拷貝到本地“/tmp”目錄下,并重命名為“test.txt”。

3.4HDFS的Shell操作Hadoop文件處理命令——查看查看保存在HDFS中的文本文件“helloworld.txt”的內(nèi)容,可以使用命令“hadoopfs-cat/sanguo/shuguo/helloworld.txt”。

3.4HDFS的Shell操作Hadoop文件處理命令——追加appendToFile是將文本追加到HDFS文本文件后的命令,首先需要在本地目錄下創(chuàng)建“aaa.txt”文本文件內(nèi)容為“apache”,然后將該文本文件的內(nèi)容追加到已經(jīng)在HDFS文件“helloworld.txt”后面,使用命令“hadoopfs-appendToFile/tmp/aaa.txt/sanguo/shuguo/helloworld.txt”,完成功能。

3.4HDFS的Shell操作Hadoop文件處理命令——副本數(shù)HDFS是分布式存儲系統(tǒng),存儲在HDFS的文件為了保證其數(shù)據(jù)不丟失,一般該文件會存在副本,且這些副本會存儲在同一個DataNode或不同的DataNode或不同的機架,而setrep就是將存儲在HDFS中文本的副本數(shù)量進行修改的命令,因此,可以使用命令“hadoopfs–setrep10/sanguo/shuguo/test.txt”,修改副本的保存數(shù)量。

3.4HDFS的Shell操作Hadoop文件處理命令——系統(tǒng)空間“hadoopfs-du<path>”命令的含義是:列出指定的文件系統(tǒng)空間總量(B),等價于unix下的針對目錄命令“du-sb<path>/?”和針對文件命令“du-b<path>”,輸出格式如“name(fullpath)size(inbytes)”。下面使用命令“hadoopfs-du/”,列出HDFS中根目錄下的占

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論