㈠ hdfs有哪些進程並說明其作用
Hadoop分布式文件系統(HDFS)被設計成適合運行在通用硬體(commodity hardware)上的分布式文件系統。它和現有的分布式文件系統有很多共同點。但同時,它和其他的分布式文件系統的區別也是很明顯的。HDFS是一個高度容錯性的系統,適合部署在廉價的機器上。HDFS能提供高吞吐量的數據訪問,非常適合大規模數據集上的應用。HDFS放寬了一部分POSIX約束,來實現流式讀取文件系統數據的目的。HDFS在最開始是作為Apache Nutch搜索引擎項目的基礎架構而開發的。HDFS是Apache Hadoop Core項目的一部分。 Hadoop分布式文件系統架構 1 NameNode(名稱節點) HDFS命名空間採用層次化(樹狀——譯者注)的結構存放文件和目錄。 2 映像和日誌 Inode和定義metadata的系統文件塊列表統稱為Image(映像).NameNode將整個命名空間映像保存在RAM中。而映像的持久化記錄則保存在NameNode的本地文件系統中,該持久化記錄被稱為Checkpoint(檢查點)。NameNode還會記錄HDFS中寫入的操作,並將其存入一個記錄文件,存放在本地文件系統中,這個記錄文件被叫做Journal(日誌)。 3 數據節點 DataNode上的每一個塊(block)副本都由兩個本地文件系統上的文件共同表示。其中一個文件包含了塊(block)本身所需包含的數據,另一個文件則記錄了該塊的元數據,包括塊所含數據大小和文件生成時間戳。數據文件的大小等於該塊(block)的真實大小,而不是像傳統的文件系統一樣,需要用額外的存儲空間湊成完整的塊。因此,如果一個塊里只需要一半的空間存儲數據,那麼就只需要在本地系統上分配半塊的存儲空間即可。 4 HDFS客戶端 用戶應用程序通過HDFS客戶端連接到HDFS文件系統,通過庫文件可導出HDFS文件系統的介面。像很多傳統的文件系統一樣,HDFS支持文件的讀、寫和刪除操作,還支持對目錄的創建和刪除操作。與傳統的文件系統不同的是,HDFS提供一個API用以暴露文件塊的位置。這個功能允許應用程序。 5 檢查點節點 HDFS中的NameNode節點,除了其主要職責是相應客戶端請求以外,還能夠有選擇地扮演一到兩個其他的角色,例如做檢查點節點或者備份節點。該角色是在節點啟動的時候特有的。 6 備份節點 HDFS的備份節點是最近在加入系統的一項特色功能。就像CheckpintNode一樣,備份節點能夠定期創建檢查點,但是不同的是,備份節點一直保存在內存中,隨著文件系統命名空間的映像更新和不斷更新,並與NameNode的狀態隨時保持同步。 7 系統更新和文件系統快照 在軟體更新的過程中,由於軟體的bug或者人為操作的失誤,文件系統損壞的幾率會隨之提升。在HDFS中創建系統快照的目的,就在於把系統升級過程中可能對數據造成的隱患降到最低。快照機制讓系統管理員將當前系統狀態持久化到文件系統中,這樣以來,如果系統升級後出現了數據丟失或者損壞,便有機會進行回滾操作,將HDFS的命名空間和存儲狀態恢復到系統快照進行的時刻。
㈡ Hadoop生態系統-新手快速入門(含HDFS、HBase系統架構)
Hadoop是一個由Apache基金會所開發的分布式系統基礎架構。
用戶可以在不了解分布式底層細節的情況下,開發分布式程序。充分利用集群的威力進行高速運算和存儲。
Hadoop實現了一個分布式文件系統(Hadoop Distributed File System),簡稱HDFS。HDFS有高容錯性的特點,並且設計用來部署在低廉的(low-cost)硬體上;而且它提供高吞吐量(high throughput)來訪問應用程序的數據,適合那些有著超大數據集(large data set)的應用程序。
Hadoop的框架最核心的設計就是:HDFS和MapRece。HDFS為海量的數據提供了存儲,而MapRece則為海量的數據提供了計算。
廣義的Hadoop,一般稱為Hadoop生態系統,如下所示。
Hadoop生態系統中這些軟體的作用:
HDFS 採用了主從(Master/Slave)結構模型,一個HDFS集群包括一個名稱節點(NameNode)和若干個數據節點(DataNode)。
HDFS採用java語言開發,因此任何支持JVM的機器都可以部署名稱節點和數據節點。
在配置好Hadoop 集群之後,可以通過瀏覽器訪問 http://[NameNodeIP]:9870,查詢HDFS文件系統。通過該Web界面,可以查看當前文件系統中各個節點的分布信息。
HBase系統架構如下所示,包括客戶端、Zookeeper伺服器、Master主伺服器、Region伺服器。一般而言,HBase會採用HDFS作為底層數據存儲。
在HBase伺服器集群中,包含了一個Master和多個Region伺服器,Master是HBase集群的「總管」,它必須知道Region伺服器的狀態。
HBase中可以啟動多個Master,但是Zookeeper 可以幫助選舉出一個Master 作為集群的總管,並保證在任何時刻總有唯一一個Master在運行,這樣可以避免Master單點失效的問題。
Region伺服器是HBase中最核心的模塊,負責維護分配給自己的Region,並響應用戶的讀寫請求。
Store是Region伺服器的核心。每個Store對應了表中的一個列族的存儲。每一個Store包含了一個MemStore緩存和若干個StoreFile文件。
HBase採用HLog來保證系統發生故障時,能夠恢復到正確的狀態。HLog是磁碟上面的記錄文件,它記錄著所有的更新操作。
HBase系統為每個Region伺服器配置了一個HLog文件,它是一種預寫式日誌(Write Ahead Log),也就是說,用戶更新數據必須首先被記入日誌後,才能寫入MemStore緩存。
此外,Pig和Hive還為HBase提供了高層語言支持,使得在HBase上進行數據統計處理變的非常簡單。 Sqoop則為HBase提供了方便的RDBMS數據導入功能,使得傳統資料庫數據向HBase中遷移變的非常方便。
注意:Hadoop 安裝完成之後,只包含HDFS和MapRece,並不含HBase,因此需要在Hadoop 之上繼續安裝HBase。
㈢ Java和大數據有什麼關系
簡單的說Java語言是做大數據研發的工具之一,不少早期做大數據平台開發的程序員都是做Java開發出身,而且Hadoop平台本身就是採用Java語言開發的,所以很多做大數據開發的程序員第一個排序實驗都是使用Java語言開發的。所以,Java是早期做大數據開發的基礎之一。
大數據確切的說,它並不能算一門具體的技術,而是一種概念,一種大的技術范疇。大數據主要是用來處理,分析,存儲海量數據,對這些大量的數據進行加工處理等操作。大數據領域裡面涉及到Hadoop,hive,flink,hbase,java等各種具體的技術,看清楚,在這里Java也可以為大數據的實現提供服務哦。所以可以說,Java可以幫助我們實現大數據的開發,Java就像是一個「建築工人",它可以把各種數據原料整合在一起,構建出大數據這么一個環境。
通常情況下,我們說的大數據,是指基於Hadoop的大數據生態,在這個生態中,有很多很多的產品,每個產品負責解決大數據整體方案中的一個問題,如Hadoop自身包含MapRece,Yarn,HDFS等,MapRece 負責批處理計算,HDFS負責的分布式存儲,YARN負責資源管理,其他如HBASE負責數據存儲,等等。這些大數據生態中的不同產品,大部分都是由Java開發的,所以說它們與Java密不可分。
由於軟體自身由Java開發,因此基本這些大數據產品做開發,Java語言就是首選,因為這些產品基本都提供Java語言的編程介面API。
還有一些產品,雖然不是用Java語言開發,但是使用了基於JVM的語言,如Spark是由Scala語言開發的,而Scala是基於JVM的,這就意味著可以進行Scala與Java的混合開發,同樣離不開Java。
大數據框架的編寫支持很多開發語言,但是Java在大數據開發方面有很大的優勢,目前流行的大數據Hadoop框架,很多部分都是用開源的Java語言編寫,因此Java在大數據方面有很大優勢。在大數據的中,也許別的你可能不在意,但是Hadoop想必你是注意到了的吧,大數據中不得不學的重要內容。
㈣ 大數據技術Hadoop筆試題
大數據技術Hadoop筆試題
導讀:Hadoop有高容錯性的特點,並且設計用來部署在低廉的(low-cost)硬體上。以下是由我J.L為您整理推薦的面試筆試題目和經驗,歡迎參考閱讀。
單項選擇題
1. 下面哪個程序負責 HDFS 數據存儲。
a)NameNode
b)Jobtracker
c)Datanode
d)secondaryNameNode
e)tasktracker
2. HDfS 中的 block 默認保存幾份?
a)3 份
b)2 份
c)1 份
d)不確定
3. 下列哪個程序通常與 NameNode 在一個節點啟動?
a)SecondaryNameNode
b)DataNode
c)TaskTracker
d)Jobtracker
4. Hadoop 作者
a)Martin Fowler
b)Kent Beck
c)Doug cutting
5. HDFS 默認 Block Size
a)32MB
b)64MB
c)128MB
6. 下列哪項通常是集群的最主要瓶頸
a)CPU
b)網路
c)磁碟
d)內存
7. 關於 SecondaryNameNode 哪項是正確的?
a)它是 NameNode 的熱備
b)它對內存沒有要求
c)它的目的是幫助 NameNode 合並編輯日誌,減少 NameNode 啟動時間
d)SecondaryNameNode 應與 NameNode 部署到一個節點
多選題
8. 下列哪項可以作為集群的管理工具
a)Puppet
b)Pdsh
c)Cloudera Manager
d)d)Zookeeper
9. 配置機架感知的下面哪項正確
a)如果一個機架出問題,不會影響數據讀寫
b)寫入數據的時候會寫到不同機架的 DataNode 中
c)MapRece 會根據機架獲取離自己比較近的網路數據
10. Client 端上傳文件的時候下列哪項正確
a)數據經過 NameNode 傳遞給 DataNode
b)Client 端將文件切分為 Block,依次上傳
c)Client 只上傳數據到一台 DataNode,然後由 NameNode 負責 Block 復制工作
11. 下列哪個是 Hadoop 運行的模式
a)單機版
b)偽分布式
c)分布式
12. Cloudera 提供哪幾種安裝 CDH 的方法
a)Cloudera manager
b)Tar ball
c)Yum d)Rpm
判斷題
13. Ganglia 不僅可以進行監控,也可以進行告警。( )
14. Block Size 是不可以修改的。( )
15. Nagios 不可以監控 Hadoop 集群,因為它不提供 Hadoop 支持。( )
16. 如果 NameNode 意外終止,SecondaryNameNode 會接替它使集群繼續工作。( )
17. Cloudera CDH 是需要付費使用的。( )
18. Hadoop 是 Java 開發的,所以 MapRece 只支持 Java 語言編寫。( )
19. Hadoop 支持數據的隨機讀寫。( )
20. NameNode 負責管理 metadata,client 端每次讀寫請求,它都會從磁碟中讀取或則會寫入 metadata 信息並反饋 client 端。( )
21. NameNode 本地磁碟保存了 Block 的位置信息。( )
22. DataNode 通過長連接與 NameNode 保持通信。( )
23. Hadoop 自身具有嚴格的許可權管理和安全措施保障集群正常運行。( )
24. Slave 節點要存儲數據,所以它的磁碟越大越好。( )
25. hadoop dfsadmin –report 命令用於檢測 HDFS 損壞塊。( )
26. Hadoop 默認調度器策略為 FIFO( )
27. 集群內每個節點都應該配 RAID,這樣避免單磁碟損壞,影響整個節點運行。( )
28. 因為 HDFS 有多個副本,所以 NameNode 是不存在單點問題的。( )
29. 每個 map 槽就是一個線程。( )
30. Maprece 的 input split 就是一個 block。( )
31. NameNode 的 Web UI 埠是 50030,它通過 jetty 啟動的 Web 服務。( )
32. Hadoop 環境變數中的 HADOOP_HEAPSIZE 用於設置所有 Hadoop 守護線程的內存。它默認是 200 GB。( )
33. DataNode 首次加入 cluster 的時候,如果 log 中報告不兼容文件版本,那需要 NameNode執行“Hadoop namenode -format”操作格式化磁碟。( )
別走開,答案在後面哦!
1. 下面哪個程序負責 HDFS 數據存儲。答案C datanode
a)NameNode
b)Jobtracker
c)Datanode
d)secondaryNameNode
e)tasktracker
2. HDfS 中的 block 默認保存幾份? 答案A默認3分
a)3 份
b)2 份
c)1 份
d)不確定
3. 下列哪個程序通常與 NameNode 在一個節點啟動?答案D
a)SecondaryNameNode
b)DataNode
c)TaskTracker
d)Jobtracker
此題分析:
hadoop的集群是基於master/slave模式,namenode和jobtracker屬於master,datanode和 tasktracker屬於slave,master只有一個,而slave有多個SecondaryNameNode內存需求和NameNode在一個數量級上,所以通常secondary NameNode(運行在單獨的物理機器上)和NameNode運行在不同的機器上。
JobTracker和TaskTracker
JobTracker 對應於 NameNode
TaskTracker 對應於 DataNode
DataNode 和NameNode 是針對數據存放來而言的
JobTracker和TaskTracker是對於MapRece執行而言的
maprece中幾個主要概念,maprece整體上可以分為這么幾條執行線索:obclient,JobTracker與TaskTracker。
1、JobClient會在用戶端通過JobClient類將應用已經配置參數打包成jar文件存儲到hdfs,並把路徑提交到Jobtracker, 然後由JobTracker創建每一個Task(即MapTask和ReceTask)並將它們分發到各個TaskTracker服務中去執行。
2、JobTracker是一個master服務,軟體啟動之後JobTracker接收Job,負責調度Job的每一個子任務task運行於 TaskTracker上,並監控它們,如果發現有失敗的task就重新運行它。一般情況應該把JobTracker部署在單獨的機器上。
3、TaskTracker是運行在多個節點上的slaver服務。TaskTracker主動與JobTracker通信,接收作業,並負責直接執行每一個任務。TaskTracker都需要運行在HDFS的DataNode上。
4. Hadoop 作者 答案C Doug cutting
a)Martin Fowler
b)Kent Beck
c)Doug cutting
5. HDFS 默認 Block Size 答案:B
a)32MB
b)64MB
c)128MB
(因為版本更換較快,這里答案只供參考)
6. 下列哪項通常是集群的最主要瓶頸:答案:C磁碟
a)CPU
b)網路
c)磁碟IO
d)內存
該題解析:
首先集群的目的是為了節省成本,用廉價的pc機,取代小型機及大型機。小型機和大型機有什麼特點?
1.cpu處理能力強
2.內存夠大
所以集群的瓶頸不可能是a和d
3.網路是一種稀缺資源,但是並不是瓶頸。
4.由於大數據面臨海量數據,讀寫數據都需要io,然後還要冗餘數據,hadoop一般備3份數據,所以IO就會打折扣。
7. 關於 SecondaryNameNode 哪項是正確的?答案C
a)它是 NameNode 的熱備
b)它對內存沒有要求
c)它的目的是幫助 NameNode 合並編輯日誌,減少 NameNode 啟動時間
d)SecondaryNameNode 應與 NameNode 部署到一個節點。
多選題:
8. 下列哪項可以作為集群的管理?答案:ABD
a)Puppet
b)Pdsh
c)Cloudera Manager
d)Zookeeper
9. 配置機架感知的下面哪項正確:答案ABC
a)如果一個機架出問題,不會影響數據讀寫
b)寫入數據的時候會寫到不同機架的 DataNode 中
c)MapRece 會根據機架獲取離自己比較近的網路數據
10. Client 端上傳文件的時候下列哪項正確?答案B
a)數據經過 NameNode 傳遞給 DataNode
b)Client 端將文件切分為 Block,依次上傳
c)Client 只上傳數據到一台 DataNode,然後由 NameNode 負責 Block 復制工作
該題分析:
Client向NameNode發起文件寫入的請求。
NameNode根據文件大小和文件塊配置情況,返回給Client它所管理部分DataNode的信息。
Client將文件劃分為多個Block,根據DataNode的地址信息,按順序寫入到每一個DataNode塊中。
11. 下列哪個是 Hadoop 運行的模式:答案ABC
a)單機版
b)偽分布式
c)分布式
12. Cloudera 提供哪幾種安裝 CDH 的方法?答案:ABCD
a)Cloudera manager
b)Tarball
c)Yum
d)Rpm
判斷題:
13. Ganglia 不僅可以進行監控,也可以進行告警。( 正確)
分析:此題的目的是考Ganglia的'了解。嚴格意義上來講是正確。ganglia作為一款最常用的Linux環境中的監控軟體,它擅長的的是從節點中按照用戶的需求以較低的代價採集數據。但是ganglia在預警以及發生事件後通知用戶上並不擅長。最新的ganglia已經有了部分這方面的功能。但是更擅長做警告的還有Nagios。Nagios,就是一款精於預警、通知的軟體。通過將Ganglia和Nagios組合起來,把Ganglia採集的數據作為Nagios的數據源,然後利用Nagios來發送預警通知,可以完美的實現一整套監控管理的系統。
14. Block Size 是不可以修改的。(錯誤 )
分析:它是可以被修改的Hadoop的基礎配置文件是hadoop-default.xml,默認建立一個Job的時候會建立Job的Config,Config首先讀入hadoop-default.xml的配置,然後再讀入hadoop- site.xml的配置(這個文件初始的時候配置為空),hadoop-site.xml中主要配置需要覆蓋的hadoop-default.xml的系統級配置。
15. Nagios 不可以監控 Hadoop 集群,因為它不提供 Hadoop 支持。(錯誤 )
分析:Nagios是集群監控工具,而且是雲計算三大利器之一
16. 如果 NameNode 意外終止,SecondaryNameNode 會接替它使集群繼續工作。(錯誤 )
分析:SecondaryNameNode是幫助恢復,而不是替代,如何恢復,可以查看
17. Cloudera CDH 是需要付費使用的。(錯誤 )
分析:第一套付費產品是Cloudera Enterpris,Cloudera Enterprise在美國加州舉行的 Hadoop 大會 (Hadoop Summit) 上公開,以若干私有管理、監控、運作工具加強 Hadoop 的功能。收費採取合約訂購方式,價格隨用的 Hadoop 叢集大小變動。
18. Hadoop 是 Java 開發的,所以 MapRece 只支持 Java 語言編寫。(錯誤 )
分析:rhadoop是用R語言開發的,MapRece是一個框架,可以理解是一種思想,可以使用其他語言開發。
19. Hadoop 支持數據的隨機讀寫。(錯 )
分析:lucene是支持隨機讀寫的,而hdfs只支持隨機讀。但是HBase可以來補救。HBase提供隨機讀寫,來解決Hadoop不能處理的問題。HBase自底層設計開始即聚焦於各種可伸縮性問題:表可以很“高”,有數十億個數據行;也可以很“寬”,有數百萬個列;水平分區並在上千個普通商用機節點上自動復制。表的模式是物理存儲的直接反映,使系統有可能提高高效的數據結構的序列化、存儲和檢索。
20. NameNode 負責管理 metadata,client 端每次讀寫請求,它都會從磁碟中讀取或則會寫入 metadata 信息並反饋 client 端。(錯誤)
此題分析:
NameNode 不需要從磁碟讀取 metadata,所有數據都在內存中,硬碟上的只是序列化的結果,只有每次 namenode 啟動的時候才會讀取。
1)文件寫入
Client向NameNode發起文件寫入的請求。
NameNode根據文件大小和文件塊配置情況,返回給Client它所管理部分DataNode的信息。
Client將文件劃分為多個Block,根據DataNode的地址信息,按順序寫入到每一個DataNode塊中。
2)文件讀取
Client向NameNode發起文件讀取的請求。
21. NameNode 本地磁碟保存了 Block 的位置信息。( 個人認為正確,歡迎提出其它意見)
分析:DataNode是文件存儲的基本單元,它將Block存儲在本地文件系統中,保存了Block的Meta-data,同時周期性地將所有存在的Block信息發送給NameNode。NameNode返迴文件存儲的DataNode的信息。
Client讀取文件信息。
22. DataNode 通過長連接與 NameNode 保持通信。( )
這個有分歧:具體正在找這方面的有利資料。下面提供資料可參考。
首先明確一下概念:
(1).長連接
Client方與Server方先建立通訊連接,連接建立後不斷開,然後再進行報文發送和接收。這種方式下由於通訊連接一直存在,此種方式常用於點對點通訊。
(2).短連接
Client方與Server每進行一次報文收發交易時才進行通訊連接,交易完畢後立即斷開連接。此種方式常用於一點對多點通訊,比如多個Client連接一個Server.
23. Hadoop 自身具有嚴格的許可權管理和安全措施保障集群正常運行。(錯誤 )
hadoop只能阻止好人犯錯,但是不能阻止壞人干壞事
24. Slave 節點要存儲數據,所以它的磁碟越大越好。( 錯誤)
分析:一旦Slave節點宕機,數據恢復是一個難題
25. hadoop dfsadmin –report 命令用於檢測 HDFS 損壞塊。(錯誤 )
26. Hadoop 默認調度器策略為 FIFO(正確 )
27. 集群內每個節點都應該配 RAID,這樣避免單磁碟損壞,影響整個節點運行。(錯誤 )
分析:首先明白什麼是RAID,可以參考網路磁碟陣列。這句話錯誤的地方在於太絕對,具體情況具體分析。題目不是重點,知識才是最重要的。因為hadoop本身就具有冗餘能力,所以如果不是很嚴格不需要都配備RAID。具體參考第二題。
28. 因為 HDFS 有多個副本,所以 NameNode 是不存在單點問題的。(錯誤 )
29. 每個 map 槽就是一個線程。(錯誤 )
分析:首先我們知道什麼是map 槽,map 槽->map slotmap slot 只是一個邏輯值 ( org.apache.hadoop.mapred.TaskTracker.TaskLauncher.numFreeSlots ),而不是對應著一個線程或者進程
30. Maprece 的 input split 就是一個 block。(錯誤 )
31. NameNode 的 Web UI 埠是 50030,它通過 jetty 啟動的 Web 服務。(錯誤 )
32. Hadoop 環境變數中的 HADOOP_HEAPSIZE 用於設置所有 Hadoop 守護線程的內存。它默認是 200 GB。( 錯誤)
hadoop為各個守護進程(namenode,secondarynamenode,jobtracker,datanode,tasktracker)統一分配的內存在hadoop-env.sh中設置,參數為HADOOP_HEAPSIZE,默認為1000M。
33. DataNode 首次加入 cluster 的時候,如果 log 中報告不兼容文件版本,那需要 NameNode執行“Hadoop namenode -format”操作格式化磁碟。(錯誤 )
分析:
首先明白介紹,什麼ClusterID
ClusterID
添加了一個新的標識符ClusterID用於標識集群中所有的節點。當格式化一個Namenode,需要提供這個標識符或者自動生成。這個ID可以被用來格式化加入集群的其他Namenode。
二次整理
有的同學問題的重點不是上面分析內容:內容如下:
這個報錯是說明 DataNode 所裝的Hadoop版本和其它節點不一致,應該檢查DataNode的Hadoop版本
;㈤ 下面哪個程序負責 hdfs 數據存儲
負責「hdfs」和「數據存儲」的程序是HDFS。