版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第4章
Hadoop分布式文件系統(tǒng)
01Hadoop簡介02HDFS體系結構目錄Contents03HDFS初探04HDFS常用CLI命令05利用pyhdfs實現(xiàn)HDFS的文件訪問06Pyhdfs應用實戰(zhàn)Hadoop簡介011HadoopApacheHadoop項目是Apache軟件基金會下的一個頂級項目,致力于可靠、可擴展、分布式計算開發(fā)的開源軟件。ApacheHadoop系統(tǒng)是一個允許使用簡單的編程模型實現(xiàn)跨計算機集群的大型數(shù)據(jù)集的分布式處理框架,它可以從單個服務器擴展到數(shù)千臺機器,且每臺機器都提供本地計算和存儲。1Hadoop—發(fā)展歷史1Hadoop—優(yōu)勢快速:數(shù)據(jù)分布在集群中的各個節(jié)點,由各節(jié)點分別進行處理,這有助于利用集群上各節(jié)點的計算能力更快地進行數(shù)據(jù)檢索和處理。可伸縮性:Hadoop的擴展非常方便,只要在集群中添加節(jié)點,就可以擴展Hadoop集群。經濟高效:Hadoop是開源的,使用普通硬件來存儲數(shù)據(jù),因此與傳統(tǒng)的關系數(shù)據(jù)庫管理系統(tǒng)相比,它具有成本效益優(yōu)勢。故障恢復能力:HDFS具有在網絡上復制數(shù)據(jù)的特性,如果一個節(jié)點出現(xiàn)故障或發(fā)生網絡故障,Hadoop可以從其他DataNode中獲取另一個數(shù)據(jù)副本并使用它。通常情況下,數(shù)據(jù)被重復復制、存儲三次,副本數(shù)量是可配置的。1Hadoop—生態(tài)Hadoop生態(tài)系統(tǒng)是一個提供各種服務來解決大數(shù)據(jù)問題的平臺或套件,它包括Apache項目和各種商業(yè)工具和解決方案。除了Hadoop的四個核心組件(HDFS、MapReduce、YARN和HadoopCommon)外,大多數(shù)工具和解決方案都用于補充或支持這些主要組件。1Hadoop—生態(tài)系統(tǒng)1Hadoop—生態(tài)系統(tǒng)組件HDFS:Hadoop分布式文件系統(tǒng),Hadoop核心組件之一;Yarn:分布式資源管理與調度器,Hadoop核心組件之一;MapReduce:基于編程的數(shù)據(jù)處理,Hadoop核心組件之一;Zookeeper:分布式一致性服務組件,提供分布式協(xié)調一致性服務;HBase:一種非關系型(NoSQL)數(shù)據(jù)庫;HIVE:一種基于Hadoop的數(shù)據(jù)倉庫系統(tǒng);Spark:一種流式數(shù)據(jù)處理計算框架;PIG:一種基于查詢的數(shù)據(jù)處理服務;Mahout,SparkMLLib:機器學習算法庫;Solar,Lucene:基于Hadoop框架的搜索和索引;1Hadoop—核心組件1Hadoop—核心組件1.HDFS(Hadoop分布式文件系統(tǒng))Hadoop系統(tǒng)最核心的組件。HDFS可以支持數(shù)據(jù)的分布式存儲、訪問,使得由分布式異構計算機組成的網絡集群可以提供更加強大的服務。HDFS將文件分成塊存儲在分布式體系結構的節(jié)點中,并通過冗余存儲的方式提高整個文件系統(tǒng)的容錯。HDFS還允許連接到其他核心組件,如MapReduce。1Hadoop—核心組件2.MapReduceHadoop的另一個核心組件,它結合了兩個獨立的功能:Map和Reduce,并使用鍵值對實現(xiàn)數(shù)據(jù)并行計算的框架。Map任務接受輸入數(shù)據(jù)并將其轉換為可以在鍵值對中計算的數(shù)據(jù)集,Map任務的輸出作為Reduce的輸入,Reduce運算后輸出得到期望的結果。從本質上看,Map允許一個平臺以一種通用格式為進一步進行數(shù)據(jù)分析提供數(shù)據(jù)支持;Reduce則將可用的映射關系數(shù)據(jù)約簡為一組定義良好的統(tǒng)計值。1Hadoop—核心組件3.YarnYarn是Hadoop2中引入的核心組件,它是管理網絡集群中可用資源的系統(tǒng)(資源管理器),并為系統(tǒng)上的每個大數(shù)據(jù)需求調度處理任務,以提出一個智能調度方案。4.HadoopCommonHadoopCommon由其他Hadoop模塊調用,用于支持Hadoop的運行。HadoopCommon帶來的應用、工具使得任何計算機都可以成為Hadoop網絡的一部分,從而消除了可能在任何給定時間連接到網絡的不同硬件節(jié)點之間的差異。1Hadoop—Hadoop1.0集群組成Hadoop1.0集群由一個主節(jié)點(master)和多個從節(jié)點(slave)組成:主節(jié)點包括JobTracker、TaskTracker、NameNode和DataNode;從節(jié)點包括DataNode和TaskTrackerJobTracker1Hadoop—Hadoop1.0集群組成NameNodeNameNode常被稱為名字節(jié)點、元數(shù)據(jù)節(jié)點、主節(jié)點等,它是HDFS集群中的主服務器;Hadoop集群通常還會設立備用NameNode,稱為“SecondaryNameNode”,一旦NameNode不能使用,可以用備用NameNode提供服務支持;NameNode通過執(zhí)行諸如打開、重命名和關閉文件之類的操作來管理文件系統(tǒng)命名空間;NameNode統(tǒng)一提供系統(tǒng)的對外接口,簡化了整個系統(tǒng)的體系結構和使用模式。
1Hadoop—Hadoop1.0集群組成DataNodeHDFS集群可以包含多個DataNode;每個DataNode包含多個數(shù)據(jù)塊,這些數(shù)據(jù)塊用于存儲數(shù)據(jù);DataNode負責根據(jù)文件系統(tǒng)客戶端的請求讀取和寫入數(shù)據(jù);DataNode根據(jù)NameNode的指令執(zhí)行塊創(chuàng)建、刪除和復制;1Hadoop—Hadoop1.0集群組成JobTracker和TaskTrackerJobTracker和TaskTracker用于任務調度;JobTracker負責資源管理、任務調度TaskTracker負責管理被分到DataNode的計算任務、資源匯報TaskTracker與JobTracker之間維持心跳,實時匯報當前DataNode資源所剩情況。1Hadoop—Hadoop1.0集群組成JobTracker(作業(yè)追蹤器)JobTracker的作用是接受來自客戶端的MapReduce作業(yè),并使用NameNode處理數(shù)據(jù)。
作為響應,NameNode向JobTracker提供元數(shù)據(jù)。
TaskTracker(任務追蹤)TaskTracker作為JobTracker的從屬節(jié)點。TaskTracker從JobTracker接收任務和代碼,并將這些代碼用于處理文件數(shù)據(jù),這個過程也可以稱為Mapper。1Hadoop—Hadoop1.0集群組成Hadoop1.0的JobTracker存在的問題:JobTracker是單點的,必然存在單點故障問題;因為JobTracker集成了資源管理和任務調度,存在壓力過大的問題;若有新的非MapReduce計算框架,則不能復用資源管理,新的計算框架必將各自實現(xiàn)自己的資源管理,從而造成資源競爭。1Hadoop—Hadoop2.0中Yarn模型Hadoop2.x中引入了全新的資源調度方案Yarn,Yarn將資源管理和任務調度分開,解耦了JobTracker的功能。Yarn與MapReduce無關,Yarn是獨立的資源層,除了支持MapReduce計算框架,還支持Spark等其他計算模型,從而增強了資源的統(tǒng)一管理和調度。Yarn從整體上還是屬于master/slave模型,主要依賴于ResourceManager、NodeManager、ApplicationMaster三個組件來實現(xiàn)功能JobTrackeTaskTracker作業(yè)小組長1Hadoop—Hadoop2.0中Yarn模型1.client提交作業(yè)給Yarn后,RM首先和NM進行通信,通信的目的是為了給APPMater分配第一個容器2.APPMaster啟動之后會對任務進行拆分,需要多個container(因為一個container無法完全執(zhí)行一個Task)在多個容器中執(zhí)行。因此APPMaster要向RM發(fā)送心跳,向RM進行申請運行程序的一些容器3.AM要和運行任務的container保持心跳因為任務運行的成功/失敗的狀態(tài)AM必須要知道,知道的前提就是AM和container保持心跳關系。當任務執(zhí)行完成后,AM會像RM進行申請,注銷container,該container所處的NM的資源就得到了釋放如果任務執(zhí)行失敗,AM會像RM進行申請,在另外的節(jié)點上啟動一個container運行任務(新的container只會運行還未運行的任務,運行完的任務是已經得到保存的)1Hadoop—Hadoop2.0中Yarn模型ResourceManagerResourceManager擁有系統(tǒng)所有資源分配的決定權,負責集群中所有應用程序的資源分配,擁有集群資源的全局視圖,為用戶提供公平的、基于容量的、本地化的資源調度,根據(jù)程序的需求、調度優(yōu)先級以及可用資源情況,動態(tài)分配特定節(jié)點運行應用程序。它與每個節(jié)點上的NodeManager和每個應用程序的ApplicationMaster協(xié)調工作。1Hadoop—Hadoop2.0中Yarn模型ResourceManager主要包含兩個組件:Scheduler和ApplicationManager:Scheduler是一個可插拔的插件,負責運行中的各個應用程序的資源分配,受資源容量、隊列以及其他因素的影響;在Hadoop中資源調度器有三種,默認的調度器是原始的基于隊列的先入先出調度器(FIFOScheduler);還有兩個多用戶調度器:公平調度器(FairScheduler)、計算能力調度器(CapacityScheduler);1Hadoop—Hadoop2.0中Yarn模型ApplicationMasterApplicationMaster負責與Scheduler協(xié)商合適的Container,跟蹤應用程序的狀態(tài),以及監(jiān)控它們的進度,ApplicationMaster是協(xié)調集群中應用程序執(zhí)行的進程。每個應用程序都有自己的ApplicationMaster,負責與ResourceManager協(xié)商資源(Container)和NodeManager協(xié)同工作來執(zhí)行和監(jiān)控任務。當一個ApplicationMaster啟動后,會周期性的向ResourceManager發(fā)送心跳報告來確認其健康和所需的資源情況。根據(jù)ResourceManager發(fā)來的Container,ApplicationMaster可以更新它的執(zhí)行計劃以適應資源不足或者過剩,Container可以動態(tài)的分配和釋放資源。1Hadoop—Hadoop2.0中Yarn模型Container是Yarn框架的計算單元,是具體執(zhí)行應用task的基本單位。Container和集群節(jié)點的關系是:一個節(jié)點會運行多個Container,但一個Container只運行在一個節(jié)點上。每個應用程序從ApplicationMaster開始,它本身就是一個Container(第0個),一旦啟動,ApplicationMaster就會根據(jù)任務需求與ResourceManager協(xié)商更多的Container,在運行過程中可以動態(tài)釋放和申請Container。1Hadoop—Hadoop2.0中Yarn模型NodeManagerNodeManager是Yarn節(jié)點的一個工作代理,管理Hadoop集群中獨立的計算節(jié)點,主要負責與ResourceManager通信,負責啟動和管理應用程序的Container的生命周期,監(jiān)控它們的資源使用情況(CPU和內存),跟蹤節(jié)點的監(jiān)控狀態(tài)、管理日志等,并將這些信息報告給RM。HDFS體系結構022HDFS體系結構HDFS(Hadoop分布式文件系統(tǒng))是一種運行在通用計算機(commodityhardware)上的分布式文件系統(tǒng),與現(xiàn)有的分布式文件系統(tǒng)有顯著的差異。HDFS設計用于部署在低成本硬件上,具有高容錯性。HDFS提供對應用程序數(shù)據(jù)的高吞吐量訪問,適合處理超大數(shù)據(jù)集的應用程序。2HDFS體系結構—HDFS的設計目標1.克服硬件故障一個HDFS實例可能由成百上千臺服務器組成,每臺服務器都存儲文件系統(tǒng)的部分數(shù)據(jù),而每臺服務器都是由大量的組件組成,每個組件都有一定的故障概率,這就意味著HDFS實例中總有些組件可能產生故障。因此,檢測故障并快速、自動地從故障中恢復是HDFS架構的核心目標。2.支持大數(shù)據(jù)集運行在HDFS上的應用程序通常都以處理大數(shù)據(jù)集為目標,HDFS中的文件大小一般為千兆字節(jié)到T字節(jié),因此HDFS被設計為支持大文件。HDFS應該提供高聚合數(shù)據(jù)帶寬,并且可以擴展到單個集群中的數(shù)百個節(jié)點,一個HDFS實例應可以支持數(shù)千萬個文件。2HDFS體系結構—HDFS的設計目標3.簡單一致性模型HDFS應用程序需要滿足write-once-read-many的文件存取模型。文件一旦創(chuàng)建、寫入后,除了擴展文件和截斷文件外,不需要其他更改方式。擴展文件是指將內容附加到文件末尾,而不是更新文件任意位置的數(shù)據(jù),簡化了數(shù)據(jù)一致性問題,并實現(xiàn)了高吞吐量的數(shù)據(jù)存取。這種文件系統(tǒng)的存取模型非常符合MapReduce應用程序或web爬蟲應用程序的需求。2HDFS體系結構—HDFS的設計目標4.計算移動或數(shù)據(jù)移動如果應用程序對數(shù)據(jù)的操作能夠離數(shù)據(jù)更近些,那么其執(zhí)行效率會高得多,當數(shù)據(jù)集非常大時,這種優(yōu)勢更加明顯。這種計算移動到離數(shù)據(jù)更近的模式可以最大限度地減少網絡擁塞并提高系統(tǒng)的總體吞吐量。通常最好將計算遷移到數(shù)據(jù)所在的位置,而不是將數(shù)據(jù)移動到應用程序運行的位置。HDFS為應用程序提供接口,使它們能夠更靠近數(shù)據(jù)所在的位置。5.異構硬件的兼容性和軟件平臺的可移植性HDFS被設計成易于從一個平臺移植到另一個平臺,這有助于采用HDFS作為應用程序的平臺。2HDFS體系結構—Namenode和DatanodeHDFS是一種主/從體系結構,HDFS集群由一個NameNode和一個主服務器以及多個Datanode組成。主服務器管理文件系統(tǒng)命名空間并控制客戶端對文件的訪問。一般情況下,集群的每個節(jié)點都有一個DataNode,它們負責管理連接到它們所在節(jié)點上的存儲。HDFS通過一個統(tǒng)一的文件系統(tǒng)命名空間展示系統(tǒng)文件結構,并允許用戶提交數(shù)據(jù)存儲到文件中。在系統(tǒng)內部,文件被分成一個或多個塊,這些塊存儲在一組DataNode中。NameNode執(zhí)行文件系統(tǒng)命名空間的相關操作,如打開、關閉和重命名文件和目錄等;除此之外,它還確定文件塊到數(shù)據(jù)節(jié)點的映射。DataNode負責處理來自文件系統(tǒng)客戶端的讀寫請求,并根據(jù)NameNode的指令執(zhí)行塊創(chuàng)建、刪除和復制。2HDFS體系結構—Namenode和DatanodeHDFS體系結構(主—從結構)示意圖2HDFS體系結構—Namenode和DatanodeNamenode的元數(shù)據(jù)信息:文件屬性信息:文件名稱、權限、時間、大小、復制因子、數(shù)據(jù)塊大?。晃募K位置信息:文件塊與Datanode間的映射信息;以fsimage和edits將內存中的數(shù)據(jù)存入磁盤,再次啟動時會讀取這些信息;Namenode和Datanode之間維持心跳信息,Datanode隔一段時間向Namenode發(fā)送心跳包,告訴Namenode它還存在。2HDFS體系結構—讀取數(shù)據(jù)原理HDFS讀取數(shù)據(jù)的過程客戶端軟件通過DistrubutedFileSystem和FSDataInputStream實現(xiàn)與HDFS系統(tǒng)的交互,從而隔離了用戶程序與HDFS文件系統(tǒng)的復雜交互過程,大大簡化了Hadoop分布式文件系統(tǒng)的應用。2HDFS體系結構—寫數(shù)據(jù)原理HDFS寫入數(shù)據(jù)過程客戶端只在開始和結束時與NameNode交互,大大減輕NameNode的負擔。在具體的寫入過程中,由FSDataOutputStream實現(xiàn)與各數(shù)據(jù)節(jié)點的交互,大大簡化了用戶對文件的操作。ACK應答機制:Datanode保存一個packet成功后,回給一個應答寫文件的過程中會與Namenode通信,報告寫的情況2HDFS體系結構—文件系統(tǒng)命名空間HDFS支持傳統(tǒng)的分層文件組織,用戶或應用程序可以創(chuàng)建目錄并在這些目錄中存儲文件。文件系統(tǒng)命名空間(TheFileSystemNamespace)層次結構與大多數(shù)現(xiàn)有文件系統(tǒng)相似,可以創(chuàng)建和刪除文件、移動文件或重命名文件。NameNode維護文件系統(tǒng)命名空間,對文件系統(tǒng)命名空間或其屬性的任何更改都由NameNode加以記錄。文件副本數(shù)稱為文件的復制因子,應用程序可以指定由HDFS維護的文件副本數(shù)量,這些信息由NameNode存儲和維護。2HDFS體系結構—數(shù)據(jù)容錯HDFS可以在大型集群中跨機器可靠地存儲大型文件,它將每個文件存儲為一個塊序列,通過復制文件塊來實現(xiàn)容錯。一個文件中除最后一個塊以外,所有塊都具有相同的大小。每個文件都可以配置塊大小和復制因子,應用程序可以指定文件的副本數(shù)。HDFS中的文件只寫一次,之后可以利用appends和truncates對文件進行擴展和截斷。HDFS嚴格限定同時只能有一個應用程序實現(xiàn)文件的寫入操作。NameNode做出關于塊復制的所有決策,它定期從集群中的每個DataNode接收心跳和文件數(shù)據(jù)塊報告(BlockReport)。接收到心跳意味著DataNode運行正常,BlockReport則包含DataNode上所有塊的列表。2HDFS體系結構—副本的管理與使用副本的放置對HDFS的可靠性和性能至關重要。基于機架感知的副本放置策略可以提高數(shù)據(jù)可靠性、可用性和網絡帶寬利用率。大型HDFS實例通常運行于分布在多個機架上的計算機集群上。不同機架上的兩個節(jié)點之間必須通過交換機進行通信。在大多數(shù)情況下,同一機架中的計算機之間的網絡帶寬大于不同機架上計算機之間的網絡帶寬。NameNode通過Hadoop機架感知過程確定每個DataNode所屬的機架id。一個簡單但非最佳的策略是將副本放在不同的機架上,這可以防止整個機架發(fā)生故障時丟失數(shù)據(jù),并允許在讀取數(shù)據(jù)時使用多個機架的帶寬。2HDFS體系結構—副本的管理與使用當復制因子為3時,HDFS的放置策略是:如果writer位于DataNode上,則將一個副本放在本地計算機上;否則,將一個副本放在與writer相同機架(機架A)上隨機的DataNode上;另外一個副本放在另一個機架的節(jié)點上。此策略可減少機架間的寫入流量,從而提高寫入性能。由于機架故障的概率遠小于節(jié)點故障的概率,因此,該策略不會影響數(shù)據(jù)可靠性和可用性。如果復制因子大于3,則隨機確定第4個和后續(xù)副本的位置,同時將每個機架的副本數(shù)保持在上限以下(例如:(副本數(shù)-1)/機架+2)。由于NameNode不允許一個DataNode擁有同一塊的多個副本,所以創(chuàng)建的最大副本數(shù)就是此時DataNode的總數(shù)。2HDFS體系結構—副本的管理與使用將存儲介質和存儲策略的支持添加到HDFS之后,除了機架感知策略外,NameNode還將考慮到副本放置。NameNode首先根據(jù)機架感知選擇節(jié)點,然后檢查其是否具有與文件關聯(lián)的策略所需的存儲空間,如果沒有,NameNode將查找另一個節(jié)點。如果在第一條路徑中找不到足夠的節(jié)點來放置副本,NameNode會在第二條路徑中查找具有后備存儲介質的節(jié)點。為了最小化全局帶寬消耗和讀取延遲,HDFS首先嘗試最接近讀請求位置的副本。如果在與讀請求節(jié)點相同的機架上存在一個副本,則首選該副本來滿足讀取請求。如果HDFS集群跨越多個數(shù)據(jù)中心,那么駐留在本地數(shù)據(jù)中心的副本比任何遠程副本都要優(yōu)先考慮。2HDFS體系結構—特性總結從主結構:一主多從,各司其職,互相配合;分塊存儲機制:文件物理被拆分,放在多臺機器上,可以并行處理,負載均衡;副本機制:數(shù)據(jù)存儲安全,如設dfs.replication的值為3,也就是會額外再復制2份,連同本身共3份副本。Namespace:層次型的文件組織結構,與本地文件系統(tǒng)類似。HDFS初探033HDFS初探—開始HDFS旅程在使用HDFS文件系統(tǒng)前,需要先對文件系統(tǒng)進行格式化。在NameNode(HDFS服務器)上輸入并執(zhí)行“hadoopnamenode-format”命令,其執(zhí)行過程如下:3HDFS初探—開始HDFS旅程格式化HDFS后,便可以啟動Hadoop分布式文件系統(tǒng),執(zhí)行如下命令將會啟動NameNode以及DataNode。3Hadoop初探—命令結構Hadoop命令都遵循相同的命令格式:Usage:shellcommand[SHELL_OPTIONS][COMMAND][GENERIC_OPTIONS][COMMAND_OPTIONS]Hadoop命令的各個部分對應描述如下:Shellcommand:不同的Hadoop子項目都有不同的命令名稱,例如,HadoopCommon對應hadoop,HDFS對應hdfs,YARN對應yarn;SHELL_OPTIONS:Shell在執(zhí)行Java前需執(zhí)行的選項,例如加載配置文件,其可設置參數(shù)如表4.2所示。COMMAND:具體的命令;GENERIC_OPTIONS:多數(shù)命令都支持的一些可選項設置;COMMAND_OPTIONS:各種命令特有的一些可選設置項。3HDFS初探—開始HDFS旅程使用“l(fā)s”命令可以查看文件系統(tǒng)中的文件信息,格式如下:“$HADOOP_HOME”是Hadoop安裝目錄,可以將”$HADOOP_HOME/bin”加入$PATH中,即可以直接執(zhí)行hadoop命令。例如,使用“hadoopfs-ls”查看根目錄信息:3HDFS初探—添加數(shù)據(jù)文件將本地數(shù)據(jù)文件“file.txt”存儲到HDFS中的“/user/input”文件夾下,可按下述操作執(zhí)行:
創(chuàng)建存儲文件夾
使用put命令上傳文件
查看操作是否成功3HDFS初探—添加數(shù)據(jù)文件例如:創(chuàng)建一個文件夾,再利用touch命令創(chuàng)建一個空的文件,往該文件中寫入“helloworld”,上傳文件至HDFS并查看,其執(zhí)行過程如下:3HDFS初探—從HDFS中下載文件將HDFS中的數(shù)據(jù)文件“/user/output/outfile”下載到本地文件系統(tǒng),操作如下:“cat”命令查看文件:“get”命令把文件從HDFS中下載到本地文件系統(tǒng):3HDFS初探—關閉HDFS若要關閉HDFS,可以使用stop-dfs.sh命令3HDFS初探—利用WebConsole訪問HDFSHDFS啟動后,可以直接通過WebConsole訪問HDFS。在瀏覽器中輸入:http://ip:50070,如果修改了端口號,則利用修改后的端口號訪問。Web控制臺提供了最基本的文件操作。3HDFS初探—利用WebConsole訪問HDFS選擇Utilities->Browsethefilesystem選項可以進入HDFS文件系統(tǒng)進行文件的查看和管理操作。文件管理主界面如圖所示3HDFS初探—利用WebConsole訪問HDFSHDFS啟動后,可以直接通過WebConsole訪問HDFS。在瀏覽器中輸入:http://ip:50070,如果修改了端口號,則利用修改后的端口號訪問。Web控制臺提供了最基本的文件操作。HDFS常用CLI命令044HDFS常用CLI命令—HDFS
CLI總覽CLI(交互式命令行界面)下,用戶通過命令行直接連接HDFS,實現(xiàn)文件系統(tǒng)的各種操作。CLI是訪問和操作HDFS系統(tǒng)最常用的方式。FSshell命令將路徑URI作為參數(shù)。URI格式為“scheme://權限/路徑”。對于HDFS,scheme為“hdfs”,對于本地文件系統(tǒng),scheme為“file”。scheme和權限是可選的,在未指定的情況下,使用默認scheme設置。4HDFS常用CLI命令—HDFS
CLI總覽查看HDFS中文件夾“/data”的幾種方式:在本機中訪問時,缺省的端口號、甚至HDFS服務器地址都可以自動補全。本書中“hadoopfs…”等同于“hdfsdfs…”,系統(tǒng)執(zhí)行效果是一致的4HDFS常用CLI命令—HDFS
CLI總覽例如:在HDFS根文件夾下存在目錄“data”,查看結果如下:文件系統(tǒng)操作命令的幫助信息可以使用“hadoopfs–help”查看4常用HDFS文件操作命令訪問本地文件時可以使用直接路徑訪問方式,如“/home/Hadoop/localfile”;也可以顯式指明該文件為本地文件,例如“file:///home/Hadoop/localfile”。利用SSH登錄到目標節(jié)點后,訪問HDFS文件系統(tǒng)中的文件可以使用直接路徑的模式“/user/Hadoop/hdfsfile”,若要訪問遠程的HDFS系統(tǒng)中的文件,則可以增加主機名和端口號,例如“hdfs://Node01:9000/user/Hadoop/hdfsfile”。4常用HDFS文件操作命令1.appendToFile用法:hadoopfs-appendToFile<localsrc>...<dst>說明:用于把本地文件系統(tǒng)的一個或者若干個文件附加到目標文件系統(tǒng)的指定文件后。其輸入源也可以是“STDIN”中的輸入數(shù)據(jù)。4常用HDFS文件操作命令附加單個本地文件到HDFS文件后,遠程HDFS文件可用主機:端口方式指定,Node01表示NameNode的ip地址或者主機名:附加多個文件的命令模式,遠程文件采用簡單表示模式:本地文件名指定為“-”表示從“STDIN”輸入數(shù)據(jù)附加到HDFS文件中,其命令模式如下:4常用HDFS文件操作命令【例4.1】展示appendfile命令附加多個文件的應用4常用HDFS文件操作命令2.cat用法:hadoopfs-cat[-ignoreCrc]URI[URI...]說明:把指定的文件輸出到STDOUT,在沒有其他設定的情況下,STDOUT對應屏幕輸出。-ignoreCrc:用于指定是否要進行CRC校驗。其中URI缺省情況為HDFS系統(tǒng)中的文件,若指定本地文件系統(tǒng)中的文件,則使用“file://”表示。4常用HDFS文件操作命令【例4.2】在終端顯示HDFS上根目錄下的文件file1和file2。【例4.3】在終端顯示本地文件系統(tǒng)“/usr/home/localfile”和HDFS上的文件“/usr/Hadoop/hadoopfile”。需要注意的是,“hadoopfs-cat”命令缺省目標文件系統(tǒng)為HDFS,若用其打印輸出本地文件系統(tǒng)文件,則需完整的URI。4常用HDFS文件操作命令3.copyFromLocal用法:hadoopfs-copyFromLocal[-f][-p][-l][-d]<localsrc>URI說明:把本地文件系統(tǒng)中的文件復制到HDFS文件系統(tǒng)中。其功能類似于put命令,只是要求源文件來自本地文件系統(tǒng)。-f:設定當目標文件已經存在時,強行覆蓋;-p:設定保持存取和修改的時間,文件擁有者以及各種權限;-l:允許數(shù)據(jù)節(jié)點采用惰性存儲方式(延遲將文件持久化寫入磁盤),強制重復因子為1,該參數(shù)可能導致文件的容錯性降低;-d:跳過創(chuàng)建臨時文件步驟,該臨時文件以“._COPYING_“為后綴。4常用HDFS文件操作命令【例4.4】把本地文件當前文件夾下的文件localfile1復制到HDFS的“/user/hadoop/”文件夾中。4常用HDFS文件操作命令4.cp用法:hadoopfs-cp[-f][-p|-p[topax]]URI[URI...]<dest>說明:文件復制。<dest>是文件路徑時,源文件可以是多個文件,或者通配符匹配的文件列表。-f:設定當目標文件已經存在時,強行覆蓋;-p:設定在目標文件中保持源文件的一些屬性,包括時間、擁有者、權限等。【例4.5】把HDFS文件系統(tǒng)中的文件“/user/hadoop/file1”復制到指定文件夾下,目標文件名為file2。4常用HDFS文件操作命令5.df用法:hadoopfs-df[-h]URI[URI...]說明:顯示可用空間的大小。-h:用于設定空間大小的顯示方式是否為適合人類閱讀模式。【例4.6】顯示/user/hadoop/dir1文件夾下的相關信息4常用HDFS文件操作命令6.du用法:hadoopfs-du[-s][-h]URI[URI...]說明:顯示指定目錄中包含的文件和目錄的大小,如果是文件,則顯示文件的長度。-s:設置顯示文件總體摘要,而不僅僅是單個文件信息。-h:設定空間大小的顯示方式是否為適合人類閱讀模式?!纠?.7】展示HDFS文件夾/user/hadoop/dir1的目錄信息。4常用HDFS文件操作命令7.find用法:hadoopfs-find<path>...[-name|-iname<pattern>]-print<expression>...說明:查找與指定表達式匹配的所有文件,并對其執(zhí)行選定的操作。如果未指定路徑,則默認為當前工作目錄。如果未指定表達式,則默認為-print。-namepattern:指定查找文件的匹配模式;-inamepattern:作用同上,不區(qū)分文件大小寫;-print:在標準輸出上輸出查找結果;expression:表達式<expression>可以是多個表達式的and,以此加強過濾條件4常用HDFS文件操作命令【例4.8】查找HDFS文件夾/user下是否存在myhadoop.cfg文件4常用HDFS文件操作命令8.get用法:hadoopfs-get[-ignorecrc][-crc][-p][-f]<src><localdst>說明:將文件復制到本地文件系統(tǒng)。-p:保持存取、修改的時間、文件所有者、權限等信息;-f:若目標文件已經存在,則覆蓋;-ignorecrc:設置為在復制文件到本地時不進行CRC校驗,CRC檢查失敗的文件可以使用此選項進行復制,-crc:同時進行CRC校驗;4常用HDFS文件操作命令【例4.9】把HDFS文件夾“/user/hadoop/”下的文件file4下載到本地,本地文件命名為localfile,其中第二命令詳細指定了HDFS文件系統(tǒng)的節(jié)點名稱和端口號。4常用HDFS文件操作命令9.help用法:hadoopfs-help說明:查看fs的幫助【例4.10】查看ls的幫助信息。4常用HDFS文件操作命令10.ls用法:hadoopfs-ls[-d][-h][-R]<args>說明:查看文件信息。若是文件,則輸出信息為“permissions(權限)、number_of_replicas(副本數(shù))、userid(所屬用戶)、groupid(所屬組)、filesize(文件大小)、modification_date(最近修改日期)、modification_time(最近修改時間)、filename(文件名)”;若是文件夾,則輸出信息為“permissions(權限)、userid(所屬用戶)、groupid(所屬組)、modification_date(最近修改日期)、modification_time(最近修改時間)、dirname(文件夾名稱)”。-d:目錄當成普通文件列出;-h:用于設定空間大小的顯示方式是否為適合人類閱讀模式;-R:遞歸地列出所有文件和目錄。4常用HDFS文件操作命令【例4.11】列出HDFS上“/user/hadoop/file1”文件信息。4常用HDFS文件操作命令11.mkdir用法:hadoopfs-mkdir[-p]<paths>說明:創(chuàng)建文件夾。-p:設定為是否創(chuàng)建目標路徑path中途的文件夾;【例4.12】創(chuàng)建兩個文件夾。【例4.13】創(chuàng)建文件夾“/user/hadoop/dir/subdir”,設置了參數(shù)“-p”,則若“/user/hadoop/dir”不存在,先自動創(chuàng)建該文件夾,之后再創(chuàng)建subdir。4常用HDFS文件操作命令12.mv用法:hadoopfs-mvURI[URI...]<dest>說明:將文件從源移動到目標,當源包含多個文件時,目標應是一個目錄。不允許跨文件系統(tǒng)移動文件。若目標和源文件在同一文件夾,mv實際上實現(xiàn)了文件的改名操作?!纠?.14】把HDFS中的文件file1重命名為file2。【例4.15】把HDFS中的文件/user/hadoop/file1移動到/dir1文件夾下4常用HDFS文件操作命令13.put用法:hadoopfs-put[-f][-p][-l][-d][-|<localsrc1>..].<dst>說明:將單個文件或多個文件從本地文件系統(tǒng)復制到目標文件系統(tǒng)。如果源設置為“-”,則從STDIN讀取輸入并寫入目標文件系統(tǒng)-p:保持存取、修改的時間、文件所有者、權限等信息;-f:若目標文件已經存在,則覆蓋;-l:允許數(shù)據(jù)節(jié)點采用惰性存儲方式(延遲將文件持久化寫入磁盤),強制重復因子為1,該參數(shù)可能導致文件的容錯性降低;-d:跳過創(chuàng)建臨時文件步驟,該臨時文件以“._COPYING_“為后綴。4常用HDFS文件操作命令【例4.16】把本地文件localfile上傳到HDFS系統(tǒng)“/user/hadoop/”并命名為hadoopfile。4常用HDFS文件操作命令14.rm用法:hadoopfs-rm[-f][-r|-R][-skipTrash]URI[URI...]說明:刪除指定文件。如果啟用了垃圾箱,文件系統(tǒng)會將刪除的文件移到垃圾箱目錄。默認情況下已禁用垃圾箱功能,用戶可以通過在配置文件“core-site.xml”設置大于零的間隔值來啟用垃圾箱。-f:該參數(shù)將關閉一些錯誤信息的顯示,例如文件不存在等;-R:遞歸刪除文件夾中內容;-r:等價于參數(shù)“-R”;-skipTrash:若設置該選項,則直接刪除該文件,否則,在垃圾箱啟用情況下,將會把要刪除文件放入垃圾箱。4常用HDFS文件操作命令14.rm用法:hadoopfs-rm[-f][-r|-R][-skipTrash]URI[URI...]說明:刪除指定文件。如果啟用了垃圾箱,文件系統(tǒng)會將刪除的文件移到垃圾箱目錄。默認情況下已禁用垃圾箱功能,用戶可以通過在配置文件“core-site.xml”設置大于零的間隔值來啟用垃圾箱。-f:該參數(shù)將關閉一些錯誤信息的顯示,例如文件不存在等;-R:遞歸刪除文件夾中內容;-r:等價于參數(shù)“-R”;-skipTrash:若設置該選項,則直接刪除該文件,否則,在垃圾箱啟用情況下,將會把要刪除文件放入垃圾箱。4常用HDFS文件操作命令【例4.17】刪除HDFS中/dir1/file1文件以及/user/dir2文件夾下所有文件4常用HDFS文件操作命令15.rmdir用法:hadoopfs-rmdir[--ignore-fail-on-non-empty]URI[URI...]說明:刪除指定文件夾。--ignore-fail-on-non-empty:在使用通配符時,如果一個文件夾包含文件,忽略錯誤信息?!纠?.18】刪除HDFS中/user/hadoop/emptydir文件夾。利用pyhdfs實現(xiàn)HDFS的文件訪問055利用pyhdfs實現(xiàn)HDFS的文件訪問為了便于用戶編寫程序,Hadoop提供了豐富的API支持。Hadoop提供了JavaAPI供Java程序調用,這也是最重要的一種方式,大量二次開發(fā)的底層都是采用這種方式。Hadoop也針對其他語言開發(fā)了API支持,例如官方提供的CAPI的libhdfs。Hadoop也有支持Python開發(fā)的pyhdfs等。pyhdfs是對libhdfs的Python封裝庫。它提供了一些常用方法來處理HDFS上的文件和目錄,如:讀寫文件、枚舉目錄文件、顯示HDFS可用空間、顯示文件的復制塊數(shù)等。pyhdfs使用swig技術,對libhdfs提供的絕大多數(shù)函數(shù)進行了封裝,目的是提供更簡單的調用方式。5pyhdfs的安裝與應用案例安裝pyhdfspyhdfs可以直接通過pip進行安裝,操作命令如下:安裝完成后,可以啟動Python,通過“importpyhdfs”驗證是否安裝成功。5pyhdfs的安裝與應用案例2.編寫Python程序新建HDFS的客戶端程序文件hello-pyhdfs.py,代碼如下:該程序首先引入pyhdfs庫,使用主機地址、端口號和用戶構建HDFS文件系統(tǒng)的客戶端,然后利用client進行各種文件的操作。首先創(chuàng)建根文件夾“/data”,然后列出根文件夾下的所有內容,并逐一打印輸出。importpyhdfsclient=pyhdfs.HdfsClient(hosts="localhost:9870",user_name="root")client.mkdirs("/data")#創(chuàng)建文件夾forfileinclient.listdir("/"):print(file)5pyhdfs的安裝與應用案例3.執(zhí)行Python程序在運行程序前,先查看HDFS的根文件夾下已有文件,執(zhí)行“hello-pyhdfs.py”后,對比“hadoopfs-ls/”查看文件夾的情況。5pyhdfs的HdfsClient類pyhdfs中包含HdfsClient和其他相關輔助類,其中HdfsClient是整個pyhdfs的核心所在,是最關鍵的類。連接HDFS的Namenode,對HDFS上的文件進行查詢、讀、寫操作等都是通過HdfsClient的實例完成。除了一些關鍵字參數(shù)外,所有函數(shù)都會將任意查詢參數(shù)直接傳遞給WebHDFS。特別的,任何函數(shù)都將接受用戶名或者user_name。對于Python語言,其函數(shù)經常使用“**kwarg”來傳遞不常用、且個數(shù)可變的參數(shù)。在本節(jié)的剩余部分,部分函數(shù)參數(shù)說明中列出了可用的關鍵參數(shù),其用法為"參數(shù)名=參數(shù)值"的模式。5pyhdfs的HdfsClient類HdfsClient類對象的構造函數(shù):參數(shù)說明:Hosts:NameNode的HTTP主機列表,主機名或IP地址與端口號之間需要用":"隔開,例如:hosts="37:9870";當有多個主機時可以傳入字符串列表,例如:["54:9870","35:9870"]。randomize_hosts:是否可以隨機選擇host進行連接,默認為True;5pyhdfs的HdfsClient類user_name:連接的Hadoop平臺的用戶名,如果有設置環(huán)境變量HADOOP_USER_NAME,則缺省使用該變量,否則調用getpass.getuser()獲取用戶名;timeout:每個Namenode的HTTP主機連接等待的秒數(shù),默認為20秒;該設置為了避免有些主機沒有響應情況下導致的阻塞。max_tries:每個Namenode節(jié)點嘗試連接的次數(shù),默認為2次;retry_delay:在嘗試連接一個Namenode節(jié)點失敗后,嘗試連接下一個Namenode的時間間隔,默認5秒;requests_session:連接HDFS的HTTPrequest請求使用的session,默認為None,為每個HTTP請求使用一個新的session,調用者需要負責session的關閉;requests_kwargs:其他需要傳遞給WebHDFS的參數(shù)。5pyhdfs的HdfsClient類【例4.19】利用HdfsClient構造一個客戶端對象client,其設置可連接主機為namenode以及second_namenode。這兩個主機按照順序建立連接,先連接主namenode,連接不成功時再連接second_namenode,連接用戶名為”root”。該操作將返回一個HdfsClient對象。Client=pyhdfs.HdfsClient(hosts=["namenode:9870","second_namenode:9870"],randomize_hosts=False,user_name="root")5pyhdfs的HdfsClient類接下來介紹類庫中一些常用方法的功能及用法。特別注意,假設后續(xù)應用實例中使用的/dir/file文件的初始內容為:5pyhdfs的HdfsClient類1.方法append()方法語法:append(path:str,data:Union[bytes,IO[bytes]],**kwargs)→None方法描述:該方法的功能是向一個文件末尾追加內容。參數(shù)說明:path(str):目標文件名;data:需要追加的數(shù)據(jù),可以是bytes列表數(shù)據(jù),也可以是類似file的對象;buffersize(int):進行數(shù)據(jù)傳輸時利用的緩沖區(qū)大小。5pyhdfs的HdfsClient類【例4.20】編寫程序Append1.py,將本地文件“/home/hadoop/bigdata/pyhdfsTest/file1”的內容追加到HDFS中的/dir/file文件的末尾,程序代碼如下。程序執(zhí)行及運行結果5pyhdfs的HdfsClient類2.方法concat()方法語法:concat(target:str,sources:List[str],**kwargs)→None方法描述:該方法的功能是將源文件列表中的文件合并為一個文件,將合并后的數(shù)據(jù)存放在目標文件中。若目標文件不存在,則拋出FileNotFoundException,若源文件列表為空,則拋出IllegalArgumentException;所有的源文件要和目標文件在同一個文件夾中,否則拋出IllegalArgumentException;所有源文件的塊大?。╞locksizes)都必須與目標文件塊大小一致;除最后一個文件外,其余所有源文件必須是一個完整的塊;源文件不能重復。參數(shù)說明:target:目標文件,用于存放合并后的最終數(shù)據(jù);source(list):需要合并的源文件列表;5pyhdfs的HdfsClient類【例4.22】編寫程序hdfs_concat.py,該程序實現(xiàn)將文件file1和文件file2的內容合并后存放到文件newfile中,其程序源碼如下:5pyhdfs的HdfsClient類3.方法copy_from_local()方法語法:copy_from_local(localsrc:str,dest:str,**kwargs)→None方法描述:該方法的功能是從本地文件系統(tǒng)復制一個文件到目標文件系統(tǒng)的指定目錄下。參數(shù)說明:localsrc(str):本地文件系統(tǒng)中的文件名;dest(str):目標系統(tǒng)中的文件名;5pyhdfs的HdfsClient類【例4.23】編寫程序copy_from_local1.py,該程序實現(xiàn)將本地文件系統(tǒng)中的文件"/home/hadoop/bigdata/pyhdfsTest/file1"復制到目標文件系統(tǒng)中“/dir/”目錄下,目標文件名為file1,其程序源碼如下:5pyhdfs的HdfsClient類4.方法copy_to_local()方法語法:copy_to_local(src:str,localdest:str,**kwargs)→None方法描述:該方法的功能是從源文件系統(tǒng)src復制文件到本地文件系統(tǒng)localdest。參數(shù)說明:localsrc(str):本地文件系統(tǒng)中的文件名;dest(str):目標系統(tǒng)中的文件名;data:可以是一個文件對象,也可以字節(jié)列表(bytes)等;overwrite(bool):若目標文件已經存在,是否覆蓋?blocksize(long):文件的塊大?。籸eplication(short):副本數(shù)設置;permission(octal):文件/目錄的權限,八進制數(shù),如“700”表示所有者可讀、寫、執(zhí)行,所在組和其他用戶沒有任何權限;buffersize(int):傳輸數(shù)據(jù)過程中的緩沖區(qū)大小。5pyhdfs的HdfsClient類【例4.24】把HDFS文件系統(tǒng)的文件“/dir/file1”拷貝到本地,并存儲為文件"/home/hadoop/bigdata/pyhdfsTest/file1"。5pyhdfs的HdfsClient類5.方法create()方法語法:create(path:str,data:Union[IO[bytes],bytes],**kwargs)→None方法描述:該方法的功能是在指定路徑位置創(chuàng)建一個文件。參數(shù)說明:path(str):目標文件名;data:可以是一個文件對象,也可以是字節(jié)列表(bytes)等;overwrite(bool):若目標文件已經存在,是否覆蓋?blocksize(long):文件的塊大小;replication(short):副本數(shù)設置;permission(octal):文件/目錄的權限,八進制數(shù),如“700”表示所有者可讀、寫、執(zhí)行,所在組和其他用戶沒有任何權限;buffersize(int):傳輸數(shù)據(jù)過程中的緩沖區(qū)大小。5pyhdfs的HdfsClient類【例4.25】編寫程序hdfs_create.py,該程序實現(xiàn)在指定目錄“/dir/”下創(chuàng)建一個新文件newfile,并讀取文件file1中的數(shù)據(jù)寫入新文件newfile中,如果newfile已經存在則覆蓋。其具體源碼如下:5pyhdfs的HdfsClient類執(zhí)行程序hdfs_create.py,然后再
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設計英文模板
- 文學文本鑒賞課程設計
- 陽江港課程設計公司地址
- 消毒衣柜課程設計紙
- 運算器設計課程設計
- 采礦專業(yè)課程設計
- 項目整合幼兒園課程設計
- 課程設計商品管理系統(tǒng)
- 鋼琴小組課課程設計
- 運籌學系統(tǒng)優(yōu)化課程設計
- 課題申報書:表達性藝術在中小學心理健康教育中的應用研究
- 2025年下半年貴州高速公路集團限公司統(tǒng)一公開招聘119人高頻重點提升(共500題)附帶答案詳解
- 資產評估服務房屋征收項目測繪實施方案
- 2025年經濟形勢會議講話報告
- 北師大版小學三年級上冊數(shù)學第五單元《周長》測試卷(含答案)
- 國家安全責任制落實情況報告3篇
- 2024年度順豐快遞冷鏈物流服務合同3篇
- 六年級下冊【默寫表】(牛津上海版、深圳版)(漢譯英)
- 合同簽訂培訓
- 電工基礎知識培訓課程
- 鐵路基礎知識題庫單選題100道及答案解析
評論
0/150
提交評論