天天看點

Hadoop 大資料概念那些事兒

又開始接觸大資料了,相比較2013年的Hadoop發覺新增了太多元件,近五年真是。。。

話不多說,常見的概念應用場景先搞清楚

文章目錄

    • Hadoop
      • HDFS 适用場景
      • 參考
    • YARN
      • 百度百科中的YARN
        • 概念
        • 基本缺陷
        • 主要優點
      • 參考
    • Spark
      • CDH中的Spark
      • 參考
    • HUE
      • Editor:
      • Dashboard 看闆
      • Scheduler 排程器
      • Browsers:浏覽器
      • 參考
    • Impala
      • 在Hadoop 上做BI-style Queries
      • 與你基礎架構保持一緻
      • 快速實作
      • 基于企業級的安全
      • 無鎖操作
      • 增強 Hadoop 使用者體驗
      • CDH中Impala的介紹
      • 參考
    • oozie
      • CDH中oozie的介紹
      • 參考
    • Sqoop
      • 參考
    • Kafka
      • 消息
      • web活動跟蹤
      • 度量
      • 日志聚合
      • 流處理
      • 事件溯源
      • 送出日志
      • kafka logstach? TODO
      • 參考
    • Hive
      • CDH中的Hive
      • 百度上的Hive
      • 參考
    • HBase
      • CDH中HBase
      • 參考
    • Kudu
      • 主要特點
      • 主要概念
        • 資料模型Data Model
        • 低延遲的随機通路
        • Apache Hadoop 生态系統內建
        • Built by and for Operators
      • 适用場景
      • 參考
    • Pig
      • 百度百科的pig
      • W3CSCHOOL 的說明
      • 與Hive 的差別
      • 參考
    • Apache Parquet
      • 參考

Hadoop

Apache Hadoop 軟體庫 是一個架構,它允許使用簡單的程式設計模型在計算機叢集之間對大型資料集進行分布式處理。它被設計成從單個伺服器擴充到數千台機器,每台機器都提供本地計算和存儲。庫本身的設計目的不是依賴硬體來提供高可用性,而是檢測和處理應用層上的故障,是以在一組計算機上提供高可用性的服務,而每組計算機都可能出現故障。

以下是許多使用者可能感興趣的一些顯著特性:

Hadoop(包括HDFS)非常适合使用 商業硬體 進行分布式存儲和分布式處理。它是容錯的,可伸縮的,并且擴充非常簡單。MapReduce是Hadoop不可分割的一部分,它以其對大量分布式應用程式的簡單性和适用性而聞名。

HDFS是高度可配置的,通常安裝後的預設配置就足夠用。大多數時候,隻有當非常大的叢集使用的時候才需要對配置進行調優。

Hadoop是用Java編寫的,并支援主流平台。

Hadoop支援類似shell的指令來直接與HDFS互動。

NameNode和datanode已經内建了在web伺服器,可以輕松檢查目前叢集狀态。

New features and improvements are regularly implemented in HDFS. The following is a subset of useful features in HDFS:

HDFS定期新增功能和改進特性。以下是HDFS中有一些有用的特性

  • 檔案權限和身份驗證
  • 機架感覺: 在排程任務和配置設定存儲時考慮節點的實體位置。
  • Safemode: 一種用于維護的管理模式。
  • fsck: 一個用于診斷檔案系統的健康狀況、查找丢失的檔案或塊的實用程式。
  • fetchdt: 一個用來擷取 DelegationToken 并且存儲在本地檔案系統的工具。
  • Balancer: 當資料在資料在DataNodes分布不均勻時,用于平衡叢集的工具。
  • 更新和復原: 在軟體更新之後,可以復原到更新之前的 HDFS 的狀态,以防出現意外問題。
  • Secondary NameNode: 執行命名空間的定期檢查點,并幫助保持 NameNode 中包含HDFS修改日志的檔案的大小在一定範圍内。
  • Checkpoint node: 執行命名空間的定期檢查點,并幫助最小化存儲在NameNode上的日志的大小,其中包含對HDFS的更改。取代了之前由 Secondary NameNode 所扮演的角色,盡管還沒有經過大量實踐檢驗。NameNode 允許同時使用多個檢查點節點,隻要系統中沒有注冊的備份節點
  • Backup node: 一個擴充的檢查點節點。除了檢查點之外,它還從NameNode接收編輯流,并維護自己 namespace記憶體拷貝,該副本始終與活動的 NameNode 名稱空間狀态保持同步。一次隻能向 NameNode 注冊一個備份節點

HDFS 适用場景

高吞吐率、批處理

參考

  • https://hadoop.apache.org/

YARN

YARN的基本思想是将 資源管理 和 任務排程/監控功能 分解成獨立的守護程序。其思想是建立一個全局資料總管(global ResourceManager RM)和每個應用程式應用程式管理器(per-application ApplicationMaster AM)。一個應用程式不是一個任務 就是 組合的有向無環圖(DAG) 任務。

ResourceManager 和 NodeManager形成了資料計算架構。ResourceManager 是在系統中所有應用程式之間仲裁資源的最終權威。NodeManager 是每台機器負責容器的架構代理,監視資源使用(CPU、記憶體、磁盤、網絡)情況,并向 ResourceManager/Scheduler 報告。

