阿帕奇Hadoop入門

阿帕奇Hadoop入門

作者:GETINDATA公司創始人兼大數據顧問彼得亞·雷克魯斯基(Piotr Krewski)和GETINDATA公司首席執行官兼創始人亞當·卡瓦( Adam Kawa)

> 全文內容

> 內容簡介

> 設計理念

> HADOOP組件

> HDFS

> YARN

> YARN 應用程序

> 監控 YARN 應用程序

> 用HADOOP處理數據

> HADOOP 的其它工具

> 其它資源

內容簡介

本文介紹了Apache Hadoop,它是目前最流行的軟體框架,可以利用簡單的高級編程模型對大型數據集進行分散式存儲和處理。我們將介紹Hadoop最重要的概念,描述其體系架構,指導您如何開始使用Hadoop以及在Hadoop上編寫和執行各種應用程序。

簡而言之,Hadoop是以阿帕奇(Apache)為基礎的一個開源項目,它可以安裝在伺服器集群上,這些伺服器之間可以通信,並協同工作來存儲和處理大型數據集。Hadoop在最近幾年非常成功,因為它能夠有效地處理大數據。它允許公司將所有數據存儲在一個系統中,並對這些數據進行分析,而這些數據分析用傳統解決方案是不可能實現的,或者實現起來代價非常之大。

許多圍繞Hadoop構建的配套工具提供了各種各樣的處理技術。與輔助系統和實用程序的集成也非常出色,利用 Hadoop現實起來會使得工作更簡單、更高效。這些配套工具構成了Hadoop生態系統。

可以把Hadoop視為一個大數據操作系統,它可以在所有大型數據集上運行不同類型的工作負載,包括離線批處理、機器學習乃至實時流處理。

您可以訪問hadoop.apache.org網站獲取有關該項目的更多信息和詳細的文檔。

您還可以從hadoop.apache.org獲取代碼(建議使用該方法)來安裝Hadoop,或者使用Hadoop發行版。使用最為廣泛的三種方法來自Cloudera(CDH)、Hortonworks(HDP)和MapR。Hadoop發行版是來自Hadoop生態系統的一組工具,它們捆綁在一起,並由各自的供應商提供。這些工具可以很好地協作和集成。此外,每個供應商都提供工具(開源或專有的)來管理和監視整個平台。

設計理念

為了解決大型數據集的處理和存儲的挑戰,Hadoop根據以下核心特性構建:

? ·分散式-存儲和處理並非構建在一台大型超級計算機之上,而是分布在一群小型電腦上,這些電腦之間可以相互通信,並協同工作。

? 水平可伸縮性--只需添加新機器就可以很容易地擴展Hadoop集群。每台新機器都相應地增加了Hadoop集群的總存儲和處理能力。

? ·容錯-即使一些硬體或軟體組件不能正常工作,Hadoop也能繼續運行。

? 成本優化-Hadoop不需要昂貴的高端伺服器,而且在沒有商業許可證的情況下也可以正常工作。

? 編程抽象-Hadoop負責處理與分散式計算相關的所有紛雜的細節。由於有了高級別的API,用戶可以專註於實現業務邏輯,從而解決他們在現實世界中的問題。

? 數據本地化-Hadoop不會將大型數據集遷移到應用程序正在運行的位置,而是在數據所在位置運行應用程序。

Hadoop組件

Hadoop分為兩個核心組件:

? HDFS--分散式文件系統。

? YARN --集群資源管理技術。

許多執行框架運行在YARN之上,每個框架都針對特定的用例進行調優。將在下述 「YARN應用」中重點討論。

我們來看看他們的架構,並描述他們是如何合作的。

HDFS

HDFS是Hadoop分散式文件系統。

它可以在許多伺服器上運行,根據您的需要-HDFS可以輕鬆擴展到數千個節點和乃至PB( Petabytes 10的15次方位元組)量級的數據。

HDFS設置容量越大,某些磁碟、伺服器或網路交換機出故障的概率就越大。

HDFS通過在多個伺服器上複製數據來修復這些故障。

HDFS自動檢測給定組件是否發生故障,並採取透明方式對用戶進行必要的恢復操作。

