大數(shù)據(jù)技術基礎教程 課件 第5-7章 分布式數(shù)據(jù)庫HBase、分布式計算框架MapReduce、數(shù)據(jù)倉庫Hive_第1頁
大數(shù)據(jù)技術基礎教程 課件 第5-7章 分布式數(shù)據(jù)庫HBase、分布式計算框架MapReduce、數(shù)據(jù)倉庫Hive_第2頁
大數(shù)據(jù)技術基礎教程 課件 第5-7章 分布式數(shù)據(jù)庫HBase、分布式計算框架MapReduce、數(shù)據(jù)倉庫Hive_第3頁
大數(shù)據(jù)技術基礎教程 課件 第5-7章 分布式數(shù)據(jù)庫HBase、分布式計算框架MapReduce、數(shù)據(jù)倉庫Hive_第4頁
大數(shù)據(jù)技術基礎教程 課件 第5-7章 分布式數(shù)據(jù)庫HBase、分布式計算框架MapReduce、數(shù)據(jù)倉庫Hive_第5頁
已閱讀5頁,還剩134頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第5章分布式數(shù)據(jù)庫HBase《大數(shù)據(jù)技術基礎教程》學習目標/Target掌握HBase的數(shù)據(jù)模型和系統(tǒng)架構掌握HBase的讀寫流程掌握HBase相關的shell命令和API編程章節(jié)概述/

