第7、8章 YARN資源管理器、HBase分布式數(shù)據(jù)庫_第1頁
第7、8章 YARN資源管理器、HBase分布式數(shù)據(jù)庫_第2頁
第7、8章 YARN資源管理器、HBase分布式數(shù)據(jù)庫_第3頁
第7、8章 YARN資源管理器、HBase分布式數(shù)據(jù)庫_第4頁
第7、8章 YARN資源管理器、HBase分布式數(shù)據(jù)庫_第5頁
已閱讀5頁,還剩155頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第七章

YARN資源管理器大數(shù)據(jù)理論與應用基礎7.1

YARN介紹7.2

YARN的基本組成7.3

YARN的工作流程7.4YARN的調度器7.5YARN的常用命令7.6本章小結本章目錄大數(shù)據(jù)理論與應用基礎7.1YARN介紹大數(shù)據(jù)理論與應用基礎7.1YARN的概念ApacheHadoopYARN(YetAnotherResourceNegotiator,另一種資源協(xié)調者)是一種新的Hadoop資源管理器,它是一個通用資源管理系統(tǒng),可為上層應用提供統(tǒng)一的資源管理和調度服務。它的引入為集群在利用率、資源統(tǒng)一管理和數(shù)據(jù)共享等方面帶來了巨大好處。大數(shù)據(jù)理論與應用基礎7.2YARN的應用場景在企業(yè)實際的生產環(huán)境中,同時存在不同的業(yè)務應用場景,對于計算的要求各有不同,常常需要應用多個計算框架來滿足需求。下圖描述了當前大數(shù)據(jù)領域一個非常通用的模型,即HDFS解決計算數(shù)據(jù)的存儲問題,YARN完成計算資源的分配,各個計算框架負責攻克計算中的各項技術難點。大數(shù)據(jù)理論與應用基礎7.2YARN的基本組成大數(shù)據(jù)理論與應用基礎7.2YARN的基本組成YARN主要依賴3個組件(ResourceManager、NodeManager及ApplicationMaster)來實現(xiàn)功能。YARN架構圖如下圖所示。大數(shù)據(jù)理論與應用基礎7.2.1ResourceManagerResourceManager擁有系統(tǒng)所有資源分配的決定權,負責集群中所有應用程序的資源分配,擁有集群資源的主要、全局視圖,因此可以為用戶提供公平的、基于容量的本地化資源調度。根據(jù)程序的需求,調度優(yōu)先級及可用資源情況,動態(tài)分配特定節(jié)點運行應用程序。它與每個節(jié)點上的NodeManager和每個應用程序的ApplicationMaster協(xié)調工作。ResourceManager的主要職責在于調度,即在競爭的應用程序之間分配系統(tǒng)中的可用資源,并不關注每個應用程序的狀態(tài)管理。ResourceManager主要有兩個組件:Scheduler和ApplicationManager。大數(shù)據(jù)理論與應用基礎7.2.1ResourceManager1.SchedulerScheduler是一個可插拔的插件,負責運行中的應用程序的資源分配,受資源容量、隊列及其他因素的影響。它是一個純粹的調度器,不負責應用程序的監(jiān)控和狀態(tài)追蹤,不保證在應用程序失敗或硬件失敗的情況下對任務進行重啟,而基于應用程序的資源需求執(zhí)行其調度功能。它使用了叫作資源的概念,其中包括多種資源,如CPU、內存、磁盤、網(wǎng)絡等。大數(shù)據(jù)理論與應用基礎7.2.1ResourceManager在Hadoop的MapReduce框架中,主要有3種Scheduler:FIFOScheduler、CapacityScheduler和FairScheduler。(1)FIFOScheduler:先進先出,不考慮作業(yè)優(yōu)先級和范圍,適合低負載集群。(2)CapacityScheduler:將資源分為多個隊列,允許共享集群,并為每個隊列分配保證的最小資源。(3)FairScheduler:公平地將資源分給應用程序(Application),使得所有應用在平均情況下隨著時間得到相同的資源份額。大數(shù)據(jù)理論與應用基礎7.2.1ResourceManager2.ApplicationManagerApplicationManager接收用戶提交的作業(yè)請求,并對其進行處理。它是作業(yè)提交的入口點,負責接收作業(yè)的元數(shù)據(jù)和資源需求。一旦收到作業(yè)的提交請求,ApplicationManager會為該應用程序分配第一個Container來運行ApplicationMaster。ApplicationMaster是應用程序特定的管理器,負責協(xié)調和監(jiān)控作業(yè)的執(zhí)行過程。ApplicationManager還可以監(jiān)控運行中的ApplicationMaster,確保其正常運行。它會定期檢查ApplicationMaster的健康狀態(tài)和任務執(zhí)行情況。如果ApplicationMaster發(fā)生故障或失敗,那么ApplicationManager會負責重新啟動ApplicationMaster所在的Container。這樣可以確保應用程序的連續(xù)執(zhí)行,并在可能的情況下進行故障恢復。大數(shù)據(jù)理論與應用基礎7.2.2NodeManagerNodeManager是YARN節(jié)點的一個“工作進程”代理,管理Hadoop集群中獨立的計算節(jié)點,主要負責與ResourceManager進行通信,用于啟動和管理應用程序的Container的生命周期,監(jiān)控它們的資源使用情況(CPU和內存)、跟蹤節(jié)點的監(jiān)控狀態(tài)、管理日志等,并報告給ResourceManager。大數(shù)據(jù)理論與應用基礎7.2.2NodeManager在啟動NodeManager時,NodeManager向ResourceManager注冊,并發(fā)送心跳包來等待ResourceManager的指令,主要目的是管理ResourceManager分配給它的應用程序Container。NodeManager只負責管理自身的Container,它并不知道運行在它上面的應用程序的信息。在運行期間,通過NodeManager和ResourceManager的協(xié)同工作,這些信息會不斷被更新并保障整個集群處于最佳狀態(tài)。大數(shù)據(jù)理論與應用基礎7.2.2NodeManagerNodeManager的主要職責包括:接收ResourceManager的請求,分配Container給應用的某個任務;與ResourceManager交換信息以確保整個集群平穩(wěn)運行,ResourceManager通過收集每個NodeManager的報告信息來追蹤整個集群的健康狀態(tài),而NodeManager負責監(jiān)控自身的健康狀態(tài);管理每個Container的生命周期;管理每個節(jié)點上的日志;執(zhí)行YARN上面應用的一些額外服務,如MapReduce的Shuffle過程。大數(shù)據(jù)理論與應用基礎7.2.3ApplicationMasterApplicationMaster負責與Scheduler協(xié)商合適的Container,跟蹤應用程序的狀態(tài),以及監(jiān)控它們的進度。ApplicationMaster是協(xié)調集群中應用程序執(zhí)行的進程。每個應用程序都有自己的ApplicationMaster,負責與ResourceManager協(xié)商資源(container)并與NodeManager協(xié)同工作來執(zhí)行和監(jiān)控任務。大數(shù)據(jù)理論與應用基礎7.2.3ApplicationMasterApplicationMaster啟動后,會周期性地向ResourceManager發(fā)送心跳包來確認其健康狀態(tài)和所需的資源情況。在建好的需求模型中,ApplicationMaster在發(fā)往ResourceManager的心跳信息中封裝了偏好和限制,在隨后的心跳包中,ApplicationMaster會提交對特定節(jié)點上綁定了一定的資源的Container的租約請求。租約請求是指ApplicationMaster向ResourceManager申請在指定節(jié)點上綁定特定資源的Container。根據(jù)ResourceManager發(fā)來的Container,ApplicationMaster可以更新它的執(zhí)行計劃以適應資源不足或過剩的情況,Container可以動態(tài)分配和釋放資源。大數(shù)據(jù)理論與應用基礎7.3YARN的工作流程大數(shù)據(jù)理論與應用基礎7.3YARN的工作流程YARN的工作流程如下圖所示大數(shù)據(jù)理論與應用基礎步驟1:客戶端向ResourceManager提交應用并請求一個ApplicationMaster實例,ResourceManager在應答中給出一個ApplicationID和有助于客戶端請求資源的資源容量信息。大數(shù)據(jù)理論與應用基礎7.3YARN的工作流程步驟2:ResourceManager找到可以運行一個Container的NodeManager,并在這個程序Container中啟動ApplicationMaster(圖中的AppMstr)實例。大數(shù)據(jù)理論與應用基礎7.3YARN的工作流程步驟3:ApplicationMaster向ResourceManager進行注冊,注冊之后客戶端就可以查詢ResourceManager獲得自己ApplicationMaster的詳細信息,以后就可以和自己的ApplicationMaster直接進行交互了。在注冊響應中,ResourceManager會發(fā)送關于集群最大和最小容量信息。大數(shù)據(jù)理論與應用基礎7.3YARN的工作流程步驟4:在平常的操作過程中,ApplicationMaster根據(jù)ResourceRequest協(xié)議向ResourceManager發(fā)送ResourceRequest請求,ResourceManager會根據(jù)調度策略盡可能最優(yōu)地為ApplicationMaster分配container資源,作為資源請求的應答發(fā)給ApplicationMaster。大數(shù)據(jù)理論與應用基礎7.3YARN的工作流程步驟5:當Container被成功分配之后,ApplicationMaster便與對應的Container進行通信,要求它啟動任務。大數(shù)據(jù)理論與應用基礎7.3YARN的工作流程步驟6:應用程序的代碼在啟動的Container中運行,并把運行的進度、狀態(tài)等信息通過application-specific協(xié)議發(fā)送給ApplicationMaster。隨著作業(yè)的執(zhí)行,ApplicationMaster將心跳和進度信息發(fā)給ResourceManager,在這些心跳信息中,ApplicationMaster還可以請求和釋放一些Container。大數(shù)據(jù)理論與應用基礎7.3YARN的工作流程步驟7:在應用程序運行期間,提交應用的客戶端主動與ApplicationMaster進行交流,獲得應用的運行狀態(tài)、進度更新等信息,交流的協(xié)議也是application-specific。大數(shù)據(jù)理論與應用基礎7.3YARN的工作流程步驟8:一旦應用程序執(zhí)行完成且所有相關工作也已經完成,ApplicationMaster就向ResourceManager取消注冊并關閉,用到的所有Container也歸還給系統(tǒng),當Container被“殺死”或回收后,ResourceManager會通知NodeManager聚合日志并清理Container專用的文件。大數(shù)據(jù)理論與應用基礎7.3YARN的工作流程7.4YARN的調度器大數(shù)據(jù)理論與應用基礎7.4YARN的調度器本節(jié)介紹YARN的調度器,包括先進先出調度器(FIFOScheduler)、容量調度器(CapacityScheduler)和公平調度器(FairScheduler)。大數(shù)據(jù)理論與應用基礎7.4.1先進先出調度器先進先出調度器把應用按提交的順序排成一個隊列,這是一個先進先出隊列,在進行資源分配時,先給隊首的應用分配資源,待隊首的應用需求滿足后給下一個分配資源,以此類推。先進先出調度器是最簡單、最容易理解的調度器,不需要任何配置,但它并不適用于共享集群,這是因為大的應用可能會占用所有集群資源,會導致其他應用被阻塞。在共享集群中,更適合采用容量調度器或公平調度器,這兩個調度器都允許大任務和小任務在提交的同時獲得一定的系統(tǒng)資源。大數(shù)據(jù)理論與應用基礎7.4.2容量調度器容量調度器是Hadoop支持的一個可插拔的資源調度器,它允許多租戶安全地共享集群資源,用戶的應用程序在容量限制的情況下可以及時地分配資源。容量調度器通常用于分配計算機集群中的計算資源,例如CPU、內存、存儲等。它可以監(jiān)視集群中各個節(jié)點的資源利用率,并根據(jù)任務的需求將其分配給合適的節(jié)點。通過動態(tài)地分配資源,容量調度器可以實現(xiàn)負載均衡,提高系統(tǒng)的整體性能。大數(shù)據(jù)理論與應用基礎

