版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
MySQL數(shù)據(jù)庫應(yīng)用
項(xiàng)目教程項(xiàng)目七走進(jìn)NoSQL7.1初識(shí)NoSQL
7.2走進(jìn)HBase
7.3走進(jìn)MongoDB
7.1初識(shí)NoSQL7.1.1認(rèn)識(shí)NoSQL1.NoSQL的簡(jiǎn)介NoSQL數(shù)據(jù)庫成為一個(gè)熱門的新領(lǐng)域?!癗oSQL”是“NotOnlySQL”的縮寫,表示適用關(guān)系型數(shù)據(jù)庫的時(shí)候就使用關(guān)系型數(shù)據(jù)庫,不適用的時(shí)候可以考慮使用更加合適的數(shù)據(jù)庫工具。NoSQL數(shù)據(jù)庫一般會(huì)弱化關(guān)系,即弱化模式或表結(jié)構(gòu)、弱化完整性約束、弱化甚至取消事務(wù)機(jī)制等,其目的是去掉關(guān)系模型的約束,以實(shí)現(xiàn)強(qiáng)大的分布式部署。主要特點(diǎn)包括分區(qū)容錯(cuò)性、伸縮性和訪問效率(可用性)等。云服務(wù)商也都提供了在線的NoSQL數(shù)據(jù)庫及關(guān)系型數(shù)據(jù)庫。例如,在亞馬遜的公有云服務(wù)AWS(AmazonWebServices)中,提供了名為DynamoDB的NoSQL數(shù)據(jù)庫服務(wù),阿里云、騰訊云等知名云服務(wù)商均提供了在線的Key-Value數(shù)據(jù)庫服務(wù)(NoSQL數(shù)據(jù)庫的一種)。7.1初識(shí)NoSQL7.1.1認(rèn)識(shí)NoSQL2.NewSQL的概念NewSQL一般被看作傳統(tǒng)關(guān)系型數(shù)據(jù)庫的延伸,是在關(guān)系型數(shù)據(jù)庫的基礎(chǔ)上通過吸收NoSQL數(shù)據(jù)庫的優(yōu)點(diǎn)而形成的。NewSQL被描繪成既支持關(guān)系模型和強(qiáng)事務(wù)機(jī)制,也支持分布式并行結(jié)構(gòu)(具有良好的伸縮性和容錯(cuò)性)的數(shù)據(jù)庫形式。NewSQL還可以通過SQL語句進(jìn)行查詢等。從NewSQL的發(fā)展現(xiàn)狀來看,有兩個(gè)特點(diǎn)值得注意。(1)NewSQL仍缺乏一個(gè)權(quán)威的定義,其歸類也比較模糊。例如,一些文章會(huì)將某些內(nèi)存數(shù)據(jù)庫或者某些關(guān)系型數(shù)據(jù)庫的擴(kuò)展系統(tǒng)歸類為NewSQL。(2)缺少知名度較高的NewSQL產(chǎn)品。7.1初識(shí)NoSQL7.1.1認(rèn)識(shí)NoSQL3.NoSQL的典型應(yīng)用場(chǎng)景(1)海量日志數(shù)據(jù)、業(yè)務(wù)數(shù)據(jù)或監(jiān)控?cái)?shù)據(jù)的管理和查詢。例如,管理電商網(wǎng)站及其應(yīng)用程序的用戶訪問記錄、交易記錄,管理工業(yè)物聯(lián)網(wǎng)中的數(shù)據(jù)采集與監(jiān)視控制系統(tǒng)(SupervisoryControlAndDataAcquisition,SCADA)的數(shù)據(jù)。(2)特殊的或復(fù)雜的數(shù)據(jù)模型的簡(jiǎn)化處理。例如,互聯(lián)網(wǎng)中的網(wǎng)頁和鏈接可以看作是點(diǎn)和線的關(guān)系,這樣可以把互聯(lián)網(wǎng)中的網(wǎng)站和網(wǎng)頁的關(guān)系抽象為有向圖。(3)作為數(shù)據(jù)倉庫、數(shù)據(jù)挖掘系統(tǒng)或OLAP(On-LineAnalyticalProcessing,聯(lián)機(jī)分析處理)系統(tǒng)的后臺(tái)數(shù)據(jù)支撐。7.1初識(shí)NoSQL7.1.1認(rèn)識(shí)NoSQL4.NoSQL數(shù)據(jù)庫的相關(guān)技術(shù)NoSQL數(shù)據(jù)庫一般基于分布式系統(tǒng)實(shí)現(xiàn)數(shù)據(jù)的管理與查詢。(1)分布式數(shù)據(jù)處理。大數(shù)據(jù)的處理和計(jì)算包含數(shù)據(jù)預(yù)處理、數(shù)據(jù)統(tǒng)計(jì)分析和數(shù)據(jù)挖掘等方面。分布式數(shù)據(jù)處理需要解決數(shù)據(jù)分割,任務(wù)的調(diào)度、監(jiān)控和管理及分布式任務(wù)的執(zhí)行等問題。(2)時(shí)間同步服務(wù)。在分布式應(yīng)用中,經(jīng)常需要確保所有節(jié)點(diǎn)的時(shí)間是一致的。(3)布隆過濾器。7.1初識(shí)NoSQL7.1.2NoSQL的數(shù)據(jù)存儲(chǔ)模式和相對(duì)應(yīng)的數(shù)據(jù)庫NoSQL的數(shù)據(jù)存儲(chǔ)模式(DataStorageScheme)主要涉及在數(shù)據(jù)庫中存放數(shù)據(jù)的邏輯結(jié)構(gòu),基本的數(shù)據(jù)讀寫、修改、刪除等操作,數(shù)據(jù)處理對(duì)象及在分布式狀態(tài)下的一些處理方式。1.列存儲(chǔ)模式和列族數(shù)據(jù)庫列存儲(chǔ)模式主要用在OLAP、數(shù)據(jù)倉庫等場(chǎng)合。列存儲(chǔ)模式一般不預(yù)先定義結(jié)構(gòu)。列存儲(chǔ)模式則一般通過數(shù)據(jù)追加(append)的方式實(shí)現(xiàn)。此外,利用列存儲(chǔ)模式還可以通過數(shù)據(jù)字典的方式實(shí)現(xiàn)數(shù)據(jù)壓縮。例如,將某個(gè)列或某些列的值空間做成數(shù)據(jù)字典(表),在存儲(chǔ)列值時(shí),只需要存儲(chǔ)數(shù)據(jù)字典中的值序號(hào)即可。列存儲(chǔ)模式可能會(huì)通過“列族”(columnfamily)的概念來組織數(shù)據(jù),列族是若干列的集合,各個(gè)列的數(shù)量和名稱都是任意的。列族數(shù)據(jù)庫有谷歌的BigTable和Dremel、斯通布雷克提出的C-Store等。7.1初識(shí)NoSQL7.1.2NoSQL的數(shù)據(jù)存儲(chǔ)模式和相對(duì)應(yīng)的數(shù)據(jù)庫2.文檔存儲(chǔ)模式和文檔數(shù)據(jù)庫文檔存儲(chǔ)模式和鍵值存儲(chǔ)模式具有一定的相似性,但其值一般為半結(jié)構(gòu)化數(shù)據(jù),需要通過某種半結(jié)構(gòu)化標(biāo)記語言進(jìn)行描述,如JSON或XML。文檔存儲(chǔ)模式可以通過關(guān)鍵詞查詢文檔內(nèi)部的結(jié)構(gòu),而非只通過鍵來進(jìn)行檢索。文檔存儲(chǔ)模式通常會(huì)采用JSON或類似JSON的方式描述數(shù)據(jù)。文檔數(shù)據(jù)庫有MongoBD和CouchDB等,這些數(shù)據(jù)庫可以在分布式集群上實(shí)現(xiàn)文檔式數(shù)據(jù)存儲(chǔ)和管理。文檔數(shù)據(jù)庫的優(yōu)點(diǎn)和缺點(diǎn)。(1)優(yōu)點(diǎn)。①簡(jiǎn)單。②相對(duì)高效。③文檔格式處理。④查詢功能強(qiáng)大。⑤分布式處理。(2)缺點(diǎn)。①缺少約束。②數(shù)據(jù)出現(xiàn)冗余。③相對(duì)低效。7.1初識(shí)NoSQL7.1.2NoSQL的數(shù)據(jù)存儲(chǔ)模式和相對(duì)應(yīng)的數(shù)據(jù)庫3.鍵值對(duì)存儲(chǔ)模式和鍵值數(shù)據(jù)庫鍵值對(duì)存儲(chǔ)模式也就是Key-Value模式。適合按照鍵對(duì)數(shù)據(jù)進(jìn)行快速定位,還可以通過對(duì)鍵進(jìn)行排序和分區(qū),以實(shí)現(xiàn)更快速的數(shù)據(jù)定位。鍵值對(duì)存儲(chǔ)模式的NoSQL數(shù)據(jù)庫通常不會(huì)支持對(duì)值建立索引,因?yàn)橹祵?duì)應(yīng)的列不確定鍵值數(shù)據(jù)庫(Key-ValueDatabase)是一類輕量級(jí)且以內(nèi)存處理為主的NoSQL數(shù)據(jù)庫。(1)鍵值數(shù)據(jù)庫的優(yōu)點(diǎn)。①簡(jiǎn)單。②快速。③高效計(jì)算。④分布式處理。(2)鍵值數(shù)據(jù)庫的缺點(diǎn)。①對(duì)值進(jìn)行多值查找的功能較弱。②缺少約束,意味著更容易出錯(cuò)。③不易建立復(fù)雜關(guān)系。7.1初識(shí)NoSQL7.1.2NoSQL的數(shù)據(jù)存儲(chǔ)模式和相對(duì)應(yīng)的數(shù)據(jù)庫4.圖存儲(chǔ)模式和圖數(shù)據(jù)庫圖存儲(chǔ)模式是一種專門存儲(chǔ)節(jié)點(diǎn)和邊以及節(jié)點(diǎn)之間的連線關(guān)系的拓?fù)浯鎯?chǔ)方法。節(jié)點(diǎn)和邊都存在描述參數(shù),邊是矢量,即有方向的,可能是單向的,也可能是雙向的。在圖存儲(chǔ)模式中,每個(gè)節(jié)點(diǎn)都需要有指向其所有相連對(duì)象的指針,以實(shí)現(xiàn)快速的路由。圖數(shù)據(jù)庫中的節(jié)點(diǎn)都是相互連接的,因此對(duì)數(shù)據(jù)進(jìn)行分片和分布式部署較為困難。相對(duì)于列族數(shù)據(jù)庫、文檔數(shù)據(jù)庫、鍵值數(shù)據(jù)庫而言,圖數(shù)據(jù)庫更具個(gè)性,更適合圖論的應(yīng)用。7.1初識(shí)NoSQL7.2走進(jìn)HBase
7.2.1認(rèn)識(shí)HBaseHBase是一種“面向列加鍵值對(duì)”存儲(chǔ)模式的NoSQL數(shù)據(jù)庫,底層的數(shù)據(jù)文件一般仍采用HDFS格式存儲(chǔ),但其文件結(jié)構(gòu)和元數(shù)據(jù)等由HBase維護(hù)。為了實(shí)現(xiàn)并行的數(shù)據(jù)寫入和檢索,其元數(shù)據(jù)(分區(qū)信息)采用分布式方式管理,因此HBase在數(shù)據(jù)和元數(shù)據(jù)層面都是分布式的。HBase具有以下優(yōu)點(diǎn)。采用面向列(列族)加鍵值對(duì)的存儲(chǔ)模式??梢詫?shí)現(xiàn)便捷的橫向擴(kuò)展??梢宰詣?dòng)實(shí)現(xiàn)數(shù)據(jù)分片??梢詫?shí)現(xiàn)嚴(yán)格的讀寫一致性和自動(dòng)轉(zhuǎn)移故障??梢詫?shí)現(xiàn)對(duì)全文的檢索與過濾。支持通過命令行界面或者Java、Python等語言來進(jìn)行操作。7.2走進(jìn)HBase7.2.1認(rèn)識(shí)HBase1.HBase的數(shù)據(jù)模型HBase采用的是一種面向列加鍵值對(duì)存儲(chǔ)模式,HBase不需要預(yù)先設(shè)計(jì)列的結(jié)構(gòu),當(dāng)添加新的列時(shí),只需要記錄新記錄的列名即可,不會(huì)對(duì)已有的數(shù)據(jù)產(chǎn)生影響。鍵值對(duì)的實(shí)際存儲(chǔ)格式如圖7.2走進(jìn)HBaseHBase的每行數(shù)據(jù)或者說每個(gè)鍵值對(duì)都包含行鍵、列族名稱、列名、時(shí)間戳、行鍵類型與值。需要記錄其長度,鍵和值的最大長度(字符串長度)都是32KB。行鍵類型表明當(dāng)前記錄所表示的行為,如新增、刪除、刪除列、刪除列族等。7.2.1認(rèn)識(shí)HBase2.HBase的拓?fù)浣Y(jié)構(gòu)HBase節(jié)點(diǎn)采用了主/從式的拓?fù)浣Y(jié)構(gòu),其主要組件包括一個(gè)主節(jié)點(diǎn)和若干個(gè)從節(jié)點(diǎn)。HBase需要借助Zookeeper來實(shí)現(xiàn)節(jié)點(diǎn)監(jiān)控和容錯(cuò)。為實(shí)現(xiàn)Master節(jié)點(diǎn)的高可用性,可以部署多個(gè)Master節(jié)點(diǎn),有一個(gè)為活躍(Active)節(jié)點(diǎn),其他為備用(Standby)節(jié)點(diǎn)。HBase的典型架構(gòu)如圖7.2走進(jìn)HBase7.2.1認(rèn)識(shí)HBase3.水平分區(qū)原理HBase可以將數(shù)據(jù)表進(jìn)行水平分割,形成不同的區(qū)域(Region),并由不同的Regionserver進(jìn)行管理,以實(shí)現(xiàn)分布式的數(shù)據(jù)寫入和查詢。HBase的水平分區(qū)原理如圖。7.2走進(jìn)HBase7.2.2操作HBase1.查看HBase的基本信息使用HBase命令可以查看當(dāng)前HBase的基本信息?!纠?】查看當(dāng)前HBase的基本信息。顯示當(dāng)前HBase的版本號(hào)。
hbase(main):020:0>version顯示各主節(jié)點(diǎn)的狀態(tài)。
hbase(main):021:0>status顯示當(dāng)前用戶名。
hbase(main):022:0>whoam退出HBaseShell模式。
hbase(main):025:0>exit7.2走進(jìn)HBase7.2.2操作HBase2.表和列族操作HBase的表結(jié)構(gòu)只有表名和列族兩項(xiàng)內(nèi)容。列族屬性及其說明如右表。7.2走進(jìn)HBase7.2.2操作HBase2.表和列族操作HBaseShell中操作數(shù)據(jù)表的常用命令如表7.2走進(jìn)HBase7.2.2操作HBase2.表和列族操作在HBaseShell中數(shù)據(jù)表和數(shù)據(jù)的讀寫等基本操作。(1)創(chuàng)建數(shù)據(jù)表?!纠?】在HBaseShell中創(chuàng)建數(shù)據(jù)表。創(chuàng)建一個(gè)student數(shù)據(jù)表,數(shù)據(jù)表中含有一個(gè)列族address。hbase(main):001:0>create‘student’,‘a(chǎn)ddress’創(chuàng)建一個(gè)student_info數(shù)據(jù)表,數(shù)據(jù)表中含有name和address兩個(gè)列族。hbase(main):003:0>create‘student_info’,‘name’,‘a(chǎn)ddress’創(chuàng)建book數(shù)據(jù)表,表中含有一個(gè)列族address。設(shè)定數(shù)據(jù)表中所有列族的分區(qū)單次持久化的最大值為128MB。hbase(main):006:0>create‘book’,‘a(chǎn)ddress’,MAX_FILESTIZE=>‘134217728’7.2走進(jìn)HBase7.2.2操作HBase2.表和列族操作(2)查看表名列表、數(shù)據(jù)表的信息等。【例3】查看數(shù)據(jù)表的信息。查看表名列表。hbase(main):008:0>list查看是否存在student數(shù)據(jù)表。hbase(main):009:0>exist‘student’描述student_info數(shù)據(jù)表的結(jié)構(gòu)。hbase(main):011:0>describe‘student_info’7.2走進(jìn)HBase7.2.2操作HBase2.表和列族操作(3)修改表結(jié)構(gòu)。在student數(shù)據(jù)表中增加一個(gè)name列族,可以采用如下兩種方式:alter‘student’,‘name’alter‘student’,‘a(chǎn)ddress’,{NAME=>‘name’,INMEMORY=>true}刪除一個(gè)列族及其包含的數(shù)據(jù),可以采用如下兩種方式:alter‘student’,‘delete’=>‘name’alter‘student’,{NAME=>‘name’,METHOD=>‘delete’}(4)刪除數(shù)據(jù)表。如需要?jiǎng)h除player數(shù)據(jù)表,先禁用player數(shù)據(jù)表:disable‘player’,可以用is_disabled命令查看禁用是否完成:is_disabled‘player’,然后刪除數(shù)據(jù)表:drop‘player’。7.2走進(jìn)HBase7.2.2操作HBase3.數(shù)據(jù)更新(1)數(shù)據(jù)插入。使用put命令可以實(shí)現(xiàn)單條數(shù)據(jù)的插入和修改。【例4】在student數(shù)據(jù)表的address列族中插入數(shù)據(jù)。hbase(main):020:0>put‘student’,‘001’,‘a(chǎn)ddress:city’,‘nanjing’,1hbase(main):022:0>put‘student’,‘002’,‘a(chǎn)ddress:nation’,‘China’hbase(main):024:0>put‘student’,‘002’,‘a(chǎn)ddress:province’,‘jiangsu’(2)數(shù)據(jù)更新。執(zhí)行put命令,則視為數(shù)據(jù)更新。put‘student’,‘001’,‘a(chǎn)ddress:city’,‘suzhou’,2(3)數(shù)據(jù)刪除。delete‘student’,‘002’,‘a(chǎn)ddress’delete‘student’,‘002’,‘a(chǎn)ddress:province’7.2走進(jìn)HBase7.2.2操作HBase3.數(shù)據(jù)更新(4)計(jì)數(shù)器。使用incr命令可以將cell的數(shù)值在原值上加入指定數(shù)值。【例5】對(duì)student數(shù)據(jù)表的address列族中的room列以10為單位計(jì)數(shù),連續(xù)兩次累計(jì)計(jì)數(shù)。計(jì)數(shù)第一次
hbase(main):029:0>incr‘student’,‘001’,‘a(chǎn)ddress:room’,10查看student數(shù)據(jù)表的address列族中的room列的值。
hbase(main):030:0>get‘student’,‘001’,‘a(chǎn)ddress:room’計(jì)數(shù)第二次
hbase(main):031:0>incr‘student’,‘001’,‘a(chǎn)ddress:room’,10查看student數(shù)據(jù)表的address列族中的room列的值。
hbase(main):032:0>get‘student’,‘001’,‘a(chǎn)ddress:room’7.2走進(jìn)HBase7.2.2操作HBase4.數(shù)據(jù)查詢HBase中有兩種基本的數(shù)據(jù)查詢方法。(1)
get:根據(jù)行鍵獲取一條數(shù)據(jù)。(2)
scan:掃描一個(gè)數(shù)據(jù)表,可以指定行鍵范圍或使用過濾器限制范圍?!纠?】數(shù)據(jù)查詢。在student數(shù)據(jù)表中插入數(shù)據(jù)。hbase(main):043:0>put‘student’,‘001’,‘a(chǎn)ddress:city’,‘nanjinglishui’,1hbase(main):044:0>put‘student’,‘001’,‘a(chǎn)ddress:city’,‘nanjingjiangling’,2hbase(main):045:0>put‘student’,‘001’,‘a(chǎn)ddress:city’,‘nanjingxixia’按行鍵獲取數(shù)據(jù)。get命令的必選參數(shù)為表名和行鍵名。hbase(main):046:0>get‘student’,‘001’7.2走進(jìn)HBase7.2.2操作HBase4.數(shù)據(jù)查詢(按行鍵、列族的名稱、時(shí)間戳的范圍、數(shù)據(jù)版本及過濾器獲取數(shù)據(jù)。hbase(main):047:0>get‘student’,‘001’,{COLUMN=>‘a(chǎn)ddress’}hbase(main):049:0>get‘student’,‘001’,{COLUMN=>‘a(chǎn)ddress’,TIMERANGE=>[1,2]}hbase(main):051:0>get‘student’,‘001’,{COLUMN=>‘a(chǎn)ddress’,VERSIONS=>3}hbase(main):052:0>get‘student’,‘001’,{COLUMN=>‘a(chǎn)ddress’,TIMERANGE=>[1,2],VERSIONS=>3}hbase(main):053:0>get‘student’,‘001’,{FILTER=>“ValueFilter(=,‘binary:nanjianglishui’)”}若不指定行鍵掃描數(shù)據(jù),則HBase通過全表掃描的方式查詢數(shù)據(jù)。hbase(main):053:0>scan‘student’7.2走進(jìn)HBase7.2.2操作HBase4.數(shù)據(jù)查詢(3)
行計(jì)數(shù)。使用count命令可以計(jì)算數(shù)據(jù)表的邏輯行數(shù)?!纠?】數(shù)據(jù)表的行統(tǒng)計(jì)。統(tǒng)計(jì)student數(shù)據(jù)表的邏輯行數(shù)。
hbase(main):070:0>count‘student’(4)
過濾查詢。常見的過濾器如下。行鍵過濾器。列族和列名過濾器。值過濾器。7.2走進(jìn)HBase7.2.2操作HBase5.快照操作快照是一種不復(fù)制數(shù)據(jù)就能建立表副本的方法,可以用于數(shù)據(jù)恢復(fù),構(gòu)建每日、每周或每月的數(shù)據(jù)報(bào)告,也可在測(cè)試中使用?!纠?】快照操作。在HBaseShell中建立表的快照snapshot_one。
hbase(main):138:0>snapshot‘student’,‘snapshot_one’通過快照生成student_one數(shù)據(jù)表。
hbase(main):139:0>clone_snapshot‘snapshot_one’,‘student_one’查看快照列表。
hbase(main):140:0>list_snapshots通過快照恢復(fù)student數(shù)據(jù)表,將拋棄快照之后的所有變化。
hbase(main):141:0>restore_snapshot‘snapshot_one’7.2走進(jìn)HBase7.2.3數(shù)據(jù)導(dǎo)入/導(dǎo)出1.批量導(dǎo)入數(shù)據(jù)(1)利用ImportTsv命令。在Linux操作系統(tǒng)中通過HBase指令調(diào)用ImportTsv命令。hbaseorg.apache.hadoop.hbase.mapreduce.ImportTsv-Dimporttsv.columns=HBASE_ROW_KEY,address:city,name:nick-Dimporttsv.skip.bad.lines=truestudenthdfs://namenode:8020/input/(2)bulk-load方法。該方法直接將原始數(shù)據(jù)轉(zhuǎn)換成HFile,并將數(shù)據(jù)復(fù)制到HDFS的相應(yīng)位置,再將文件中的數(shù)據(jù)納入HBase管理(3)從關(guān)系型數(shù)據(jù)庫中將數(shù)據(jù)導(dǎo)入HBase。在Hadoop組件中,Sqoop的組件可以實(shí)現(xiàn)Hadoop、Hive、HBase等大數(shù)據(jù)工具與關(guān)系型數(shù)據(jù)庫(如MariaDB、Oracle)之間的數(shù)據(jù)導(dǎo)入和導(dǎo)出。7.2走進(jìn)HBase7.2.3數(shù)據(jù)導(dǎo)入/導(dǎo)出【例9】Sqoop組件的操作。使用Sqoop組件列出MariaDB服務(wù)器中的所有數(shù)據(jù)庫。sqooplist-databases--connectjdbc:mysql://localhost:3306--usernameroot--password000000使用Sqoop組件列出MariaDB中teaching_management數(shù)據(jù)庫中所有的數(shù)據(jù)表。sqooplist-tables--connectjdbc:mysql://localhost:3306/teaching_management--usernameroot--password000000sqoopimport--connectjdbc:mysql://localhost:3306/teaching_management--tablestudent_info--hbase-tablestudent--column-familyinfo--hbase-row-keysno--hbase-create-table--username‘root’--password‘000000’7.2走進(jìn)HBase7.2.3數(shù)據(jù)導(dǎo)入/導(dǎo)出2.備份和恢復(fù)(1)導(dǎo)出數(shù)據(jù)。利用下面的命令可以將HBase的數(shù)據(jù)導(dǎo)出到HDFS。
hbaseorg.apache.hadoop.hbase.mapreduce.Export<tablename><outputdir>(2)導(dǎo)入數(shù)據(jù)。將導(dǎo)出的數(shù)據(jù)恢復(fù)到HBase中,可以采用如下命令。
hbaseorg.apache.hadoop.hbase.mapreduce.Import<tablename><inputdir>(3)利用快照備份數(shù)據(jù)。將快照備份到HDFS,可以采用如下命令。
hbaseorg.apache.hadoop.hbase.snapshot.ExportSnapshot-snapshot<snap-shotname>--copy-to<outputdir>(4)復(fù)制數(shù)據(jù)表。
hbaseorg.apache.hadoop.hbase.mapreduce.CopyTable--=<NEW_TABLE_NAME>--peer.adr=<zookeeper_peer:2181://hbase><TABLE_NAME>7.2走進(jìn)HBase7.3走進(jìn)MongoDB7.3.1認(rèn)識(shí)MongoDB目前常見的文檔數(shù)據(jù)庫有MongoDB和ApacheCouchDB等。
1.文檔和集合MongoDB是典型的無模式NoSQL數(shù)據(jù)庫,MongoDB會(huì)采用“文檔”表示描述數(shù)據(jù)的結(jié)構(gòu)。一組文檔稱為“集合”,可以類比傳統(tǒng)關(guān)系型數(shù)據(jù)庫中的“數(shù)據(jù)表”。但集合是無模式的,不同結(jié)構(gòu)的文檔可以歸屬于同一個(gè)集合。MongoDB采用BSON來進(jìn)行數(shù)據(jù)存儲(chǔ)與編碼傳輸。其主要優(yōu)勢(shì)在于通過改進(jìn)存儲(chǔ)結(jié)構(gòu),BSON的檢索速度更快。例如,BSON在實(shí)際存儲(chǔ)時(shí)會(huì)將各個(gè)字段的長度存儲(chǔ)在字段頭部,因此在遍歷數(shù)據(jù)時(shí)更容易跳過不需要的數(shù)據(jù)。BSON支持多種數(shù)據(jù)類型,如字符串、整型、浮點(diǎn)型等,這使得用戶操作更加容易。7.3走進(jìn)MongoDB7.3.1認(rèn)識(shí)MongoDB1.文檔和集合BSON支持的內(nèi)嵌數(shù)據(jù)結(jié)構(gòu)類型如表。7.3走進(jìn)MongoDB7.3.1認(rèn)識(shí)MongoDB2.分片機(jī)制MongoDB支持3種分片策略:升序分片、hash分片和位置分片。3.復(fù)制集MongoDB支持多副本,多副本是以主/從復(fù)制的形式實(shí)現(xiàn)的。MongoDB中稱這種機(jī)制為復(fù)制集機(jī)制。MongoDB的復(fù)制集機(jī)制如圖7.3走進(jìn)MongoDB7.3.1認(rèn)識(shí)MongoDB4.集群架構(gòu)MongoDB集群存在分片機(jī)制時(shí),存在3種基本角色Mongod(或稱為Shard)服務(wù)器。Mongos服務(wù)器。Config服務(wù)器。MongoDB集群架構(gòu)的拓?fù)浣Y(jié)構(gòu)如圖7.3走進(jìn)MongoDB7.3.1認(rèn)識(shí)MongoDB5.存儲(chǔ)引擎存儲(chǔ)引擎是MongoDB的核心組件,負(fù)責(zé)將數(shù)據(jù)存儲(chǔ)在硬盤和內(nèi)存上。MongoDB支持以下3類存儲(chǔ)引擎。(1)WiredTiger。它是目前推薦的存儲(chǔ)引擎,支持文檔級(jí)別的多副本和一致性管理、快照和檢查點(diǎn)、操作日志、數(shù)據(jù)壓縮等多種特性。(2)In-Memory。它用于將數(shù)據(jù)存儲(chǔ)在內(nèi)存中,將少量的元數(shù)據(jù)和診斷日志(Diagnosti-cLog)存儲(chǔ)到硬盤文件中。(3)MMAPv1。它是MongoDB早期使用的存儲(chǔ)引擎,一般認(rèn)為其綜合性能不如WiredTi-ger。由于存在時(shí)間較長,因此它對(duì)一些外圍組件或第三方插件的支持會(huì)更好。7.3走進(jìn)MongoDB7.3.2操作MongoDB1.MongoDB的Shell環(huán)境MongoShell是MongoDB的交互式JavaScript接口。可以使用MongoShell查詢和更新數(shù)據(jù)及執(zhí)行管理操作。MongoDB的Shell環(huán)境中有一個(gè)重要的db.runCommand命令,可以完成多種復(fù)雜的數(shù)據(jù)操作,命令格式為:db.runCommand({<command>})。db.runCommand命令可以完成數(shù)據(jù)庫與大量節(jié)點(diǎn)環(huán)境的維護(hù)與管理工作。下面兩條語句是基本等價(jià)的。db.mycol.find({item2:{$gt:1}})db.runCommand({find:“mycol”,filter:{item2:{$gt:1}}})7.3走進(jìn)MongoDB7.3.2操作MongoDB1.MongoDB的Shell環(huán)境【例10】MongoDB的Shell環(huán)境的基礎(chǔ)操作。登錄MongoDB的Shell環(huán)境。
mongo或mongo--host:27017//IP地址為Mongos服務(wù)器的IP地址在Shell環(huán)境中執(zhí)行help命令查看幫助主題。
>db.help>db.collection.help()執(zhí)行db.runCommand命令。
>db.mycol.find({item2:{$gt:1}})
>db.runCommand({find:“mycol”,filter:{item2:{$gt:1}}})退出MongoDB的Shell環(huán)境。
>exit或quit()7.3走進(jìn)MongoDB7.3.2操作MongoDB2.數(shù)據(jù)庫操作和集合操作(1)數(shù)據(jù)庫操作。①查看當(dāng)前連接的服務(wù)器。
db.getMongo()②查看數(shù)據(jù)庫列表。
showdbs③切換使用的數(shù)據(jù)庫。
use<db>④顯示當(dāng)前數(shù)據(jù)庫名稱。
db7.3走進(jìn)MongoDB7.3.2操作MongoDB2.數(shù)據(jù)庫操作和集合操作⑤查看當(dāng)前數(shù)據(jù)庫中的所有集合。
showcollections⑥查看當(dāng)前數(shù)據(jù)庫中的所有集合,并以JSON方式顯示集合名稱。
db.getCollectionNames()⑦查看當(dāng)前數(shù)據(jù)庫中詳細(xì)的集合信息。
db.getCollectionInfos()⑧刪除當(dāng)前數(shù)據(jù)庫,并刪除相關(guān)數(shù)據(jù)。
db.dropDatabase()7.3走進(jìn)MongoDB7.3.2操作MongoDB2.數(shù)據(jù)庫操作和集合操作(2)集合操作。①新建集合。
db.createCollection(<name>)②刪除集合。
db.myCol.drop()③定長集合操作。除了指定名稱,新建集合命令還可以附加若干可選參數(shù)。例如:
db.createCollection(“cappedCol”,{capped:true,size:10000})④判斷一個(gè)集合是否為capped屬性。 db.cappedCol.isCapped()7.3走進(jìn)MongoDB7.3.2操作MongoDB3.文檔插入、查詢、更新、刪除操作(1)文檔插入。①插入單個(gè)文檔的命令及語法。 db.collection.insertOne(document)②插入多個(gè)文檔。db.collection.insertMany()將多個(gè)文檔插入一個(gè)集合中。
db.mycol.insertMany(doc1,doc2)(2)文檔查詢。①查詢集合中的所有文檔,在find方法中傳一個(gè)空文檔作為查詢過濾條件。 db.mycol.find({})②以易讀方式顯示查詢結(jié)果。 db.mycol.find({}).pretty()7.3走進(jìn)MongoDB7.3.2操作MongoDB3.文檔插入、查詢、更新、刪除操作③等值查詢。在查詢過濾文檔中使用<字段>:<值>的表達(dá)式實(shí)現(xiàn)等值查詢。 db.mycol.find({item2:‘item2’})④在查詢條件中使用查詢操作符。查詢過濾文檔中可以使用查詢操作符來指定多個(gè)條件。 db.mycol.find({item1:{$in:[“A”,“D”]}})(3)文檔更新。①更新單個(gè)文檔。 db.collection.updateOne(<filter>,<update>,<options>)②更新多個(gè)文檔。 db.collection.updateMany(<filter>,<update>,<options>)③更換文檔。db.collection.replaceOne(<filter>,<update>,<options>)7.3走進(jìn)MongoDB7.3.2操作MongoDB3.文檔插入、查詢、更新、刪除操作(4)文檔刪除。①刪除集合中的單個(gè)文檔。 db.collection.deleteOne(<filter>,{writeConcern:<document>,collation:<document>,hint:<document|string>})②刪除集合中所有匹配的文檔。 db.collection.deleteMany(<filter>,{writeConcern:<document>,collation:<document>})7.3走進(jìn)MongoDB7.3.2操作MongoDB3.文檔插入、查詢、更新、刪除操作【例11】在MongoDB中新建student數(shù)據(jù)庫,新建compute集合,使用for循環(huán)向集合中批量插入10條數(shù)據(jù),定義變量i=1,插入{_id:i,name:“xiaoming”,age:21}。插入數(shù)據(jù)完畢后,統(tǒng)計(jì)集合中的數(shù)據(jù)條數(shù),然后查詢集合中age大于20的記錄。>usestudent>db.createCollection(“compute”)>for(vari=1;i<10;i++){pute.insertOne({_id:i,name:“xiaoming”,age:18+i})}>pute.count()>pute.find({age:{$gt:20}}).pretty();7.3走進(jìn)MongoDB7.3.2操作MongoDB4.聚合聚合為集合文檔數(shù)據(jù)庫提供各種處理數(shù)據(jù)的方法,并返回計(jì)算結(jié)果。MongoDB提供了3種方式來執(zhí)行聚合命令:聚合管道方法、MapReduce方法和單用途聚合方法。(1)聚合管道方法。常見的管道操作包括$group、$project、$match、$sort、$limit和$skip等。常見的聚合運(yùn)算符包括$sum、$avg、$min/$max、$first/$last和$push等。常見的比較運(yùn)算符包括$gt/$lt、$gte/$lte、$ne等。(2)MapReduce方法。語法格式:db.collection.mapreduce(function(){emit(<this.field1>,<this.field2>)},//map自定義函數(shù)function(key,values){returnArray.sum(values)},//reduce自定義函數(shù){query:{<field>},out:<“result_name”>})7.3走進(jìn)MongoDB7.3.2操作MongoDB4.聚合(3)單用途聚合方法。單用途聚合方法可以放在find命令后直接使用。目前有兩種單用途聚合操作:db.collection_name.count()和db.collection_name.distinct(),可用來聚合來自單個(gè)集合的文檔。①db.collection_name.count()表示統(tǒng)計(jì)集合里符合查詢條件的文檔數(shù)量。②db.collection_name.distinct()表示統(tǒng)計(jì)集合里指定鍵的不同值。7.3走進(jìn)MongoDB7.3.2操作MongoDB5.索引MongoDB的索引是基于“B-樹數(shù)據(jù)結(jié)構(gòu)”及對(duì)應(yīng)算法形成的。(1)默認(rèn)id索引。在創(chuàng)建集合期間,MongoDB在_id字段上創(chuàng)建唯一索引。(2)創(chuàng)建索引。使用db.collection.createIndex()命令在MongoShell中創(chuàng)建索引。 db.collection.createIndex(<keyandindextypespecification>,<options>)例如,在student集合的name字段上創(chuàng)建單個(gè)鍵降序索引。 db.student.createIndex({name:-1})考慮一個(gè)經(jīng)常查詢products集合以填充現(xiàn)有庫存數(shù)據(jù)為目標(biāo)的應(yīng)用程序。 ducts.cre
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度貨運(yùn)司機(jī)安全責(zé)任協(xié)議書范本3篇
- 二零二五年度借唄個(gè)人消費(fèi)貸款合同(藝術(shù)收藏品購買貸款版)4篇
- 二零二五個(gè)人債務(wù)額度擔(dān)保債務(wù)清理合同范本3篇
- 2025版消防工程設(shè)計(jì)合同范本(含消防咨詢)6篇
- 魚塘堤壩填筑施工方案
- 順德地毯清洗施工方案
- 二零二五版水電設(shè)備維護(hù)材料供應(yīng)協(xié)議3篇
- 綠色出行服務(wù)提供合同
- 二零二五年度冷鏈物流送貨協(xié)議合同范本3篇
- 煙花購銷合同煙花爆竹合同
- 湖南高速鐵路職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試參考試題庫(含答案)
- 英漢互譯單詞練習(xí)打印紙
- 2023湖北武漢華中科技大學(xué)招聘實(shí)驗(yàn)技術(shù)人員24人筆試參考題庫(共500題)答案詳解版
- 一氯二氟甲烷安全技術(shù)說明書MSDS
- 母嬰護(hù)理員題庫
- 老年人預(yù)防及控制養(yǎng)老機(jī)構(gòu)院內(nèi)感染院內(nèi)感染基本知識(shí)
- SWITCH暗黑破壞神3超級(jí)金手指修改 版本號(hào):2.7.6.90885
- 2023高考語文全國甲卷詩歌閱讀題晁補(bǔ)之《臨江仙 身外閑愁空滿眼》講評(píng)課件
- 物流簽收回執(zhí)單
- 鋼結(jié)構(gòu)廠房造價(jià)指標(biāo)
- 安徽涵豐科技有限公司年產(chǎn)6000噸磷酸酯阻燃劑DOPO、4800噸磷酸酯阻燃劑DOPO衍生品、12000噸副產(chǎn)品鹽酸、38000噸聚合氯化鋁、20000噸固化劑項(xiàng)目環(huán)境影響報(bào)告書
評(píng)論
0/150
提交評(píng)論