SummaryHBase是目前非常熱門的一款分布式KV(KeyValue,鍵值)數(shù)據(jù)庫系統(tǒng),無論是互聯(lián)網(wǎng)行業(yè),還是其他傳統(tǒng)IT行業(yè)都在大量使用。尤其是近幾年隨著國內(nèi)大數(shù)據(jù)理念的普及,HBase憑借其高可靠、易擴展、高性能以及成熟的社區(qū)支持,受到越來越多企業(yè)的青睞。許多大數(shù)據(jù)系統(tǒng)都將HBase作為底層數(shù)據(jù)存儲服務本章將簡要介紹HBase簡介、HBase數(shù)據(jù)模型、HBase系統(tǒng)架構、HBase數(shù)據(jù)讀寫流程和HBase編程實踐。目錄/Contents01020304HBase簡介HBase數(shù)據(jù)模型HBase系統(tǒng)架構HBase讀寫流程05HBase編程實踐HBase簡介5.15.1HBase簡介5.1.1Hbase的發(fā)展及現(xiàn)狀2003年Google在SOSP會議上發(fā)表了大數(shù)據(jù)歷史上第一篇公認的革命性論文——《GFS:TheGoogleFileSystem》2004年,Google又發(fā)表了另一篇非常重要的論文——《MapReduce:SimplefiedDataProcessingonLargeClusters》2006年,Google發(fā)布了第三篇重要論文——《BigTable:ADistributedStorageSystemforStructuredData》,用于解決Google內(nèi)部海量結構化數(shù)據(jù)的存儲以及高效讀寫問題5.1HBase簡介5.1.1Hbase的發(fā)展及現(xiàn)狀Google的三篇論文論證了在大量廉價機器上存儲、處理海量數(shù)據(jù)(結構化數(shù)據(jù)、非結構化數(shù)據(jù))是可行的,遺憾的是,Yahoo并沒有給出開源方案。2004年,DougCutting和MikeCafarella在為他們的搜索引擎爬蟲(Nutch)實現(xiàn)分布式架構的時候看到了Google的上述兩篇論文。他們在之后的幾個月里按照論文,實現(xiàn)出一個簡易版的HDFS和MapReduce,這也就是Hadoop的最早起源。5.1HBase簡介5.1.2Hbase應用場景Facebook用戶交互數(shù)據(jù)淘寶TLog小米云服務用戶行為數(shù)據(jù)存儲HBase數(shù)據(jù)模型5.25.2HBase數(shù)據(jù)模型5.2.1HBase邏輯視圖NameSpace:命名空間,類似于關系型數(shù)據(jù)庫的database概念,每個命名空間下有多個表,HBASE有兩個自帶的命名空間,分別是HBASE和default,HBASE中存放的是HBASE內(nèi)置的表(系統(tǒng)內(nèi)建表,包含namespace和meta表:存的是用戶表或系統(tǒng)表位置信息),default表是用戶默認的使用的命名空間(用戶建表時未指定namespace的表都創(chuàng)建在此)。Region(表的切片):HBase表的分片,HBase表會根據(jù)RowKey值被切分成不同的region存儲在RegionServer中,在一個RegionServer中可以有多個不同的region。5.2HBase數(shù)據(jù)模型5.2.1HBase邏輯視圖table:表,一個表包含多行數(shù)據(jù)。row:行,在HBase表里,每一行數(shù)據(jù)代表一個數(shù)據(jù)對象,每一行都有一個行鍵(RowKey)來進行唯一標識(不可分割的字節(jié)數(shù)組,且按照字典排序[ASCII碼]由低到高存儲),每一行都有一個rowkey和多個column(列)組成。在HBase中針對行鍵建立索引,提高檢索數(shù)據(jù)的速度。5.2HBase數(shù)據(jù)模型5.2.1HBase邏輯視圖column:列,與關系型數(shù)據(jù)庫中的列不同,HBase中的column由columnfamily(列簇)以及qualifier(列名)兩部分組成,兩者中間使用":"相連。比如contents:html,其中contents為列簇,html為列簇下具體的一列。columnfamily在表創(chuàng)建的時候需要指定,用戶不能隨意增減。一個columnfamily下可以設置任意多個qualifier,因此可以理解為HBase中的列可以動態(tài)增加,理論上甚至可以擴展到上百萬列。5.2HBase數(shù)據(jù)模型5.2.1HBase邏輯視圖Store:每一個region有一個或多個store組成,至少有一個store,hbase會把一起訪問的數(shù)據(jù)放在一個store里面,即為每個ColumnFamily建一個store(即有幾個ColumnFamily,也就有幾個Store)。一個Store由一個memStore、0或多個StoreFile組成。5.2HBase數(shù)據(jù)模型5.2.1HBase邏輯視圖timestamp:時間戳,每個cell在寫入HBase的時候都會默認分配一個時間戳作為該cell的版本,當然,用戶也可以在寫入的時候自帶時間戳。HBase支持多版本特性,即同一rowkey、column下可以有多個value存在,這些value使用timestamp作為版本號,版本越大,表示數(shù)據(jù)越新。cell:單元格,由五元組(row,column,timestamp,type,value)組成的結構,其中type表示Put/Delete這樣的操作類型,timestamp代表這個cell的版本。這個結構在數(shù)據(jù)庫中實際是以KV結構存儲的,其中(row,column,timestamp,type)是K,value字段對應KV結構的V。5.2HBase數(shù)據(jù)模型5.2.1HBase邏輯視圖HBase引入了列簇的概念,列簇下的列可以動態(tài)擴展。另外,HBase使用時間戳實現(xiàn)了數(shù)據(jù)的多版本支持5.2HBase數(shù)據(jù)模型5.2.1HBase邏輯視圖HBase是一個多維、稀疏、排序的表。多維:HBase中的Map與普通Map最大的不同在于,key是一個復合數(shù)據(jù)結構,由多維元素構成,包括rowkey、columnfamily、qualifier、type以及timestamp。稀疏:在其他數(shù)據(jù)庫中,對于空值的處理一般都會填充null,而對于HBase,空值不需要任何填充。這個特性為什么重要?因為HBase的列在理論上是允許無限擴展的,對于成百萬列的表來說,通常都會存在大量的空值,如果使用填充null的策略,勢必會造成大量空間的浪費。因此稀疏性是HBase的列可以無限擴展的一個重要條件。5.2HBase數(shù)據(jù)模型5.2.1HBase邏輯視圖HBase是一個多維、稀疏、排序、分布式存儲的表。排序:構成HBase的KV在同一個文件中都是有序的,但規(guī)則并不是僅僅按照rowkey排序,而是按照KV中的key進行排序—先比較rowkey,rowkey小的排在前面;如果rowkey相同,再比較column,即columnfamily:qualifier,column小的排在前面;如果column還相同,再比較時間戳timestamp,即版本信息,timestamp大的排在前面。這樣的多維元素排序規(guī)則對于提升HBase的讀取性能至關重要,在后面讀取章節(jié)會詳細分析。分布式:構成HBase的所有Map并不集中在某臺機器上,而是分布在整個集群中。5.2HBase數(shù)據(jù)模型5.2.2HBase物理視圖與大多數(shù)數(shù)據(jù)庫系統(tǒng)不同,HBase中的數(shù)據(jù)是按照列簇存儲的,即將數(shù)據(jù)按照列簇分別存儲在不同的目錄中。列簇anchor的所有數(shù)據(jù)存儲在一起形成5.2HBase數(shù)據(jù)模型5.2.2HBase物理視圖與大多數(shù)數(shù)據(jù)庫系統(tǒng)不同,HBase中的數(shù)據(jù)是按照列簇存儲的,即將數(shù)據(jù)按照列簇分別存儲在不同的目錄中。列簇contents的所有數(shù)據(jù)存儲在一起形成:5.2HBase數(shù)據(jù)模型5.2.3行式存儲、列式存儲、列簇式存儲為什么HBase要將數(shù)據(jù)按照列簇分別存儲?行式存儲:行式存儲系統(tǒng)會將一行數(shù)據(jù)存儲在一起,一行數(shù)據(jù)寫完之后再接著寫下一行,最典型的如MySQL這類關系型數(shù)據(jù)庫5.2HBase數(shù)據(jù)模型5.2.3行式存儲、列式存儲、列簇式存儲為什么HBase要將數(shù)據(jù)按照列簇分別存儲?列式存儲:列式存儲理論上會將一列數(shù)據(jù)存儲在一起,不同列的數(shù)據(jù)分別集中存儲,最典型的如Kudu、ParquetonHDFS等系統(tǒng)(文件格式)5.2HBase數(shù)據(jù)模型5.2.3行式存儲、列式存儲、列簇式存儲為什么HBase要將數(shù)據(jù)按照列簇分別存儲?列簇式存儲:從概念上來說,列簇式存儲介于行式存儲和列式存儲之間,可以通過不同的設計思路在行式存儲和列式存儲兩者之間相互切換。比如,一張表只設置一個列簇,這個列簇包含所有用戶的列。HBase中一個列簇的數(shù)據(jù)是存儲在一起的,因此這種設計模式就等同于行式存儲。再比如,一張表設置大量列族,每個列簇下僅有一列,很顯然這種設計模式就等同于列式存儲。HBase系統(tǒng)架構5.35.3HBase系統(tǒng)架構離線分析系統(tǒng)HBase體系結構借鑒了BigTable論文,是典型的Master-Slave模型。系統(tǒng)中有一個管理集群的Master節(jié)點以及大量實際服務用戶讀寫的RegionServer節(jié)點。除此之外,HBase中所有數(shù)據(jù)最終都存儲在HDFS系統(tǒng)中,這與BigTable實際數(shù)據(jù)存儲在GFS中相對應;系統(tǒng)中還有一個ZooKeeper節(jié)點,協(xié)助Master對集群進行管理。5.3HBase系統(tǒng)架構5.3.1ClientHBase客戶端(Client)提供了Shell命令行接口、原生JavaAPI編程接口、Thrift/RESTAPI編程接口以及MapReduce編程接口。HBase客戶端支持所有常見的DML操作以及DDL操作,即數(shù)據(jù)的增刪改查和表的日常維護等。其中Thrift/RESTAPI主要用于支持非Java的上層業(yè)務需求,MapReduce接口主要用于批量數(shù)據(jù)導入以及批量數(shù)據(jù)讀取。5.3HBase系統(tǒng)架構5.3.2ZookeeperZooKeeper(ZK)也是ApacheHadoop的一個頂級項目,基于Google的Chubby開源實現(xiàn),主要用于協(xié)調管理分布式應用程序。在HBase系統(tǒng)中,ZooKeeper扮演著非常重要的角色。實現(xiàn)Master高可用管理系統(tǒng)核心元數(shù)據(jù)

參與RegionServer宕機恢復。實現(xiàn)分布式表鎖5.3HBase系統(tǒng)架構5.3.3HMasteHBase集群中有若干臺計算機,其中有一臺是“主機(Master)”,其余的都是“從機(Slaver)”。一般在生產(chǎn)系統(tǒng)中,還會有一臺“備用主機(backupmaster)”。這個HMaster進程,就是運行在“主機”上的。準確的說,應該是HMaster在哪一臺計算機上運行,哪一臺計算機就是“主機”.

分發(fā)Region

監(jiān)控HRegionServer