實際上,每個應用程式的 ApplicationMaster 是一個特定于架構的庫,其任務是與 ResourceManager協商資源,并與NodeManager(s)合作執行和監視任務。

Hadoop 大資料概念那些事兒

ResourceManager 有兩個重要組成部分:Scheduler 和 ApplicationsManager.

Scheduler 負責将資源配置設定給各種運作中的應用程式,這些應用程式受容量、隊列等限制。Scheduler 是純粹的排程器,它不執行對應用程式狀态的監視或跟蹤。此外,它不能保證由于應用程式故障或硬體故障而重新啟動失敗的任務。排程程式根據應用程式的資源需求執行排程功能;它是基于資源容器的抽象概念(abstract notion)來實作的,資源容器包含記憶體、cpu、磁盤、網絡等元素。

Scheduler 提供可插拔的政策,負責将叢集資源劃分到各種隊列、應用程式等中。目前的 Scheduler,諸如 CapacityScheduler 和 FairScheduler 。

ApplicationsManager 負責接收作業的送出請求,協商第一個容器以執行應用程式特定的 ApplicationMaster,并在失敗時提供重新啟動ApplicationMaster容器的服務。每個應用程式的 ApplicationMaster 負責 與 Scheduler 協商合适的資源容器,并跟蹤它們的狀态并監視進度。

在 hadoop-2.x 中 MapReduce 保持了與以前穩定版本(hadoop-1.x)的API相容性。這意味着所有MapReduce任務仍然應該在YARN上運作時保持不變,隻需重新編譯就可以了。

YARN支援通過 ReservationSystem 實作 資源保留 的概念,該系統允許使用者指定資源逾時和時間限制(例如截止日期)的描述,并保留資源以確定重要任務的可預測執行。ReservationSystem 可以跟蹤逾時資源、對預訂執行準入控制、動态訓示底層排程程式確定預訂滿填充(reservation is fullfilled)。

為了将 YARN 可以伸縮到幾千個節點,YARN 提供了YARN Federation 特性來支援 聯邦(Federation)概念 。Federation 可以透明的将多個 yarn (sub-)clusters 聯合在一起,并使它們作為單個大叢集出現。這可以用于實作更大的規模,并/或允許多個獨立叢集一起用于非常大的工作,同時也可對外向具有所有這些工作的目标客戶提供服務(or for tenants who have capacity across all of them.)。

百度百科中的YARN

概念

YARN的基本思想是将JobTracker的兩個主要功能(資源管理和作業排程/監控)分離,主要方法是建立一個全局的ResourceManager(RM)和若幹個針對應用程式的ApplicationMaster(AM)。這裡的應用程式是指傳統的MapReduce作業或作業的DAG(有向無環圖)。

YARN 分層結構的本質是 ResourceManager。這個實體控制整個叢集并管理應用程式向基礎計算資源的配置設定。ResourceManager 将各個資源部分(計算、記憶體、帶寬等)精心安排給基礎 NodeManager(YARN 的每節點代理)。ResourceManager 還與 ApplicationMaster 一起配置設定資源,與 NodeManager 一起啟動和監視它們的基礎應用程式。在此上下文中,ApplicationMaster 承擔了以前的 TaskTracker 的一些角色,ResourceManager 承擔了 JobTracker 的角色。

ApplicationMaster 管理一個在 YARN 内運作的應用程式的每個執行個體。ApplicationMaster 負責協調來自 ResourceManager 的資源,并通過 NodeManager 監視容器的執行和資源使用(CPU、記憶體等的資源配置設定)。請注意,盡管目前的資源更加傳統(CPU 核心、記憶體),但未來會帶來基于手頭任務的新資源類型(比如圖形處理單元或專用處理裝置)。從 YARN 角度講,ApplicationMaster 是使用者代碼,是以存在潛在的安全問題。YARN 假設 ApplicationMaster 存在錯誤或者甚至是惡意的,是以将它們當作無特權的代碼對待。

NodeManager 管理一個 YARN 叢集中的每個節點。NodeManager 提供針對叢集中每個節點的服務,從監督對一個容器的終生管理到監視資源和跟蹤節點健康。MRv1 通過插槽管理 Map 和 Reduce 任務的執行,而 NodeManager 管理抽象容器,這些容器代表着可供一個特定應用程式使用的針對每個節點的資源。YARN 繼續使用 HDFS 層。它的主要 NameNode 用于中繼資料服務,而 DataNode 用于分散在一個叢集中的複制存儲服務。

要使用一個 YARN 叢集,首先需要來自包含一個應用程式的客戶的請求。ResourceManager 協商一個容器的必要資源,啟動一個 ApplicationMaster 來表示已送出的應用程式。通過使用一個資源請求協定,ApplicationMaster 協商每個節點上供應用程式使用的資源容器。執行應用程式時,ApplicationMaster 監視容器直到完成。當應用程式完成時,ApplicationMaster 從 ResourceManager 登出其容器,執行周期就完成了。 [1]

基本缺陷

