阿帕奇Hadoop入門
08-21
阿帕奇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視為一個大數據操作系統,它可以在所有大型數據集上運行不同類型的工作負載,包括離線批處理、機器學習乃至實時流處理。您可以訪問http://hadoop.apache.org網站獲取有關該項目的更多信息和詳細的文檔。您還可以從http://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。在集群將所有塊做兩個備份。NameNodeFileX: B1, B2 File Y: B3
DataNode DalaNcde Data Node DataNode
B 1 B2 B1B 3 B 1 B2 B2B 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.htmlHDFS用戶可以按照以下步驟執行典型的操作:列出主目錄的內容:$ 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 yourhome 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之間的區別:http://dzone.com/ports/apache-Hadoop-vs-apache-smash。? ·Apachetez--一個旨在加速使用Hive執行SQL查詢的引擎。它可在Hortonworks數據平台上使用,在該平台中,它將MapReduce替換為Hive.k的執行引擎。監控YARN應用程序使用ResourceManager WebUI可以跟蹤運行在Hadoop集群上的所有應用程序的執行情況,默認情況下,它在埠8088。 對於每個應用程序,您都可以讀取大量重要信息。使用ResourceManager WebUI,可以檢查RAM總數、可用於處理的CPU核數量以及當前Hadoop集群負載。查看頁面頂部的「集群度量」。如果單擊"ID"列中的條目,您將獲得有關所選應用程序執行的更詳細的度量和統計數據。利用HADOOP處理數據有許多框架可以簡化在Hadoop上實現分散式應用程序的過程。在本節中,我們將重點介紹最流行的幾種:蜂箱(HIVE)和星火(Spark)。HIVEHive允許使用熟悉的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 adam2017-07-14 Desert Rose" Sting piotr 2017-06-10 Karma Police"Radiohead adam 2017-07-23 Everybody" Madonna piotr 2017-07-01 StupidCar" 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查詢和檢索結果。# beelinebeeline> 丨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 wascreated successfully: beeline> SHOW tables; Run a query that finds the two most popularartists in July, 2017:檢查表創建是否成功:beeline>>顯示錶;運行一個查詢,找到在2017年7月份兩位最受歡迎的藝術家:SELECTartist, COUNT(*) AS total FROM songsWHERE year(date) = 2017 ANDmonth(date) = 7 GROUP BY artist ORDER BY total DESC LIMIT 2;您可以使用ResourceManager WebUI監視查詢的執行情況。根據您的配置,您將看到MapReduce作業或Spark應用程序在集群上的運行情況。Note: You can also write and execute Hive queriesfrom HUE. There is a Query Editor dedicated for Hive with handy features likesyntax auto-completion and coloring, the option to save queries, and basic visualizationof the results in the form of line, bar, or pie charts.注:您還可以從HUE中編寫和執行Hive查詢。有一個專門用於Hive查詢的編輯器,其中包含語法自動完成和著色、保存查詢的選項、以及以行、條形或餅圖形式顯示結果等基本功能。SPARK ApacheSPark是一個通用的分散式計算框架。它與Hadoop生態系統很好地集成在一起,而且SPark應用程序可以很容易地在YARN上運行。與傳統的Hadoop計算範式MapReduce相比,SPark在滿足不同的數據處理需求時提供了出色的性能、易用性和通用性。Sparks speedcomes mainly from its ability to store data in RAM between subsequent executionsteps and optimizations in the execution plan and data serialization.SPARK的速度主要來自它在RAM中存儲數據的能力,在後續執行步驟中對執行策略和串列數據進行優化。讓我們直接跳到代碼中去體驗一下Spark。我們可以從Scala、Java、Python、SQL或RAPI中進行選擇。這個例子是用Python寫的。啟動SPARKPython shell (called pyspark),type # pyspark.片刻之後,你會看到一個Spark提示。這意味著SPark應用程序已在YARN上啟動。 (您可以轉到ResourceManagerWebUI進行確認;查找一個名為「PySparkShell」 的正在運行的應用程序)。如果您不喜歡使用shell,則應該查看基於web的筆記本,如http://jupyter.org或zeppelin(http://zeppelin.apache.org)。i
推薦閱讀:
※Win10中搭建Hadoop環境
※離線安裝CDH5.10.0@Ubuntu14.04——第二章(使用CM)
※centos7 hadoop 單機模式安裝配置
※Kudu vs HBase
※Spark 讀