HDFS是為存儲數百兆位元組或千兆位元組的大型文件而設計的,並提供對它們的高吞吐量流數據訪問。最後但並非最不重要的一點是,HDFS支持寫一次讀-多次模型。對於這個用例,HDFS工作起來就非常有魅力了。但是,如果您需要存儲大量具有隨機讀寫訪問許可權的小文件,那麼RDBMS和Apache HBASE等其他系統可能更好些。

:HDFS不允許修改文件的內容。只支持在文件末尾追加數據。然而,Hadoop是用HDFS設計的,它是許多可插拔存儲選件之一。例如:對於專用文件系統MapR-Fs,文件是完全可讀寫的。其他HDFS替代品包括AmazonS 3、GoogleCloudStorage和IBMGPFS。

HDFS架構

HDFS由在選定群集節點上安裝和運行的下列進程組成:

? NameNode--負責管理文件系統命名空間(文件名,許可權和所有權、上次修改日期等)的主進程

控制對存儲在HDFS中的數據的訪問。如果NameNode關閉,則無法訪問數據。幸運的是,您可以配置多個NameNodes,以確保此關鍵HDFS過程的高可用性。

? DataNodes-在負責存儲和服務數據的集群中的每個工作節點上安裝的從進程。

圖1說明了在一個4節點的集群上安裝HDFS。一個節點的主機節點為NameNode進程而其他三節點為DataNode進程

:NameNode和DataNode是在Linux操作系統 (如RedHat、CentOS、Ubuntu等)之上運行的Java進程。它們使用本地磁碟存儲HDFS數據。

HDFS將每個文件分成一系列較小但仍然較大的塊(默認的塊大小等於128 MB--更大的塊意味著更少的磁碟查找操作,從而導致更大的吞吐量)。每個塊被冗餘地存儲在三個DataNode上,以實現容錯(每個文件的副本數量是可配置的)。

圖2演示了將文件分割成塊的概念。文件X被分割成B1和B2塊,Y文件只包含一個塊B3。在集群將所有塊做兩個備份。

NameNode

FileX: B1, B2 File Y: B3

DataNode DalaNcde Data Node DataNode

B 1 B2 B1

B 3 B 1 B2 B2

B 3 B3

與HDFS交互

HDFS提供了一個簡單的類似POSIX的介面來處理數據。使用HDFSDFS命令執行文件系統操作。

要開始使用Hadoop,您不必經歷設置整個集群的過程。Hadoop可以在一台機器上以所謂的偽分散式模式運行.您可以下載sandbox虛擬機和所有已經安裝的HDFS組件,並在任何時候開始使用Hadoop!只需按照以下鏈接之一的步驟:

?

mapr.com/products/mapr-sandbox-hadoop

?

hortonworks.eom/products/hortonworks-sandbox/#install

?

cloudera.com/downloads/quickstart_vms/5-12.html

HDFS用戶可以按照以下步驟執行典型的操作:

列出主目錄的內容:

$ hdfs dfs -ls /user/adam

將文件從本地文件系統載入到HDFS:

$ hdfs dfs -put songs.txt

/user/adam

從HDFS讀取文件內容:

$ hdfs dfs -cat

/user/adam/songs.txt

更改文件的許可權:

$ hdfs dfs -chmod 700

/user/adam/songs.txt

將文件的複製因子設置為4:

$ hdfs dfs -setrep -w 4

/user/adam/songs.txt

檢查文件的大小:

$ hdfs dfs -du -h /user/adam/songs.txt Create a subdirectory in your

home directory.

$ hdfs dfs -mkdir songs

注意,相對路徑總是引用執行命令的用戶的主目錄。HDFS上沒有 「當前」目錄的概念(換句話說,沒有相當於「CD」命令):

將文件移到新創建的子目錄:

$ hdfs dfs

-mv songs.txt songs

從HDFS中刪除一個目錄:

$ hdfs dfs -rm -r songs

:刪除的文件和目錄被移動到trash中 (HDFS上主目錄中的.trash),並保留一天才被永久刪除。只需將它們從.Trash複製或移動到原始位置即可恢復它們。

您可以在沒有任何參數的情況下鍵入HDFSDFS以獲得可用命令的完整列表。

如果您更喜歡使用圖形界面與HDFS交互,您可以查看免費的開源HUE