MapReduce 的第一個版本既有優點也有缺點。MRv1 是目前使用的标準的大資料處理系統。但是,這種架構存在不足,主要表現在大型叢集上。當叢集包含的節點超過 4,000 個時(其中每個節點可能是多核的),就會表現出一定的不可預測性。其中一個最大的問題是級聯故障,由于要嘗試複制資料和重載活動的節點,是以一個故障會通過網絡泛洪形式導緻整個叢集嚴重惡化。

但 MRv1 的最大問題是多租戶。随着叢集規模的增加,一種可取的方式是為這些叢集采用各種不同的模型。MRv1 的節點專用于 Hadoop,是以可以改變它們的用途以用于其他應用程式和工作負載。當大資料和 Hadoop 成為雲部署中一個更重要的使用模型時,這種能力也會增強,因為它允許在伺服器上對 Hadoop 進行實體化,而無需虛拟化且不會增加管理、計算和輸入/輸出開銷。

主要優點

大大減小了 JobTracker(也就是現在的 ResourceManager)的資源消耗,并且讓監測每一個 Job 子任務 (tasks) 狀态的程式分布式化了,更安全、更優美。

在新的 Yarn 中,ApplicationMaster 是一個可變更的部分,使用者可以對不同的程式設計模型寫自己的 AppMst,讓更多類型的程式設計模型能夠跑在 Hadoop 叢集中,可以參考 hadoop Yarn 官方配置模闆中的 mapred-site.xml 配置。

對于資源的表示以記憶體為機關 ( 在目前版本的 Yarn 中,沒有考慮 cpu 的占用 ),比之前以剩餘 slot 數目更合理。

老的架構中,JobTracker 一個很大的負擔就是監控 job 下的 tasks 的運作狀況,現在,這個部分就扔給 ApplicationMaster 做了,而 ResourceManager 中有一個子產品叫做 ApplicationsMasters( 注意不是 ApplicationMaster),它是監測 ApplicationMaster 的運作狀況,如果出問題,會将其在其他機器上重新開機。

Container 是 Yarn 為了将來作資源隔離而提出的一個架構。這一點應該借鑒了 Mesos 的工作,目前是一個架構,僅僅提供 java 虛拟機記憶體的隔離,hadoop 團隊的設計思路應該後續能支援更多的資源排程和控制 , 既然資源表示成記憶體量,那就沒有了之前的 map slot/reduce slot 分開造成叢集資源閑置的尴尬情況。

參考

  • https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html
  • https://baike.baidu.com/item/yarn/16075826?fr=aladdin

Spark

Apache Spark™ 是用于大規模資料處理的統一分析引擎。

Apache Spark 使用最先進的 DAG 排程器、查詢優化器和實體執行引擎,實作了批處理和流資料的高性能。

Spark提供了超過80個進階操作符,使得建構并行應用程式變得容易。你可以在Scala、Python、R和SQL shell中 互動式 地使用它。

Apache Spark是一種快速通用的叢集計算系統。它提供了Java、Scala、Python和R的進階api,以及支援一般執行圖的優化引擎。它還支援豐富的進階工具集,包括用于SQL和結構化資料處理的Spark SQL、用于機器學習的MLlib、用于圖形處理的GraphX和Spark流。

CDH中的Spark

Apache Spark是一個通用的分布式計算架構,它為批處理和互動處理提供了高性能。它暴露了對應的Java、Python和Scala的APIs,Spark core由幾個相關項目組成:

  • Spark SQL - 用于處理結構化資料的子產品。允許您無縫地混合SQL查詢與 Spark 程式
  • Spark Streaming - 允許您建構可伸縮的容錯(fault-tolerant)流應用程式的API。
  • MLlib - 實作通用機器學習算法的API。
  • GraphX - 圖形和圖形并行計算的API

通過使用互動式shell 或 送出應用程式,你可以在本地或跨叢集運作Spark應用程式。互動式地運作Spark應用程式通常在資料研究(data-exploration) 階段和 特設分析(ad hoc analysis) 階段執行

要運作跨叢集分布的應用程式,Spark 需要一個叢集管理器。Cloudera 支援兩個叢集管理器:YARN 和 獨立 Spark 。在YARN 上運作時,Spark 應用程式程序 由 YARN ResourceManager and NodeManager 角色管理。當Spark獨立運作時,Spark 應用程式程序由 Spark Master 和 Worker角色管理。

參考

  • https://spark.apache.org/
  • https://www.cloudera.com/documentation/enterprise/5-15-x/topics/spark.html

HUE

是基于web,用來查詢Hadoop資料的互動式查詢編輯器。主要提供以下幾大功能

Editor:

編輯器的目标是讓資料查詢變的更簡單和高效。

他關注SQL處理并支援作業式送出。其中的查詢助手可以智能的自動補全、搜尋以及對資料進行标簽。

Dashboard 看闆

看闆是讓他人簡單并快速了解你的資料的一種方法。不需要程式設計,僅需要拖拽和點選就可以完成看闆的定制操作。

Scheduler 排程器

應用程式可以讓你建構工作流,然後自動定時執行。提供一個監視的接口用來顯示進度、日志,并允許暫停或停止作業等操作。

Browsers:浏覽器

Hue的浏覽器支援資料目錄。它們可以讓您輕松地搜尋、浏覽和執行對資料或雲計算或本地叢集中的作業的操作。

CDH 使用HUE

