版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
HBase數(shù)據(jù)庫應(yīng)用案例教程全課導(dǎo)航01HBase數(shù)據(jù)庫基礎(chǔ)02HBaseShell03HBase客戶端API04HBase客戶端API進(jìn)階05HBase原理實(shí)現(xiàn)06HBase性能優(yōu)化07HBase與MapReduce的集成1HBase數(shù)據(jù)庫基礎(chǔ)項(xiàng)目項(xiàng)目導(dǎo)讀隨著大數(shù)據(jù)時(shí)代的到來,面對快速增長的數(shù)據(jù)規(guī)模和日漸復(fù)雜的數(shù)據(jù)模型,關(guān)系型數(shù)據(jù)庫已無法滿足海量數(shù)據(jù)的高效率存儲和訪問需求,以及數(shù)據(jù)庫的高可擴(kuò)展性和高可靠性需求等。在這種背景下,非關(guān)系型數(shù)據(jù)庫(NoSQL)應(yīng)運(yùn)而生,并逐漸成為人們使用數(shù)據(jù)庫時(shí)的新選擇。HBase作為典型的非關(guān)系型數(shù)據(jù)庫之一,具有廣闊的應(yīng)用前景。知識目標(biāo)了解HBase的特性及應(yīng)用場景。了解HBase與Hadoop的關(guān)系。熟悉HBase數(shù)據(jù)模型的相關(guān)知識。熟悉HBase的架構(gòu)組成部分及其功能。能力目標(biāo)能夠安裝HBase、Hadoop等。能夠配置HBase的單機(jī)模式、偽分布式模式和完全分布式模式。素質(zhì)目標(biāo)通過了解Hadoop生態(tài)系統(tǒng)的各個(gè)組件,增強(qiáng)團(tuán)結(jié)協(xié)作意識。學(xué)會利用事物間的關(guān)聯(lián)性解決問題,提高邏輯思維能力。項(xiàng)目分析深入理解HBase的原理,并在使用時(shí)對其進(jìn)行恰當(dāng)?shù)墓芾砗途S護(hù),能夠有效提高數(shù)據(jù)的訪問效率,以及集群的性能和安全性。本項(xiàng)目首先介紹HBase的工作原理、Region
管理、運(yùn)維管理及數(shù)據(jù)管理方面的內(nèi)容,然后通過基于用戶行為數(shù)據(jù)表的預(yù)拆分和在HBase集群中添加RegionServer節(jié)點(diǎn)的操作,讓讀者對HBase的原理有更深刻的理解。項(xiàng)目導(dǎo)航HBase簡介1HBase與Hadoop的關(guān)系2HBase數(shù)據(jù)模型3HBase架構(gòu)401HBase簡介問題導(dǎo)入NoSQL的典型應(yīng)用HBase的應(yīng)用場景全班學(xué)生以3~5人為一組,各組選出組長。組長組織組員掃碼觀看“NoSQL的典型應(yīng)用”和“HBase的應(yīng)用場景”視頻,討論并回答下列問題。問題1:說一說你對NoSQL的理解。問題2:根據(jù)HBase的應(yīng)用場景類型,嘗試列舉HBase在日常生活中的應(yīng)用場景(不少于3個(gè))。1.1.1HBase的特性01HBase的表可以非常大,其單表可存儲達(dá)百億行、百萬列數(shù)據(jù)。海量存儲02HBase
是面向列的數(shù)據(jù)庫,它將數(shù)據(jù)按列族劃分(一個(gè)列族中可以包含一個(gè)列或多個(gè)列),并將同一個(gè)列族的數(shù)據(jù)存儲在一起。面向列03HBase
中的數(shù)據(jù)可以有多個(gè)版本。默認(rèn)情況下,版本號是數(shù)據(jù)寫入時(shí)的時(shí)間戳。數(shù)據(jù)多版本04HBase是非關(guān)系型數(shù)據(jù)庫,適合存儲非結(jié)構(gòu)化數(shù)據(jù)。非結(jié)構(gòu)化1.1.1HBase的特性05由于值為空的列不占用存儲空間,因此,在實(shí)際應(yīng)用中通常將
HBase
表設(shè)計(jì)為稀疏矩陣,這樣既可以節(jié)省存儲開銷,又可以提高讀性能。稀疏06HBase
可以通過橫向擴(kuò)展的方式,將多個(gè)性能普通的服務(wù)器添加到集群中(無須提升服務(wù)器自身的性能),從而實(shí)現(xiàn)動態(tài)擴(kuò)展。高可擴(kuò)展性07HBase的數(shù)據(jù)存儲在HDFS(Hadoopdistributedfilesystem,Hadoop分布式文件系統(tǒng))中,HDFS
的多副本機(jī)制可以實(shí)現(xiàn)故障的自動修復(fù),能夠保證
HBase
的高可靠性。高可靠性1.1.1HBase的特性請同學(xué)們思考,面向行的關(guān)系型數(shù)據(jù)庫主要有哪些?他們的特點(diǎn)與HBase有何不同?課堂討論1.1.2HBase的應(yīng)用場景1日志數(shù)據(jù)交易數(shù)據(jù)海量數(shù)據(jù)存儲2實(shí)時(shí)監(jiān)控系統(tǒng)互聯(lián)網(wǎng)搜索低延遲、高并發(fā)讀寫3氣象數(shù)據(jù)統(tǒng)計(jì)股票行情分析數(shù)據(jù)分析和挖掘4實(shí)時(shí)推薦系統(tǒng)實(shí)時(shí)計(jì)算和流處理課堂檢測HBase的特點(diǎn)都有哪些?主要的應(yīng)用場景有哪些?HBase和Hadoop的關(guān)系是什么?簡述HBase的邏輯模型和物理模型?HBase的架構(gòu)基本組成有哪些?它們都有哪些作用?課堂小結(jié)HBase簡介HBase的特性HBase的應(yīng)用場景02HBase與Hadoop的關(guān)系視頻導(dǎo)入1.2HBase與Hadoop的關(guān)系Hadoop是由Apache軟件基金會主持開發(fā)的一個(gè)開源軟件,它為用戶提供了底層細(xì)節(jié)透明的分布式基礎(chǔ)框架。
現(xiàn)如今,Hadoop已成為大數(shù)據(jù)的代名詞,針對大數(shù)據(jù)處理過程中的各個(gè)環(huán)節(jié),它都有相應(yīng)的解決方案,于是逐漸形成了完整的Hadoop生態(tài)系統(tǒng),如右圖所示。Hadoop生態(tài)系統(tǒng)拓展閱讀Hadoop生態(tài)系統(tǒng)由多個(gè)組件構(gòu)成,它們需要協(xié)同工作,才能更好地完成大數(shù)據(jù)處理任務(wù),這體現(xiàn)了協(xié)作的重要性。團(tuán)結(jié)協(xié)作是現(xiàn)代生活中不可缺少的一環(huán)?!氨娙耸安窕鹧娓摺?,只有善于團(tuán)結(jié)協(xié)作,才能實(shí)現(xiàn)優(yōu)勢互補(bǔ),進(jìn)而激發(fā)協(xié)同效應(yīng),最終產(chǎn)生“1+1>2”的效果。1.2HBase與Hadoop的關(guān)系簡述HBase與Hadoop的關(guān)系。課堂討論1.2HBase與Hadoop的關(guān)系正是因?yàn)镠Base底層依賴Hadoop,所以選擇HBase版本時(shí),還要考慮其與Hadoop版本的兼容性。下表為HBase官方網(wǎng)站發(fā)布的HBase與Hadoop版本兼容信息。Hadoop版本HBase2.5.xHadoop版本HBase2.4.xHadoop版本HBase2.3.xHadoop2.10.2+SHadoop2.10.2+SHadoop2.10.xSHadoop3.1.1+XHadoop3.1.1+SHadoop3.1.0XHadoop3.2.3+SHadoop3.2.3+SHadoop3.1.1+SHadoop3.3.[0~1]XHadoop3.3.[0~1]SHadoop3.2.xSHadoop3.3.2+SHadoop3.3.2+SHadoop3.3.xS注:(1)S=supported,表示經(jīng)過測試是支持的;(2)X=notsupported,表示不支持。課堂檢測HBase與Hadoop的關(guān)系是什么?03HBase數(shù)據(jù)模型視頻導(dǎo)入1.3.1相關(guān)概念表1HBase表(table)的作用是將數(shù)據(jù)組織起來,同一個(gè)表中的數(shù)據(jù)通常都是相關(guān)的。行鍵2每個(gè)HBase表由若干行(row)組成,每行數(shù)據(jù)又由一個(gè)行鍵(rowkey)和若干列值組成,且可通過行鍵唯一標(biāo)識一行數(shù)據(jù)。列族3一個(gè)HBase表中可以包含一個(gè)列族(columnfamily)或多個(gè)列族,一個(gè)列族中可以包含一個(gè)列或多個(gè)列。列族需要在定義表時(shí)定義。1.3.1相關(guān)概念列限定符4HBase列族中的列通過列限定符(columnqualifier)進(jìn)行標(biāo)識。列限定符不需要在定義表和列族時(shí)定義,可以按需求動態(tài)添加。HBase
中的列名由列族名和列限定符名兩部分組成,中間用冒號隔開。單元格5單元格(cell)是HBase中數(shù)據(jù)的存儲單元。在HBase表中,行鍵、列族和列限定符共同確定一個(gè)單元格。時(shí)間戳6HBase
表的單元格中可以保存同一份數(shù)據(jù)的多個(gè)版本,每個(gè)版本對應(yīng)一個(gè)時(shí)間戳(timestamp),該時(shí)間戳通常為數(shù)據(jù)寫入的時(shí)間。1.3.1相關(guān)概念為便于理解HBase數(shù)據(jù)模型的相關(guān)概念,下面通過一個(gè)實(shí)例進(jìn)行說明。假設(shè)下表是一個(gè)存儲了圖書借閱信息的
HBase
表,表中的圖書編號是行鍵,用來唯一標(biāo)識每本圖書的信息;列族info中包含了兩個(gè)列,分別是book_name和date,對應(yīng)保存的是書名和借閱時(shí)間。在下表中行鍵、列族、列限定符、單元格、時(shí)間戳分別對應(yīng)哪些內(nèi)容?課堂討論1.3.1相關(guān)概念列族列限定符單元格行鍵t1=2023-09-20T17:57:39.210t2=2023-09-01T10:23:19.265圖書借閱表1.3.2邏輯模型邏輯模型就是邏輯視圖,也稱概念視圖,是
HBase
中數(shù)據(jù)的邏輯組織方式。HBase
表可視為一個(gè)稀疏、多維的數(shù)據(jù)映射關(guān)系。為便于理解,下面通過下表的實(shí)例說明HBase的邏輯模型。行鍵stu_infostu_grade列值時(shí)間戳列值時(shí)間戳20231001stu_info:nameLilyt1
stu_info:sexfemalet1
stu_info:citybeijingt1
20232001stu_info:nameTomt2stu_grade:math59t2stu_info:sexmalet2stu_grade:computer88t2
stu_grade:math70t3HBase邏輯模型實(shí)例1.3.3物理模型關(guān)系型數(shù)據(jù)庫需要預(yù)先創(chuàng)建表結(jié)構(gòu),為每個(gè)列預(yù)留存儲空間,因此對于稀疏數(shù)據(jù)來說,表中會產(chǎn)生大量的
NULL
值,這樣會消耗大量的存儲空間。而基于列存儲的HBase
對于內(nèi)容為空的單元格,實(shí)際上并不會存儲,也就是說內(nèi)容為空的單元格并不占用存儲空間。1.3.3物理模型例如,表(HBase邏輯模型實(shí)例)中行鍵為
20232001
的數(shù)據(jù)在物理存儲時(shí)會將兩個(gè)列
stu_info
和
stu_grade
分別存儲,屬于同一個(gè)列族的數(shù)據(jù)會存儲在一起,如下表所示。行鍵stu_info列值時(shí)間戳20232001stu_info:nameTomt2stu_info:sexmalet2行鍵stu_grade列值時(shí)間戳20232001stu_grade:math59t2stu_grade:computer88t2stu_grade:math70t3HBase物理存儲方式(列族stu_info)HBase物理存儲方式(列族stu_grade)課堂檢測簡述數(shù)據(jù)模型的相關(guān)概念?數(shù)據(jù)模型的分類及定義是什么?課堂小結(jié)HBase數(shù)據(jù)模型相關(guān)概念表行鍵列族列限定符單元格時(shí)間戳邏輯模型物理模型04HBase架構(gòu)視頻導(dǎo)入1.4HBase架構(gòu)HBase由客戶端、Zookeeper、Master和RegionServer這4部分組成,其架構(gòu)如下圖所示。HBase架構(gòu)1.4.1客戶端客戶端包含訪問HBase的接口,是整個(gè)HBase集群的入口。對于管理類的操作,客戶端與Master通信;對于數(shù)據(jù)讀寫類的操作,客戶端與RegionServer通信。
提示遠(yuǎn)程過程調(diào)用(remoteprocedurecall,RPC),是一臺計(jì)算機(jī)跨越底層網(wǎng)絡(luò)協(xié)議調(diào)用另一臺計(jì)算機(jī)的子程序或服務(wù)所遵循的協(xié)議標(biāo)準(zhǔn),具有透明性、高性能、可控性等特點(diǎn)。1.4.2ZookeeperZookeeper是由Apache維護(hù)的分布式協(xié)作服務(wù),主要用于實(shí)現(xiàn)分布式系統(tǒng)中Master選舉、分布式協(xié)調(diào)、集群管理、負(fù)載均衡、分布式鎖等功能。在HBase集群中,Zookeeper為集群提供穩(wěn)定、可靠的協(xié)作服務(wù)。通常情況下,HBase
集群中包含一個(gè)
Master
和多個(gè)
RegionServer,但
HBase
集群也可以啟動多個(gè)
Master,然后利用
Zookeeper
的選舉機(jī)制從多個(gè)
Master
中選舉一個(gè)作為主Master。當(dāng)
HBase
啟動時(shí),每個(gè)
RegionServer
都需要將自己的信息注冊到
Zookeeper
中,Zookeeper會實(shí)時(shí)監(jiān)控每個(gè)RegionServer并告知選中的Master,這樣Master就可以隨時(shí)感知RegionServer的運(yùn)行狀態(tài),從而更好地管理HBase集群。1.4.2Zookeeper請同學(xué)們思考,Zookeeper在HBase中(Master節(jié)點(diǎn)、RegionServer節(jié)點(diǎn))的主要作用有哪些?課堂討論1.4.3MasterMaster是HBase集群中的服務(wù)器,Zookeeper可以保證在任何時(shí)刻總有唯一一個(gè)
Master正常運(yùn)行,所以
Master
不存在單點(diǎn)失效的問題。Master
負(fù)責(zé)監(jiān)控集群中所有
RegionServer的運(yùn)行狀態(tài);用來管理表和Region,具體包括以下幾點(diǎn)。(1)管理用戶對表的增、刪、改、查等操作。(2)管理RegionServer的負(fù)載均衡。(3)Region拆分或合并之后,負(fù)責(zé)重新調(diào)整Region的分布。(4)在RegionServer發(fā)生故障后,負(fù)責(zé)失效RegionServer上Region的遷移工作。Master還負(fù)責(zé)維護(hù)當(dāng)前可用的RegionServer列表,以及哪些Region分配給哪些RegionServer,哪些
Region
還未被分配等。1.4.4RegionServerRegionServer
是
HBase
的核心模塊,主要功能是維護(hù)分配給自己的
Region,并響應(yīng)用戶的數(shù)據(jù)讀寫請求(具體內(nèi)容在
5.1.3
節(jié)詳細(xì)介紹)。HBase
通常使用
HDFS
作為其底層文件存儲系統(tǒng),因此RegionServer須向HDFS中讀寫數(shù)據(jù)。1.4.4RegionServerHBase系統(tǒng)基本結(jié)構(gòu)中Master的作用主要有哪些?課堂討論課堂檢測HBase有哪些部分組成?HBase各組成部分作用是什么?課堂小結(jié)HBase架構(gòu)客戶端ZookeeperMasterRegionServer項(xiàng)目實(shí)施1——安裝HBase安裝HBase前須選擇合適的HBase版本。在實(shí)際應(yīng)用中,選擇HBase版本時(shí)通常遵循非最新、穩(wěn)定原則。鑒于此,本書使用HBase2.4.14。……詳見教材。安裝HBase項(xiàng)目實(shí)施2——配置HBase單機(jī)模式默認(rèn)情況下,HBase運(yùn)行在單機(jī)模式下,該模式是HBase最簡單的運(yùn)行模式,通常只用于測試。HBase是基于Java語言開發(fā)的,因此,安裝Java環(huán)境(JDK)是基本要求。同時(shí),由于HBase單機(jī)模式采用本地文件系統(tǒng)存儲數(shù)據(jù),所以配置HBase單機(jī)模式只需安裝JDK?!斠娊滩摹E渲肏Base單機(jī)模式配置HBase偽分布式模式安裝JDK配置SSH免密登錄項(xiàng)目實(shí)施3——配置HBase偽分布式模式HBase
偽分布式模式仍然完全運(yùn)行在單個(gè)主機(jī)上。該模式常用于測試,不應(yīng)將其用于實(shí)際生產(chǎn)或性能評估?!斠娊滩?。配置HBase偽分布式模式配置HBase偽分布式模式安裝JDK配置SSH免密登錄安裝Hadoop配置Hadoop偽分布式模式配置HBase偽分布式模式項(xiàng)目實(shí)施4——配置HBase完全分布式模式在實(shí)際生產(chǎn)環(huán)境中,為了滿足業(yè)務(wù)的可擴(kuò)展性與讀寫性能要
求,HBase通常運(yùn)行在完全分布式模式下。在配置HBase完全分
布式模式時(shí),HBase集群至少需要3個(gè)節(jié)點(diǎn)(各節(jié)點(diǎn)相關(guān)信息見
下表),且使用外部Zookeeper?!斠娊滩?。配置HBase完全分布式模式節(jié)點(diǎn)編號主機(jī)名IP地址1master512slave1523slave253項(xiàng)目實(shí)施4——配置HBase完全分布式模式配置HBase完全分布式模式設(shè)置節(jié)點(diǎn)信息安裝JDK配置SSH免密登錄安裝Hadoop配置Hadoop完全分布式模式安裝并配置Zookeeper配置HBase完全分布式模式文旌客服對課件有修改、優(yōu)化建議作業(yè)布置遇到問題想免費(fèi)使用平臺免費(fèi)建課請掃描右側(cè)二維碼,添加客服微信解決文旌客服聯(lián)系方式謝謝HBase數(shù)據(jù)庫應(yīng)用案例教程2HBaseShell項(xiàng)目項(xiàng)目導(dǎo)讀HBaseShell是HBase數(shù)據(jù)庫自帶的命令行工具。通過HBaseShell,用戶可以直接使用命令來完成數(shù)據(jù)庫的常見操作,無須編寫額外的代碼或使用其他工具。這種交互方式簡單直觀,使得用戶能夠更加輕松地使用HBase,同時(shí)也為用戶提供了最基本的學(xué)習(xí)和探索HBase功能的途徑。知識目標(biāo)掌握常規(guī)操作命令的格式,如help、status、version命令等。掌握數(shù)據(jù)定義命令的格式,如create、list、describe命令等。掌握數(shù)據(jù)操作命令的格式,如put、get、scan、delete命令等。能力目標(biāo)能夠使用HBaseShell與HBase進(jìn)行交互。素質(zhì)目標(biāo)增強(qiáng)主動思考、積極尋求問題解決方法的意識。提高隱私保護(hù)意識,樹立正確的價(jià)值觀。項(xiàng)目分析使用HBaseShell提供的各種命令,用戶可以輕松地與HBase進(jìn)行交互,如創(chuàng)建、刪除和修改表,插入、更新和查詢數(shù)據(jù)等。本項(xiàng)目就以學(xué)生信息表為例,介紹常用HBaseShell命令的格式,然后通過創(chuàng)建并操作用戶行為數(shù)據(jù)表,練習(xí)HBaseShell的綜合應(yīng)用。項(xiàng)目導(dǎo)航常規(guī)操作命令1數(shù)據(jù)定義命令2數(shù)據(jù)操作命令301常規(guī)操作命令問題導(dǎo)入全班學(xué)生以3~5人為一組,各組選出組長。組長組織組員掃碼觀看“什么是Shell”和“使用HBaseShell操作HBase的好處”視頻,討論并回答下列問題。問題1:說一說你對Shell的理解。問題2:簡述使用HBaseShell操作HBase的好處。什么是Shell使用HBaseShell
操作HBase的好處常規(guī)操作命令HBase啟動成功后,輸入以下命令可進(jìn)入Shell環(huán)境,如下圖所示。Shell環(huán)境[root@localhost~]#hbaseshell常規(guī)操作命令HBase的單機(jī)模式、偽分布式模式和完全分布式模式有什么區(qū)別?課堂討論2.1.1查看幫助熟練使用
help
命令,可在不借助網(wǎng)絡(luò)或其他參考資料的情況下快速獲取命令的幫助信息。help命令格式如下。help['命令名']2.1.1查看幫助【實(shí)例2-1】
查看HBaseShell中的所有命令。help語句執(zhí)行結(jié)果如圖所示。實(shí)例2-1語句執(zhí)行結(jié)果(部分)2.1.1查看幫助【實(shí)例2-2】
查看create命令的幫助信息。help'create'語句執(zhí)行結(jié)果如圖所示。實(shí)例2-2語句執(zhí)行結(jié)果(部分)2.1.1查看幫助在HBaseShell中,命令名稱以及命令格式中的參數(shù)在使用時(shí)需要區(qū)分大小寫嗎?課堂討論2.1.2查看狀態(tài)使用status命令可查看HBase集群的狀態(tài)信息,其命令格式如下。//查看集群的狀態(tài)信息statusstatus'summary'//查看集群最簡潔的狀態(tài)信息status'simple'//查看集群詳細(xì)的狀態(tài)信息status'detailed'2.1.2查看狀態(tài)status命令不加參數(shù)時(shí),status語句表示什么?課堂討論2.1.2查看狀態(tài)【實(shí)例2-3】
查看HBase集群的狀態(tài)信息。status語句執(zhí)行結(jié)果如圖所示。實(shí)例2-3語句執(zhí)行結(jié)果2.1.2查看狀態(tài)【實(shí)例2-4】
查看HBase集群詳細(xì)的狀態(tài)信息。status'detailed'語句執(zhí)行結(jié)果如圖所示。實(shí)例2-4語句執(zhí)行結(jié)果(部分)2.1.3查看版本【實(shí)例2-5】
查看當(dāng)前環(huán)境中HBase的版本信息。version語句執(zhí)行結(jié)果如圖所示。使用version命令可查看HBase的版本信息,其命令格式如下。version實(shí)例2-5語句執(zhí)行結(jié)果2.1.4查看當(dāng)前用戶【實(shí)例2-6】
查看當(dāng)前用戶的詳細(xì)信息。whoami語句執(zhí)行結(jié)果如圖所示。使用whoami命令可查看當(dāng)前用戶的詳細(xì)信息,其命令格式如下。whoami實(shí)例2-6語句執(zhí)行結(jié)果課堂檢測查看幫助、查看狀態(tài)、查看版本和查看當(dāng)前用戶的命令分別是什么?課堂小結(jié)常規(guī)操作命令查看幫助查看狀態(tài)查看版本查看當(dāng)前用戶02數(shù)據(jù)定義命令問題導(dǎo)入提問回顧上節(jié)課知識點(diǎn):(1)查看幫助的命令是什么?(2)查看狀態(tài)的命令是什么?(3)查看版本的命令是什么?(4)查看當(dāng)前用戶的命令是什么?2.2.1創(chuàng)建表create
命令:可創(chuàng)建一個(gè)新表,須指明表名和列族名。create'表名','列族名1'[,'列族名2']…create'表名',{NAME=>'列族名1'[,VERSIONS=>版本號]}[,{NAME=>'列族名2'[,VERSIONS=>版本號]}]…方括號表示內(nèi)容為可選項(xiàng);符號“=>”表示將后面的值賦給指定的參數(shù);版本號表示列族版本數(shù),是指單元格內(nèi)的數(shù)據(jù)可以保留的版本個(gè)數(shù)。2.2.1創(chuàng)建表【實(shí)例2-7】創(chuàng)建名為test的表,要求表中包含一個(gè)列族info,且使用默認(rèn)參數(shù)。create'test','info'也可以使用以下語句。create'test',{NAME=>'info'}語句執(zhí)行結(jié)果如下圖所示。實(shí)例2-7程序運(yùn)行結(jié)果2.2.1創(chuàng)建表【實(shí)例2-8】創(chuàng)建名為student的表,要求表中包含兩個(gè)列族stu_info和stu_grade,且列族版本數(shù)分別為2和5。create'student',{NAME=>'stu_info',VERSIONS=>2},{NAME=>'stu_grade',VERSIONS=>5}2.2.1創(chuàng)建表在創(chuàng)建表時(shí),如果不指定列族版本數(shù),查詢結(jié)果是什么?課堂討論2.2.2查看所有表使用list命令可查看HBase中的所有表,其命令格式如下。list【實(shí)例2-9】查看HBase中的所有表。list語句執(zhí)行結(jié)果如下圖所示。實(shí)例2-9程序運(yùn)行結(jié)果2.2.3查看表結(jié)構(gòu)使用describe命令可查看表的結(jié)構(gòu)信息,其命令格式如下。describe'表名'【實(shí)例2-10】查看student表的結(jié)構(gòu)信息。describe'student'語句執(zhí)行結(jié)果如右圖所示。實(shí)例2-9程序運(yùn)行結(jié)果2.2.3查看表結(jié)構(gòu)一般情況下,describe命令可以簡寫為“desc”。在使用desc簡寫命令時(shí),下列那種情況會出錯(cuò)?(a)desc‘my_table’(b)desc‘desc_table’課堂討論2.2.4修改表結(jié)構(gòu)使用
alter
命令可修改表結(jié)構(gòu),如修改列族版本數(shù),添加或刪除列族等。alter
命令格式如下。//修改列族版本數(shù)alter'表名',{NAME=>'列族名1',VERSIONS=>版本號}[,{NAME=>'列族名2',VERSIONS=>版本號}]…//添加列族alter'表名','列族名1'[,'列族名2']…//刪除列族alter'表名',{NAME=>'列族名1',METHOD=>'delete'}[,{NAME=>'列族名2',METHOD=>'delete'}]…2.2.4修改表結(jié)構(gòu)【實(shí)例2-11】添加列族。在student表中添加列族test。alter'student','test'語句執(zhí)行結(jié)果如下圖所示。實(shí)例2-11程序運(yùn)行結(jié)果2.2.4修改表結(jié)構(gòu)【實(shí)例2-12】修改列族版本數(shù)。將student表中列族stu_info的版本數(shù)修改為4。alter'student',{NAME=>'stu_info',VERSIONS=>4}使用describe命令查看student表當(dāng)前的結(jié)構(gòu)信息,如下圖所示。實(shí)例2-12程序運(yùn)行結(jié)果2.2.4修改表結(jié)構(gòu)【實(shí)例2-13】刪除列族。將student表中的列族test刪除。alter'student',{NAME=>'test',METHOD=>'delete'}也可以使用以下語句。alter'student','delete'=>'test'2.2.4修改表結(jié)構(gòu)當(dāng)HBase表中只有一個(gè)列族時(shí),能否將其刪除?課堂討論2.2.5判斷表是否存在使用exists命令可判斷指定表是否存在,其命令格式如下。exists'表名'【實(shí)例2-14】判斷student表是否存在。exists'student'語句執(zhí)行結(jié)果如下圖所示。實(shí)例2-14程序運(yùn)行結(jié)果student表存在2.2.5判斷表是否存在【實(shí)例2-15】判斷teacher表是否存在。exists'teacher'語句執(zhí)行結(jié)果如下圖所示。實(shí)例2-15程序運(yùn)行結(jié)果teacher表存在2.2.6禁用/啟用表1.禁用表01disable命令:禁用指定表。disable'表名'02disable_all命令:禁用所有滿足正則表達(dá)式的表。disable_all'正則表達(dá)式'03is_disabled命令:判斷指定表是否被禁用。is_disabled'表名'2.2.6禁用/啟用表1.禁用表【實(shí)例2-16】禁用表student。disable'student'【實(shí)例2-17】禁用所有以“t”開頭的表。disable_all't.*'語句執(zhí)行結(jié)果如下圖所示。實(shí)例2-17程序運(yùn)行結(jié)果2.2.6禁用/啟用表1.禁用表【實(shí)例2-18】判斷student表是否被禁用。is_disabled'student'語句執(zhí)行結(jié)果如下圖所示。實(shí)例2-18程序運(yùn)行結(jié)果student表已經(jīng)被禁用2.2.6禁用/啟用表2.啟用表01enable命令:啟用指定表。enable'表名'02enable_all命令:啟用所有滿足正則表達(dá)式的表。enable_all'正則表達(dá)式'03is_enabled命令:判斷指定表是否被啟用。is_enabled'表名'2.2.6禁用/啟用表2.啟用表【實(shí)例2-19】啟用student表。enable'student'【實(shí)例2-20】判斷student表是否被啟用。is_enabled'student'語句執(zhí)行結(jié)果如下圖所示。實(shí)例2-20程序運(yùn)行結(jié)果2.2.7刪除表刪除表分兩步進(jìn)行,首先禁用表,然后刪除表。(1)drop命令:刪除指定表。disable'表名'drop'表名'(2)drop_all命令:刪除所有滿足正則表達(dá)式的表。disable'正則表達(dá)式'drop_all'正則表達(dá)式'2.2.7刪除表【實(shí)例2-21】刪除test表。//禁用test表,若test表已禁用,可不執(zhí)行該操作disable'test'//刪除test表drop'test'使用list命令查看test表是否刪除成功,如下圖所示。實(shí)例2-20程序運(yùn)行結(jié)果test表刪除成功課堂檢測如何創(chuàng)建一個(gè)新表?如何查看HBase中的所有表?如何查看表的結(jié)構(gòu)信息?如何修改列族版本數(shù),添加或刪除列族?如何判斷表是否存在?如何禁用/啟用表?如何刪除表?課堂小結(jié)數(shù)據(jù)定義命令創(chuàng)建表查看所有表查看表結(jié)構(gòu)修改表結(jié)構(gòu)判斷表是否存在禁用/啟用表禁用表啟用表刪除表03數(shù)據(jù)操作命令問題導(dǎo)入提問回顧上節(jié)課知識點(diǎn):創(chuàng)建表、查看所有表、查看表結(jié)構(gòu)、修改表結(jié)構(gòu)、判斷表是否存在、禁用/啟用表、刪除表的命令分別是什么?2.3.1插入/更新數(shù)據(jù)使用put命令可向表中插入數(shù)據(jù),或更新指定行的數(shù)據(jù)。在使用put命令時(shí),必須指明表名和行鍵,其命令格式如下。put'表名','行鍵','列族名[:列限定符名]','列值'【實(shí)例2-22】向student表中插入數(shù)據(jù)。put'student','20231001','stu_info:name','Lisi'上述語句中,student是表名;20231001是行鍵;“stu_info:name”中的stu_info是列族名,必須是已經(jīng)定義的;“stu_info:name”中的name是列限定符名,是臨時(shí)定義的;Lisi
是單元格的值。2.3.1插入/更新數(shù)據(jù)put'student','20231001','stu_info:sex','female'put'student','20231001','stu_info:class','1'put'student','20231001','stu_grade:Chinese','95'put'student','20231001','stu_grade:English','99'繼續(xù)向student表中插入數(shù)據(jù),完善Lisi的信息。以上語句的作用是插入一條學(xué)號為
20231001,姓名為
Lisi,性別為
female,班級為
1班,語文、英語科目成績分別為95分和99分的數(shù)據(jù)。2.3.1插入/更新數(shù)據(jù)//插入第二行數(shù)據(jù)put'student','20231002','stu_info:name','zhangxin'put'student','20231002','stu_info:sex','male'put'student','20231002','stu_info:class','2'put'student','20231002','stu_grade:Chinese','90'put'student','20231002','stu_grade:English','95'//插入第三行數(shù)據(jù)put'student','20231003','stu_info:name','wangwei'put'student','20231003','stu_info:sex','male'put'student','20231003','stu_info:class','3'put'student','20231003','stu_grade:Chinese','92'put'student','20231003','stu_grade:English','93'繼續(xù)向student表中插入兩行數(shù)據(jù)。2.3.1插入/更新數(shù)據(jù)插入數(shù)據(jù)后的student表如下圖所示。插入數(shù)據(jù)后的student表2.3.1插入/更新數(shù)據(jù)此時(shí),student表的邏輯模型如下表所示。行鍵stu_infostu_gradenamesexclassChineseEnglish20231001Lisifemale1959920231002zhangxinmale2909520231003wangweimale39293student表的邏輯模型如果使用put語句操作的單元格中已有數(shù)據(jù),則在不考慮時(shí)間戳的情況下,執(zhí)行put語句將更新單元格中已有的數(shù)據(jù)。2.3.1插入/更新數(shù)據(jù)【實(shí)例2-23】將student表中行鍵為20231001的學(xué)生姓名由Lisi更新為Lisa。put'student','20231001','stu_info:name','Lisa'更新數(shù)據(jù)后的student表如下圖所示。更新數(shù)據(jù)后的student表2.3.1插入/更新數(shù)據(jù)執(zhí)行put命令時(shí),插入和更新有什么不同?課堂討論拓展閱讀HBase提供了append命令用于給某個(gè)單元格的值拼接新的值,其命令格式如下。append'表名','行鍵','列族名:列限定符名','值'假設(shè)test表中行鍵為101、列名為“info:name”的單元格數(shù)據(jù)為“wang”,則執(zhí)行語句“append'test','101','info:name','dong'”后,列名為“info:name”的單元格數(shù)據(jù)變?yōu)椤皐angdong”。2.3.2查詢數(shù)據(jù)1.get命令使用get命令可查詢表中的一行數(shù)據(jù)或一個(gè)單元格的數(shù)據(jù),其命令格式如下。//查詢一行數(shù)據(jù)或一行中指定列族名或列名的數(shù)據(jù)get'表名','行鍵'[,'列族名1[:列限定符名1]'][,'列族名2[:列限定符名2]']…//查詢一個(gè)指定列族名或列名的數(shù)據(jù)get'表名','行鍵',{COLUMN=>'列族名[:列限定符名]'}//查詢多個(gè)指定列族名或列名的數(shù)據(jù),此處列族名外的方括號不能省略get'表名','行鍵',{COLUMN=>['列族名1[:列限定符名1]','列族名2[:列限定符名2]']…}//查詢單元格中多個(gè)版本數(shù)據(jù)get'表名','行鍵',{COLUMN=>'列族名[:列限定符名]',VERSIONS=>版本號}2.3.2查詢數(shù)據(jù)1.get命令【實(shí)例2-24】使用get命令查詢student表中的數(shù)據(jù)。get'student','20231001'(1)查詢student表中行鍵為20231001的數(shù)據(jù)。語句執(zhí)行結(jié)果如下圖所示。使用get命令查詢一行數(shù)據(jù)2.3.2查詢數(shù)據(jù)1.get命令get'student','20231002','stu_grade'(2)查詢student表中行鍵為20231002、列族名為stu_grade的數(shù)據(jù)。語句執(zhí)行結(jié)果如下圖所示。get'student','20231002',{COLUMN=>'stu_grade'}也可以使用以下語句。使用get命令查詢一行中指定列族名數(shù)據(jù)2.3.2查詢數(shù)據(jù)1.get命令get'student','20231003',{COLUMN=>['stu_info:name','stu_info:sex']}(3)查詢student表中行鍵為20231003、列族名為stu_info、列限定符名為name和sex的數(shù)據(jù)。語句執(zhí)行結(jié)果如下圖所示。get'student','20231003','stu_info:name','stu_info:sex'也可以使用以下語句。使用get命令查詢一行中指定列名數(shù)據(jù)2.3.2查詢數(shù)據(jù)1.get命令(4)查詢student表中行鍵為20231001、列族名為stu_info、列限定符名為name的兩個(gè)版本數(shù)據(jù)。語句執(zhí)行結(jié)果如下圖所示。get'student','20231001',{COLUMN=>'stu_info:name',VERSIONS=>2}使用get命令查詢單元格中多個(gè)版本數(shù)據(jù)2.3.2查詢數(shù)據(jù)2.scan命令使用scan命令既可查詢表中的一行數(shù)據(jù),又可查詢表中的全部數(shù)據(jù),其命令格式如下。//查詢?nèi)繑?shù)據(jù)或指定列族名或列名的數(shù)據(jù)scan'表名'[,{COLUMN=>'列族名[:列限定符名]'}]//查詢多個(gè)指定列族名或列名的數(shù)據(jù),此處列族名外的方括號不能省略scan'表名',{COLUMNS=>['列族名1[:列限定符名1]','列族名2[:列限定符名2]']…}//查詢指定列族名或列名的數(shù)據(jù),并指定返回最大行數(shù)scan'表名',{COLUMNS=>'列族名[:列限定符名]',LIMIT=>行數(shù)}//查詢指定行鍵范圍的數(shù)據(jù),起始行鍵和結(jié)束行鍵可同時(shí)存在,也可任選其一scan'表名',{COLUMNS=>'列族名[:列限定符名]',STARTROW=>'起始行鍵',ENDROW=>'結(jié)束行鍵'}2.3.2查詢數(shù)據(jù)2.scan命令使用STARTROW和ENDROW限制查詢范圍時(shí),查詢出來的行數(shù)是否包括STARTROW和ENDROW?課堂討論2.3.2查詢數(shù)據(jù)2.scan命令【實(shí)例2-25】使用scan命令查詢student表中的數(shù)據(jù)。scan'student'(1)查詢student表中的全部數(shù)據(jù)。語句執(zhí)行結(jié)果如下圖所示。使用scan命令查詢?nèi)繑?shù)據(jù)2.3.2查詢數(shù)據(jù)2.scan命令scan'student',{COLUMN=>'stu_grade'}(2)查詢student表中列族名為stu_grade的數(shù)據(jù)。語句執(zhí)行結(jié)果如下圖所示。使用scan命令查詢指定列族名數(shù)據(jù)2.3.2查詢數(shù)據(jù)2.scan命令scan'student',{COLUMNS=>['stu_info:name','stu_info:class'],LIMIT=>2}(3)查詢student表中列族名為stu_info、列限定符名為name和class的前2行數(shù)據(jù)。語句執(zhí)行結(jié)果如下圖所示。使用scan命令查詢指定列名數(shù)據(jù)2.3.2查詢數(shù)據(jù)2.scan命令scan'student',{COLUMNS=>['stu_info:name','stu_info:class'],STARTROW=>'20231002',LIMIT=>1}(4)查詢
student
表中行鍵大于或等于
20231002、列族名為
stu_info、列限定符名為name和class的數(shù)據(jù),并只返回滿足條件的1行數(shù)據(jù)。語句執(zhí)行結(jié)果如下圖所示。使用scan命令查詢指定數(shù)據(jù)2.3.3刪除數(shù)據(jù)1.delete命令使用delete命令可刪除表中某個(gè)列的數(shù)據(jù),其命令格式如下。delete'表名','行鍵','列族名:列限定符名'[,時(shí)間戳]【實(shí)例2-26】刪除student表中行鍵為20231001、列族名為stu_grade、列限定符名為English的數(shù)據(jù)。delete'student','20231001','stu_grade:English'使用scan命令查看數(shù)據(jù)是否刪除成功,如右圖所示。使用delete命令刪除數(shù)據(jù)后的student表2.3.3刪除數(shù)據(jù)1.delete命令執(zhí)行delete命令后,系統(tǒng)是否會物理刪除數(shù)據(jù)?課堂討論2.3.3刪除數(shù)據(jù)2.deleteall命令使用deleteall命令既可刪除表中某個(gè)列的數(shù)據(jù),又可刪除表中的整行數(shù)據(jù),其命令格式如下。deleteall'表名','行鍵'[,'列族名:列限定符名'][,時(shí)間戳]【實(shí)例2-27】刪除student表中行鍵為20231001的全部數(shù)據(jù)。deleteall'student','20231001'使用scan命令查看數(shù)據(jù)是否刪除成功,如下圖所示。使用deleteall命令刪除數(shù)據(jù)后的student表2.3.3刪除數(shù)據(jù)3.truncate命令使用truncate命令可清空整個(gè)表,但不會保留表所對應(yīng)的Region,其命令格式如下。truncate'表名'2.3.3刪除數(shù)據(jù)3.truncate命令truncate命令,是直接將表數(shù)據(jù)清空嗎?課堂討論2.3.3刪除數(shù)據(jù)4.truncate_preserve命令使用truncate_preserve命令也可清空整個(gè)表,但會保留表所對應(yīng)的Region,其命令格式如下。truncate_preserve'表名'2.3.3刪除數(shù)據(jù)4.truncate_preserve命令如何退出Shell環(huán)境,退出方式有哪些?可以使用哪些命令?課堂討論課堂檢測如何插入/更新數(shù)據(jù)?查詢數(shù)據(jù)的命令有哪些?具體如何使用?輸出數(shù)據(jù)的命令有哪些?具體如何使用?課堂小結(jié)數(shù)據(jù)操作命令插入/更新數(shù)據(jù)查詢數(shù)據(jù)get命令scan命令刪除數(shù)據(jù)delete命令deleteall命令truncate命令truncate_preserve命令項(xiàng)目實(shí)施
——使用HBaseShell創(chuàng)建并操作用戶行為數(shù)據(jù)表在互聯(lián)網(wǎng)快速發(fā)展的背景下,人們在使用互聯(lián)網(wǎng)的過程中,任何一個(gè)簡單的行為(如搜索、瀏覽、購買等)都會產(chǎn)生大量數(shù)據(jù)。在這樣的情況下,使用HBase數(shù)據(jù)庫存儲海量的用戶行為數(shù)據(jù)是一個(gè)不錯(cuò)的選擇。本項(xiàng)目實(shí)施就來使用HBaseShell創(chuàng)建并操作用戶行為數(shù)據(jù)表?!斠娊滩?。使用HBaseShell創(chuàng)建
并操作用戶行為數(shù)據(jù)表使用HBaseShell創(chuàng)建并操作用戶行為數(shù)據(jù)表創(chuàng)建表修改表結(jié)構(gòu)插入數(shù)據(jù)更新數(shù)據(jù)查詢數(shù)據(jù)刪除數(shù)據(jù)謝謝HBase數(shù)據(jù)庫應(yīng)用案例教程3HBase客戶端API項(xiàng)目項(xiàng)目導(dǎo)讀HBase是基于Java語言開發(fā)的,因而它提供了原生Java客戶端。這種客戶端是HBase最主要、最高效的客戶端,它可以直接與HBase服務(wù)器通信,使得開發(fā)者可以使用Java語言來操作HBase數(shù)據(jù)庫。知識目標(biāo)掌握使用HBaseJava客戶端API操作表的方法。掌握使用HBaseJava客戶端API操作數(shù)據(jù)的方法。能力目標(biāo)能夠使用HBaseJava客戶端API操作表。能夠使用HBaseJava客戶端API操作數(shù)據(jù)。素質(zhì)目標(biāo)提高舉一反三、從多個(gè)角度思考問題的能力。養(yǎng)成精益求精、嚴(yán)謹(jǐn)認(rèn)真的工作態(tài)度。項(xiàng)目分析使用HBaseJava客戶端API,用戶可以輕松地與HBase進(jìn)行交互,如創(chuàng)建、刪除和修改表,插入、更新和查詢數(shù)據(jù)等。本項(xiàng)目首先搭建Java集成開發(fā)環(huán)境,然后以員工信息表為例,介紹使用HBaseJava客戶端API操作HBase的方法,最后通過創(chuàng)建并操作用戶行為數(shù)據(jù)表,練習(xí)HBaseJava客戶端API的綜合應(yīng)用。項(xiàng)目導(dǎo)航HBase客戶端API概述1表操作2數(shù)據(jù)操作301HBase客戶端API概述問題導(dǎo)入全班學(xué)生以3~5人為一組,各組選出組長。組長組織組員掃碼觀看“什么是API”和“常用的Java集成開發(fā)環(huán)境”視頻,討論并回答下列問題。問題1:說一說你對API的理解。問題2:你知道Java集成開發(fā)環(huán)境有哪些嗎?它們各有什么特點(diǎn)?什么是API常用的Java集成開發(fā)環(huán)境3.1HBase客戶端API概述通過使用HBase客戶端API,開發(fā)者可以利用Java語言或其他編程語言編寫程序來連接、管理和操作HBase數(shù)據(jù)庫。由于HBase基于Java語言開發(fā),因此使用HBaseJava客戶端API與HBase進(jìn)行交互更加高效。使用HBaseJava客戶端API操作HBase前,須下載并安裝Java集成開發(fā)環(huán)境。目前較為常用的Java集成開發(fā)環(huán)境為IntelliJIDEA(以下簡稱IDEA)。下面介紹如何使用IDEA新建Java項(xiàng)目。API(applicationprogramminginterface,應(yīng)用程序接口)是一組定義了軟件組件或系統(tǒng)之間交互方式的規(guī)則和協(xié)議。3.1HBase客戶端API概述選擇“新建項(xiàng)目”選項(xiàng)步驟1
啟動IDEA,在打開的窗口右側(cè)選擇“新建項(xiàng)目”選項(xiàng),如右圖所示。3.1HBase客戶端API概述步驟2
設(shè)置完成后,單擊“新建項(xiàng)目”對話框中的“確定”按鈕,即可創(chuàng)建一個(gè)項(xiàng)目文件。在“語言”列表中選擇“Java”選項(xiàng),在“構(gòu)建系統(tǒng)”列表中選擇“Maven”選項(xiàng),在“JDK”編輯框中單擊,然后在展開的列表中選擇“添加SDK”/“JDK”選項(xiàng),接著選擇JDK在本地計(jì)算機(jī)中的安裝路徑,最后單擊“創(chuàng)建”按鈕,如右圖所示。新建項(xiàng)目3.1HBase客戶端API概述什么是Maven?課堂討論3.1HBase客戶端API概述步驟3
等待片刻,即可新建項(xiàng)目“HBaseTest”。此時(shí),項(xiàng)目中會生成一個(gè)“pom.xml”文件,用于配置開發(fā)Java程序的相關(guān)依賴包。打開“pom.xml”文件,在<project></project>標(biāo)簽中添加配置信息(添加完成后的“pom.xml”文件中的內(nèi)容見右圖),配置Java訪問HBase的相關(guān)依賴包?!皃om.xml”文件中的內(nèi)容3.1HBase客戶端API概述IDEA安裝時(shí),語言插件如何安裝?如何將界面調(diào)亮?課堂討論3.1HBase客戶端API概述步驟4
單擊代碼編輯區(qū)中的“加載Maven更改”按鈕,或在代碼編輯區(qū)中右擊,在彈出的快捷菜單中選擇“Maven”/“重新加載項(xiàng)目”選項(xiàng),將更改加載到IDEA。步驟5
以記事本方式打開本地計(jì)算機(jī)“C:\Windows\System32\drivers\etc”目錄中的“hosts”文件,在最后一行添加HBase所在主機(jī)的IP地址與主機(jī)名映射關(guān)系“30localhost”。添加完成后的“hosts”文件中的內(nèi)容如下圖所示?!癶osts”文件中的內(nèi)容(部分)3.1HBase客戶端API概述步驟6
返回IDEA,在“HBaseTest”項(xiàng)目的“src/main/java”目錄中創(chuàng)建“Demo”類。右擊“java”目錄,在彈出的快捷菜單中選擇“新建”/“Java類”選項(xiàng),在打開的“創(chuàng)建新的類”對話框中輸入類名“Demo”并按“Enter”鍵,如下圖所示。創(chuàng)建新的類3.1HBase客戶端API概述步驟7
在“Demo”類中編寫Java訪問HBase的代碼。此處為判斷HBase中是否存在對應(yīng)表的代碼,代碼如下。importorg.apache.hadoop.conf.Configuration;
importorg.apache.hadoop.hbase.HBaseConfiguration;
importorg.apache.hadoop.hbase.TableName;
importorg.apache.hadoop.hbase.client.Admin;
importorg.apache.hadoop.hbase.client.Connection;
importorg.apache.hadoop.hbase.client.ConnectionFactory;
importjava.io.IOException;
publicclassDemo{
publicstaticvoidmain(String[]args)throwsIOException{
(接下頁)3.1HBase客戶端API概述
(接上頁)
//創(chuàng)建HBaseConfiguration對象,用于加載與設(shè)置HBase的各項(xiàng)配置
Configurationconf=HBaseConfiguration.create();
//指定Zookeeper所在位置
conf.set("hbase.zookeeper.quorum","30");
conf.set("perty.clientPort","2181");
//使用ConnectionFactory類創(chuàng)建conn對象,用于連接HBase
Connectionconn=ConnectionFactory.createConnection(conf);
//創(chuàng)建Admin對象,用于調(diào)用HBase客戶端API
Adminadmin=conn.getAdmin();
//使用tableExists方法判斷HBase中是否存在test表
System.out.println("test表:"+admin.tableExists(TableName.valueOf("test")));}
}3.1HBase客戶端API概述步驟8
為便于調(diào)試,保證輸出對應(yīng)的日志,可在“src/main/resources”目錄中創(chuàng)建“perties”配置文件。右擊“resources”目錄,在彈出的快捷菜單中選擇“新建”/“資源包”選項(xiàng),在打開的“創(chuàng)建資源包”對話框中輸入資源捆綁包基名稱“l(fā)og4j”并按“Enter”鍵,此時(shí)會自動生成“perties”文件,然后在該文件中輸入以下配置信息。//所有日志
log4j.rootLogger=DEBUG,stdout
.apache.itatis=warn
log4j.logger.java.sql=warn.springframework=warn
//控制臺輸出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.Threshold=DEBUG
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-ddHH:mm:ss}[%p]%m%n3.1HBase客戶端API概述步驟9
在虛擬機(jī)中啟動HBase,然后運(yùn)行“Demo.java”,結(jié)果如圖所示。由上圖可以看出,HBase中不存在test表。程序運(yùn)行結(jié)束后,可以使用HBaseShell提供的命令查看test表是否存在,如下圖所示。查看test表是否存在程序運(yùn)行結(jié)果課堂檢測什么是API?API的作用是什么?如何安裝IDEA?02表操作問題導(dǎo)入提問回顧上節(jié)課知識點(diǎn):(1)什么是API?API作用是什么?(2)使用HBaseJava客戶端API操作HBase前,需要準(zhǔn)備怎樣的開發(fā)環(huán)境?3.2.1創(chuàng)建表在HBaseJava客戶端API中,創(chuàng)建表通過Admin類的createTable方法實(shí)現(xiàn)。createTable方法的語法格式如下。createTable(TableDescriptordesc)其中,desc參數(shù)是一個(gè)TableDescriptor對象。TableDescriptor類的構(gòu)造方法是私有的,可以使用TableDescriptorBuilder類構(gòu)建TableDescriptor對象。3.2.1創(chuàng)建表TableDescriptorBuilder類提供了一系列方法來設(shè)置表的屬性,具體如下。(1)newBuilder
方法用于創(chuàng)建一個(gè)
TableDescriptorBuilder
對象,該對象可以構(gòu)建TableDescriptor
對象。通過TableDescriptorBuilder對象,可以設(shè)置表的屬性,如表的名稱、列族的名稱等。newBuilder方法的語法格式如下。newBuilder(TableNametableName)其中,tableName參數(shù)是表的名稱。(2)build方法用于構(gòu)建最終的TableDescriptor對象,其語法格式如下。build()3.2.1創(chuàng)建表(3)setColumnFamily
方法用于將列族描述器(設(shè)置列族的屬性,如列族的名稱、版本數(shù)等)添加到表描述器(設(shè)置表的屬性,如表的名稱、列族信息等)中,其語法格式如下。//一個(gè)列族描述器setColumnFamily(ColumnFamilyDescriptorcfDescriptor)//多個(gè)列族描述器setColumnFamilies(ColumnFamilyDescriptorcfDescriptor)其中,cfDescriptor參數(shù)是一個(gè)ColumnFamilyDescriptor對象。ColumnFamilyDescriptor類的構(gòu)造方法也是私有的,可以使用ColumnFamilyDescriptorBuilder類構(gòu)建ColumnFamilyDescriptor對象。3.2.1創(chuàng)建表ColumnFamilyDescriptorBuilder類提供了一系列方法來設(shè)置列族的屬性,具體如下。(1)newBuilder
方法用于創(chuàng)建一個(gè)
ColumnFamilyDescriptorBuilder
對象,該對象可以構(gòu)建
ColumnFamilyDescriptor
對象。通過
ColumnFamilyDescriptorBuilder
對象,可以設(shè)置列族的屬性,如列族的名稱、版本數(shù)等。newBuilder方法的語法格式如下。newBuilder(byte[]name)其中,name參數(shù)是列族的名稱。(2)build方法用于構(gòu)建最終的ColumnFamilyDescriptor對象,其語法格式如下。build()3.2.1創(chuàng)建表在HBase2.x版本中,HTableDescriptor類和HColumnDescriptor類被替換的類叫什么?課堂討論3.2.1創(chuàng)建表【實(shí)例3-1】創(chuàng)建名為employee的表,要求表中包含basic和salary兩個(gè)列族?!緟⒖即a】publicstaticvoidcreate(StringtableName,String...columnfamilyNames)throwsIOException{//獲取配置信息Configurationconf=HBaseConfiguration.create();……詳見教材。程序運(yùn)行結(jié)果如下圖所示。實(shí)例3-1程序運(yùn)行結(jié)果3.2.1創(chuàng)建表由于HBase中默認(rèn)不存在employee表,因此該表可以創(chuàng)建成功。程序運(yùn)行結(jié)束后,可以使用HBaseShell提供的命令查看employee表是否創(chuàng)建成功,如下圖所示。查看employee表是否創(chuàng)建成功3.2.1創(chuàng)建表再次運(yùn)行程序,即再次創(chuàng)建employee表,此時(shí)程序會拋出異常,提示employee表已經(jīng)存在,如下圖所示。程序拋出異常3.2.2修改表結(jié)構(gòu)添加列族通過Admin類的addColumnFamily方法實(shí)現(xiàn)。addColumnFamily方法的語法格式如下。addColumnFamily(TableNametableName,ColumnFamilyDescriptorcolumnFamily)其中,tableName
參數(shù)是要修改的表的名稱;columnFamily
參數(shù)是要添加的列族描述器。刪除列族通過Admin類的deleteColumnFamily方法實(shí)現(xiàn)。deleteColumnFamily方法的語法格式如下。deleteColumnFamily(TableNametableName,byte[]columnFamily)其中,tableName
參數(shù)是要刪除的表的名稱;columnFamily
參數(shù)是要刪除的列族的名稱。3.2.2修改表結(jié)構(gòu)【實(shí)例3-2】向employee表中添加列族e(cuò)xperience和other?!緟⒖即a】publicstaticvoidaddColumnFamily(StringtableName,String...columnfamilyNames)throwsIOException{Configurationconf=HBaseConfiguration.create();……詳見教材。程序運(yùn)行結(jié)果如下圖所示。實(shí)例3-2程序運(yùn)行結(jié)果3.2.2修改表結(jié)構(gòu)程序運(yùn)行結(jié)束后,可以使用HBaseShell提供的命令查看列族是否添加成功,如下圖所示。查看列族是否添加成功3.2.2修改表結(jié)構(gòu)【實(shí)例3-3】刪除employee表中的列族e(cuò)xperience?!緟⒖即a】publicstaticvoiddeleteColumnFamily(StringtableName,String...columnfamilyNames)throwsIOException{Configurationconf=HBaseConfiguration.create();……詳見教材。程序運(yùn)行結(jié)果如下圖所示。實(shí)例3-3程序運(yùn)行結(jié)果3.2.2修改表結(jié)構(gòu)程序運(yùn)行結(jié)束后,可以使用HBaseShell提供的命令查看列族是否刪除成功,如下圖所示。查看列族是否添加成功3.2.3禁用/啟用表1.禁用表(1)在HBaseJava客戶端API中,禁用表通過Admin類的disableTable方法實(shí)現(xiàn)。disableTable方法的語法格式如下。disableTable(TableNametableName)其中,tableName參數(shù)是要禁用的表的名稱。3.2.3禁用/啟用表1.禁用表【實(shí)例3-4】禁用employee表?!緟⒖即a】publicstaticvoiddisableTable(StringtableName)throwsIOException{
Configurationconf=HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum","30");……詳見教材。程序運(yùn)行結(jié)果如下圖所示。實(shí)例3-4程序運(yùn)行結(jié)果3.2.3禁用/啟用表1.禁用表(2)在HBaseJava客戶端API中,判斷表是否被禁用通過Admin類的isTableDisabled方法實(shí)現(xiàn)。isTableDisabled方法的語法格式如下。isTableDisabled(TableNametableName)其中,tableName參數(shù)是要判斷是否被禁用的表的名稱。3.2.3禁用/啟用表1.禁用表【實(shí)例3-5】判斷employee表是否被禁用?!緟⒖即a】publicstaticvoidisTableDisabled(StringtableName)throwsIOException{Configurationconf=HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum","30");……詳見教材。程序運(yùn)行結(jié)果如下圖所示。實(shí)例3-5程序運(yùn)行結(jié)果3.2.3禁用/啟用表1.禁用表程序運(yùn)行結(jié)束后,可以使用HBaseShell提供的命令查看employee表是否被禁用,如下圖所示。查看employee表是否被禁用3.2.3禁用/啟用表2.啟用表(1)在
HBaseJava
客戶端
API
中,啟用表通過
Admin
類的
enableTable
方法實(shí)現(xiàn)。enableTable方法的語法格式如下。enableTable(TableNametableName)其中,tableName參數(shù)是要啟用的表的名稱。3.2.3禁用/啟用表2.啟用表【實(shí)例3-6】啟用employee表?!緟⒖?/p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 混合動力電動汽車結(jié)構(gòu)原理與檢修 第2版 課件 學(xué)習(xí)情景5 混合動力電動汽車輔助系統(tǒng)檢修
- 空調(diào)維保施工管理制度(3篇)
- 資產(chǎn)清查管理制度內(nèi)部缺陷(3篇)
- 《GA 659.5-2006互聯(lián)網(wǎng)公共上網(wǎng)服務(wù)場所信息安全管理系統(tǒng) 數(shù)據(jù)交換格式 第5部分:上網(wǎng)服務(wù)場所服務(wù)狀態(tài)基本數(shù)據(jù)交換格式》專題研究報(bào)告
- NF - B作為薄型子宮內(nèi)膜炎癥生物標(biāo)志物對反復(fù)種植失敗活產(chǎn)的預(yù)測價(jià)值
- 納稅人學(xué)堂現(xiàn)場培訓(xùn)課件
- 兼職培訓(xùn)師課件展示模板
- 養(yǎng)老院入住老人健康監(jiān)測制度
- 2026湖南岳陽市屈原管理區(qū)機(jī)關(guān)事務(wù)服務(wù)中心編外人員招聘3人參考題庫附答案
- 2026福建南平市旭輝實(shí)驗(yàn)學(xué)校招聘教師2人考試備考題庫附答案
- 【地理】期末重點(diǎn)復(fù)習(xí)課件-2025-2026學(xué)年八年級地理上學(xué)期(人教版2024)
- 2026年1月福建廈門市集美區(qū)后溪鎮(zhèn)衛(wèi)生院補(bǔ)充編外人員招聘16人筆試備考試題及答案解析
- 2026年鄉(xiāng)村治理體系現(xiàn)代化試題含答案
- 通風(fēng)設(shè)備采購與安裝合同范本
- 2026年濟(jì)南工程職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試參考題庫帶答案解析
- 甘肅省酒泉市普通高中2025~2026學(xué)年度第一學(xué)期期末考試物理(含答案)
- 2026 年高職應(yīng)用化工技術(shù)(化工設(shè)計(jì))試題及答案
- 2026年山西供銷物流產(chǎn)業(yè)集團(tuán)面向社會招聘備考題庫及一套完整答案詳解
- 化工設(shè)備清洗安全課件
- 2026元旦主題班會:馬年猜猜樂新春祝福版 教學(xué)課件
- 王洪圖黃帝內(nèi)經(jīng)80課時(shí)講稿
評論
0/150
提交評論