容量調度器的運行原理容量調度器提供的核心理念就是隊列(Queue),這些隊列通常由管理員設定。它支持多個隊列,每個隊列可配置一定的資源,每個隊列都采用先進先出調度策略。容量調度器每個隊列內部先進先出,同一時間隊列中只有一個任務在執(zhí)行,隊列的并行度為隊列的個數(shù)。如圖所示,三個隊列同時按照任務的先后順序依次執(zhí)行,比如:job11,job21和job31分別排在隊列最前面,先運行,也是并行運行。大數(shù)據(jù)理論與應用基礎

容量調度器的特性下面詳細介紹容量調度器的特性。1.分層隊列容量調度器支持隊列的層次結構,以確保資源在允許其他隊列使用空閑資源之前,在組織的子隊列之間共享,從而提供更多的控制和更高的可預見性。2.容量保證容量調度器的隊列被分配了網(wǎng)格容量的一小部分,從某種意義上來說,隊列可以支配一定的資源容量。提交給隊列的所有應用程序都可以訪問分配給隊列的容量。管理員可以對分配給每個隊列的容量設置軟限制和可選的硬限制。大數(shù)據(jù)理論與應用基礎

容量調度器的特性3.安全性容量調度器的每個隊列都有嚴格的ACL,用于控制哪些用戶可以將應用程序提交給各個隊列。此外,還有一些安全措施可確保用戶無法查看和/或修改其他用戶的應用程序,也支持每個隊列和系統(tǒng)管理員角色。大數(shù)據(jù)理論與應用基礎

容量調度器的特性4.彈性容量調度器可以將免費資源分配給超出其容量的任何隊列。在未來某個時間點資源使用量小于預先設置的容量上限的隊列對這些資源有需求時,隨著這些資源上調度任務的完成,資源將被分配給運行小于容量的隊列上的應用程序(也支持搶占)。這樣可以確保資源以可預見和彈性的方式提供給隊列,從而防止集群中的人為資源孤島,有助于提高資源利用率。大數(shù)據(jù)理論與應用基礎

容量調度器的特性5.多租戶容量調度器提供了一套全面的限制,以防止單個應用程序、用戶和隊列獨占隊列或整個集群的資源,確保集群不會不堪重負。大數(shù)據(jù)理論與應用基礎

容量調度器的特性6.可操作性(1)運行時配置:隊列定義和屬性(如容量、ACL)可以在運行時由管理員以安全的方式更改,以最大限度地減小對用戶的干擾。此外,容量調度器還為用戶和管理員提供了一個控制臺,用于查看系統(tǒng)中各個隊列的當前資源分配情況。管理員可以在運行時添加額外的隊列,但不能在運行時刪除隊列,除非隊列已停止且沒有待處理/正在運行的應用程序。(2)排空應用程序:管理員可以在運行時停止隊列,以確保在現(xiàn)有應用程序運行完成時,不能提交新的應用程序。如果隊列處于STOPPED狀態(tài),則不能向其自身或其任何子隊列提交新的應用程序?,F(xiàn)有的應用程序繼續(xù)完成,因此隊列可以“優(yōu)雅”地排空。另外,管理員還可以啟動已停止的隊列。大數(shù)據(jù)理論與應用基礎