管理元數(shù)據(jù)5.3HBase系統(tǒng)架構5.3.4HRegeionServeRegionServer主要用來響應用戶的IO請求,是HBase中最核心的模塊,由WAL(HLog)、BlockCache以及多個Region構成.WAL(HLog):HLog在HBase中有兩個核心作用:其一,用于實現(xiàn)數(shù)據(jù)的高可靠性,HBase數(shù)據(jù)隨機寫入時,并非直接寫入HFile數(shù)據(jù)文件,而是先寫入緩存,再異步刷新落盤。為了防止緩存數(shù)據(jù)丟失,數(shù)據(jù)寫入緩存之前需要首先順序寫入HLog,這樣,即使緩存數(shù)據(jù)丟失,仍然可以通過HLog日志恢復;其二,用于實現(xiàn)HBase集群間主從復制,通過回放主集群推送過來的HLog日志實現(xiàn)主從復制。5.3HBase系統(tǒng)架構5.3.4HRegeionServeRegionServer主要用來響應用戶的IO請求,是HBase中最核心的模塊,由WAL(HLog)、BlockCache以及多個Region構成.BlockCache:HBase系統(tǒng)中的讀緩存??蛻舳藦拇疟P讀取數(shù)據(jù)之后通常會將數(shù)據(jù)緩存到系統(tǒng)內(nèi)存中,后續(xù)訪問同一行數(shù)據(jù)可以直接從內(nèi)存中獲取而不需要訪問磁盤。對于帶有大量熱點讀的業(yè)務請求來說,緩存機制會帶來極大的性能提升。5.3HBase系統(tǒng)架構5.3.4HRegeionServeRegion:數(shù)據(jù)表的一個分片,當數(shù)據(jù)表大小超過一定閾值就會“水平切分”,分裂為兩個Region。Region是集群負載均衡的基本單位。通常一張表的Region會分布在整個集群的多臺RegionServer上,一個RegionServer上會管理多個Region,當然,這些Region一般來自不同的數(shù)據(jù)表。HBase表結構設計5.45.4HBase表結構設計5.4.1命名空間設計針對hbase使用較多數(shù)據(jù)量較大的業(yè)務,可以將數(shù)據(jù)放在單獨的namespace中單獨管理,入庫的時候tablename使用namespace:tablename的方式來處理。針對hbase使用較少數(shù)據(jù)量較少的業(yè)務,可以將數(shù)據(jù)放在default的namespace中統(tǒng)一管理,入庫的時候直接單獨使用tablename方式來處理。5.4HBase表結構設計5.4.2rowkey設計rowkey設計根本上還是需要解決或者避免可能出現(xiàn)的各種問題getorscan?如何避免數(shù)據(jù)熱點?如何優(yōu)化HBase硬盤占用量?對于時序數(shù)據(jù),如何能快速的取到最新一條?5.4HBase表結構設計5.4.2rowkey設計table預分區(qū)

按照Hash對table進行預分區(qū)

按照業(yè)務標識字段進行預分區(qū)Rowkey盡可能設計的短

Rowkey最大長度64kb,但是實際應用中一般為10-100bytes5.4HBase表結構設計5.4.3列族設計列族是設計是在建表階段需要完成的,也是表屬性需要集中配置的維度,主要有下面的內(nèi)容供參考:(1)VERSIONS(2)BLOOMFILTER(3)TTL(TimeToLive)(4)COMPRESSION&DATA_BLOCK_ENCODING(5)BLOCKSIZE(6)DFS_REPLICATION(7)IN_MEMORY5.4HBase表結構設計5.4.4列設計由于HBase是弱schema的結構,所以列相關的配置不在建表時指定,而是在數(shù)據(jù)寫入的時候自動指定。而HBase的稀疏存儲更是支持業(yè)務上定義大量的列,然后查詢的時候指定列名進行精確查詢,取到需要的數(shù)據(jù)。這種設計很符合HBase的特點以及設計理念。但是按照上文所說,HBase底層是按照cell存儲的,cell的越多,rowkey以及columnfamily的冗余存儲就越大,浪費了緩存資源和硬盤資源,所以給出的建議是在充分發(fā)揮HBase的特點的同時盡量減少列的數(shù)量。HBase數(shù)據(jù)讀寫流程5.55.5HBase數(shù)據(jù)讀寫流程5.5.1HBase數(shù)據(jù)寫流程(1)客戶端處理階段:客戶端將用戶的寫入請求進行預處理,并根據(jù)集群元數(shù)據(jù)定位寫入數(shù)據(jù)所在的RegionServer,將請求發(fā)送給對應的RegionServer。(2)Region寫入階段:RegionServer接收到寫入請求之后將數(shù)據(jù)解析出來,首先寫入HLog,再寫入對應Region列簇的MemStore。(3)MemStoreFlush階段:當Region中MemStore容量超過一定閾值,系統(tǒng)會異步執(zhí)行flush操作,將內(nèi)存中的數(shù)據(jù)寫入文件,形成HFile。5.5HBase數(shù)據(jù)讀寫流程5.5.1HBase數(shù)據(jù)寫流程HBase寫入流程5.5HBase數(shù)據(jù)讀寫流程5.5.2HBase數(shù)據(jù)讀流程首先從ZooKeeper中讀取-ROOT-表所在的RegionServer然后從該HRegionServer中根據(jù)請求的TableName,RowKey讀取.META.表所在的HRegionServer最后從該HRegionServer中讀取.META.表的內(nèi)容而獲取此次請求需要訪問的HRegion所在的位置,然后訪問該HRegionServer獲取請求的數(shù)據(jù)三層尋址5.5HBase數(shù)據(jù)讀寫流程5.5.2HBase數(shù)據(jù)讀流程(1)用戶通過查找zk(zookeeper)的/hbase/meta-region-server節(jié)點查詢哪臺RegionServer上有hbase:meta表。(2)客戶端連接含有hbase:meta表的RegionServer。Hbase:meta表存儲了所有Region的行鍵范圍信息,通過這個表就可以查詢出你要存取的rowkey屬于哪個Region的范圍里面,以及這個Region又是屬于哪個RegionServer。5.5HBase數(shù)據(jù)讀寫流程5.5.2HBase數(shù)據(jù)讀流程(3)獲取這些信息后,客戶端就可以直連其中一臺擁有你要存取的rowkey的RegionServer,并直接對其操作。(4)客戶端會把meta信息緩存起來,下次操作就不需要進行以上加載HBase:meta的步驟了。HBase編程實踐5.65.6HBase編程實踐5.6.1HBase常用shell命令HBaseShell常用命令命名描述語法help‘命名名’查看命令的使用描述help‘命令名’whoami我是誰whoamiversion返回hbase版本信息versionstatus返回hbase集群的狀態(tài)信息statustable_help查看如何操作表table_helpcreate創(chuàng)建表create‘表名’,‘列族名1’,‘列族名2’,‘列族名N’alter修改列族添加一個列族:alter‘表名’,‘列族名’刪除列族:alter‘表名’,{NAME=>‘列族名’,METHOD=>‘delete’}5.6HBase編程實踐5.6.1HBase常用shell命令HBaseShell常用命令命名描述語法describe顯示表相關的詳細信息describe‘表名’list列出hbase中存在的所有表listexists測試表是否存在exists‘表名’put添加或修改的表的值

