1. 程式人生 > >對hadoop中各個元件的簡單描述

對hadoop中各個元件的簡單描述

英語理解能力好的童鞋可以參考(這裡有詳細的各個hadoop元件的名稱及用途): http://www.cloudera.com/documentation/manager/5-0-x/Cloudera-Manager-Managing-Clusters/cm5mc_hive_service.html#xd_583c10bfdbd326ba-204beb9-13ef1573a9e–7ff6__section_gmq_nq5_hl
hive包括:Metastore Server ,HiveServer2,GATEWAY
1.Hive Metastore有三種配置方式,分別是:
Embedded Metastore Database (Derby) 內嵌模式
Local Metastore Server 本地元儲存
Remote Metastore Server 遠端元儲存
1.1 Metadata、Metastore作用
metadata即元資料。元資料包含用Hive建立的database、tabel等的元資訊。
元資料儲存在關係型資料庫中。如Derby、MySQL等。

Metastore的作用是:客戶端連線metastore服務,metastore再去連線MySQL資料庫來存取元資料。有了metastore服務,就可以有多個客戶端同時連線,而且這些客戶端不需要知道MySQL資料庫的使用者名稱和密碼,只需要連線metastore 服務即可。

1.2三種配置方式區別
內嵌模式使用的是內嵌的Derby資料庫來儲存元資料,也不需要額外起Metastore服務。這個是預設的,配置簡單,但是一次只能一個客戶端連線,適用於用來實驗,不適用於生產環境。

本地元儲存和遠端元儲存都採用外部資料庫來儲存元資料,目前支援的資料庫有:MySQL、Postgres、Oracle、MS SQL Server.在這裡我們使用MySQL。

本地元儲存和遠端元儲存的區別是:本地元儲存不需要單獨起metastore服務,用的是跟hive在同一個程序裡的metastore服務。遠端元儲存需要單獨起metastore服務,然後每個客戶端都在配置檔案裡配置連線到該metastore服務。遠端元儲存的metastore服務和hive執行在不同的程序裡。

在生產環境中,建議用遠端元儲存來配置Hive Metastore。
2.HiveServer2
2.1 引入
HiveServer2(HS2)是一種能使客戶端執行Hive查詢的服務。 HiveServer2是HiveServer1的改進版,HiveServer1已經被廢棄。HiveServer2可以支援多客戶端併發和身份認證。旨在為開放API客戶端(如JDBC和ODBC)提供更好的支援。

HiveServer2單程序執行,提供組合服務,包括基於Thrift的Hive服務(TCP或HTTP)和用於Web UI的Jetty Web伺服器。

2.2 架構
基於Thrift的Hive服務是HiveServer2的核心,負責維護Hive查詢(例如,從Beeline)。Thrift是構建跨平臺服務的RPC框架。其堆疊由4層組成:server,Transport,Protocol和處理器。可以在 https://thrift.apache.org/docs/concepts 找到有關分層的更多詳細資訊。

2.2.1 Server
HiveServer2在TCP模式下使用TThreadPoolServer(來自Thrift),在HTTP模式下使用Jetty Server。

TThreadPoolServer為每個TCP連線分配一個工作執行緒。即使連線處於空閒狀態,每個執行緒也始終與連線相關聯。因此,由於大量併發連線產生大量執行緒,從而導致潛在的效能問題。在將來,HiveServer2可能切換到TCP模式下的另一個不同型別的Server上,例如TThreadedSelectorServer。

2.2.2 Transport
如果客戶端和伺服器之間需要代理(例如,為了負載均衡或出於安全原因),則需要HTTP模式。這就是為什麼它與TCP模式被同樣支援的原因。可以通過Hive配置屬性hive.server2.transport.mode指定Thrift服務的傳輸模式。

2.2.3 Protocol
協議責序列化和反序列化。HiveServer2目前正在使用TBinaryProtocol作為Thrift的協議進行序列化。 在未來,可以更多考慮其他協議,如TCompactProtocol,可以考慮更多的效能評估。

2.2.4 處理器
處理流程是處理請求的應用程式邏輯。例如,ThriftCLIService.ExecuteStatement()方法實現了編譯和執行Hive查詢的邏輯。

2.3 依賴
Metastore metastore可以配置為嵌入式(與HiveServer2相同的過程)或遠端伺服器(也是基於Thrift的服務)。 HS2與查詢編譯所需的元資料相關。
Hadoop cluster HiveServer2準備了各種執行引擎(MapReduce/Tez/Spark)的物理執行計劃,並將作業提交到Hadoop叢集執行。
3. JDBC Client
推薦使用JDBC驅動程式讓客戶端與HiveServer2進行互動。請注意,有一些用例(例如,Hadoop Hue),直接使用Thrift客戶端,而沒有使用JDBC。 以下是進行第一次查詢所涉及的一系列API呼叫:

JDBC客戶端(例如,Beeline)通過初始化傳輸連線(例如,TCP連線),再呼叫OpenSession API來獲取SessionHandle來建立HiveConnection。 會話是從伺服器端建立的。
執行HiveStatement(遵循JDBC標準),並且Thrift客戶端呼叫ExecuteStatement API。 在API呼叫中,SessionHandle資訊與查詢資訊一起傳遞給伺服器。
HiveServer2伺服器接收請求,並讓驅動程式(CommandProcessor)進行查詢解析和編譯。該驅動程式啟動後臺工作,將與Hadoop互動,然後立即向客戶端返回響應。這是ExecuteStatement API的非同步設計。響應包含從伺服器端建立的OperationHandle。
客戶端使用OperationHandle與HiveServer2互動以輪詢查詢執行的狀態。
3.GATEWAY
CDH中的gateway實際為在client測的一個代理,用於協助將Hive執行時所需要的配置檔案部署到Hive的客戶端。

hdfs:HttpFs,Balancer
HttpFs
通過HttpFs你可以在瀏覽器裡面管理HDFS上的檔案
HttpFs還提供了一套REST 風格的API可以用來管理HDFS

Balancer
Hadoop的HDFS叢集非常容易出現機器與機器之間磁碟利用率不平衡的情況,比如叢集中新增新的資料節點。當HDFS出現不平衡狀況的時候,將引發很多問題,比如MR程式無法很好地利用本地計算的優勢,機器之間無法達到更好的網路頻寬使用率,機器磁碟無法利用等等。可見,保證HDFS中的資料平衡是非常重要的。
在Hadoop中,包含一個Balancer程式,通過執行這個程式,可以使得HDFS叢集達到一個平衡的狀態,