容量調度器的特性7.基于資源的調度容量調度器支持資源密集型應用程序,應用程序可以選擇指定比默認值更高的資源要求,從而適應具有不同資源要求的應用程序。目前支持的資源需求主要是內存。大數(shù)據(jù)理論與應用基礎

容量調度器的特性8.基于默認或用戶定義放置規(guī)則的隊列映射接口容量調度器允許用戶根據(jù)一些默認放置規(guī)則將作業(yè)映射到特定隊列中,如基于用戶和組或應用程序名稱。另外,用戶還可以定義自己的放置規(guī)則。大數(shù)據(jù)理論與應用基礎

容量調度器的特性9.優(yōu)先級調度容量調度器允許以不同的優(yōu)先級提交和調度應用程序。較高的整數(shù)值表示應用程序的優(yōu)先級較高。當前僅先進先出排序策略支持應用程序優(yōu)先級。大數(shù)據(jù)理論與應用基礎

容量調度器的特性10.絕對資源配置管理員可以為隊列指定絕對資源,而不是提供基于百分比的值。這為管理員提供了更好的控制,可以為給定隊列配置所需的資源。大數(shù)據(jù)理論與應用基礎

容量調度器的特性11.葉子隊列(LeafQueues)的動態(tài)自動創(chuàng)建和管理在YARN的容量調度器中,葉子隊列是指最底層的隊列,它們是實際執(zhí)行作業(yè)的隊列。容量調度器支持葉子隊列的自動創(chuàng)建與隊列映射相結合,隊列映射目前支持基于用戶組的隊列映射以將應用程序放置到隊列中。調度程序還支持基于在父隊列上配置的策略對這些隊列進行容量管理。大數(shù)據(jù)理論與應用基礎

容量調度器的參數(shù)配置容量調度器的配置參數(shù)主要劃分為3塊,分別為資源分配相關參數(shù)、限制應用程序數(shù)目相關參數(shù)、隊列訪問和權限控制參數(shù)。大數(shù)據(jù)理論與應用基礎

容量調度器的參數(shù)配置1.資源分配相關參數(shù)(1)capacity:隊列的容量百分比,float類型。所有隊列的各個層級的capacity總和必須為100。因為彈性資源分配機制,所以,如果集群中有較多的空閑資源,那么列隊中的應用可能消耗比此設定更多的capacity。(2)maximum-capacity:隊列capacity的最大占比,float類型。此值用來限制隊列中的應用彈性的最大值,默認值為1禁用“彈性資源分配機制”。大數(shù)據(jù)理論與應用基礎

容量調度器的參數(shù)配置(3)minimum-user-limit-percent:在任何時間,如果有資源需要,那么每個隊列都會對分配給一個用戶的資源有一個強制的限制,這個限制可以在最大值和最小值之間。此屬性就是最小值,其最大值依賴提交應用的用戶的個數(shù)。(4)user-limit-factor:隊列容量的倍數(shù),用來設置一個用戶可以獲取更多的資源。它的默認值為1,表示一個用戶獲取的資源容量不能超過隊列配置的capacity,而不管集群有多少空閑資源。此值為float類型,最大不超過maximum-capacity。大數(shù)據(jù)理論與應用基礎

容量調度器的參數(shù)配置2.限制應用程序數(shù)目相關參數(shù)(1)maximum-applications:集群或隊列中同時處于等待和運行狀態(tài)的應用程序數(shù)目上限。這是一個強限制,一旦集群中的應用程序數(shù)目超過該上限,后續(xù)提交的應用程序將被拒絕,其默認值為10000。所有隊列的數(shù)目上限可通過參數(shù)yarn.scheduler.capacity.maximum-applications來設置(可看作默認值),而單個隊列的數(shù)目上限可通過參數(shù)yarn.scheduler.capacity.<queue-path>.maximum-applications來設置。大數(shù)據(jù)理論與應用基礎

容量調度器的參數(shù)配置2.限制應用程序數(shù)目相關參數(shù)(2)maximum-am-resource-percent:集群中用于運行應用程序ApplicationMaster的資源比例上限。該參數(shù)通常用于限制處于活動狀態(tài)的應用程序數(shù)目。該參數(shù)類型為float,默認值是0.1,表示10%。所有隊列的ApplicationMaster資源比例上限可通過參數(shù)yarn.scheduler.capacity.maximum-am-resource-percent來設置(可看作默認值),而單個隊列可通過參數(shù)yarn.scheduler.capacity.<queue-path>.maximum-am-resource-percent設置適合自己的值。大數(shù)據(jù)理論與應用基礎

容量調度器的參數(shù)配置3.隊列訪問和權限控制參數(shù)(1)state:隊列狀態(tài)可以為STOPPED或RUNNING,如果一個隊列處于STOPPED狀態(tài),那么用戶不可以將應用程序提交到該隊列或它的子隊列中。類似地,如果ROOT隊列處于STOPPED狀態(tài),那么用戶不可以向集群中提交應用程序,但正在運行的應用程序可以正常運行結束,以便隊列可以優(yōu)雅地退出。大數(shù)據(jù)理論與應用基礎

容量調度器的參數(shù)配置(2)acl_submit_applications:限定哪些Linux用戶/用戶組可向給定隊列提交應用程序。需要注意的是,該屬性具有繼承性,即如果一個用戶可以向某個隊列提交應用程序,則它可以向它的所有子隊列提交應用程序。在配置該屬性時,用戶之間或用戶組之間用“,”分隔,用戶和用戶組之間用空格分隔,如“user1,user2group1,group2”。(3)acl_administer_queue:為隊列指定一個管理員,該管理員可控制該隊列的所有應用程序,如“殺死”任意一個應用程序等。同樣,該屬性也具有繼承性。大數(shù)據(jù)理論與應用基礎7.4.3公平調度器公平調度器是ApacheYARN內置的調度器。公平調度器的主要目標是實現(xiàn)YARN上運行的應用程序能公平地分配到資源,其中各個隊列使用的資源根據(jù)設置的權重來實現(xiàn)資源的公平分配。大數(shù)據(jù)理論與應用基礎

公平調度器的運行原理公平調度是一種將資源分配給應用程序的方法,以便所有應用程序隨著時間的推移平均獲得相等的資源份額。在默認情況下,公平調度器僅基于內存進行調度公平性決策。當有一個應用程序在運行時,該應用程序會使用整個集群資源。當提交其他應用程序時,釋放的資源將分配給新應用程序,以便每個應用程序最終都獲得大致相同數(shù)量的資源。除了提供公平共享,公平調度器還允許為隊列分配有保證的最小份額,這有助于確保某些用戶、用戶組或生產應用程序始終獲得足夠的資源。大數(shù)據(jù)理論與應用基礎

公平調度器的特性下面介紹公平調度器與容量調度器的相同點和不同點。1.公平調度器與容量調度器的相同點(1)多隊列:支持多隊列多作業(yè)。(2)容量保證:管理員可為每個隊列設置保證的最小資源和資源使用上限。(3)靈活性:如果一個隊列中的資源有剩余,則可以暫時將其共享給那些需要資源的隊列,而一旦該隊列有新的應用程序提交,則其他隊列借調的資源會歸還給該隊列。(4)多租戶:支持多用戶共享集群和多應用程序同時運行,為了防止同一個用戶的作業(yè)獨占隊列中的資源,該調度器會對同一用戶提交的作業(yè)所占的資源比例進行限定。大數(shù)據(jù)理論與應用基礎