用Impala的高效、低延遲的SQL 查詢引擎 來分析和可視化你的資料。

hue也可以導入導出資料,并可以編寫查詢計劃(比如每天一次),用圖形展現;還可以檢視應用任務運作情況及日志;上傳、下載下傳、修改HDFS中檔案等等。

參考

  • http://gethue.com/
  • https://www.cloudera.com/documentation/enterprise/5-15-x/topics/hue.html

Impala

Apache Impala 是針對 Apache Hadoop 實作的開源的本地分析資料庫。

Impala提高了Apache Hadoop上SQL查詢性能的門檻,同時保留了熟悉的使用者體驗。使用Impala,您可以實時查詢資料,無論是存儲在HDFS還是Apache HBase中,包括SELECT、JOIN和聚合函數。此外,Impala使用與Apache Hive相同的中繼資料、SQL文法(Hive SQL)、ODBC驅動程式和使用者界面(Hue Beeswax),為面向批處理或實時查詢提供熟悉的統一平台。(出于這個原因,Hive使用者可以使用Impala,隻需要很少的設定開銷。)

為了避免延遲,Impala繞過MapReduce,通過一個專門的分布式查詢引擎直接通路資料,這個查詢引擎與商業并行rdbms中的查詢引擎非常相似。根據查詢和配置的類型,其結果比Hive快很多。

與查詢Hadoop資料的其他方法相比,這種方法有許多優點

  • 由于資料節點上的本地處理,避免了網絡瓶頸。
  • 可以使用單個、開放和統一的中繼資料存儲。
  • 不需要昂貴的資料格式轉換,是以不會産生開銷。
  • 所有資料都可以立即查詢,ETL沒有延遲
  • 所有硬體都用于Impala查詢以及MapReduce
  • 隻需要一個機器池來就可以擴充

在Hadoop 上做BI-style Queries

Impala 提供基于Hadoop的低延遲高并發的BI/分析查詢特性(不是基于類似于Apache Hive的批處理架構的處理結果)。即使在多租戶(multitenant)環境下,Impala也可以線性擴充。

與你基礎架構保持一緻

使用與Hadoop部署相同的檔案和資料格式、中繼資料、安全性和資源管理架構—沒有備援基礎設施或資料轉換/複制。

快速實作

對于 Apache Hive 使用者, Impala 提供了相同的中繼資料和ODBC驅動。像Hive一樣,Impala支援SQL,是以你不必擔心會有新的研究成本。

基于企業級的安全

Impala與本地Hadoop安全性和Kerberos內建在一起進行身份驗證,通過Sentry子產品,您可以確定為正确的資料授權正确的使用者和應用程式。

無鎖操作

Impala 是安全的 (基于Apache License).

增強 Hadoop 使用者體驗

使用 Impala, 更多的使用者,無論是使用SQL查詢還是BI應用程式,都可以通過單個存儲庫和通過分析從源存儲的中繼資料與更多資料進行互動

CDH中Impala的介紹

Apache Impala項目對流行的Apache Hadoop檔案格式存儲的資料提供高性能、低延遲的SQL查詢。查詢的快速響應支援互動式探索和分析查詢的微調,而不是傳統上與SQL-on-Hadoop技術相關聯的長批作業。(你經常會看到“互動”這個詞用在這些具有人類響應時間的快速查詢上。)

Impala與Apache Hive metastore資料庫內建,在兩個元件之間共享資料庫和表。與Hive的高度內建以及與HiveQL文法的相容性,使您可以使用Impala或Hive來建立表、發出查詢、加載資料等等。

以下是Impala的關鍵特性:

  • Impala與現有的CDH生态系統內建,意味着可以使用CDH包含的各種解決方案存儲、共享和通路資料。這也避免了資料豎井和最小化昂貴的資料移動。
  • Impala提供對存儲在CDH中的資料的通路,而不需要MapReduce任務所需的Java技能。Impala可以直接從HDFS檔案系統通路資料。Impala還提供一個SQL前端來通路HBase資料庫系統或Amazon Simple Storage system (S3)中的資料。
  • Impala通常在幾秒或幾分鐘内傳回結果,而不是通常需要許多分鐘或幾個小時才能完成Hive查詢。
  • Impala開創了使用Parquet檔案格式的先河,這是一種柱狀存儲布局,為資料倉庫場景中典型的大規模查詢進行了優化。

參考

  • https://impala.apache.org//overview.html
  • https://www.cloudera.com/documentation/enterprise/5-15-x/topics/impala.html

oozie

Oozie是一個工作流排程器系統,用于管理Apache Hadoop作業

  • Oozie工作流作業是有向無環圖(Directed Acyclical Graphs DAGs)的動作。
  • Oozie協調器作業是由時間(頻率) 和 資料可用性 來 觸發的可反複執行的的Oozie工作流作業
  • Oozie與其他的Hadoop産品內建在一起,支援幾種現成的Hadoop作業(如Java map-reduce、Streaming map-reduce、Pig、Hive、Sqoop 和 Distcp)以及系統特定作業(如Java程式和shell腳本)。
  • Oozie是一個可伸縮、可靠和可擴充的系統。

CDH中oozie的介紹