put‘表名’,‘行鍵’,‘列族名’,‘列值’put‘表名’,‘行鍵’,‘列族名:列名’,‘列值’scan通過對表的掃描來獲取對用的值scan‘表名’掃描某個列族:scan‘表名’,{COLUMN=>‘列族名’}掃描某個列族的某個列:scan‘表名’,{COLUMN=>‘列族名:列名’}查詢同一個列族的多個列:scan‘表名’,{COLUMNS=>[‘列族名1:列名1’,‘列族名1:列名2’,…]}get獲取行或單元(cell)的值get‘表名’,‘行鍵’

get‘表名’,‘行鍵’,‘列族名’count統(tǒng)計表中行的數(shù)量count‘表名’5.6HBase編程實踐5.6.1HBase常用shell命令HBaseShell常用命令命名描述語法incr增加指定表行或列的值incr‘表名’,‘行鍵’,‘列族:列名’,步長值get_counter獲取計數(shù)器get_counter‘表名’,‘行鍵’,‘列族:列名’delete刪除指定對象的值(可以為表,行,列對應的值,另外也可以指定時間戳的值)刪除列族的某個列:delete‘表名’,‘行鍵’,‘列族名:列名’deleteall刪除指定行的所有元素值deleteall‘表名’,‘行鍵’truncate重新創(chuàng)建指定表truncate‘表名’enable使表有效enable‘表名’is_enabled是否啟用is_enabled‘表名’disable使表無效disable‘表名’is_disabled是否無效is_disabled‘表名’drop刪除表drop的表必須是disable的5.6HBase編程實踐5.6.2HBase常用JavaAPI及示例HBase提供了豐富的JavaAPI接口供用戶使用,可以通過HBaseJavaAPI完成和HBaseShell相同的功能。(1)連接HBaseJava連接HBase需要兩個類:HBaseConfiguration和ConnectionFactory

Configurationconfig=HBaseConfiguration.create();

//使用create()靜態(tài)方法就可以得到Configuration對象通過ConnectionFactory(連接工廠)的方法我們就能獲取到Connection(連接對象)了。具體用法:Connectionconnection=ConnectionFactory.createConnection(config);//config為前文的配置對象5.6HBase編程實踐5.6.2HBase常用JavaAPI及示例(2)創(chuàng)建表TableNametableName=TableName.valueOf("test");//定義表名//TableDescriptor對象通過TableDescriptorBuilder構建;TableDescriptorBuildertableDescriptor=TableDescriptorBuilder.newBuilder(tableName);ColumnFamilyDescriptorfamily=ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("data")).build();//構建列族對象tableDescriptor.setColumnFamily(family);//設置列族admin.createTable(tableDescriptor.build());//創(chuàng)建表5.6HBase編程實踐5.6.2HBase常用JavaAPI及示例(3)添加數(shù)據(jù)Tabletable=connection.getTable(tableName);//獲取Table對象try{byte[]row=Bytes.toBytes("row1");//定義行Putput=newPut(row);//創(chuàng)建Put對象byte[]columnFamily=Bytes.toBytes("data");//列簇byte[]qualifier=Bytes.toBytes(String.valueOf(1));//列byte[]value=Bytes.toBytes("張三豐");//值put.addColumn(columnFamily,qualifier,value);table.put(put);//向表中添加數(shù)據(jù)}finally{//使用完了要釋放資源table.close();}5.6HBase編程實踐5.6.2HBase常用JavaAPI及示例(4)獲取指定行的數(shù)據(jù)Getget=newGet(Bytes.toBytes("row1"));//定義get對象Resultresult=table.get(get);//通過table對象獲取數(shù)據(jù)System.out.println("Result:"+result);//很多時候我們只需要獲取“值”這里表示獲取data:1列族的值byte[]valueBytes=result.getValue(Bytes.toBytes("data"),Bytes.toBytes("1"));//獲取到的是字節(jié)數(shù)組//將字節(jié)轉成字符串StringvalueStr=newString(valueBytes,"utf-8");System.out.println("value:"+valueStr);5.6HBase編程實踐5.6.2HBase常用JavaAPI及示例(5)掃描表中的數(shù)據(jù)1. Scanscan=newScan();2. ResultScannerscanner=table.getScanner(scan);3. try{4. for(ResultscannerResult:scanner){5. System.out.println("Scan:"+scannerResult);6. byte[]row=scannerResult.getRow();7. System.out.println("rowName:"+newString(row,"utf-8"));8. }9. }finally{10. scanner.close();11. }5.6HBase編程實踐5.6.2HBase常用JavaAPI及示例(6)刪除表TableNametableName=TableName.valueOf("test");admin.disableTable(tableName);//禁用表admin.deleteTable(tableName);//刪除表本章小結本章簡要介紹了NoSQL數(shù)據(jù)庫HBase的發(fā)展現(xiàn)狀和應用場景,詳細介紹了HBase的數(shù)據(jù)模型、系統(tǒng)架構、表的結構設計以及HBase的讀寫流程等基本理論知識,最后介紹了HBase的shell編程命令和主要的JavaAPI使用。通過本章的學習,主要掌握HBase的基本理論知識,并能夠解決簡單的對數(shù)據(jù)CRUD的操作。第六章分布式計算框架MapReduce《大數(shù)據(jù)技術基礎教程》學習目標/Target了解MapReduce簡介

理解MapReduce計算模型理解MapReduce工作原理掌握MapReduce編程實踐章節(jié)概述/

