一探赫、版本的選擇
cdh5.3.0:archive.cloudera.com/cdh5/chd/5/
下載對應(yīng)的hadoop hive zookeeper hbase版本
二家坎、角色規(guī)劃
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? hadoop02 ? ? ? hadoop03 ? ? ? ? hadooop04 ? ? ?hadoop05
Master ? ? ? ? ? ? ? ? ? ? ? √ ? ? ? ? ? ? ? ? ? ? ? ?√
Regionserver ? ? ? ? ? √ ? ? ? ? ? ? ? ? ? ? ? ? √? ? ? ? ? ? ? ? ? ? ? ? √? ? ? ? ? ? ? ? ? ? ? √
zookeeper? ? ? ? ? ? ? ? √ ? ? ? ? ? ? ? ? ? ? ? ? √ ? ? ? ? ? ? ? ? ? ? ? ?√
三嘱能、問題
1吝梅、為什么要搭建zookeeper?
2惹骂、secondaryNameNode的作用
3苏携、建立軟鏈接
4、不配置slaves可以嗎对粪?每臺手動(dòng)啟動(dòng)
5右冻、集群搭建完成之后要做什么?Hadoop基準(zhǔn)測試
測試hdfs每秒能讀寫多少數(shù)據(jù)著拭?等等
6纱扭、怎樣區(qū)分bin和sbin內(nèi)容,各腳本之間的關(guān)系
bin:
hdfs dfs -ls / ? ? ? ? ?查看/創(chuàng)建目錄
yarn jar xxx.jar ? ? ? 提交MR任務(wù)
sbin:
start-all.sh 由start-dfs.sh和start-yarn.sh腳本組成
start-dfs.sh:使用hadoop-daemons.sh啟動(dòng)zookeeper儡遮、journalnode乳蛾、NameNode、secondaryNameNode鄙币、DataNode
hadoop-daemons.sh腳本中執(zhí)行了bin/slaves.sh腳本
cat slaves:然后獲取到我們在slaves中配置的datanode節(jié)點(diǎn)(參數(shù))
如果我們使用start-dfs.sh啟動(dòng)集群肃叶,必須配置slaves,因?yàn)檫@個(gè)腳本依賴于slaves.sh腳本爱榔,如果使用hadoop-daemon.sh start namenode被环,不需要配置slaves,因?yàn)樵撃_本與slaves.sh腳本獨(dú)立。
7详幽、默認(rèn)情況下載DataNode節(jié)點(diǎn)啟動(dòng)NodeManager筛欢?
? ? ? ? ? ?數(shù)據(jù)本地化。
四唇聘、寫腳本執(zhí)行自動(dòng)發(fā)送
for i in hadoop03 hadoop04 hadoop05
do
nohup scp -r hadoop-2.6.5 $i:$PWD &
done
查看任務(wù)有沒有執(zhí)行完成
jobs
1)hdfs namenode -format 該命令是為了生成fsimage(元數(shù)據(jù))
解決方案:刪除/tmp目錄下的元數(shù)據(jù)版姑,然后再執(zhí)行格式化操作
2)啟動(dòng)NameNode start-dfs.sh(hadoo-daemon.sh start namenode)
集群訪問地址:
Hadoop--50070 ? ? ??
yarn---8088
zookeeper--2181
hbase--16010
3)出錯(cuò)查看日志
tail -100 /日志文件目錄
手啟master ? ? ? ? ? ? hbase-daemon.sh start master
rm -rf *hadoop* /*cmd
五、HBase的使用場合
數(shù)據(jù)量大
功能簡單
虛擬化:docker
spark
人工智能:機(jī)器學(xué)習(xí) 深度學(xué)習(xí)
hbase-site.xml 配置訪問地址
? ? ?hdfs端口號:8020/9000
? ? ?zookeeper集群訪問地址
hbase-env.sh 兩種方式都可以迟郎,無所謂好壞
? ? ? HBASE_MANAGES_ZK=true表示用HBase自帶zookeeper
? ? ? HBASE_MANAGES_ZK=false表示用外面自己搭建的zookeeper
配置regionservers:zookeeper節(jié)點(diǎn)
實(shí)現(xiàn)HA:bachup_masters
問題:hdfs的地址:配成myha01剥险,只是一個(gè)邏輯名,它是怎么識別的宪肖?
我們怎么讓它知道表制?答:把配置myha01的文件復(fù)制到conf目錄下。還有一種高級的方式:調(diào)用腳本讓該文件自己找到我們的core-site.xml和hdfs-site.xml控乾。腳本該怎么寫么介?
日志的位置 hbase/logs
hbase后臺啟動(dòng)之后怎么停止?怎么轉(zhuǎn)到前臺蜕衡?
jobs查看當(dāng)前進(jìn)程是前臺還是后臺
ctrl+z掛起程序
bg 1切換到后臺
fg 1喚醒到前臺運(yùn)行
進(jìn)入客戶端名之后不能退格的解決方案壤短?
六、HBase寫數(shù)據(jù)的流程 put命令
HStore MemStore StoreFile 合并256M 10G
WAL機(jī)制
HStore的個(gè)數(shù)=列族的個(gè)數(shù)
HMaster決定分割出來的region分發(fā)到哪臺regionserver
內(nèi)存易丟失------WAL機(jī)制(Write Ahead Log)預(yù)寫日志
合并文件的時(shí)候會(huì)把過期的數(shù)據(jù)清理掉
MySQL使用B+樹架構(gòu)的,HBase:LSM樹:由B+樹演化過來的久脯。
在MemStore中按照rowkey字典排序
讀數(shù)據(jù):zookeeper/-Root-/.META/RegionServer
內(nèi)存纳胧、磁盤
布隆過濾器的思想:IP地址通過hash算法轉(zhuǎn)換為位數(shù)組(散列表/哈希表),通過0和1判斷一個(gè)IP地址是否同時(shí)在兩臺服務(wù)器出現(xiàn)帘撰,允許誤判的情況下可以提高效率跑慕。
解決散列沖突的幾種方法:
1、開地址法:二次探測再散列 ? ? ? ? ?
? ? ? ? ? ? 求桶號的公式:Hi=(H0+i^2)%m,i=1,2...m-1(m是一個(gè)4k+3的質(zhì)數(shù))
寫javaAPI:第一個(gè)API:HBaseDao和HBaseDaoImpl
獲取連接:hTablePool.getTable(tableName);
插入數(shù)據(jù)的方法save insert
對象 put tableName qualifer value .getbytes
查詢方法:getOneRow(tableName,rowKey)查詢一行--返回Result對象
? ? ? ? ? ? ? ? ? ? getRows(tableName,rowKey)模糊查詢--返回List<Result>
? ? ? ? ? ? ? ? ? ? getRows(tableName,startrow,endrow)根據(jù)起始鍵和結(jié)束鍵查詢幾行
構(gòu)建get對象(rowkey)(new的方式)
table.get(get)-->Result對象
table.getScanner(scan);
掃描對象要添加過濾器 ? ? ?scan.setFilter(filter);
前綴過濾器PrefixFilter(rowkey.getbytes());
hbase只支持左匹配
功能骡和,根據(jù)起始鍵和結(jié)束鍵掃描獲取數(shù)據(jù)
首先獲取表的連接
然后初始化一個(gè)scan對象并設(shè)置startRow 和 endRow 屬性值
最后返回一個(gè)List<Result result>的集合list
測試方法:
1相赁、getRow()返回一個(gè)result對象,獲取單元格集合
for(Cell cell:result.rawCells()){
?String rowKey=new String(CellUtil.cloneRow(cell));
}
2慰于、getRows(tableName,row_like)
一個(gè)result對應(yīng)一個(gè)rowkey钮科,一個(gè)rowkey對應(yīng)多個(gè)cell
3、測試getRows(tableName,startRow,endRow)
查詢多條rowkey對應(yīng)信息婆赠,前閉后開绵脯。
左匹配 +起始結(jié)束鍵(前閉后開) +字典順序
4、刪除表
delete對象
HBase的讀數(shù)據(jù):當(dāng)HMaster掛掉之后休里,不影響讀數(shù)據(jù)蛆挫。
HMaster參與的操作:寫數(shù)據(jù),具體:HMaster會(huì)管理region發(fā)送到哪臺服務(wù)器妙黍。
region中存放數(shù)據(jù)悴侵。
實(shí)現(xiàn)HA也必須有HMaster,管理regionserver
Master管理regionserver:master與znode保持心跳,znode保存regionserver上線和下線信息拭嫁。