Hadoop 的 Apache Oozie 工作流排程器是管理 Apache Hadoop 作業的工作流和協調服務:

  • Oozie工作流作業(jobs)是有向無環圖(DAGs) 的 actions; actions 通常是Hadoop作業 (MapReduce, Streaming, Pipes, Pig, Hive, Sqoop等)。
  • Oozie協調器作業根據時間(頻率) 和 資料可用性 觸發周期性的 Workflow jobs。
  • Oozie Bundle jobs are sets of Coordinator jobs managed as a single job.
  • Oozie Bundle jobs 是作為一個單獨job 的一組 Coordinator jobs。

Oozie是一個可擴充、可伸縮和支援資料的服務,您可以使用它來協調運作在Hadoop上的作業之間的依賴關系

參考

  • http://oozie.apache.org/
  • https://en.wikipedia.org/wiki/Directed_acyclic_graph

Sqoop

Apache Sqoop(TM-Trademark)是一種用于在Apache Hadoop和結構化資料存儲(如關系資料庫)之間高效傳輸大量資料的工具.

Sqoop于2012年3月順利從孵化器畢業,現為頂級Apache項目。

Apache Sqoop 是一種高效傳輸結構化、半結構化和非結構化資料源資料的工具。關系資料庫是結構化資料源的示例,它們存儲的資料具有良好定義的模式。Cassandra 和 Hbase是 典型的半結構化資料源,HDFS 是 典型的 非結構化資料。

參考

http://sqoop.apache.org/

Kafka

消息

Kafka可以很好地替代傳統的消息代理。消息代理用于各種原因(從資料生産者分離處理、緩沖未處理的消息等)。與大多數消息傳遞系統相比,Kafka具有更好的吞吐量、内置的分區、複制和容錯功能,這使它成為大規模消息處理應用程式的良好解決方案。

在我們的經驗中,消息傳遞使用的吞吐量通常相對較低,但可能需要較低的端到端延遲,并且常常依賴于Kafka提供的強大的持久性保證。

在這個領域,Kafka可以與ActiveMQ或RabbitMQ等傳統消息傳遞系統相媲美。

web活動跟蹤

Kafka最初的用例是能夠作為一組實時釋出-訂閱feed重新建構使用者活動跟蹤管道。這意味着站點活動(頁面視圖、搜尋或使用者可能采取的其他操作)被釋出到中心主題,每個活動類型有一個主題。這些提要可用于訂閱一系列用例,包括實時處理、實時監視和加載到Hadoop或離線資料倉庫系統中以進行離線處理和報告。

度量

Kafka經常用于操作監控資料。包含 從 分布式應用程式到生産集中處理的操作資料 的聚合統計資訊。

日志聚合

許多人使用Kafka作為日志聚合解決方案的替代品。日志聚合通常從伺服器收集實體日志檔案,并将它們放在一個集中的地方(可能是檔案伺服器或HDFS)進行處理。Kafka将檔案的細節抽象出來,将日志或事件資料抽象成消息流。這允許更低的延遲處理,更容易支援多個資料源和分布式資料消耗。與以日志為中心的系統(如Scribe或Flume)相比,Kafka對複制提供了同樣好的性能、更強的耐久性保證和更低的端到端的延遲。

流處理

Kafka可以處理管道中的許多使用者處理資料,包括多個階段,原始輸入資料被從Kafka主題中消費,然後聚合、充實或以其他方式轉換為新主題,以進一步消費或後續處理。例如,用于推薦新聞文章的處理管道可能會從RSS提要中抓取文章内容,并将其釋出到“文章”主題;進一步的處理可能會将該内容規範化或删除,并将已清理的文章内容釋出到新的主題;最後的處理階段可能會嘗試向使用者推薦這些内容。這種處理管道基于各個主題建立實時資料流圖。從0.10.0.0開始,Apache Kafka中提供了一個輕量級但功能強大的流處理庫Kafka Streams來執行上述資料處理。除了Kafka流,其他的開源流處理工具包括Apache Storm和Apache Samza。

事件溯源

事件源是一種應用程式設計風格,其中狀态更改被記錄為時間順序的記錄序列。Kafka對非常大的存儲日志資料的支援使它成為建構這種風格的應用程式的優秀後端

送出日志

Kafka可以作為分布式系統的一種外部委托日志。日志有助于在節點之間複制資料,并充當失敗節點恢複資料的重新同步機制。Kafka中的日志壓縮特性有助于支援這種用法。在這種用法中,Kafka類似于Apache BookKeeper項目。

kafka logstach? TODO

參考

  • https://kafka.apache.org/documentation/
  • https://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying 這個典型的場景描述可以後繼單獨翻譯

Hive

Apache Hive™ 資料倉庫軟體使用 SQL 文法來讀、寫和管理在分布式存儲中的大型資料集。結構可以投影到已經存儲的資料上。提供了一個指令行工具和 JDBC 驅動程式便于使用者連接配接到Hive