SummaryMapReduce是Hadoop的一個核心組成框架,使用該框架編寫的應用程序能夠以一種可靠的、容錯的方式并行處理大型集群(數(shù)千個節(jié)點)上的大量數(shù)據(jù)(TB級別以上),也可以對大數(shù)據(jù)進行加工、挖掘和優(yōu)化等處理。目錄/Contents010203MapReduce簡介MapReduce計算模型MapReduce工作原理04MapReduce編程實踐MapReduce簡介11.1MapReduce簡介Hadoop的MapReduce核?技術起源于?歌在2004年發(fā)表的關于MapReduce系統(tǒng)的論?介紹。Hadoop實現(xiàn)了Google的MapReduce編程模型,提供了簡單易用的編程接口,也提供了它自己的分布式文件系統(tǒng)HDFS,與Google不同的是,Hadoop是開源的,任何人都可以使用這個框架來進行并行編程。MapReduce將復雜的、運行于大規(guī)模集群上的并行計算過程高度地抽象到了兩個函數(shù):Map和Reduce。概念“Map(映射)”和“Reduce(歸約)”,以及它們的主要思想,都是從函數(shù)式編程語言里借來的,同時包含了從矢量編程語言里借來的特性。MapReduce計算模型22.1MapReduce計算模型在Hadoop中,用于執(zhí)行計算任務(MapReduce任務)的機器有兩個角色:一個是JobTracker,一個是TaskTracker,前者用于管理和調度工作,后者用于執(zhí)行工作。每次計算任務都可以分為兩個階段,Map階段和Reduce階段。其中,Map階段接收一組鍵值對模式<key,Value>的輸入并產(chǎn)生同樣是鍵值對模式的另一個或一批<key,Value>的中間輸出;Reduce階段負責接收Map產(chǎn)生的中間輸出<key,Value>,然后對這個結果進行處理并輸出結果。2.1MapReduce計算模型MapReduce工作原理33.11.x架構MapReduce1.x采用Master/Slave架構,由全局唯一的Jobtracker和多個TaskTacker組成,并且在Client中提供一系列的api供編程和管理使用。3.11.x架構MapReduce的完整流程為:第一步:讀取文件,解析成為<key,value>對;第二步:自定義map邏輯接收<k1,v1>,轉換成為新的<k2,v2>輸出;第三步:分區(qū)Partition。將相同key的數(shù)據(jù)發(fā)送到同一個reduce里面去;第四步:排序,map階段分區(qū)內(nèi)的數(shù)據(jù)進行排序;第五步:combiner。調優(yōu)過程,對數(shù)據(jù)進行map階段的合并;第六步:將環(huán)形緩沖區(qū)的數(shù)據(jù)進行溢寫到本地磁盤小文件;第七步:歸并排序,對本地磁盤溢寫小文件進行歸并排序;3.11.x架構MapReduce的完整流程為:第九步:reduceTask啟動線程拉取屬于自己分區(qū)的數(shù)據(jù);第十步:從mapTask拉取回來的數(shù)據(jù)繼續(xù)進行歸并排序;第十一步:進行groupingComparator分組操作;第十二步:調用reduce邏輯,寫出數(shù)據(jù);第十三步:通過outputFormat進行數(shù)據(jù)輸出,寫到文件,一個reduceTask對應一個文件。3.22.x架構(YARN架構)3.22.x架構(YARN架構)①用戶編寫客戶端應用程序,向YARN提交應用程序,提交的內(nèi)容包括ApplicationMaster程序、啟動ApplicationMaster的命令、用戶程序等。②YARN中的ResourceManager負責接收和處理來自客戶端的請求。接到客戶端應用程序請求后,ResourceManager里面的調度器會為應用程序分配一個容器。同時,ResourceManager的應用程序管理器會與該容器所在的NodeManager通信,為該應用程序在該容器中啟動一個ApplicationMaster(即圖6-5中的“MRAppMstr”)。③ApplicationMaster被創(chuàng)建后會首先向ResourceManager注冊,從而使得用戶可以通過ResourceManager來直接查看應用程序的運行狀態(tài)。接下來的步驟4~7是具體的應用程序執(zhí)行步驟。3.22.x架構(YARN架構)④ApplicationMaster采用輪詢的方式通過RPC協(xié)議向ResourceManager申請資源。⑤ResourceManager以“容器”的形式向提出申請的ApplicationMaster分配資源,一旦ApplicationMaster申請到資源后,就會與該容器所在的NodeManager進行通信,要求它啟動任務。⑥當ApplicationMaster要求容器啟動任務時,它會為任務設置好運行環(huán)境(包括環(huán)境變量、JAR包、二進制程序等),然后將任務啟動命令寫到一個腳本中,最后通過在容器中運行該腳本來啟動任務。⑦各個任務通過某個RPC協(xié)議向ApplicationMaster匯報自己的狀態(tài)和進度,讓ApplicationMaster可以隨時掌握各個任務的運行狀態(tài),從而可以在任務失敗時重新啟動任務。3.22.x架構(YARN架構)⑧應用程序運行完成后,ApplicationMaster向ResourceManager的應用程序管理器注銷并關閉自己。若ApplicationMaster因故失敗,ResourceManager中的應用程序管理器會監(jiān)測到失敗的情形,然后將其重新啟動,直到所有的任務執(zhí)行完畢。MapReduce編程實踐44.1MapReduce程序編寫步驟(1)Maven項目的pom.xml文件的配置(2)新建Mapper類4.1MapReduce程序編寫步驟(3)新建Reducer類(4)新建程序執(zhí)行主類(5)提交程序到集群4.2MapReduce編寫單詞統(tǒng)計程序4.2MapReduce編寫單詞統(tǒng)計程序4.2MapReduce編寫單詞統(tǒng)計程序4.2MapReduce編寫單詞統(tǒng)計程序4.2MapReduce編寫單詞統(tǒng)計程序4.2MapReduce編寫單詞統(tǒng)計程序本章小結本章主要介紹了分布式計算框架MapReduce,它是Hadoop的一個核心組成框架,概念“Map(映射)”和“Reduce(歸約)”以及它們的主要思想,都是從函數(shù)式編程語言里借用而來的,同時也包含了從矢量編程語言里借來的特性。MapReduce極大地方便了編程人員在不會分布式并行編程的情況下,將自己的程序運行在分布式系統(tǒng)上。包括MapReduce簡介、MapReduce計算模型、MapReduce工作原理、MapReduce編程實踐。通過本章的學習,希望大家能夠熟悉MapReduce的相關內(nèi)容,后續(xù)我們將基于本章介紹的內(nèi)容進行大數(shù)據(jù)技術的進一步學習。第7章數(shù)據(jù)倉庫Hive《大數(shù)據(jù)技術基礎教程》學習目標/Target了解數(shù)據(jù)倉庫Hive的架構原理、數(shù)據(jù)類型和數(shù)據(jù)模型掌握數(shù)據(jù)倉庫Hive的DML和DDL的基本操作掌握數(shù)據(jù)倉庫Hive

