hdfs資料庫
1. HDFS 為何在大數據領域經久不衰
大數據中最寶貴、最難以代替的就是數據,一切都圍繞數據。
HDFS是最早的大數據存儲系統,存儲著寶貴的數據資產,各種新演算法、框架要想得到廣泛使用,必須支持HDFS,才能獲取已存儲在裡面的數據。所以大數據技術越發展,新技術越多,HDFS得到的支持越多,越離不開HDFS。 HDFS也許不是最好的大數據存儲技術,但依然是最重要的大數據存儲技術 。
HDFS是如何實現大數據高速、可靠的存儲和訪問的呢?
Hadoop分布式文件系統HDFS的設計目標是管理數以千計的伺服器、數以萬計的磁碟,將大規模的伺服器計算資源當作一個單一存儲系統進行管理,對應用程序提供數以PB計的存儲容量,讓應用程序像使用普通文件系統一樣存儲大規模的文件數據。
文件以多副本的方式進行存儲:
缺點:
優點:
HDFS的大容量存儲和高速訪問的實現。
RAID將數據分片後,在多塊磁碟上並發進行讀寫訪問,提高了存儲容量、加快了訪問速度,並通過數據冗餘校驗提高了數據可靠性,即使某塊磁碟損壞也不會丟數據。將RAID的設計理念擴大到整個分布式伺服器集群,就產生了分布式文件系統,這便是Hadoop分布式文件系統的核心原理。
和RAID在多個磁碟上進行文件存儲及並行讀寫的思路一樣,HDFS是在一個大規模分布式伺服器集群上,對數據分片後進行並行讀寫及冗餘存儲。因為HDFS可部署在一個大的伺服器集群,集群中所有伺服器的磁碟都可供HDFS使用,所以整個HDFS的存儲空間可以達到PB級。
HDFS是主從架構。一個HDFS集群會有一個NameNode(命名節點,簡稱NN),作為主伺服器(master server)。
HDFS公開了文件系統名稱空間,允許用戶將數據存儲在文件中,就好比我們平時使用os中的文件系統一樣,用戶無需關心底層是如何存儲數據的。 在底層,一個文件會被分成一或多個數據塊,這些資料庫塊會被存儲在一組數據節點中。在CDH中數據塊的默認128M。 在NameNode,可執行文件系統的命名空間操作,如打開,關閉,重命名文件等。這也決定了數據塊到數據節點的映射。
HDFS被設計為可運行在普通的廉價機器上,而這些機器通常運行著一個Linux操作系統。一個典型的HDFS集群部署會有一個專門的機器只能運行 NameNode ,而其他集群中的機器各自運行一個 DataNode 實例。雖然一台機器上也可以運行多個節點,但不推薦。
負責文件數據的存儲和讀寫操作,HDFS將文件數據分割成若干數據塊(Block),每個DataNode存儲一部分Block,這樣文件就分布存儲在整個HDFS伺服器集群中。
應用程序客戶端(Client)可並行訪問這些Block,從而使得HDFS可以在伺服器集群規模上實現數據並行訪問,極大提高訪問速度。
HDFS集群的DataNode伺服器會有很多台,一般在幾百台到幾千台,每台伺服器配有數塊磁碟,整個集群的存儲容量大概在幾PB~數百PB。
負責整個分布式文件系統的元數據(MetaData)管理,即文件路徑名、數據塊的ID以及存儲位置等信息,類似os中的文件分配表(FAT)。
HDFS為保證數據高可用,會將一個Block復制為多份(默認3份),並將多份相同的Block存儲在不同伺服器,甚至不同機架。當有磁碟損壞或某個DataNode伺服器宕機,甚至某個交換機宕機,導致其存儲的數據塊不能訪問時,客戶端會查找其備份Block訪問。
HDFS中,一個文件會被拆分為一個或多個數據塊。默認每個數據塊有三個副本,每個副本都存放在不同機器,而且每一個副本都有自己唯一的編號:
文件/users/sameerp/data/part-0的復制備份數設為2,存儲的BlockID分別為1、3:
上述任一台伺服器宕機後,每個數據塊都至少還有一個備份存在,不會影響對文件/users/sameerp/data/part-0的訪問。
和RAID一樣,數據分成若干Block後,存儲到不同伺服器,實現數據大容量存儲,並且不同分片的數據能並行進行讀/寫操作,實現數據的高速訪問。
副本存放:NameNode節點選擇一個DataNode節點去存儲block副本的過程,該過程的策略是在可靠性和讀寫帶寬間權衡。
《Hadoop權威指南》中的默認方式:
Google大數據「三駕馬車」的第一駕是GFS(Google 文件系統),而Hadoop的第一個產品是HDFS,分布式文件存儲是分布式計算的基礎。
這些年來,各種計算框架、各種演算法、各種應用場景不斷推陳出新,但大數據存儲的王者依然是HDFS。
磁碟介質在存儲過程中受環境或者老化影響,其存儲的數據可能會出現錯亂。
HDFS對存儲在DataNode上的數據塊,計算並存儲校驗和(CheckSum)。在讀數據時,重新計算讀取出來的數據的校驗和,校驗不正確就拋異常,應用程序捕獲異常後就到其他DataNode上讀取備份數據。
DataNode監測到本機的某塊磁碟損壞,就將該塊磁碟上存儲的所有BlockID報告給NameNode,NameNode檢查這些數據塊還在哪些DataNode上有備份,通知相應的DataNode伺服器將對應的數據塊復制到其他伺服器上,以保證數據塊的備份數滿足要求。
DataNode會通過心跳和NameNode保持通信,如果DataNode超時未發送心跳,NameNode就會認為這個DataNode已經宕機失效,立即查找這個DataNode上存儲的數據塊有哪些,以及這些數據塊還存儲在哪些伺服器上,隨後通知這些伺服器再復制一份數據塊到其他伺服器上,保證HDFS存儲的數據塊備份數符合用戶設置的數目,即使再出現伺服器宕機,也不會丟失數據。
NameNode是整個HDFS的核心,記錄著HDFS文件分配表信息,所有的文件路徑和數據塊存儲信息都保存在NameNode,如果NameNode故障,整個HDFS系統集群都無法使用;如果NameNode上記錄的數據丟失,整個集群所有DataNode存儲的數據也就沒用了。
所以,NameNode高可用容錯能力非常重要。NameNode採用主從熱備的方式提供高可用服務:
集群部署兩台NameNode伺服器:
兩台伺服器通過Zk選舉,主要是通過爭奪znode鎖資源,決定誰是主伺服器。而DataNode則會向兩個NameNode同時發送心跳數據,但是只有主NameNode才能向DataNode返回控制信息。
正常運行期,主從NameNode之間通過一個共享存儲系統shared edits來同步文件系統的元數據信息。當主NameNode伺服器宕機,從NameNode會通過ZooKeeper升級成為主伺服器,並保證HDFS集群的元數據信息,也就是文件分配表信息完整一致。
軟體系統,性能差點,用戶也許可接受;使用體驗差,也許也能忍受。但若可用性差,經常出故障不可用,就麻煩了;如果出現重要數據丟失,那開發攤上大事。
而分布式系統可能出故障地方又非常多,內存、CPU、主板、磁碟會損壞,伺服器會宕機,網路會中斷,機房會停電,所有這些都可能會引起軟體系統的不可用,甚至數據永久丟失。
所以在設計分布式系統的時候,軟體工程師一定要綳緊可用性這根弦,思考在各種可能的故障情況下,如何保證整個軟體系統依然是可用的。
## 6 保證系統可用性的策略
任何程序、任何數據,都至少要有一個備份,也就是說程序至少要部署到兩台伺服器,數據至少要備份到另一台伺服器上。此外,稍有規模的互聯網企業都會建設多個數據中心,數據中心之間互相進行備份,用戶請求可能會被分發到任何一個數據中心,即所謂的異地多活,在遭遇地域性的重大故障和自然災害的時候,依然保證應用的高可用。
當要訪問的程序或者數據無法訪問時,需要將訪問請求轉移到備份的程序或者數據所在的伺服器上,這也就是 失效轉移 。失效轉移你應該注意的是失效的鑒定,像NameNode這樣主從伺服器管理同一份數據的場景,如果從伺服器錯誤地以為主伺服器宕機而接管集群管理,會出現主從伺服器一起對DataNode發送指令,進而導致集群混亂,也就是所謂的「腦裂」。這也是這類場景選舉主伺服器時,引入ZooKeeper的原因。ZooKeeper的工作原理,我將會在後面專門分析。
當大量的用戶請求或者數據處理請求到達的時候,由於計算資源有限,可能無法處理如此大量的請求,進而導致資源耗盡,系統崩潰。這種情況下,可以拒絕部分請求,即進行 限流 ;也可以關閉部分功能,降低資源消耗,即進行 降級 。限流是互聯網應用的常備功能,因為超出負載能力的訪問流量在何時會突然到來,你根本無法預料,所以必須提前做好准備,當遇到突發高峰流量時,就可以立即啟動限流。而降級通常是為可預知的場景准備的,比如電商的「雙十一」促銷,為了保障促銷活動期間應用的核心功能能夠正常運行,比如下單功能,可以對系統進行降級處理,關閉部分非重要功能,比如商品評價功能。
HDFS是如何通過大規模分布式伺服器集群實現數據的大容量、高速、可靠存儲、訪問的。
1.文件數據以數據塊的方式進行切分,數據塊可以存儲在集群任意DataNode伺服器上,所以HDFS存儲的文件可以非常大,一個文件理論上可以占據整個HDFS伺服器集群上的所有磁碟,實現了大容量存儲。
2.HDFS一般的訪問模式是通過MapRece程序在計算時讀取,MapRece對輸入數據進行分片讀取,通常一個分片就是一個數據塊,每個數據塊分配一個計算進程,這樣就可以同時啟動很多進程對一個HDFS文件的多個數據塊進行並發訪問,從而實現數據的高速訪問。關於MapRece的具體處理過程,我們會在專欄後面詳細討論。
3.DataNode存儲的數據塊會進行復制,使每個數據塊在集群里有多個備份,保證了數據的可靠性,並通過一系列的故障容錯手段實現HDFS系統中主要組件的高可用,進而保證數據和整個系統的高可用。
2. hadoop是做什麼的
提供海量數據存儲和計算的,需要java語言基礎。
Hadoop實現了一個分布式文件系統(Hadoop Distributed File System),簡稱HDFS。有高容錯性的特點,並且設計用來部署在低廉的(low-cost)硬體上;而且它提供高吞吐量來訪問應用程序的數據,適合那些有著超大數據集(large data set)的應用程序。
特點
1、快照支持在一個特定時間存儲一個數據拷貝,快照可以將失效的集群回滾到之前一個正常的時間點上。HDFS已經支持元數據快照。
2、HDFS的設計是用於支持大文件的。運行在HDFS上的程序也是用於處理大數據集的。這些程序僅寫一次數據,一次或多次讀數據請求,並且這些讀操作要求滿足流式傳輸速度。
HDFS支持文件的一次寫多次讀操作。HDFS中典型的塊大小是64MB,一個HDFS文件可以被切分成多個64MB大小的塊,如果需要,每一個塊可以分布在不同的數據節點上。
3、階段狀態:一個客戶端創建一個文件的請求並不會立即轉發到名位元組點。實際上,一開始HDFS客戶端將文件數據緩存在本地的臨時文件中。
3. hdfs的特點有哪些
hdfs的特點
一、hdfs的優點
1.支持海量數據的存儲:一般來說,HDFS存儲的文件可以支持TB和PB級別的數據。
2.檢測和快速應對硬體故障:在集群環境中,硬體故障是常見性問題。因為有上千台伺服器連在一起,故障率很高,因此故障檢測和自動恢復hdfs文件系統的一個設計目標。假設某一個datanode掛掉之後,因為數據是有備份的,還可以從其他節點里找到。namenode通過心跳機制來檢測datanode是否還存活。
3.流式數據訪問:(HDFS不能做到低延遲的數據訪問,但是HDFS的吞吐量大)=》Hadoop適用於處理離線數據,不適合處理實時數據。HDFS的數據處理規模比較大,應用一次需要大量的數據,同時這些應用一般都是批量處理,而不是用戶互動式處理。應用程序能以流的形式訪問資料庫。主要的是數據的吞吐量,而不是訪問速度。訪問速度最終是要受制於網路和磁碟的速度,機器節點再多,也不能突破物理的局限。
4.簡化的一致性模型:對於外部使用用戶,不需要了解hadoop底層細節,比如文件的切塊,文件的存儲,節點的管理。一個文件存儲在HDFS上後,適合一次寫入,多次讀取的場景。因為存儲在HDFS上的文件都是超大文件,當上傳完這個文件到hadoop集群後,會進行文件切塊,分發,復制等操作。如果文件被修改,會導致重新觸發這個過程,而這個過程耗時是最長的。所以在hadoop里,2.0版本允許數據的追加,單不允許數據的修改。
5.高容錯性:數據自動保存多個副本,副本丟失後自動恢復。可構建在廉價的機器上,實現線性擴展。當集群增加新節點之後,namenode也可以感知,將數據分發和備份到相應的節點上。
6.商用硬體:Hadoop並不需要運行在昂貴且高可靠的硬體上。它是設計運行在商用硬體(在各種零售店都能買到的普通硬體)的集群上的,因此至少對於龐大的集群來說,節點故障的幾率還是非常高的。HDFS遇到上述故障時,被設計成能夠繼續運行且不讓用戶察覺到明顯的中斷。
二、HDFS缺點(局限性)
1、不能做到低延遲數據訪問:由於hadoop針對高數據吞吐量做了優化,犧牲了獲取數據的延遲,所以對於低延遲數據訪問,不適合hadoop。對於低延遲的訪問需求,HBase是更好的選擇。
2、不適合大量的小文件存儲 :由於namenode將文件系統的元數據存儲在內存中,因此該文件系統所能存儲的文件總數受限於namenode的內存容量。根據經驗,每個文件、目錄和數據塊的存儲信息大約佔150位元組。因此,如果有一百萬個小文件,每個小文件都會佔一個數據塊,那至少需要300MB內存。如果是上億級別的,就會超出當前硬體的能力。
3、修改文件:對於上傳到HDFS上的文件,不支持修改文件。Hadoop2.0雖然支持了文件的追加功能,但是還是不建議對HDFS上的文件進行修改。因為效率低下。HDFS適合一次寫入,然後多次讀取的場景。
4、不支持用戶的並行寫:同一時間內,只能有一個用戶執行寫操作。
4. hadoop與傳統的關系型資料庫(如oracle)相比,有什麼優勢及劣勢
hadoop的hdfs支持海量數據量存儲 maprece支持對海量數據的分布式處理x0dx0aoracle雖然可以搭建集群 但是當數據量達到一定限度之後查詢處理速度會變得很慢 且對機器性能要求很高x0dx0a其實這兩個東西不是同類 hadoop是一個分布式雲處理架構,傾向於數據計算 而oracle是一個關系型資料庫,傾向於數據存儲。要說比較可以比較hbase與oracle。x0dx0ahbase是一種nosql資料庫,列式資料庫,支持海量數據存儲,支持列的擴展,但是查詢操作較復雜,不如oracle這類關系型資料庫簡單,且只支持一個索引,但是Hbase在表結構設置合理情況下,查詢速度跟數據量大小沒有太大關系,即數據量的大小不會影響到查詢速度,順便說句Hbase查詢速度可以達到ms級
5. hdfs文件系統可以代替mysql嗎
不能。
不是一個概念。mysql是傳統的關系型資料庫。hdfs是nosql hadoop的存儲方式。hdfs是分布式的自帶高可用存儲,文件格式跟mysql的存儲引擎不一樣。大數據離線存儲,當然是hdfs更合適。通過Map/Rece進行批處理遞送到Apache Hadoop仍然是中樞環節。但隨著要從「超思維速度「分析方面獲取競爭優勢的壓力遞增,因此Hadoop(分布式文件系統)自身經歷重大的發展。
科技的發展允許實時查詢,如Apache Drill, Cloudera Impala和Stinger Initiative正脫穎而出,新一代的資源管理Apache YARN 支持這些。為了支持這種日漸強調實時性操作,我們正發布一個新MySQL Applier for Hadoop(用於Hadoop的MySQL Applier)組件。它能夠把MySQL中變化的事務復制到Hadoop / Hive / HDFS。Applier 組件補充現有基於批處理Apache Sqoop的連接性。
6. Hbase與HDFS是個什麼關系
他們的關系是:hbase是一個內存資料庫,而hdfs是一個存儲空間;是物品和房子的關系。
hdfs只是一個存儲空間,他的完整名字是分布式文件系統。從名字可知他的作用了。
hbase是一個內存資料庫,簡單點說hbase把表啊什麼的存在hdfs上。
7. HDFS由什麼組成
大數據平台包含了採集層、存儲層、計算層和應用層,是一個復雜的IT系統,需要學會Hadoop等分布式系統的開發技能。
1.1採集層:Sqoop可用來採集導入傳統關系型資料庫的數據、Flume對於日誌型數據採集,另外使用Python一類的語言開發網路爬蟲獲取網路數據;
1.2儲存層:分布式文件系統HDFS最為常用;採用了主從(Master/Slave)結構模型,一個HDFS集群是由一個NameNode和若干個DataNode組成的。其中NameNode作為主伺服器,管理文件系統的命名空間和客戶端對文件的訪問操作;集群中的DataNode管理存儲的數據。
1.3計算層:有不同的計算框架可以選擇,常見的如MapRece、Spark等,一般來講,如果能使用計算框架的「原生語言」,運算效率會最高(MapRece的原生支持Java,而Spark原生支持Scala);
1.4應用層:包括結果數據的可視化、交互界面開發以及應用管理工具的開發等,更多的用到Java、Python等通用IT開發前端、後端的能力;
8. 怎樣將資料庫數據寫入到hdfs中
如下面這個shell腳本:
#Oracle的連接字元串,其中包含了Oracle的地址,SID,和埠號
CONNECTURL=jdbc:oracle:thin:@20.135.60.21:1521:DWRAC2
#使用的用戶名
ORACLENAME=kkaa
#使用的密碼
ORACLEPASSWORD=kkaa123
#需要從Oracle中導入的表名
oralceTableName=tt
#需要從Oracle中導入的表中的欄位名
columns=AREA_ID,TEAM_NAME
#將Oracle中的數據導入到HDFS後的存放路徑
hdfsPath=apps/as/hive/$oralceTableName
#執行導入邏輯。將Oracle中的數據導入到HDFS中
sqoop import --append --connect $CONNECTURL --username $ORACLENAME --password $ORACLEPASSWORD --target-dir $hdfsPath --num-mappers 1 --table $oralceTableName --columns $columns --fields-terminated-by '\001'
執行這個腳本之後,導入程序就完成了。
9. Hbase與HDFS是什麼關系
HDFS是GFS的一種實現,他的完整名字是分布式文件系統,類似於FAT32,NTFS,是一種文件格式,是底層的,Hadoop HDFS為HBase提供了高可靠性的底層存儲支持。
HBase是Google Bigtable的開源實現,類似Google Bigtable利用GFS作為其文件存儲系統,HBase利用Hadoop HDFS作為其文件存儲系統。
(9)hdfs資料庫擴展閱讀:
Hadoop 中各模塊的作用:
1、Hadoop HDFS為HBase提供了高可靠性的底層存儲支持。
2、Hadoop MapRece為HBase提供了高性能的計算能力。
3、Zookeeper為HBase提供了穩定服務和failover機制。
4、Pig和Hive還為HBase提供了高層語言支持,使得在HBase上進行數據統計處理變得非常簡單。
5、Sqoop則為HBase提供了方便的RDBMS(關系型資料庫)數據導入功能,使得傳統資料庫數據向HBase中遷移變得非常方便。