(Hadoop用戶體驗)。它包含一個方便的「文件瀏覽器」組件,允許您瀏覽HDFS文件和目錄並執行基本操作。

您也可以使用HUE的「上傳」按鈕,直接從您的計算機上傳文件到HDFS。

YARN

YARN

(另一個資源協商器)負責管理Hadoop集群上的資源,並允許運行各種分散式應用程序來處理存儲在HDFS上的數據。

YARN類似於HDFS,遵循主從設計,ResourceManager進程充當主程序,多個NodeManager充當工作人員。他們的職責如下:

ResourceManager

? 跟蹤集群中每個伺服器上的LiveNodeManager和可用計算資源的數量。

? 為應用程序分配可用資源。

? 監視Hadoop集群上所有應用程序的執行情況。

NodeManager

? ·管理Hadoop集群中單個節點上的計算資源(RAM和CPU)。

? ·運行各種應用程序的任務,並強制它們在指定的計算資源限定的範圍之內。

YARN以資源容器的形式將集群資源分配給各種應用程序,這些資源容器代表RAM數量和CPU核數的組合。

在YARN集群上執行的每個應用程序都有自己的ApplicationMaster進程。當應用程序被安排在集群上並協調此應用程序中所有任務的執行時,此過程就開始了。

圖3展示了YARN進程在4節點集群上運行兩個應用程序的協作情況,共計產生7個任務。

HADOOP

= HDFS + YARN

在同一個集群上運行的HDFS和YARN進程為我們提供了一個存儲和處理大型數據集的強大平台。

DataNode和NodeManager進程配置在相同的節點上,以啟用本地數據。這種設計允許在存儲數據的機器上執行計算,從而將通過網路發送大量數據的必要性降到最低,使得執行時間更快。

YARN 應用程序

YARN僅僅是一個資源管理器,它知道如何將分散式計算資源分配給運行在Hadoop集群上的各種應用程序。換句話說,YARN本身不提供任何處理邏輯來分析HDFS中的數據。因此,各種處理框架必須與YARN集成(通過提供ApplicationMaster實現),以便在Hadoop集群上運行,並處理來自HDFS的數據。

下面是對最流行的分散式計算框架的簡短描述,這些框架可以在由YARN驅動的Hadoop集群上運行。

?

MapReduce-Hadoop的傳統和最古老的處理框架,它將計算表示為一系列的映射和削減的任務。它目前正在被更快的引擎,如火花(Spark)或Flink所取代。

?

ApacheSPark--用於大規模數據處理的快速通用引擎,它通過在內存中緩存數據來優化計算(後面部分將詳細介紹)。

?

ApacheFlink—它是一個高吞吐量、低延遲批處理和流處理引擎。它以其強大的實時處理大數據流的能力脫穎而出。在下面這篇綜述文章中,您可以找到火花和Flink之間的區別:dzone.com/ports/apache-

?

·Apachetez--一個旨在加速使用Hive執行SQL查詢的引擎。它可在Hortonworks數據平台上使用,在該平台中,它將MapReduce替換為Hive.k的執行引擎。

監控YARN應用程序

使用ResourceManager WebUI可以跟蹤運行在Hadoop集群上的所有應用程序的執行情況,默認情況下,它在埠8088。

對於每個應用程序,您都可以讀取大量重要信息。

使用ResourceManager WebUI,可以檢查RAM總數、可用於處理的CPU核數量以及當前Hadoop集群負載。查看頁面頂部的「集群度量」。

如果單擊"ID"列中的條目,您將獲得有關所選應用程序執行的更詳細的度量和統計數據。

利用HADOOP處理數據

有許多框架可以簡化在Hadoop上實現分散式應用程序的過程。在本節中,我們將重點介紹最流行的幾種:蜂箱(HIVE)和星火(Spark)。

HIVE

Hive允許使用熟悉的SQL語言處理HDFS上的數據。

在使用Hive時,HDFS中的數據集表示為具有行和列的表。因此,對於那些已經了解SQL並有使用關係資料庫經驗的人來說,Hive很容易學習。

Hive不是獨立的執行引擎。每個Hive查詢被翻譯成MapReduce,Tez或Spark(火花)代碼,隨後在Hadoop集群中得以執行。

HIVE 常式:

讓我們處理一個關於用戶在給定時間聽的歌曲的數據集。輸入數據由一個名為Song s.tsv的選項卡分隔的文件組成:

Creep" Radiohead piotr 2017-07-20 Desert Rose" Sting adam

2017-07-14 Desert Rose" Sting piotr 2017-06-10 Karma Police"

Radiohead adam 2017-07-23 Everybody" Madonna piotr 2017-07-01 Stupid

Car" Radiohead adam 2017-07-18 All This Time" Sting adam 2017-07-13

我們用Hive找到了2017年7月份兩位最受歡迎的藝術家。

上傳HDFS上的Song s.txt文件。您可以在HUE中的「FileBrowser」幫助下完成此操作,也可以使用命令行工具鍵入以下命令:

# hdfs dfs -mkdir

/user/training/songs

# hdfs dfs -put songs.txt

/user/training/songs

使用Beeline客戶端進入Hive。您必須向HiveServer 2提供一個地址,該進程允許遠程客戶端(如Beeline)執行Hive查詢和檢索結果。

#

beeline

beeline> 丨connect jdbc:hive2://localhost:10000

<user><password>

在Hive中創建一個指向HDFS數據的表(請注意,我們需要指定文件的適當分隔符和位置,以便Hive可以將原始數據表示為表):

beeline> CREATE TABLE title STRING, artist STRING,

user STRING, date DATE

songs(

}

ROW FORMAT

DELIMITED

FIELDS TERMINATED

BY

丨t

LOCATION

/user/training/songs;

使用Beeline開始會話後,您創建的所有表都將位於「默認」資料庫下。您可以通過提供特定的資料庫名稱作為表名的前綴,或者鍵入「use<database_name>;」命令來更改它。

Check if the table was

created successfully: beeline> SHOW tables; Run a query that finds the two most popular

artists in July, 2017:

檢查表創建是否成功:beeline>>顯示錶;運行一個查詢,找到在2017年7月份兩位最受歡迎的藝術家:

SELECT

artist, COUNT(*) AS total FROM songs

WHERE year(date) = 2017 AND

month(date) = 7 GROUP BY artist ORDER BY total DESC LIMIT 2;

您可以使用ResourceManager WebUI監視查詢的執行情況。根據您的配置,您將看到MapReduce作業或Spark應用程序在集群上的運行情況。

Note: You can also write and execute Hive queries

from HUE. There is a Query Editor dedicated for Hive with handy features like

syntax auto-completion and coloring, the option to save queries, and basic visualization

of the results in the form of line, bar, or pie charts.

:您還可以從HUE中編寫和執行Hive查詢。有一個專門用於Hive查詢的編輯器,其中包含語法自動完成和著色、保存查詢的選項、以及以行、條形或餅圖形式顯示結果等基本功能。

SPARK

Apache

SPark是一個通用的分散式計算框架。它與Hadoop生態系統很好地集成在一起,而且SPark應用程序可以很容易地在YARN上運行。

與傳統的Hadoop計算範式MapReduce相比,SPark在滿足不同的數據處理需求時提供了出色的性能、易用性和通用性。

Sparks speed

comes mainly from its ability to store data in RAM between subsequent execution

steps and optimizations in the execution plan and data serialization.

SPARK的速度主要來自它在RAM中存儲數據的能力,在後續執行步驟中對執行策略和串列數據進行優化。

讓我們直接跳到代碼中去體驗一下Spark。我們可以從Scala、Java、Python、SQL或RAPI中進行選擇。這個例子是用Python寫的。啟動SPARK

Python shell (called pyspark),

type # pyspark.

片刻之後,你會看到一個Spark提示。這意味著SPark應用程序已在YARN上啟動。 (您可以轉到ResourceManager

WebUI進行確認;查找一個名為「PySparkShell」 的正在運行的應用程序)。

如果您不喜歡使用shell,則應該查看基於web的筆記本,如jupyter.org或zeppelin(zeppelin.apache.org)。

i


推薦閱讀:

Win10中搭建Hadoop環境
離線安裝CDH5.10.0@Ubuntu14.04——第二章(使用CM)
centos7 hadoop 單機模式安裝配置
Kudu vs HBase
Spark 讀

TAG:Hadoop | 科技 | MapReduce |