公平調度器的特性2.公平調度器與容量調度器的不同點(1)核心調度策略不同。①容量調度器:優(yōu)先選擇資源利用率低的隊列。②公平調度器:優(yōu)先選擇對資源的缺額比例大的隊列。(2)每個隊列可以單獨設置資源分配方式。①容量調度器:FIFO、DRF。②公平調度器:FIFO、FAIR、DRF。大數(shù)據(jù)理論與應用基礎

公平調度器的資源分配方式公平調度器可以基于以下策略分配資源。1.FIFO策略公平調度器每個隊列的資源分配策略如果選擇FIFO,則它相當于容量調度器。2.FAIR策略FAIR策略在默認情況下是一種基于最大最小公平算法實現(xiàn)的資源多路復用方式,每個隊列內部均采用該方式來分配資源。這意味著如果一個隊列中有兩個應用程序同時運行,則每個應用程序可以得到1/2的資源。它的具體資源分配流程與容器調度器一致:選擇隊列,選擇作業(yè),選擇容器。大數(shù)據(jù)理論與應用基礎

公平調度器的資源分配方式3.DRF策略傳統(tǒng)的在傳統(tǒng)的資源調度中,通常只考慮一個主要資源(如內存)來進行分配,但在實際場景中,多數(shù)應用程序需要同時占用多種資源。DRF算法通過比較應用程序對不同資源的需求來決定資源分配的比例,以實現(xiàn)公平性和有效性。假設集群一共有100個CPU和10TB內存,而應用A需要(2個CPU,300GB),應用B需要(6個CPU,100GB則兩個應用分別需要A(2%CPU,3%內存)和B(6%CPU,1%內存)的資源,這就意味著應用A是內存主導的,應用B是CPU主導的,針對這種情況,可以選擇DRF策略對不同應用進行不同資源(CPU和內存)的不同比例的限制。大數(shù)據(jù)理論與應用基礎

公平調度器的參數(shù)配置自定義公平調度器通常需要更改兩個文件。第一,可以通過在現(xiàn)有配置目錄的yarn-site.xml文件中添加配置屬性來設置調度器范圍的選項;第二,在大多數(shù)情況下,用戶希望創(chuàng)建一個分配文件,列出存在哪些隊列,以及它們各自的權重和容量。分配文件每10s重新加載一次,允許隨時進行更改。分配文件必須為XML格式,包含以下元素。大數(shù)據(jù)理論與應用基礎

公平調度器的參數(shù)配置1.隊列元素隊列元素可以采用可選屬性“type”,當設置為“parent”時,使其成為父隊列。每個隊列元素可能包含以下屬性。(1)minResources:這個屬性表示隊列元素的最小資源需求。它可以指定任務所需的最小計算資源,例如CPU核數(shù)、內存大小或者其他資源限制。公平調度器在分配資源時會考慮這個屬性,確保分配給隊列元素的資源不低于最小需求。大數(shù)據(jù)理論與應用基礎

公平調度器的參數(shù)配置(2)maxResources:隊列可以分配的最大資源。公平調度器不會為隊列分配一個會使其總使用量超過此限制的容器。此限制是遞歸執(zhí)行的,如果分配會使隊列或其父級超過最大資源,則不會為隊列分配容器。大數(shù)據(jù)理論與應用基礎

公平調度器的參數(shù)配置(3)maxContainerAllocation:隊列可以為單個容器分配的最大資源。如果未設置該屬性,則其值將從父隊列繼承。它的默認值取決于yarn.scheduler.maximum-allocation-mb和yarn.scheduler.maximum-allocation-vcores的配置,但不能高于maxResources。此屬性對根隊列無效。大數(shù)據(jù)理論與應用基礎

公平調度器的參數(shù)配置(4)maxChildResources:可以分配給一個臨時子隊列的最大資源。子隊列限制是遞歸執(zhí)行的,因此,如果該分配會使子隊列或其父隊列超過最大資源,則不會為該隊列分配容器。大數(shù)據(jù)理論與應用基礎

公平調度器的參數(shù)配置(5)maxRunningApps:限制隊列中同時運行的應用程序數(shù)量。(6)maxAMShare:限制可用于運行應用程序主機的隊列公平份額的百分數(shù)。此屬性只能用于葉子隊列。例如,如果將其設置為1.0f,則葉子隊列中的應用程序主機最多可以占用100%的內存和CPU公平份額;如果將其設置為-1.0f,則將禁用此功能,并且不會檢查amShare。它的默認值為0.5f。大數(shù)據(jù)理論與應用基礎

公平調度器的參數(shù)配置(7)weight(權重):與其他隊列不按比例共享集群。權重默認為1,權重為2的隊列應該接收大約2倍于默認權重隊列的資源。大數(shù)據(jù)理論與應用基礎

公平調度器的參數(shù)配置(8)schedulingPolicy:設置任意隊列的調度策略,允許的值為"fifo"/"fair"/"drf"或任何擴展org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.Scheduling-Policy的類。它的默認值為“drf”。如果其值是“fifo”,則提交時間較早的應用程序會優(yōu)先使用容器,但如果在滿足較早應用程序的請求后集群上有剩余空間的條件,則較晚提交的應用程序可能會同時運行。大數(shù)據(jù)理論與應用基礎

公平調度器的參數(shù)配置(9)aclSubmitApps:可以將應用程序提交給隊列的用戶和/或用戶組的列表。(10)aclAdministerApps:可以管理隊列的用戶和/或用戶組的列表。當前唯一的管理操作是終止應用程序。大數(shù)據(jù)理論與應用基礎

公平調度器的參數(shù)配置(11)minSharePreemptionTimeout:隊列在嘗試搶占搶占其他隊列的資源之前,等待小于其最小份額的時間(以秒為單位)。如果未設置該參數(shù),則隊列將從其父隊列繼承相應的值。它的默認值為Long.MAX_VALUE,這意味著它不會搶占容器,直到用戶設置一個有意義的值。大數(shù)據(jù)理論與應用基礎

公平調度器的參數(shù)配置(12)fairSharePreemptionTimeout:隊列在嘗試搶占其他隊列的資源之前,等待小于其公平份額閾值的時間(以秒為單位)。如果未設置該參數(shù),則隊列將從其父隊列繼承相應的值。它的默認值為Long.MAX_VALUE,這意味著它不會搶占容器,直到用戶設置一個有意義的值。大數(shù)據(jù)理論與應用基礎

公平調度器的參數(shù)配置(13)fairSharePreemptionThreshold:隊列的公平份額搶占閾值。如果隊列等待時間超過fairSharePreemptionTimeout,并且它的當前資源分配比例未達到fairSharePreemptionThreshold*fairShare時,則允許搶占容器從其他隊列獲取資源。如果未設置該參數(shù),則隊列將從其父隊列繼承相應的值。它的默認值為0.5f。大數(shù)據(jù)理論與應用基礎

公平調度器的參數(shù)配置(14)allowPreemptionFrom:決定是否允許調度器從隊列中搶占資源。它的默認值為true。如果隊列將此屬性設置為false,則此屬性將遞歸應用于所有子隊列。(15)reservation:向ReservationSystem表明隊列的資源可供用戶預訂。這僅適用于葉隊列。如果未配置此屬性,則葉隊列不可保留。大數(shù)據(jù)理論與應用基礎

公平調度器的參數(shù)配置2.UserelementsUserelements表示管理各個用戶行為的設置。它們可以包含單個屬性maxRunningApps,是對特定用戶正在運行的應用程序數(shù)量的限制。大數(shù)據(jù)理論與應用基礎

公平調度器的參數(shù)配置3.AuserMaxAppsDefaultelementAuserMaxAppsDefaultelement用于為未以其他方式指定限制的任何用戶設置默認運行應用程序限制。大數(shù)據(jù)理論與應用基礎

公平調度器的參數(shù)配置4.AdefaultFairSharePreemptionTimeoutelementAdefaultFairSharePreemptionTimeoutelement用于設置根隊列的公平共享搶占超時時間;被根隊列中的fairSharePreemptionTimeout元素覆蓋;默認設置為Long.MAX_VALUE。大數(shù)據(jù)理論與應用基礎

公平調度器的參數(shù)配置5.AdefaultMinSharePreemptionTimeoutelementAdefaultMinSharePreemptionTimeoutelement用于設置根隊列的最小共享搶占超時;被根隊列中的minSharePreemptionTimeout元素覆蓋;默認設置為Long.MAX_VALUE。大數(shù)據(jù)理論與應用基礎

公平調度器的參數(shù)配置6.AdefaultFairSharePreemptionThresholdelementAdefaultFairSharePreemptionThresholdelement用于設置根隊列的公平共享搶占閾值;被根隊列中的fairSharePreemptionThreshold元素覆蓋;默認設置為0.5f。大數(shù)據(jù)理論與應用基礎

公平調度器的參數(shù)配置7.AqueueMaxAppsDefaultelementAqueueMaxAppsDefaultelement用于設置隊列的默認運行應用限制;被每個隊列中的maxRunningApps元素覆蓋。大數(shù)據(jù)理論與應用基礎

公平調度器的參數(shù)配置8.AqueueMaxResourcesDefaultelementAqueueMaxResourcesDefaultelement用于設置隊列的默認最大資源限制;被每個隊列中的maxResources元素覆蓋。大數(shù)據(jù)理論與應用基礎

公平調度器的參數(shù)配置9.AqueueMaxAMShareDefaultelementAqueueMaxAMShareDefaultelement用于設置隊列的默認AM資源限制;被每個隊列中的maxAMShare元素覆蓋。大數(shù)據(jù)理論與應用基礎

公平調度器的參數(shù)配置10.AdefaultQueueSchedulingPolicyelementAdefaultQueueSchedulingPolicyelement用于設置隊列的默認調度策略;如果指定,則由每個隊列中的schedulingPolicy元素覆蓋;默認設置為“合理”。大數(shù)據(jù)理論與應用基礎

公平調度器的參數(shù)配置11.Areservation-agentelementAreservation-agentelement用于設置ReservationAgent實現(xiàn)的類名,試圖將用戶的預留請求放入Plan中;默認值為org.apache.hadoop.yarn.server.resourcemanager.reservation.planning.AlignedPlannerWithGreedy。大數(shù)據(jù)理論與應用基礎

公平調度器的參數(shù)配置12.Areservation-policyelementAreservation-policyelement用于設置SharingPolicy實現(xiàn)的類名,驗證新的預留資源是否違反任何不變量;默認值為org.apache.hadoop.yarn.server.resourcemanager.reservation.CapacityOverTimePolicy。大數(shù)據(jù)理論與應用基礎

公平調度器的參數(shù)配置13.Areservation-plannerelementAreservation-plannerelement用于設置Planner實現(xiàn)的類名,如果Plan容量小于(由于計劃維護或節(jié)點故障)用戶保留的資源,則調用該類名稱;默認值為org.apache.hadoop.yarn.server.resourcemanager.reservation.planning.SimpleCapacityReplanner。它掃描計劃并以相反的接收順序(LIFO)“貪婪”地刪除預留資源,直到預留資源在計劃容量內。大數(shù)據(jù)理論與應用基礎

公平調度器的參數(shù)配置14.AqueuePlacementPolicyelementAqueuePlacementPolicyelement包含一系列規(guī)則元素列表,告訴調度程序如何將傳入的應用程序放入隊列。規(guī)則按列出的順序應用。規(guī)則可能需要參數(shù)。所有規(guī)則都可以設置“create”參數(shù),該參數(shù)指示規(guī)則是否可以創(chuàng)建新隊列;默認值為true,如果將其設置為false且規(guī)則將應用程序放到未在分配文件中配置的隊列中,那么調度器將繼續(xù)執(zhí)行下一個規(guī)則。最后一個規(guī)則必須是永不發(fā)布繼續(xù)的規(guī)則。大數(shù)據(jù)理論與應用基礎7.5YARN的常用命令本節(jié)介紹YARN的常用命令,包含任務的查看(YARNApplication)、日志的查看(YARNLogs)、嘗試運行任務的查看(YARNApplicationattempt)、容器的查看(YARNContainer)、節(jié)點狀態(tài)的查看(YARNNode)、配置的更新(YARNRmadmin)和隊列的查看(YARNQueue)。大數(shù)據(jù)理論與應用基礎7.5.1查看任務1.列出所有應用程序(Application)執(zhí)行以下命令可進行任務的查看:大數(shù)據(jù)理論與應用基礎[root@masterhadoop-3.3.4]$yarnapplication-list7.5.1查看任務運行成功后會得到所有Application的屬性信息如下。這里執(zhí)行了一個MapReduce任務,“RUNNING”表明該任務正在執(zhí)行,“5%”表明了該任務的進度。大數(shù)據(jù)理論與應用基礎(1)Application-Id:application_1668825271750_0002。(2)Application-Name:wc.jar。(3)Application-Type:MAPREDUCE。(4)User:root。(5)Queue:default。(6)State:RUNNING(7)Final-State:UNDEFINED。(8)Progress:5%。(9)Tracking-URL:http://master:44311。7.5.1查看任務2.根據(jù)Application的狀態(tài)進行過濾執(zhí)行以下命令可進行任務的查看:當運行的Application數(shù)量很多時,通過根據(jù)Application的狀態(tài)進行過濾可以得到想要的Application信息。Application的狀態(tài)包括ALL、NEW、NEW_SAVING、SUBMITTED、ACCEPTED、RUNNING、FINISHED、FAILED、KILLED。下面列出狀態(tài)為FINISHED的所有Application。運行以下命令:大數(shù)據(jù)理論與應用基礎[root@masterhadoop-3.3.4]$yarnapplication-list-appStatesFINISHED7.5.1查看任務運行成功后會得到所有狀態(tài)為FINISHED的Application的屬性信息。大數(shù)據(jù)理論與應用基礎(1)Application-Id:application_1668825271750_0001。(2)Application-Name:wc.jar。(3)Application-Type:MAPREDUCE。(4)User:root。(5)Queue:default。(6)State:FINISHED。(7)Final-State:SUCCEEDED。(8)Progress:100%。(9)Tracking-URL:http://master:19888/jobhistory/job/job_1668825271750_0001。7.5.1查看任務3.“殺死”Application要“殺死”一個Application,需要指定一個ApplicationID。下面“殺死”ApplicationID為application_1668825271750_0001的Application。運行以下命令:大數(shù)據(jù)理論與應用基礎[root@master~]$yarnapplication-killapplication_1668825271750_0001運行結果如下:2022-11-1910:55:04,062INFOclient.RMProxy:ConnectingtoResourceManageratslave01/03:8032Applicationapplication_1668825271750_0001hasalreadyfinished7.5.2查看日志1.查看Application日志查看Application日志的格式為yarnlogs-applicationId<ApplicationId>。大數(shù)據(jù)理論與應用基礎[root@masterhadoop-3.3.4]$yarnlogs-applicationIdapplication_1668825271750_00017.5.2查看日志2.查看Container日志查看Container日志的格式為yarnlogs-applicationId<ApplicationId>-containerId<ContainerId>。其中<ContainerId>可通過后面的yarnapplicationattempt-list<ApplicationId>命令獲?。捍髷?shù)據(jù)理論與應用基礎[root@masterhadoop-3.3.4]$yarnlogs-applicationIdapplication_1612577921195_0001-containerIdcontainer_1612577921195_0001_01_0000017.5.3查看嘗試運行任務1.列出所有Application嘗試的列表列出所有Application嘗試的列表的格式為yarnapplicationattempt-list<ApplicationId>:大數(shù)據(jù)理論與應用基礎[root@masterhadoop-3.3.4]$yarnapplicationattempt-listapplication_1612577921195_00017.5.3查看嘗試運行任務2.打印ApplicationAttemp狀態(tài)打印ApplicationAttemp狀態(tài)的格式為yarnapplicationattempt-status<ApplicationAttemptId>。大數(shù)據(jù)理論與應用基礎[root@masterhadoop-3.3.4]$yarnapplicationattempt-statusappattempt_1612577921195_0001_0000017.5.4查看容器1.列出所有Container列出所有Container的格式為yarncontainer-list<ApplicationAttemptId>:大數(shù)據(jù)理論與應用基礎[root@masterhadoop-3.3.4]$yarncontainer-listappattempt_1612577921195_0001_0000017.5.4查看容器2.打印Container狀態(tài)打印Container狀態(tài)的格式為yarncontainer-status<ContainerId>(只有在任務運行時才能看到Container的狀態(tài))。大數(shù)據(jù)理論與應用基礎[root@masterhadoop-3.3.4]$yarncontainer-statuscontainer_1612577921195_0001_01_0000017.5.5查看節(jié)點狀態(tài)1.列出所有節(jié)點列出所有節(jié)點的命令為yarnnode-list–all。查看NodeManger節(jié)點當前的狀態(tài):大數(shù)據(jù)理論與應用基礎[root@masterhadoop-3.3.4]$yarnnode-list-all7.5.6更新配置加載隊列配置的命令格式為yarnrmadmin–refreshQueues。當隊列信息發(fā)生變化時,執(zhí)行該命令就可以加載隊列配置,而無須重啟YARN:大數(shù)據(jù)理論與應用基礎[root@masterhadoop-3.3.4]$yarnrmadmin-refreshQueues7.5.7查看隊列打印隊列信息的命令格式為yarnqueue-status<QueueName>。這里查看默認隊列的信息:大數(shù)據(jù)理論與應用基礎[root@masterhadoop-3.3.4]$yarnqueue-statusdefault7.6本章小結大數(shù)據(jù)理論與應用基礎7.6本章小結YARN是一個資源調度框架,負責為運算程序提供服務器運算資源。本章首先介紹了YARN的基本組成及其工作流程,然后詳細介紹了YARN中的3種調度器的相關信息,最后介紹了一些在YARN應用中常用的命令,可以幫助讀者更清晰地理解YARN的資源調度功能。大數(shù)據(jù)理論與應用基礎第八章

HBase分布式數(shù)據(jù)庫大數(shù)據(jù)理論與應用基礎8.1HBase簡介8.2

HBase的基本組成結構8.3

HBase數(shù)據(jù)模型8.4

HBase的系統(tǒng)架構8.5

HBase的安裝部署8.6

HBase的Shell操作8.7

HBase的JavaAPI介紹8.8

本章小結本章目錄大數(shù)據(jù)理論與應用基礎8.1HBase簡介大數(shù)據(jù)理論與應用基礎8.1HBase簡介HBase可看作谷歌Bigtable的開源實現(xiàn),部署于HadoopHDFS之上,提供類似Bigtable的功能。谷歌Bigtable利用GFS作為其文件存儲系統(tǒng)。類似地,HBase利用HDFS作為其存儲系統(tǒng)。因此,HBase可視為Hadoop生態(tài)系統(tǒng)的結構化存儲層,數(shù)據(jù)存儲于分布式文件系統(tǒng)的HDFS中,并使用ZooKeeper提供協(xié)調服務。HDFS為HBase提供了高可靠性的底層存儲支持,MapReduce為HBase提供了高性能的計算能力,ZooKeeper為HBase提供了穩(wěn)定的服務和實現(xiàn)恢復機制。大數(shù)據(jù)理論與應用基礎8.1HBase簡介HBase并不適合存儲少量數(shù)據(jù),其設計目的是處理非常龐大的表,其數(shù)據(jù)通常達到十億甚至百億級別。由于HBase依賴HadoopHDFS,因此它與Hadoop一樣,主要依靠橫向擴展,通過不斷增加廉價的商用服務器來提高計算和存儲能力。因此,HBase并不適用于所有場合,以下列出兩點注意事項。如果數(shù)據(jù)量足夠大,那么HBase是一個很好的選擇。但如果只有幾百萬行甚至更少的數(shù)據(jù)量,那么傳統(tǒng)的關系型數(shù)據(jù)庫是一個更好的選擇。要有足夠的硬件資源,當每個HDFS集群在少于5個節(jié)點時,HBase的表現(xiàn)則不盡人意。大數(shù)據(jù)理論與應用基礎8.2HBase的基本組成結構大數(shù)據(jù)理論與應用基礎8.2HBase的基本組成結構HBase的基本組成結構包括表、行、列簇、列限定符、單元格等,下表給出了HBase表的簡單樣式,以下逐一介紹。大數(shù)據(jù)理論與應用基礎行鍵(Rowkey)列簇1(Columnfamily1)列簇2(Columnfamily2)列簇3(Columnfamily3)Col1Col2Col3Col1Col2Col3Col1Col2Col31

2

8.2HBase的基本組成結構8.2.1表在HBase中,數(shù)據(jù)存儲在表中,表名是一個字符串,表由行和列組成。與關系型數(shù)據(jù)庫不同,HBase表是多維映射的,對表的處理也有其自身的特點。HBase中的表通常有上億行、上百萬列(后面將介紹HBase中的行和列);HBase表采用面向列的存儲和權限控制;空列并不占用HBase的存儲空間。大數(shù)據(jù)理論與應用基礎8.2HBase的基本組成結構8.2.2行HBase中的行(Row)由行鍵(Rowkey)、一個或多個列(Column)組成。行鍵類似關系型數(shù)據(jù)庫中的主鍵索引,但它沒有數(shù)據(jù)類型,總被視為字節(jié)數(shù)組byte[]。在整個HBase表中,行鍵是唯一的,并且總是按照字母順序排序的。例如,HBase表中已有3條行鍵分別為0000001、0000002和0000004的數(shù)據(jù),當插入一條行鍵為0000003的數(shù)據(jù)時,該條數(shù)據(jù)不會排在最后,而是排在行鍵為0000002和0000004的數(shù)據(jù)的中間。因此,行鍵內容的設計非常重要,可以利用行鍵的這個特性有效地將相關的數(shù)據(jù)排列在一起。例如,可以將網(wǎng)站的域名反轉后作為行鍵進行存儲(如com.baidu.map、com.baidu.photo、com.baidu.tieba)。這樣,所有的百度域名在表中將自動地排列在一起,而不是分散排列的。大數(shù)據(jù)理論與應用基礎8.2HBase的基本組成結構8.2.3列簇列簇(Columnfamily),也稱列族。HBase列簇由多個列組成,相當于列的分組。列的數(shù)量沒有限制,一個列簇里可以有數(shù)百萬個列。HBase表中的每一行都有相同的列簇。列簇必須在HBase表創(chuàng)建時指定,不能輕易修改,且列簇名的類型為字符串。大數(shù)據(jù)理論與應用基礎8.2HBase的基本組成結構8.2.4列限定符列限定符(Qualifier)用于代表HBase表中列的名稱,列簇中的數(shù)據(jù)通過列限定符來定位,常見的定位格式為“family:qualifier”。例如,要定位列簇cf1中的列stu_id,使用cf1:stu_id。HBase中的列簇和列限定符都可以理解為級別不同的列。一個列簇中可以有多個列限定符,因此列簇可以簡單地理解為第一級列,列限定符是第二級列,兩者是父子關系。與行鍵相同,列限定符也沒有數(shù)據(jù)類型,總被視為字節(jié)數(shù)組byte[]。大數(shù)據(jù)理論與應用基礎8.2HBase的基本組成結構8.2.5單元格單元格(Cell)通過行鍵、列簇和列限定符一起來定位。單元格包含值和時間戳。其中,值沒有數(shù)據(jù)類型,總被視為字節(jié)數(shù)組byte[];時間戳代表該值的版本,類型為long。在默認情況下,時間戳表示數(shù)據(jù)寫入服務器的時間,但是當數(shù)據(jù)被放入單元格時,也可以指定不同的時間戳。每個單元格都按照時間戳降序排列的形式保存著同一份數(shù)據(jù)的多個版本,即最新的數(shù)據(jù)排在最前面,這樣有利于快速查找最新數(shù)據(jù)。對單元格中的數(shù)據(jù)進行訪問時會默認讀取最新的值。大數(shù)據(jù)理論與應用基礎8.3HBase數(shù)據(jù)模型大數(shù)據(jù)理論與應用基礎8.3HBase數(shù)據(jù)模型不同于常見的RDBMS,HBase有其自有的數(shù)據(jù)模型,本節(jié)介紹HBase數(shù)據(jù)模型并比較其與RDBMS數(shù)據(jù)模型的差異。下圖展示了RDBMS和HBase的數(shù)據(jù)模型的不同。傳統(tǒng)RDBMS數(shù)據(jù)庫對于不存在的值,必須存儲NULL值;而在HBase中,不存在的值可以省略,且不占存儲空間。此外,HBase在新建表時必須指定表名和列簇,不需要指定列,所有列在后續(xù)添加數(shù)據(jù)時動態(tài)添加;而RDBMS指定好列以后不可以修改和動態(tài)添加。大數(shù)據(jù)理論與應用基礎8.3HBase數(shù)據(jù)模型HBase數(shù)據(jù)模型也可被看作一個鍵值數(shù)據(jù)庫,通過4個鍵定位具體的值。這4個鍵為行鍵、列簇、列限定符和時間戳(其中,時間戳也可省略,默認取最新數(shù)據(jù))。HBase數(shù)據(jù)模型首先通過行鍵定位一整行數(shù)據(jù),然后通過列簇定位列所在的范圍,最后通過列限定符定位具體的單元格數(shù)據(jù),若給定了時間戳,再上述定位時,則會定位到指定時間所在的單元格。既然是鍵值數(shù)據(jù)庫,那么可以用來描述它的方法有很多。有圖展示了由JSON數(shù)據(jù)格式表示的HBase數(shù)據(jù)模型。大數(shù)據(jù)理論與應用基礎8.3HBase數(shù)據(jù)模型HBase數(shù)據(jù)模型也可被看作一個鍵值數(shù)據(jù)庫,通過4個鍵定位具體的值。這4個鍵為行鍵、列簇、列限定符和時間戳(其中,時間戳也可省略,默認取最新數(shù)據(jù))。HBase數(shù)據(jù)模型首先通過行鍵定位一整行數(shù)據(jù),然后通過列簇定位列所在的范圍,最后通過列限定符定位具體的單元格數(shù)據(jù),若給定了時間戳,再上述定位時,則會定位到指定時間所在的單元格。既然是鍵值數(shù)據(jù)庫,那么可以用來描述它的方法有很多。有圖展示了由JSON數(shù)據(jù)格式表示的HBase數(shù)據(jù)模型。大數(shù)據(jù)理論與應用基礎8.4HBase的系統(tǒng)架構大數(shù)據(jù)理論與應用基礎8.4HBase的系統(tǒng)架構HBase采用主從架構,由HMaster節(jié)點、HRegionServer節(jié)點和ZooKeeper集群組成。HMaster節(jié)點作為主節(jié)點,HRegionServer節(jié)點作為從節(jié)點,這種主從模式類似HDFS的NameNode與DataNode。HBase集群中所有的節(jié)點均通過ZooKeeper進行協(xié)調工作。HBase底層通過HRegionServer節(jié)點將數(shù)據(jù)存儲于HDFS中。為描述方便,下面的HMaster節(jié)點簡稱HMaster,HRegionServer節(jié)點簡稱HRegionServer,其他節(jié)點類似。需要說明的是,在分布式架構中,節(jié)點也是一臺服務器,具體用語結合上下文理解。大數(shù)據(jù)理論與應用基礎8.4HBase的系統(tǒng)架構HBase的系統(tǒng)架構如下圖所示,主要包括4部分:HMaster、HRegionServer、Client和ZooKeeper。其中,HRegisonServer又包括HRegion、Store、MemStore、StoreFile、HFile和HLog等組件。各部分之間的關系為:一個HRegion由一個或多個Store組成;一個Store由1個MemStore和0~n個StoreFile組成,一個Store保存一個列簇;StoreFile存儲在HDFS上,MemStore存儲于內存中。大數(shù)據(jù)理論與應用基礎8.4HBase的系統(tǒng)架構1.HMasterHMaster本身并不存儲任何數(shù)據(jù),主要負責維護表和HRegion的元數(shù)據(jù)信息,由于表的元數(shù)據(jù)信息保存在ZooKeeper上,所以HMaster本身負載不大。HBase一般有多個HMaster,用戶可通過ZooKeeper的選舉機制保持同一時刻只有一個HMaster處于活動狀態(tài),其他HMaster處于備用狀態(tài),如此可實現(xiàn)自動故障轉移。HMaster的主要功能如下。(1)管理用戶對標的進行增、刪、改、查等操作。(2)為HRegionServer分配HRegion,負責HRegionServer的負載均衡。(3)發(fā)現(xiàn)離線的HRegionServer,并負責為其重新分配HRegion。(4)負責HDFS上的垃圾回收。(5)權限控制。大數(shù)據(jù)理論與應用基礎8.4HBase的系統(tǒng)架構2.HRegionServerHRegionServer負責管理一系列的HRegion對象,是HBase的核心組件。一個HRegisonServer可以包含多個HRegion和HLog,用戶可以根據(jù)需求添加或刪除HRegisonServer。HRegisonServer的主要功能如下。(1)維護HMaster分配的HRegion,處理這些HRegion的輸入、輸出請求。(2)負責切分在運行過程中變得過大的HRegion。大數(shù)據(jù)理論與應用基礎8.4HBase的系統(tǒng)架構3.HRegionHRegion是HBase中分布式存儲和負載均衡的最小單元。一個HRegion由一個或多個Store組成。起初每個表只有一個HRegion,隨著表中數(shù)據(jù)不斷增多,HRegion會不斷增大,當達到一定的閾值(默認為256MB)時,HRegion就會被切分為兩個大小基本相同的新HRegion。不同的HRegion可以分布在不同的HRegionServer上,但同一個HRegion拆分后會分布在相同的HRegionServer上。4.ClientClient通過RPC機制與HBase的HMaster和HRegisonServer進行通信,其中,管理類的通信由HMaster負責,數(shù)據(jù)讀寫類的通信由HRegisonServer負責。大數(shù)據(jù)理論與應用基礎8.4HBase的系統(tǒng)架構5.ZooKeeperZooKeeper在HBase中發(fā)揮著重要作用。例如,每個HRegionServer都會在ZooKeeper中注冊一個自己的臨時節(jié)點,HMaster可通過這些在ZooKeeper中注冊的臨時節(jié)點發(fā)現(xiàn)可用的HRegionServer,并跟蹤HRegionServer的故障??傮w來講,ZooKeeper的作用體現(xiàn)以下在兩方面。(1)HRegionServer主動向ZooKeeper集群注冊,使得HMaster可以隨時感知各個HRegisonServer是否在線,從而避免HMaster出現(xiàn)單點故障。(2)HMaster啟動時會將HBase系統(tǒng)表加載到ZooKeeper集群中,通過ZooKeeper集群可以獲得當前系統(tǒng)表hbase:meta存儲的數(shù)據(jù)對應的HRegisonServer信息。其中,系統(tǒng)表指的是命名空間hbase下的表namespace和meta。大數(shù)據(jù)理論與應用基礎8.4HBase的系統(tǒng)架構6.StoreStore是HBase的存儲核心。每一個Region有一個或多個Store組成,至少是一個store,HBase會把一起訪問的數(shù)據(jù)放在一個Store里面,即為每個ColumnFamily建一個Store(即有幾個ColumnFamily,也就有幾個Store)。一個Store由一個MemStore和零或多個StoreFile組成。7.MemStoreMemStore存儲在內存中,當其大小達到一定的閾值(默認為128MB)時,MemStore中的數(shù)據(jù)會被刷新寫入磁盤文件,類似生成一個快照。當關閉HRegionServer時,MemStore中的數(shù)據(jù)會被強制刷新并寫入磁盤文件。大數(shù)據(jù)理論與應用基礎8.4HBase的系統(tǒng)架構8.StoreFileStoreFile是MemStore中的數(shù)據(jù)被寫入磁盤后得到的文件,一般存儲在多個HDFS中。MemStore內存中的數(shù)據(jù)寫到文件后就是StoreFile(即MemStore的每次Flush操作都會生成一個新的StoreFile),StoreFile底層以HFile格式保存。9.HFileHFile是一種二進制文件,用于存儲HBase中的鍵值對數(shù)據(jù),StoreFile底層存儲使用的便是HFile。通常一個HFile會被分解成多個塊,因此,對HFile文件的操作都是以塊為單位的。HFile文件的塊大小可以在列簇級別中進行設置,推薦設置為8~1024KB。較大的塊有利于順序讀/寫數(shù)據(jù),但由于需要解壓更多數(shù)據(jù),因此不利于隨機讀/寫數(shù)據(jù);較小的塊有利于隨機讀/寫數(shù)據(jù),但需要占用更多的內存,寫入效率相對較低。大數(shù)據(jù)理論與應用基礎8.4HBase的系統(tǒng)架構10.HLogHLog是HBase的日志文件,記錄數(shù)據(jù)的更新操作。與RDBMS類似,為了保證數(shù)據(jù)的一致性和實現(xiàn)回滾等,HBase在寫入數(shù)據(jù)時會先進行WAL(預寫日志)操作,即只有在將更新操作寫入HLog文件后才會將數(shù)據(jù)寫入Store的MemStore中,只有這兩個地方都寫入并確認后,才認為數(shù)據(jù)寫入成功。由于MemStore將數(shù)據(jù)存在內存中,且數(shù)據(jù)大小沒有達到一定閾值時不會被寫入HDFS,因此,若在數(shù)據(jù)被寫入HDFS之前服務器崩潰,則MemStore中的數(shù)據(jù)將丟失,此時可以利用HLog來恢復丟失的數(shù)據(jù)。HLog日志文件存儲于HDFS中,因此,若服務器崩潰,則HLog仍然可用。大數(shù)據(jù)理論與應用基礎8.5HBase的安裝部署大數(shù)據(jù)理論與應用基礎8.5HBase的安裝部署1.上傳HBase安裝包與之前的方法類似,直接將下載好的HBase文件hbase-2.5.2-bin.tar.gz利用MobaXTerm的拖曳功能上傳至IP地址為00那臺虛擬機的/export/software目錄內(虛擬機IP地址信息參見第3章),如下圖所示。大數(shù)據(jù)理論與應用基礎8.5HBase的安裝部署2.解壓剛上傳的hbase-2.5.2-bin.tar.gz安裝包通常沒有執(zhí)行權限,先使用chmod命令添加執(zhí)行權限:然后利用tar命令將HBase解壓至/export/servers目錄下:完成后便可在/export/servers目錄下看到剛剛解壓的hbase-2.5.2目錄,如下圖所示。大數(shù)據(jù)理論與應用基礎[root@mastersoftware]#chmod777hbase-2.5.2-bin.tar.gz[root@mastersoftware]#tar-zxvf./hbase-2.5.2-bin.tar.gz-C/export/servers/8.5HBase的安裝部署3.配置環(huán)境變量打開.bashrc文件,在其末尾添加如下內容:保存后使用source命令使環(huán)境變量生效:大數(shù)據(jù)理論與應用基礎#>>>HBase>>>exportHBASE_HOME=/export/servers/hbase-2.5.2exportPATH=$PATH:$HBASE_HOME/bin#<<<HBase<<<[root@mastersoftware]#source~/.bashrc8.5HBase的安裝部署4.修改hbase-env.sh文件修改/export/servers/hbase-2.5.2/conf目錄下的hbase-env.sh文件,找到JAVA_HOME并將其修改為第3章安裝的JDK的位置:繼續(xù)在該文件中查找HBASE_MANAGES_ZK,并將其值修改為false:大數(shù)據(jù)理論與應用基礎exportJAVA_HOME=/export/servers/jdk1.8.0_202#TellHBasewhetheritshouldmanageit'sowninstanceofZooKeeperornot.exportHBASE_MANAGES_ZK=false8.5HBase的安裝部署5.修改hbase-site.xml文件修改/export/servers/hbase-2.5.2/conf目錄下的hbase-site.xml文件,將<configuration>和</configuration>之間的內容修改如右側所示:大數(shù)據(jù)理論與應用基礎<configuration>

<property>

<name>hbase.cluster.distributed</name>

<value>true</value>

</property>

<property>

<name>perty.dataDir</name>

#安裝ZooKeeper時設置的數(shù)據(jù)目錄,根據(jù)實際情況修改

<value>/export/servers/apache-zookeeper-3.8.0-bin/zkdata</value>

</property>

<property>

#指定HBase連接的ZooKeeper集群

<name>hbase.zookeeper.quorum</name>

<value>master,slave01,slave02</value>

</property>

<prop

溫馨提示

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

評論

0/150

提交評論