基于Apache Hadoop™,Hive 提供了如下特性:

  • 支援 SQL 輕松通路資料,諸如extract/transform/load (ETL)、報告、資料分析 這些基于數倉的任務。
  • 一個在多樣資料格式上加強資料結構的機制
  • 可以直接通路Apache HDFS™或者諸如 Apache HBase™ 在存儲系統上的資料
  • 使用 Apache Tez™、Apache Spark™、 MapReduce 進行查詢
  • 使用 HPL-SQL 過程語言
  • 通過 Hive LLAP、Apache YARN 和 Apache Slider 進行亞秒查詢檢索。
  • Hive 提供了标準的 SQL 功能,包括許多後期 SQL:2003 和 SQL:2011 的分析特性。
  • 通過使用者定義函數(udf)、使用者定義聚合(UDAFs)和使用者定義表函數(UDTFs),使用者可以擴充Hive的SQL。
  • 沒有一種資料必須存儲的 “Hive格式”。Hive 支援基于分隔符逗号、制表符的文本檔案、 Apache Parquet™, Apache ORC™ 和其他檔案格式。
  • 對于其他資料格式,使用者可以擴充Hive連接配接器。有關詳細資訊,請參閱- Developer指南中的 File Formats and Hive SerDe。
  • Hive不是為線上事務處理(OLTP)工作負載而設計的。它最好用于傳統的資料倉庫任務。
  • Hive旨在最大限度地提高可伸縮性(通過向Hadoop叢集動态添加更多的機器進行擴充)、性能、可擴充性、容錯性以及與輸入格式的松散耦合。
  • Hive 包含 HCatalog 和 WebHCat.
  • HCatalog是Hive的一個元件。它是Hadoop的一個表和存儲管理層,允許使用不同資料處理工具(包括Pig和MapReduce)的使用者更容易地在網格上讀寫資料。
  • WebHCat提供了一個服務,你可以使用用HTTP (REST風格)接口去執行,Hadoop MapReduce(或YARN)、Pig、Hive的作業來操作 Hive中繼資料。

CDH中的Hive

Hive資料倉庫軟體支援在分布式存儲中讀取、寫入和管理大型資料集。使用與SQL非常相似的Hive查詢語言(HiveQL),查詢被轉換為一系列作業,這些作業通過MapReduce 或 Apache Spark在Hadoop叢集上執行。

Users can run batch processing workloads with Hive while also analyzing the same data for interactive SQL or machine-learning workloads using tools like Apache Impala or Apache Spark—all within a single platform.

使用者可以使用 Hive 運作批處理工作負載,同時可以使用互動式SQL 或者 機器學習工作負載(像在單個平台上的Apache Impala 或者 Apache Spark—all)來分析這些資料。

作為CDH的一部分,Hive也提供如下益處:

  • 通過 YARN 來提供統一的資源管理
  • 通過Cloudera Manager來簡單的釋出和管理
  • Shared security 和 governance(治理)遵從 Apache Sentry and Cloudera Navigator。

百度上的Hive

hive是基于Hadoop的一個資料倉庫工具,可以将結構化的資料檔案映射為一張資料庫表,并提供簡單的sql查詢功能,可以将sql語句轉換為MapReduce任務進行運作。 其優點是學習成本低,可以通過類SQL語句快速實作簡單的MapReduce統計,不必開發專門的MapReduce應用,十分适合資料倉庫的統計分析。

Hive是建立在 Hadoop 上的資料倉庫基礎構架。它提供了一系列的工具,可以用來進行資料提取轉化加載(ETL),這是一種可以存儲、查詢和分析存儲在 Hadoop 中的大規模資料的機制。Hive 定義了簡單的類 SQL 查詢語言,稱為 HQL,它允許熟悉 SQL 的使用者查詢資料。同時,這個語言也允許熟悉 MapReduce 開發者的開發自定義的 mapper 和 reducer 來處理内建的 mapper 和 reducer 無法完成的複雜的分析工作。

Hive 沒有專門的資料格式。 Hive 可以很好的工作在 Thrift 之上,控制分隔符,也允許使用者指定資料格式。

  • 支援索引,加快資料查詢。
  • 不同的存儲類型,例如,純文字檔案、HBase 中的檔案。
  • 将中繼資料儲存在關系資料庫中,大大減少了在查詢過程中執行語義檢查的時間。
  • 可以直接使用存儲在Hadoop 檔案系統中的資料。
  • 内置大量使用者函數UDF 來操作時間、字元串和其他的資料挖掘工具,支援使用者擴充UDF - 數來完成内置函數無法實作的操作。
  • 類SQL 的查詢方式,将SQL 查詢轉換為MapReduce 的job 在Hadoop叢集上執行。 [1]

參考

  • https://cwiki.apache.org/confluence/display/Hive
  • https://baike.baidu.com/item/hive/67986?fr=aladdin
  • https://www.cloudera.com/documentation/enterprise/5-15-x/topics/hive.html

HBase

低延遲、随機讀寫

Apache HBase™ 是一個分布式、可擴充、大資料存儲的 Hadoop 資料庫。

