第三周-大數(shù)據(jù)學(xué)習(xí) 正式使用 hadoop
深圳模具-正式學(xué)習(xí)使用 hadoop 大數(shù)據(jù)集群
一、HDFS相關(guān)命令:
1、查看HDFS下目錄結(jié)構(gòu)及文件 hdfs dfs -ls -R /
2、創(chuàng)建文件目錄/tmp hdfs dfs -mkdir /tmp
3、刪除/tmp目錄 hdfs dfs -rm -r /tmp
4、復(fù)制當(dāng)前目錄下a.txts到HDFS文件系統(tǒng) hdfs dfs -put a.txt /inputFile
5、列出/tmp目錄 hdfs dfs -ls /tmp
6、查看/inputFile/a.txt文件內(nèi)容 hdfs dfs -cat /inputFile/a.txt
7、查看HDFS狀態(tài) hdfs dfsadmin -report
用這個(gè)命令可以快速定位出哪些節(jié)點(diǎn)down掉了,HDFS的容量以及使用了多少,
以及每個(gè)節(jié)點(diǎn)的硬盤使用情況。當(dāng)然NameNode有個(gè)http頁面也可以查詢,
但是這個(gè)命令的輸出更適合我們的腳本監(jiān)控dfs的使用狀況。
下面是關(guān)于 YARN 的操作:
yarn.nodemanager.aux-service
spark_shuffle
mapreduce_shuffle 要引入對應(yīng)的架包
yarn.nodemanager.aux-services.mapreduce_shuffle.class
采用 FIFO的方式, 這個(gè)方式并不好 , 好的方式是 公平調(diào)度-Fair .
org.apache.hadoop.mapred.ShuffleHandler
yarn.nodemanager.aux-services.spark_shuffle.class
org.apache.spark.network.yarn.YarnShuffleServic
FairScheduler.xml
yarn.scheduler.fair.user-as-default-queue false true
yarn.scheduler.fair.preemption false true
yarn.resourcemanager.scheduler
org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler
spark.shuffle.service.port 7337
第四周
Hbase 。
Hbase -> Google bigtable 開源實(shí)現(xiàn) ---2008年----> apache hadoop 下面的項(xiàng)目
采用的公司 : Facebook Intel yahoo baidu alibaba tencent 360 等等 nosql 數(shù)據(jù)庫
SQL (Structured Query Language) 數(shù)據(jù)庫,指關(guān)系型數(shù)據(jù)庫。
主要代表:SQL Server,Oracle,MySQL(開源),PostgreSQL(開源)。
NoSQL(Not Only SQL)泛指非關(guān)系型數(shù)據(jù)庫。
主要代表:MongoDB,Redis,CouchDB。 supersech hbase , kylin , chiohouse phesto
關(guān)系型數(shù)據(jù)庫的特點(diǎn): 面向行的, Nosql 是面向列的。
高并發(fā)狀態(tài)下: 分庫分表 讀寫分離 帶來數(shù)據(jù)一致性問題 ,海量數(shù)據(jù)實(shí)現(xiàn)出來很復(fù)雜,后期遷移也很復(fù)雜。
高可用,可靠性,可伸縮性的措施: 主備 、 主從 、 多主。 本身的可擴(kuò)展性很差。 增加節(jié)點(diǎn)或者宕機(jī)要做遷移。
Hbase 首先是一個(gè)大表。
1.關(guān)系型數(shù)據(jù)庫理論 - ACID
ACID,是指數(shù)據(jù)庫管理系統(tǒng)(DBMS)在寫入或更新資料的過程中,為保證事務(wù)(transaction)是正確可靠的,
所必須具備的四個(gè)特性:原子性(atomicity,或稱不可分割性)、一致性(consistency)、
隔離性(isolation,又稱獨(dú)立性)、持久性(durability)。
A – Atomicity – 原子性
一個(gè)事務(wù)(transaction)中的所有操作,要么全部完成,要么全部不完成,不會(huì)結(jié)束在中間某個(gè)環(huán)節(jié)。
事務(wù)在執(zhí)行過程中發(fā)生錯(cuò)誤,會(huì)被回滾(Rollback)到事務(wù)開始前的狀態(tài),就像這個(gè)事務(wù)從來沒有被執(zhí)行過一樣。
C – Consistency – 一致性
在事務(wù)開始之前和事務(wù)結(jié)束以后,數(shù)據(jù)庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預(yù)設(shè)規(guī)則,
這包含資料的精確度、串聯(lián)性以及后續(xù)數(shù)據(jù)庫可以自發(fā)性地完成預(yù)定的工作。
I – Isolation – 隔離性
數(shù)據(jù)庫允許多個(gè)并發(fā)事務(wù)同時(shí)對其數(shù)據(jù)進(jìn)行讀寫和修改的能力,隔離性可以防止多個(gè)事務(wù)并發(fā)執(zhí)行時(shí)
由于交叉執(zhí)行而導(dǎo)致數(shù)據(jù)的不一致。事務(wù)隔離分為不同級別,包括讀未提交(Read uncommitted)、
讀提交(read committed)、可重復(fù)讀(repeatable read)和串行化(Serializable)。
D – Durability – 持久性
事務(wù)處理結(jié)束后,對數(shù)據(jù)的修改就是永久的,即便系統(tǒng)故障也不會(huì)丟失。
關(guān)系型數(shù)據(jù)庫嚴(yán)格遵循ACID理論。
但當(dāng)數(shù)據(jù)庫要開始滿足橫向擴(kuò)展、高可用、模式自由等需求時(shí),需要對ACID理論進(jìn)行取舍,不能嚴(yán)格遵循ACID。
以CAP理論和BASE理論為基礎(chǔ)的NoSQL數(shù)據(jù)庫開始出現(xiàn)。
2.分布式系統(tǒng)理論
2.1 分布式系統(tǒng)介紹
分布式系統(tǒng)的核心理念是讓多臺(tái)服務(wù)器協(xié)同工作,完成單臺(tái)服務(wù)器無法處理的任務(wù),尤其是高并發(fā)或者大數(shù)據(jù)量的任務(wù)。分布式是NoSQL數(shù)據(jù)庫的必要條件。
分布式系統(tǒng)由獨(dú)立的服務(wù)器通過網(wǎng)絡(luò)松散耦合組成的。每個(gè)服務(wù)器都是一臺(tái)獨(dú)立的PC機(jī),服務(wù)器之間通過內(nèi)部網(wǎng)絡(luò)連接,內(nèi)部網(wǎng)絡(luò)速度一般比較快。因?yàn)榉植际郊豪锏姆?wù)器是通過內(nèi)部網(wǎng)絡(luò)松散耦合,各節(jié)點(diǎn)之間的通訊有一定的網(wǎng)絡(luò)開銷,因此分布式系統(tǒng)在設(shè)計(jì)上盡可能減少節(jié)點(diǎn)間通訊。此外,因?yàn)榫W(wǎng)絡(luò)傳輸瓶頸,單個(gè)節(jié)點(diǎn)的性能高低對分布式系統(tǒng)整體性能影響不大。比如,對分布式應(yīng)用來說,采用不同編程語言開發(fā)帶來的單個(gè)應(yīng)用服務(wù)的性能差異,跟網(wǎng)絡(luò)開銷比起來都可以忽略不計(jì)。
因此,分布式系統(tǒng)每個(gè)節(jié)點(diǎn)一般不采用高性能的服務(wù)器,而是使用性能相對一般的普通PC服務(wù)器。提升分布式系統(tǒng)的整體性能是通過橫向擴(kuò)展(增加更多的服務(wù)器),而不是縱向擴(kuò)展(提升每個(gè)節(jié)點(diǎn)的服務(wù)器性能)實(shí)現(xiàn)。
分布式系統(tǒng)最大的特點(diǎn)是可擴(kuò)展性,它能夠適應(yīng)需求變化而擴(kuò)展。企業(yè)級應(yīng)用需求經(jīng)常隨時(shí)間而不斷變化,這也對企業(yè)級應(yīng)用平臺(tái)提出了很高的要求。企業(yè)級應(yīng)用平臺(tái)必須要能適應(yīng)需求的變化,即具有可擴(kuò)展性。比如移動(dòng)互聯(lián)網(wǎng)2C應(yīng)用,隨著互聯(lián)網(wǎng)企業(yè)的業(yè)務(wù)規(guī)模不斷增大,業(yè)務(wù)變得越來越復(fù)雜,并發(fā)用戶請求越來越多,要處理的數(shù)據(jù)也越來越多,這個(gè)時(shí)候企業(yè)級應(yīng)用平臺(tái)必須能夠適應(yīng)這些變化,支持高并發(fā)訪問和海量數(shù)據(jù)處理。分布式系統(tǒng)有良好的可擴(kuò)展性,可以通過增加服務(wù)器數(shù)量來增強(qiáng)分布式系統(tǒng)整體的處理能力,以應(yīng)對企業(yè)的業(yè)務(wù)增長帶來的計(jì)算需求增加。
2.2 分布式存儲(chǔ)的問題 – CAP理論
如果我們期待實(shí)現(xiàn)一套嚴(yán)格滿足ACID的分布式事務(wù),很可能出現(xiàn)的情況就是系統(tǒng)的可用性和嚴(yán)格一致性發(fā)生沖突。在可用性和一致性之間永遠(yuǎn)無法存在一個(gè)兩全其美的方案。由于NoSQL的基本需求就是支持分布式存儲(chǔ),嚴(yán)格一致性與可用性需要互相取舍,由此延伸出了CAP理論來定義分布式存儲(chǔ)遇到的問題。
CAP理論告訴我們:一個(gè)分布式系統(tǒng)不可能同時(shí)滿足一致性(C:Consistency)、可用性(A:Availability)、分區(qū)容錯(cuò)性(P:Partitiontolerance)這三個(gè)基本需求,并且最多只能滿足其中的兩項(xiàng)。
對于一個(gè)分布式系統(tǒng)來說,分區(qū)容錯(cuò)是基本需求,否則不能稱之為分布式系統(tǒng)。因此架構(gòu)師需要在C和A之間尋求平衡。
HBase 的物理存儲(chǔ)
HBase 表中的所有行都是按照行鍵的字典序排列的。
因?yàn)橐粡埍碇邪男械臄?shù)量非常多,有時(shí)候會(huì)高達(dá)幾億行,所以需要分布存儲(chǔ)到多臺(tái)服務(wù)器上。
因此,當(dāng)一張表的行太多的時(shí)候,HBase 就會(huì)根據(jù)行鍵的值對表中的行進(jìn)行分區(qū),每個(gè)行區(qū)間構(gòu)成一個(gè)“分區(qū)(Region)”,
包含了位于某個(gè)值域區(qū)間內(nèi)的所有數(shù)據(jù),如圖 1 所示。
圖 1 HBase的Region存儲(chǔ)模式圖
Region 是按大小分割的,每個(gè)表一開始只有二個(gè) Region,隨著數(shù)據(jù)不斷插入到表中,Region 不斷增大,
當(dāng)增大到一個(gè)閾值的時(shí)候,Region 就會(huì)等分為兩個(gè)新的 Region。
當(dāng)表中的行不斷增多時(shí),就會(huì)有越來越多的 Region,如圖 2 所示。
圖 2 HBase的Region分裂示意
Region 是 HBase 中數(shù)據(jù)分發(fā)和負(fù)載均衡的最小單元,默認(rèn)大小是 100MB 到 200MB。
不同的 Region 可以分布在不同的 Region Server 上,但一個(gè) Region 不會(huì)拆分到多個(gè) Region Server 上。
每個(gè) Region Server 負(fù)責(zé)管理一個(gè) Region 集合。
如圖 3 所示。
圖 3 HBase的Region分布模式
Region 是 HBase 在 Region Server 上數(shù)據(jù)分發(fā)的最小單元,但并不是存儲(chǔ)的最小單元。
事實(shí)上,每個(gè) Region 由一個(gè)或者多個(gè) Store 組成,每個(gè) Store 保存一個(gè)列族的數(shù)據(jù)。
每個(gè) Store 又由一個(gè) memStore 和 0 至多個(gè) Store File 組成,如圖 4 所示。
Store File 以 HFile 格式保存在 HDFS 上。
圖 4 HBase的Region存儲(chǔ)模式
HBase 的邏輯架構(gòu)
在分布式的生產(chǎn)環(huán)境中,HBase 需要運(yùn)行在 HDFS 之上,以 HDFS 作為其基礎(chǔ)的存儲(chǔ)設(shè)施。
HBase 的上層是訪問數(shù)據(jù)的 Java API 層,供應(yīng)用訪問存儲(chǔ)在 HBase 中的數(shù)據(jù)。
HBase 的集群主要由 Master、Region Server 和 Zookeeper 組成,
具體模塊如圖 5 所示。
圖 5 HBase的系統(tǒng)架構(gòu)
1)Master
Master 主要負(fù)責(zé)表和 Region 的管理工作。
表的管理工作主要是負(fù)責(zé)完成增加表、刪除表、修改表和查詢表等操作。
Region 的管理工作更復(fù)雜一些,Master 需要負(fù)責(zé)分配 Region 給 Region Server,協(xié)調(diào)多個(gè) Region Server,檢測各個(gè) Region Server 的狀態(tài),并平衡 Region Server 之間的負(fù)載。
當(dāng) Region 分裂或合并之后,Master 負(fù)責(zé)重新調(diào)整 Region 的布局。如果某個(gè) Region Server 發(fā)生故障,Master 需要負(fù)責(zé)把故障 Region Server 上的 Region 遷移到其他 Region Server 上。
HBase 允許多個(gè) Master 結(jié)點(diǎn)共存,但是這需要 Zookeeper 進(jìn)行協(xié)調(diào)。當(dāng)多個(gè) Master 結(jié)點(diǎn)共存時(shí),只有一個(gè) Master 是提供服務(wù)的,其他的 Master 結(jié)點(diǎn)處于待命的狀態(tài)。
當(dāng)正在工作的 Master 結(jié)點(diǎn)宕機(jī)時(shí),其他的 Master 則會(huì)接管 HBase 的集群。
2)RegionServer
HBase 有許多個(gè) Region Server,每個(gè) Region Server 又包含多個(gè) Region。Region Server 是 HBase 最核心的模塊,負(fù)責(zé)維護(hù) Master 分配給它的 Region 集合,并處理對這些 Region 的讀寫操作。
Client 直接與 Region Server 連接,并經(jīng)過通信獲取 HBase 中的數(shù)據(jù)。
HBase 釆用 HDFS 作為底層存儲(chǔ)文件系統(tǒng),Region Server 需要向 HDFS 寫入數(shù)據(jù),并利用 HDFS 提供可靠穩(wěn)定的數(shù)據(jù)存儲(chǔ)。
Region Server 并不需要提供數(shù)據(jù)復(fù)制和維護(hù)數(shù)據(jù)副本的功能。
3)Zookeeper
Zookeeper 的作用對 HBase 很重要。
首先,Zookeeper 是 HBase Master 的高可用性(High Available,HA)解決方案。
也就是說,Zookeeper 保證了至少有一個(gè) HBase Master 處于運(yùn)行狀態(tài)。
Zookeeper 同時(shí)負(fù)責(zé) Region 和 Region Server 的注冊。
HBase 集群的 Master 是整個(gè)集群的管理者,它必須知道每個(gè) Region Server 的狀態(tài)。
HBase 就是使用 Zookeeper 來管理 Region Server 狀態(tài)的。
每個(gè) Region Server 都向 Zookeeper 注冊,由 Zookeeper 實(shí)時(shí)監(jiān)控每個(gè) Region Server 的狀態(tài),并通知給 Master。
這樣,Master 就可以通過 Zookeeper 隨時(shí)感知各個(gè) Region Server 的工作狀態(tài)。
需要搭建 ZooKepper 集群 , 采取奇數(shù)作為基礎(chǔ), 要不斷選取出唯一的領(lǐng)導(dǎo)者 。
然后在搭建 Hbase 集群。
Hlog = Mysql 中的 bingLog
Hbase 邏輯架構(gòu)
安裝 Hbase
1、下載軟件從 hbase.apache.com
2、上傳到 \bigdata\tools
3、tar -zxvf hbase-1.2.3tar.gz
4、cd /bigdata/tools/hbase1.2.3/config
5、vi hbase-env.sh
export ...
6、vi hbase-site.xml
我們上課說的: start-hbase.sh
查看: jsp 或者 http://192.168.1.119:16030
安裝一個(gè)插件 Phoenix , 就可以用 mysql 數(shù)據(jù)庫的命令看了 , 等于是一個(gè) shell .
API可以在 Java后端做軟件查看 。