JDBC的基本操作章節(jié)概述/

SummaryHive是Hadoop中的一個重要子項目,它利用MapReduce編程技術,實現(xiàn)了部分SQL語句,提供了類SQL的編程接口。Hive的出現(xiàn)極大地推進了Hadoop在數(shù)據(jù)倉庫方面的發(fā)展。hive是基于Hadoop的一個數(shù)據(jù)倉庫工具,用來進行數(shù)據(jù)提取、轉化、加載,本章將簡要介紹Hive簡介、Hive架構原理、Hive數(shù)據(jù)類型及應用、Hive數(shù)據(jù)模型、DDL數(shù)據(jù)庫語言應用、HiveJDBC編程實踐。目錄/Contents01020304Hive簡介Hive架構原理Hive數(shù)據(jù)類型及應用Hive數(shù)據(jù)模型05DDL數(shù)據(jù)庫語言應用06DML數(shù)據(jù)庫語言應用07HiveJDBC訪問Hive簡介7.17.1Hive簡介7.1.1Hive概論Hive是一個基于Hadoop的開源數(shù)據(jù)倉庫工具,用于存儲和處理海量結構化數(shù)據(jù)。它是Facebook2008年8月開源的一個數(shù)據(jù)倉庫框架,它提供了一個被稱為Hive查詢語言(簡稱HiveOL或HOL)的SOL語言,來查詢存儲在Hadoop集群中的數(shù)據(jù)。7.1Hive簡介7.1.1Hive概論Hive不支持OLTP(聯(lián)機事務處理)所需的關鍵功能,而更接近成為一個OLAP(聯(lián)機分析技術)工具。但是由于Hadoop本身的時間開銷很大,并且Hadoop所被設計用來處理的數(shù)據(jù)規(guī)模非常大,因此提交查詢和返回結果是可能具有非常大的延時的,所以Hive并沒有滿足OLAP中的“聯(lián)機”部分,至少目前并沒有滿足。7.1Hive簡介7.1.1Hive概論由于大多數(shù)的數(shù)據(jù)倉庫應用程序是使用基于SQL的關系型數(shù)據(jù)庫實現(xiàn)的,所以Hive降低了將這些應用程序移植到Hadoop上的障礙。用戶如果懂得SQL,那么學習使用Hive將會很容易。如果沒有Hive,那么這些用戶就需要去重新學習新的語言和新的工具后才能進行生產(chǎn)。7.1Hive簡介7.1.2Hive的優(yōu)缺點由于Hive使用類SQL查詢語法,最大限度的實現(xiàn)了和SQL標準的兼容,大大降低了傳統(tǒng)數(shù)據(jù)分析人員學習的曲線使用JDBC接口/ODBC接口,開發(fā)人員更易開發(fā)應用Hive以MR作為計算引擎、HDFS作為存儲系統(tǒng),為超大數(shù)據(jù)集設計的計算和擴展能力具有統(tǒng)一的元數(shù)據(jù)管理(Derby、MySql等),并可與Pig、Presto等共享Hive還支持用戶自定義函數(shù),用戶可以根據(jù)自己的需求來實現(xiàn)自己的函數(shù)Hive的優(yōu)點7.1Hive簡介7.1.2Hive的優(yōu)缺點由于Hive基于MR計算引擎,涉及到過多的磁盤I/O,因此hive的延遲比較高,比較適用用大量數(shù)據(jù)的統(tǒng)計分析,主要用于離線統(tǒng)計分析,對于實時要求不高的場合。Hive的HQL表達能力有限,導致迭代式算法無法表達,同時由于MapReduce數(shù)據(jù)處理流程的限制,Hive不能勝任數(shù)據(jù)挖掘方面的工作。一般而言,Hive自動生成的MapReduce作業(yè),通常情況下不夠智能化,因而效率比較低,調優(yōu)比較困難,粒度較粗。Hive的缺點7.1Hive簡介7.1.3Hive和傳統(tǒng)數(shù)據(jù)庫比較Hive和數(shù)據(jù)庫除了擁有類似的查詢語言,再無類似之處。Hive構架原理7.27.2Hive構架原理作為基于Hadoop的主要數(shù)據(jù)倉庫解決方案,HiveSQL是主要的交互接口,實際的數(shù)據(jù)保存在HDFS文件中,真正的計算和執(zhí)行則由MapReduce完成,而它們之間的橋梁是Hive引擎。7.2Hive構架原理7.2.1用戶接口shell/CLI,jdbc/odbc,webuicommandlineinterfaceCLI,shell終端命令行,采用交互式使用hive命令行與hive進行交互JDBC/ODBC,是hive基于JDBC提供的客戶端,用戶通過它連接至hiveserver服務WebUI,通過瀏覽器訪問hive7.2Hive構架原理7.2.2元數(shù)據(jù)Metastore表所屬數(shù)據(jù)庫(默認是default)、表的擁有者、表名及表的注釋、字段及字段的注釋、列/分區(qū)字段、表的類型(是否是外部表)、表數(shù)據(jù)所在目錄等。而表里面具體的內(nèi)容則在HDFS里,很多框架比如Atlas就是監(jiān)控元數(shù)據(jù)庫matestore中的表信息來實現(xiàn)元數(shù)據(jù)管理。元數(shù)據(jù)默認存儲在自帶的derby數(shù)據(jù)庫(小巧但是很多缺點,比如不支持并發(fā)連接,可以理解為輕量級的MySQL數(shù)據(jù)庫)中,一般都采用MySQL存儲Metastore(即換成用MySQL來存元數(shù)據(jù))。7.2Hive構架原理7.2.3驅動器:DriverHive通過給用戶提供的一系列交互接口,接收到用戶的指令(SQL),使用自己的Driver,結合元數(shù)據(jù)(MetaStore),將這些指令翻譯成MapReduce,提交到Hadoop中執(zhí)行,最后,將執(zhí)行返回的結果輸出到用戶交互接口。7.2Hive構架原理7.2.3驅動器:Driver(1)解析器(SQLParser):將SQL字符串轉換成抽象語法樹AST,這一步一般都用第三方工具庫完成,比如antlr;對AST進行語法分析,比如表是否存在、字段是否存在、SQL語義是否有誤。(2)編譯器(PhysicalPlan):將AST編譯生成邏輯執(zhí)行計劃。Hive的數(shù)據(jù)存儲在HDFS中,大部分的查詢由MapReduce完成7.2Hive構架原理7.2.3驅動器:Driver(3)優(yōu)化器(QueryOptimizer):對邏輯執(zhí)行計劃進行優(yōu)化。(4)執(zhí)行器(Execution):把邏輯執(zhí)行計劃轉換成可以運行的物理計劃。Hive數(shù)據(jù)類型及應用7.37.3Hive數(shù)據(jù)類型及應用離線分析系統(tǒng)7.3.1數(shù)據(jù)類型(1)簡單類型HIVEMySQLJAVA長度例子TINYINTTINYINTbyte1byte有符號整數(shù)2SMALINTSMALINTshort2byte有符號整數(shù)20INTINTint4byte有符號整數(shù)20BIGINTBIGINTlong8byte有符號整數(shù)20BOOLEAN無boolean布爾類型,true或者falseTRUEFALSEFLOATFLOATfloat單精度浮點數(shù)3.14159DOUBLEDOUBLEdouble雙精度浮點數(shù)3.14159STRINGVARCHARstring字符系列??梢灾付ㄗ址?梢允褂脝我柣蛘唠p引號。‘nowisthetime’“forallgoodmen”TIMESTAMPTIMESTAMP