當您需要對大資料進行随機、實時的讀寫通路時,請使用Apache HBase。這個項目的目标是在商業硬體叢集上托管非常大的表–具有數十億行 x 數百萬列。Apache HBase是一個開源的、分布式的、版本化的、非關系型的資料庫,模仿了谷歌的Bigtable: Chang 等人建構的為結構化資料建構的分布式存儲系統。正如 Bigtable 利用了谷歌檔案系統提供的分布式資料存儲一樣,Apache HBase 在 Hadoop和HDFS之上提供了類似于Bigtable的功能。

  • 線性和子產品化的可伸縮性。
  • 嚴格一緻的讀寫。
  • 自動和可配置的分片表
  • 區域伺服器之間的自動故障轉移支援。
  • 便捷的基類來使用 Apache HBase表 支援 Hadoop MapReduce 作業
  • 使用 簡單的 Java API進行用戶端通路。
  • 用于實時查詢的塊緩存和布魯姆過濾器(Bloom Filters)。
  • 通過服務側過濾器向下推查詢謂詞
  • Thrift網關和REST-ful web service 支援XML、Protobuf和二進制資料編碼選項。
  • 可基于 jruby-based (JIRB) shell 擴充
  • 支援通過 Hadoop metrics 子系統将名額導出到檔案或Ganglia;或通過JMX進行處理

CDH中HBase

Apache HBase是一個可伸縮的、分布式的、面向列的資料存儲。Apache HBase提供實時讀寫随機通路在HDFS上的超大資料集。

參考

  • http://hbase.apache.org/book.html
  • https://www.cloudera.com/documentation/enterprise/5-15-x/topics/hbase.html

Kudu

Kudu是一個為Apache Hadoop平台開發的柱狀存儲管理器。Kudu 具有 Hadoop生态系統應用程式的共同技術屬性:它運作在商業硬體上,水準可拓展,支援高可用性操作

Kudu’s design sets it apart. Some of Kudu’s benefits include:

Kudu的設計讓它與衆不同。Kudu的一些優勢包括:

  • OLAP工作負載的快速處理
  • 與MapReduce、Spark和其他Hadoop生态系統元件的內建。
  • 與Apache Impala的緊密內建,使其成為使用帶有Apache Parquet 的HDFS的一個很好的、可變的替代方案。
  • 強而靈活的一緻性模型,允許您根據每個請求選擇一緻性需求,包括嚴格序列化一緻性選項。
  • 強大的性能,同時運作順序和随機工作負載。
  • 通過 Cloudera Manager 簡單的管理和營運
  • High availability(高可用性)。Tablet server 和 Master 使用 Raft Consensus Algorithm - 來保證節點的高可用,確定隻要有一半以上的副本可用,該 tablet - 便可用于讀寫。例如,如果3個副本中有2個或5個副本中的3個可用,則該tablet可用。即使在 leader tablet - 出現故障的情況下,讀取功能也可以通過 read-only(隻讀的)follower tablets - 來進行服務,或者是leader宕掉的情況下,會根據raft機制重新選舉leader。
  • 可以通過隻讀的 tablets 來提供讀服務,即使 leader tablet 失敗事件的情況下也可讀。
  • 結構化資料模型

通過結合所有這些特性,Kudu的目标是支援在目前一代 Hadoop 存儲技術上難以或不可能實作的應用程式系列。下面是使用Kudu作為解決方案的典型場景:

  • 需要立即為最終使用者提供最新資料報告的應用程式
  • 那些必須同時支援基于 查詢大量曆史資料、對快速傳回的單個實體的細粒度查詢 的時間序列應用程式:
  • 使用預測模型進行實時決策的應用程式,定期重新整理基于所有曆史資料的預測模型

更多典型的 Kudu 使用應用場景參見 Example Use Cases

主要特點

  1. 更新的架構:

    Kudu提供了快速 inserts/updates 和高效的柱狀掃描的組合,支援跨單個存儲層的多個實時分析工作。作為對HDFS和Apache HBase的一種新補充,Kudu使架構師能夠靈活地處理更廣泛的用例,而不需要額外的解決方案。

  2. 更快的分析:

    Kudu是專門為需要對快速(快速變化的)資料進行快速分析的用例而設計的。為了充分利用下一代硬體和記憶體處理技術,Kudu顯著降低了Apache Impala (孵化池項目) 和 Apache Spark(最初采用其他執行引擎) 的查詢延遲。

  3. 開源:

    Apache Kudu由Hadoop生态系統的長期貢獻者建立,是Apache 2許可下釋出的頂級Apache軟體基金會項目,并将社群參與視為其長期成功的重要組成部分。我們感謝迄今為止所有社群的貢獻,并期待看到更多的成功!

主要概念

資料模型Data Model

Kudu叢集存儲的表與關系(SQL)資料庫中使用的表相似。一個表可以像二進制的key value一樣簡單,也可以像幾百個不同的強類型屬性一樣複雜。

與SQL一樣,每個表都有一個主鍵,由一個或多個列組成。這可能是單個列(比如唯一使用者辨別符),或者是複合鍵(比如機器時間序列資料庫的(主機、名額、時間戳)元組)。可以通過主鍵有效地讀取、更新或删除行。

Kudu的簡單資料模型 使 移植 曆史應用程式 或 建構新應用程式變得輕而易舉:無需擔心如何将資料編碼為二進制blob或了解一個充滿難以解釋的JSON的龐大資料庫。表是自描述的,是以您可以使用 SQL引擎或 Spark 等标準工具來分析資料。

低延遲的随機通路

其他大資料分析的存儲不同,Kudu不僅僅是一種檔案格式。它是一個實時存儲系統,支援對單個行的低延遲毫秒級通路。對于“NoSQL”風格的通路,您可以選擇Java、c++或Python api。當然,這些随機通路api可以與批量通路一起用于機器學習或分析

Kudu的api被設計成易于使用。資料模型是完全類型化的(fully typed),是以您不需要擔心二進制編碼或外來的序列化。就像你JDBC或ODBC時,你可以隻存儲基本類型。

Kudu并沒有被設計成一個OLTP系統,但如果你有一些在記憶體中的資料子集,這提供了更好的随機通路性能。我們使用 YCSB 測量10億行的随機通路,結果很低延遲(%99在6ms或以下)就傳回(We’ve measured 99th percentile latencies of 6ms or below)能夠在與後端資料分析相同的存儲上運作低延遲的線上工作負載,可以極大地簡化應用程式體系結構。

Apache Hadoop 生态系統內建

Kudu的設計初衷就是為了适應Hadoop的生态系統,将它與其他資料處理架構內建起來非常簡單。你可以使用Java客戶機從實時資料源中導入流資料,然後在到達時立即使用Spark、Impala或MapReduce進行處理。您甚至可以透明地将Kudu表與存儲在其他Hadoop存儲(如HDFS或HBase)中的資料連接配接起來。

Kudu是Hadoop叢集的很好組成部分:它可以輕松地與HDFS DataNodes 共享資料磁盤,并且可以在RAM占用空間小到1 GB 的情況下運作,以适應較輕的工作負載。

Built by and for Operators

Kudu是由一群工程師建立的,他們花了很多個深夜為數百個企業用例中的關鍵Hadoop叢集提供随叫随到的生産支援。我們知道如果沒有良好的名額、跟蹤或管理工具,調試軟體是多麼令人沮喪。

自從第一個beta版本釋出以來,Kudu就包含了進階的程序内跟蹤功能、廣泛的名額支援,甚至還包括監視線程,這些線程檢查延遲異常值并轉儲“确鑿的”堆棧跟蹤,以便快速找到問題的根源。

适用場景

高吞吐率、低延遲

參考

http://kudu.apache.org/overview.html

Pig

Apache Pig是一個用于分析大型資料集的平台,它包含用于表示資料分析程式的進階語言,以及用于評估這些程式的基礎結構。Pig程式的顯著特性是,它們的結構适合于大量的并行化,這反過來又使它們能夠處理非常大的資料集。

目前,Pig的基礎架構層由一個生成Map-Reduce程式序列的編譯器組成,對于這些程式,已經存在大規模的并行實作(例如Hadoop子項目)。Pig’s language layer目前由一種叫做Pig Latin的文本語言組成,它具有以下關鍵屬性:

  • 易于程式設計。實作簡單的、“窘迫并行(embarrassingly parallel)”的資料分析任務的并行執行是微不足道的。由多個互相關聯的資料轉換組成的複雜任務被顯式編碼為資料流序列,使其易于編寫、了解和維護。
  • 優化因素(Optimization opportunities)。任務編碼的方式允許系統自動優化對應任務的執行,允許使用者關注語義而不是效率。
  • 可擴充性。使用者可以建立自己的函數來執行特殊用途的處理。
  • Apache Pig is released under the Apache 2.0 License.

百度百科的pig

Pig是一個基于Hadoop的大規模資料分析平台,它提供的SQL-LIKE語言叫Pig Latin,該語言的編譯器會把類SQL的資料分析請求轉換為一系列經過優化處理的MapReduce運算。Pig為複雜的海量資料并行計算提供了一個簡單的操作和程式設計接口

Apache Pig 是apache平台下的一個免費開源項目,Pig為大型資料集的處理提供了更高層次的抽象,很多時候資料的處理需要多個MapReduce過程才能實作,使得資料處理過程與該模式比對可能很困難。有了Pig就能夠使用更豐富的資料結構。

Pig LatinPig Latin 是一個相對簡單的語言,一條語句 就是一個操作,與資料庫的表類似,可以在關系資料庫中找到它(其中,元組代表行,并且每個元組都由字段組成)。

Pig 擁有大量的資料類型,不僅支援包、元組和映射等進階概念,還支援簡單的資料類型,如 int、long、float、double、chararray 和 bytearray。并且,還有一套完整的比較運算符,包括使用正規表達式的豐富比對模式。

W3CSCHOOL 的說明

Apache Pig是MapReduce的一個抽象,它是一個工具/平台,用于分析較大的資料集,并将它們表示為資料流。Pig通常與Hadoop 一起使用;我們可以使用Pig在Hadoop中執行所有的資料處理操作。

與Hive 的差別

  • Apache Pig:Pig Latin ( 來源于Yahoo )。是過程語言,它适合流水線範式,各種資料。
  • Hive:HiveQL 的語言(來源于 Facebook )。是聲明式語言,結構化資料。

參考

  • http://pig.apache.org/
  • https://baike.baidu.com/item/Apache Pig/1081326
  • https://www.w3cschool.cn/apache_pig/

Apache Parquet

Apache Parquet是Hadoop生态系統中的任何項目都可以使用的一種柱狀存儲格式,與資料處理架構、資料模型、程式設計語言無關。

參考

  • http://parquet.apache.org/

繼續閱讀