時間類型

BINARYBINARY

字節(jié)數(shù)組

Hive基本數(shù)據(jù)類型7.3Hive數(shù)據(jù)類型及應用離線分析系統(tǒng)7.3.1數(shù)據(jù)類型(2)復雜類型STRUCT:和C語言中的struct類似,都可以通過“點”符號訪問元素內(nèi)容。例如,如果某個列的數(shù)據(jù)類型是STRUCT{firstSTRING,lastSTRING},那么第1個元素可以通過字段.first來引用,例如struct<street:string,city:string>。7.3Hive數(shù)據(jù)類型及應用離線分析系統(tǒng)7.3.1數(shù)據(jù)類型(2)復雜類型MAP:MAP是一組鍵-值對元組集合,使用數(shù)組表示法可以訪問數(shù)據(jù)。例如,如果某個列的數(shù)據(jù)類型是MAP,其中鍵->值對是’first’->’John’和’last’->’Doe’,那么可以通過字段名[‘last’]獲取最后一個元素,例如map<string,int>。7.3Hive數(shù)據(jù)類型及應用離線分析系統(tǒng)7.3.1數(shù)據(jù)類型(2)復雜類型ARRAY數(shù)組:是一組具有相同類型和名稱的變量的集合。這些變量稱為數(shù)組的元素,每個數(shù)組元素都有一個編號,編號從零開始。例如:數(shù)組值為[‘John’,‘Doe’],那么第2個元素可以通過數(shù)組名[1]進行引用。7.3Hive數(shù)據(jù)類型及應用離線分析系統(tǒng)7.3.1數(shù)據(jù)類型(3)案例分析1)某表有如用JSON格式來表示其數(shù)據(jù)結構的內(nèi)容。2)基于上述數(shù)據(jù)結構,我們在Hive里創(chuàng)建對應的表,并導入數(shù)據(jù)。創(chuàng)建本地測試文件test.txt,內(nèi)容如下:wukong,bingbing_lili,xiaobai:18_xiaohei:19,huaguoshan_jiangsu_10010zhubajie,caicai_susu,xiaohong:18_xiaolan:19,lianyundong_gaolaozhuang_100117.3Hive數(shù)據(jù)類型及應用離線分析系統(tǒng)7.3.1數(shù)據(jù)類型(3)案例分析3)Hive上創(chuàng)建測試表test,具體的代碼如下:createtabletest(namestring,friendsarray<string>,childrenmap<string,int>,addressstruct<street:string,city:string,email:int>)rowformatdelimitedfieldsterminatedby','collectionitemsterminatedby'_'mapkeysterminatedby':'linesterminatedby'\n';7.3Hive數(shù)據(jù)類型及應用離線分析系統(tǒng)7.3.1數(shù)據(jù)類型(3)案例分析4)導入文本數(shù)據(jù)到測試表0:jdbc:hive2://hadoop105:10000>loaddatalocalinpath'/opt/module/hive-3.1.2/datas/test.txt'intotabletest;5)訪問三種集合列里的數(shù)據(jù),以下分別是ARRAY,MAP,STRUCT的訪問方式。0:jdbc:hive2://hadoop105:10000>selectfriends[1],children['xiaobai'],address.cityfromtestwherename="wukong";7.3Hive數(shù)據(jù)類型及應用離線分析系統(tǒng)7.3.2類型轉化隱式類型轉換規(guī)則如下:任何整數(shù)類型都可以隱式地轉換為一個范圍更廣的類型,如TINYINT可以轉換成INT,INT可以轉換成BIGINT。所有整數(shù)類型、FLOAT和STRING類型都可以隱式地轉換成DOUBLE。TINYINT、SMALLINT、INT都可以轉換為FLOAT。BOOLEAN類型不可以轉換為任何其它的類型。7.3Hive數(shù)據(jù)類型及應用離線分析系統(tǒng)7.3.2類型轉化可以使用CAST操作顯示地進行數(shù)據(jù)類型轉換:0:jdbc:hive2://hadoop105:10000>select'1'+2,cast('1'asint)+2;Hive的數(shù)據(jù)模型7.47.4Hive的數(shù)據(jù)模型Hive中包含以下數(shù)據(jù)模型:Table、Partition、Bucket、ExternalTable。(1)表(Table)Hive中的Table和關系型數(shù)據(jù)庫中的Table,在概念上是類似的,每一個Table在Hive中都有一個相應的HDFS中的目錄存儲數(shù)據(jù)。例如,一個表pvs,它在HDFS中的路徑為:/wh/pvs,其中,wh是在hive-site.xml中由${hive.metastore.warehouse.dir}指定的數(shù)據(jù)倉庫的目錄,所有的Table數(shù)據(jù)(不包括ExternalTable)都保存在這個目錄中。7.4Hive的數(shù)據(jù)模型Hive中包含以下數(shù)據(jù)模型:Table、Partition、Bucket、ExternalTable。(2)分區(qū)(Partition)Partition類似于關系型數(shù)據(jù)庫中的Partition列的密集索引,但是Hive中Partition的組織方式和數(shù)據(jù)庫中的有很大不同。在Hive中,表中的一個Partition對應于表下的一個目錄,所有的Partition的數(shù)據(jù)都存儲在對應的目錄中。分區(qū)表實際上就是對應一個HDFS文件系統(tǒng)上的獨立的文件夾,該文件夾下是該分區(qū)所有的數(shù)據(jù)文件。Hive中的分區(qū)就是分目錄,把一個大的數(shù)據(jù)集根據(jù)業(yè)務需要分割成小的數(shù)據(jù)集。在查詢時通過WHERE子句中的表達式選擇查詢所需要的指定的分區(qū),這樣的查詢效率會提高很多。7.4Hive的數(shù)據(jù)模型Hive中包含以下數(shù)據(jù)模型:Table、Partition、Bucket、ExternalTable。(3)分桶表(Bucket)分區(qū)提供一個隔離數(shù)據(jù)和優(yōu)化查詢的便利方式。不過,并非所有的數(shù)據(jù)集都可形成合理的分區(qū)。對于一張表或者分區(qū),Hive可以進一步組織成桶,也就是更為細粒度的數(shù)據(jù)范圍劃分。分桶是將數(shù)據(jù)集分解成更容易管理的若干部分的另一個技術。分區(qū)針對的是數(shù)據(jù)的存儲路徑;分桶針對的是數(shù)據(jù)文件。7.4Hive的數(shù)據(jù)模型Hive中包含以下數(shù)據(jù)模型:Table、Partition、Bucket、ExternalTable。(4)外部表(ExternalTable)ExternalTable指向已經(jīng)在HDFS中存在的數(shù)據(jù)目錄,它可以創(chuàng)建Table和Partition,表中數(shù)據(jù)假設是用Hive兼容的格式。它和Table在元數(shù)據(jù)的組織上是相同的,而實際數(shù)據(jù)的存儲則有較大的差異。Table的創(chuàng)建過程和數(shù)據(jù)加載過程是兩個過程(但這兩個過程可以在同一個語句中完成)。在加載數(shù)據(jù)的過程中,實際數(shù)據(jù)會被移動到數(shù)據(jù)倉庫目錄中;之后對數(shù)據(jù)的訪問將會直接在數(shù)據(jù)倉庫目錄中完成。刪除表時,表中的數(shù)據(jù)和元數(shù)據(jù)將會被同時刪除。DDL數(shù)據(jù)庫定義語言應用7.57.5DDL數(shù)據(jù)庫定義語言應用1.創(chuàng)建數(shù)據(jù)庫2.查看數(shù)據(jù)庫7.5DDL數(shù)據(jù)庫定義語言應用3.切換數(shù)據(jù)庫4.刪除數(shù)據(jù)庫hive>dropdatabaseifexistsDATABASES;7.5DDL數(shù)據(jù)庫定義語言應用5.創(chuàng)建表創(chuàng)建一個外部表,表有字段emp,ename,job,mgr,hiredate等信息。hive>createexternaltableifnotexistsdefault.emp(empnoint,enamestring,jobstring,mgrint,hiredatestring,saldouble,commdouble,deptnoint)rowformatdelimitedfieldsterminatedby'\t';7.5DDL數(shù)據(jù)庫定義語言應用6.查看所有表7.查看表信息7.5DDL數(shù)據(jù)庫定義語言應用8.查看拓展描述信息9.刪除表hive>droptableemp;DML數(shù)據(jù)操作語言應用7.67.6DML數(shù)據(jù)操作語言應用Load語法結構LOADDATA[LOCAL]INPATH'filepath'[OVERWRITE]INTOTABLEtablename[PARTITION(partcol1=val1,partcol2=val2...)]說明:Load操作只是單純的復制/移動操作,將數(shù)據(jù)文件移動到Hive表對應的位置。filepath:相對路徑,例如:project/data1絕對路徑,例如:/user/hive/project/data1包含模式的完整URI,例如:hdfs://namenode:9000/user/hive/project/data17.6DML數(shù)據(jù)操作語言應用LOCAL如果指定了LOCAL,那么:load命令會去查找本地文件系統(tǒng)中的filepath。如果發(fā)現(xiàn)是相對路徑,則路徑會被解釋為相對于當前用戶的當前路徑。load命令會將filepath中的文件復制到目標文件系統(tǒng)中。目標文件系統(tǒng)由表的位置屬性決定。被復制的數(shù)據(jù)文件移動到表的數(shù)據(jù)對應的位置。如果沒有指定LOCAL關鍵字,如果filepath指向的是一個完整的URI,hive會直接使用這個URI。否則:如果沒有指定schema或者authority,Hive會使用在hadoop配置文件中定義的schema和authority,

指定了Namenode的URI。如果路徑不是絕對的,Hive相對于/user/進行解釋。Hive會將filepath中指定的文件內(nèi)容移動到table(或者partition)所指定的路徑中。7.6DML數(shù)據(jù)操作語言應用LOCAL創(chuàng)建一張表hive(default)>createtablestudent(idstring,namestring)rowformatdelimitedfieldsterminatedby'\t';加載本地數(shù)據(jù)(LOCAL關鍵字)hive(default)>loaddatalocalinpath'/home/hadoop/Downloads/dates/students.txt'intotabledefault.student;7.6DML數(shù)據(jù)操作語言應用OVERWRITE如果使用了OVERWRITE關鍵字,則目標表(或者分區(qū))中的內(nèi)容(如果有)會被刪除,然后再將filepath指向的文件/目錄中的內(nèi)容添加到表/分區(qū)中。如果目標表(分區(qū))已經(jīng)有一個文件,并且文件名和filepath中的文件名沖突,那么現(xiàn)有的文件會被新文件所替代。7.6DML數(shù)據(jù)操作語言應用OVERWRITE加載HDFS文件系統(tǒng)數(shù)據(jù)hive(default)>loaddatainpath'/user/atguigu/hive/student.txt'intotabledefault.student;加載數(shù)據(jù)覆蓋表中已有的數(shù)據(jù)hive(default)>loaddatainpath'/user/atguigu/hive/student.txt'overwriteintotabledefault.student;7.6DML數(shù)據(jù)操作語言應用Insert將查詢結果插入Hive表語法結構:Standardsyntax:INS

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論