Hadoop大數(shù)據(jù)平臺構(gòu)建與應(yīng)用教程 課件 項目八 Hive數(shù)據(jù)倉庫操作_第1頁
Hadoop大數(shù)據(jù)平臺構(gòu)建與應(yīng)用教程 課件 項目八 Hive數(shù)據(jù)倉庫操作_第2頁
Hadoop大數(shù)據(jù)平臺構(gòu)建與應(yīng)用教程 課件 項目八 Hive數(shù)據(jù)倉庫操作_第3頁
Hadoop大數(shù)據(jù)平臺構(gòu)建與應(yīng)用教程 課件 項目八 Hive數(shù)據(jù)倉庫操作_第4頁
Hadoop大數(shù)據(jù)平臺構(gòu)建與應(yīng)用教程 課件 項目八 Hive數(shù)據(jù)倉庫操作_第5頁
已閱讀5頁,還剩99頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

項目八Hive數(shù)據(jù)倉庫操作CONTENTS目錄01

項目導(dǎo)讀02

知識目標03

技能目標04

素質(zhì)(思政)目標05

任務(wù)一Hive安裝與配置CONTENTS目錄06

任務(wù)三Hive分區(qū)表操作07

任務(wù)四Hive桶表操作08

項目總結(jié)09

項目考核項目導(dǎo)讀01項目導(dǎo)讀Hive:HadoopDataWarehouse

Hive是建立在Hadoop文件系統(tǒng)上的數(shù)據(jù)倉庫,它提供了一系列工具,能夠?qū)Υ鎯υ贖DFS中的數(shù)據(jù)進行數(shù)據(jù)提取、轉(zhuǎn)換和加載(ETL),這是一種可以存儲、查詢和分析存儲在Hadoop中的大規(guī)模數(shù)據(jù)的工具Hive:SQLforMapReduce

Hive定義了簡單的類SQL查詢語言,稱為HQL,它可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)表,允許熟悉SQL的用戶查詢數(shù)據(jù),也允許熟悉MapReduce的開發(fā)者開發(fā)自定義的mapper和reducer來處理復(fù)雜的分析工作,相對于Java代碼編寫的MapReduce來說,Hive的優(yōu)勢更加明顯Hive與數(shù)據(jù)庫的區(qū)別

由于Hive采用了SQL的查詢語言HQL,因此很容易將Hive理解為數(shù)據(jù)庫。其實從結(jié)構(gòu)上來看,Hive和數(shù)據(jù)庫除了擁有類似的查詢語言,再無類似之處知識目標02知識目標

了解數(shù)據(jù)倉庫的定義

了解Hive的定義

了解Hive的工作原理

熟悉Hive安裝模式

熟悉Hive的管理方式

熟悉Hive數(shù)據(jù)模型操作技能目標03技能目標

掌握Hive數(shù)據(jù)倉庫的結(jié)構(gòu)及數(shù)據(jù)模型

掌握Hive的系統(tǒng)架構(gòu)及數(shù)據(jù)模型

掌握Hive的安裝與配置

掌握Hive內(nèi)部表外部表操作

掌握Hive分區(qū)表操作

掌握Hive分桶表操作素質(zhì)(思政)目標04素質(zhì)(思政)目標培養(yǎng)嚴謹細致的工匠精神、不驕不躁的工匠心態(tài)厚植技術(shù)報國夢培養(yǎng)網(wǎng)絡(luò)安全意識、培養(yǎng)保密意識任務(wù)一Hive安裝與配置05任務(wù)描述

Hive數(shù)據(jù)倉庫準備與學(xué)習(xí)在學(xué)習(xí)Hive數(shù)據(jù)倉庫之前,我們須先做一些軟件準備和知識儲備,了解數(shù)據(jù)倉庫以及Hive的定義,掌握Hive安裝與配置任務(wù)準備01全班學(xué)生以4人左右為一組,各組選出組長。請組長組織組員查找相關(guān)資料,并組織討論和匯總02問題1:什么是數(shù)據(jù)倉庫?什么是Hive03問題2:數(shù)據(jù)倉庫的數(shù)據(jù)模型有哪些?Hive的系統(tǒng)架構(gòu)是什么04問題3:Hive的環(huán)境配置有哪些?如何配置05問題4:Hive的基本操作有哪些?如何操作必備知識技能Hive與Hadoop生態(tài)系統(tǒng)中其他組件的關(guān)系HadoopEcosystemOverviewHDFS作為高可靠的底層存儲,用來存儲海量數(shù)據(jù);MapReduce對這些海量數(shù)據(jù)進行批處理,實現(xiàn)高性能計算;Hive架構(gòu)在MapReduce、HDFS之上,其自身并不存儲和處理數(shù)據(jù),需要分別借助于HDFS和MapReduce實現(xiàn)數(shù)據(jù)的存儲和處理,用HiveQLHQL語句編寫的處理邏輯,最終都要轉(zhuǎn)化為MapReduce任務(wù)來運行;Pig可以作為Hive的替代工具,是一種數(shù)據(jù)流語言和運行環(huán)境,適合用于在Hadoop平臺上查詢半結(jié)構(gòu)化數(shù)據(jù)集,常用于ETL過程的一部分,即將外部數(shù)據(jù)裝載到Hadoop集群中,然后轉(zhuǎn)換為用戶需要的數(shù)據(jù)格式;HBase是一個面向列的、分布式的、可伸縮的數(shù)據(jù)庫,它可以提供數(shù)據(jù)的實時訪問功能,而Hive只能處理靜態(tài)數(shù)據(jù),主要是BI報表數(shù)據(jù),就設(shè)計初衷而言,在Hadoop上設(shè)計Hive,是為了減少復(fù)雜MapReduce應(yīng)用程序的編寫工作,在Hadoop上設(shè)計HBase則是為了實現(xiàn)對數(shù)據(jù)的實時訪問,所以,HBase與Hive的功能是互補的,它實現(xiàn)了Hive不能提供的功能Hive基本操作HiveQLHQL基本操作介紹HiveQLHQL是Hive的查詢語言,和SQL語言比較類似,對Hive的操作都是通過編寫HiveQLHQL語句來實現(xiàn)的,接下來介紹一下Hive中常用的幾個基本操作Hive基本操作:1.create:創(chuàng)建數(shù)據(jù)庫、表、視圖

創(chuàng)建數(shù)據(jù)庫

①創(chuàng)建數(shù)據(jù)庫hive

hive>createdatabasehive

②創(chuàng)建數(shù)據(jù)庫hive,因為hive已經(jīng)存在,所以會拋出異常,加上ifnotexists關(guān)鍵字,則不會拋出異常

hive>createdatabaseifnotexistshiveHive基本操作:1.create:創(chuàng)建數(shù)據(jù)庫、表、視圖

創(chuàng)建表①在hive數(shù)據(jù)庫中,創(chuàng)建表usr,含三個屬性字段id,name,agehive>usehivehive>createtableifnotexistsusr(idbigint,namestring,ageint)②在hive數(shù)據(jù)庫中,創(chuàng)建表usr,含三個字段id,name,age,存儲路徑為“usr/local/hive/warehouse/hive/usr”hive>createtableifnotexistsusr(idbigint,namestring,ageint)location‘usr/local/hive/warehouse/hive/usr’③在hive數(shù)據(jù)庫中,創(chuàng)建外部表usr,含三個字段id,name,age,可以讀取路徑“usr/local/data”下以“”分隔的數(shù)據(jù)hive>createexternaltableifnotexistshive.usr(idbigint,namestring,ageint)>rowformatdelimitedfieldsterminatedbyLocation‘usr/local/data’④在hive數(shù)據(jù)庫中,創(chuàng)建分區(qū)表usr,含三個字段id,name,age,還存在分區(qū)字段sexhive>createtablehive.usr(idbigint,namestring,ageint)partitionedby(sexboolean)⑤在hive數(shù)據(jù)庫中,創(chuàng)建分區(qū)表usr1,它通過復(fù)制表usr得到hive>usehivehive>createtableifnotexistsusr1likeusrHive基本操作:1.create:創(chuàng)建數(shù)據(jù)庫、表、視圖

創(chuàng)建視圖

①創(chuàng)建視圖little_usr,只包含usr表中id,age字段

hive>createviewlittle_usrasselectid,agefromusrHive基本操作:2.drop:刪除數(shù)據(jù)庫、表、視圖

刪除數(shù)據(jù)庫①刪除數(shù)據(jù)庫hive,如果不存在會出現(xiàn)警告hive>dropdatabasehive②刪除數(shù)據(jù)庫hive,因為有ifexists關(guān)鍵字,即使不存在也不會拋出異常hive>dropdatabaseifnotexistshive③刪除數(shù)據(jù)庫hive,加上cascade關(guān)鍵字,可以刪除當前數(shù)據(jù)庫和該數(shù)據(jù)庫中的表hive>dropdatabaseifnotexistshivecascade

刪除表①刪除表usr,如果是內(nèi)部表,元數(shù)據(jù)和實際數(shù)據(jù)都會被刪除;如果是外部表,只刪除元數(shù)據(jù),不刪除實際數(shù)據(jù)hive>droptableifexistsusr

刪除視圖①刪除視圖little_usrhive>dropviewifexistslittle_usrHive基本操作:3.alter:修改數(shù)據(jù)庫、表、視圖

修改數(shù)據(jù)庫

①為hive數(shù)據(jù)庫設(shè)置dbproperties鍵值對屬性值來描述數(shù)據(jù)庫屬性信息

hive>alterdatabasehivesetdbproperties(?edited-by?=?lily?)Hive基本操作:3.alter:修改數(shù)據(jù)庫、表、視圖(2)修改表

①重命名表usr為userhive>altertableusrrenametousershowtablesaltertableuserrenametousrshowtables

②為表usr增加新分區(qū)hive>altertableusraddifnotexistspartition(age=10)hive>altertableusraddifnotexistspartition(age=20)

③刪除表usr中分區(qū)hive>altertableusrdropifexistspartition(age=10)Hive基本操作:3.alter:修改數(shù)據(jù)庫、表、視圖

④把表usr中列名name修改為username,并把該列置于age列后hive>altertableusrchangenameusernamestringafterage⑤在對表usr分區(qū)字段之前,增加一個新列sexhive>altertableusraddcolumns(sexboolean)⑥刪除表usr中所有字段并重新指定新字段newid,newname,newagehive>altertableusrreplacecolumns(newidbigint,newnamestring,newageint)⑦為usr表設(shè)置TBLPROPERTIES鍵值對屬性值來描述表的屬性信息hive>ALTERTABLEusrSETTBLPROPERTIES('notes'='thecolumnsinusrmaybenullexceptid')Hive基本操作:3.alter:修改數(shù)據(jù)庫、表、視圖(3)修改視圖

①修改little_usr視圖元數(shù)據(jù)中的tblproperties屬性信息hive>ALTERVIEWlittle_usrSETTBLPROPERTIES('create_at'='refertotimestamp')Hive基本操作:4.show:查看數(shù)據(jù)庫、表、視圖

查看數(shù)據(jù)庫①查看Hive中包含的所有數(shù)據(jù)庫hive>showdatabases②查看Hive中以h開頭的所有數(shù)據(jù)庫hive>showdatabaseslike"h.*"

查看表和視圖①查看數(shù)據(jù)庫hive中所有表和視圖hive>usehivehive>showtables②查看數(shù)據(jù)庫hive中以u開頭的所有表和視圖hive>showtablesinhivelike"u.*"Hive基本操作:5.describe:描述數(shù)據(jù)庫、表、視圖

描述數(shù)據(jù)庫①查看數(shù)據(jù)庫hive的基本信息,包括數(shù)據(jù)庫中文件位置信息等describedatabasehive②查看數(shù)據(jù)庫hive的詳細信息,包括數(shù)據(jù)庫的基本信息及屬性信息等describedatabaseextendedhive

描述表和視圖①查看表usr和視圖little_usr的基本信息,包括列信息等hive>describehive.usrhive>describehive.little_usr②查看表usr和視圖little_usr的詳細信息,包括列信息、位置信息、屬性信息等hive>describeextendedhive.usrhive>describeextendedhive.little_usr③查看表usr中列id的信息hive>describeextendedhive.usr.idHive基本操作:6.load:向表中裝載數(shù)據(jù)

①把目錄"/usr/local/data"下的數(shù)據(jù)文件中的數(shù)據(jù)裝載進usr表并覆蓋原有數(shù)據(jù)LoadDataintoHiveTablehive>loaddatalocalinpath"/usr/local/data"overwriteintotableusr②把目錄"/usr/local/data"下的數(shù)據(jù)文件中的數(shù)據(jù)裝載進usr表不覆蓋原有數(shù)據(jù)LoadDataintoHiveTablehive>loaddatalocalinpath"/usr/local/data"intotableusr加載數(shù)據(jù)到usr表③把分布式文件系統(tǒng)目錄"hdfs://master_server/usr/local/data"下的數(shù)據(jù)文件數(shù)據(jù)裝載進usr表并覆蓋原有數(shù)據(jù)HiveDataLoadhive>loaddatainpath"hdfs://master_server/usr/local/data"overwriteintotableusrHive基本操作

select:查詢表中數(shù)據(jù)該命令和SQL語句完全相同這里不再贅述Hive基本操作:8.insert:向表中插入數(shù)據(jù)或從表中導(dǎo)出數(shù)據(jù)

①向表usr1中插入來自usr表的數(shù)據(jù)并覆蓋原有數(shù)據(jù)

hive>insertoverwritetableusr1

>select*fromusrwhereage=10

②向表usr1中插入來自usr表的數(shù)據(jù)并追加在原有數(shù)據(jù)后

hive>insertintotableusr1

>select*fromusrwhereage=10Hive應(yīng)用實例WordCountHive應(yīng)用實例WordCount

HiveWordCount示例現(xiàn)在我們通過一個實例——詞頻統(tǒng)計,來深入學(xué)習(xí)一下Hive的具體使用。首先,需要創(chuàng)建一個需要分析的輸入數(shù)據(jù)文件,然后編寫HiveQLHQL語句實現(xiàn)WordCount算法,在Linux下實現(xiàn)步驟如下創(chuàng)建input目錄,其中input為輸入目錄。命令如下$cd/usr/local/hadoop$mkdirinput在input目錄中創(chuàng)建兩個測試文件file1.txt和file2.txt,命令如下$cd/usr/local/hadoop/inputHive應(yīng)用實例WordCount

$echo"helloworld">file1.txt單擊此處添加項正文

$echo"hellohadoop">file2.txt單擊此處添加項正文

HiveWordCount實現(xiàn)(3)進入hive命令行界面,編寫HiveQLHQL語句實現(xiàn)WordCount算法,命令如下

$hive單擊此處添加項正文

hive>createtabledocs(linestring)單擊此處添加項正文

HiveDataLoadhive>loaddatainpath'input'overwriteintotabledocsHive應(yīng)用實例WordCount

hive>createtableword_countas單擊此處添加項正文

selectword,count(1)ascountfrom單擊此處添加項正文

SQLWordSplitting(selectexplode(split(line,''))aswordfromdocs)w

groupbyword單擊此處添加項正文

orderbyword單擊此處添加項正文任務(wù)實施:一、嵌入式安裝(不推薦)

步驟1把hive安裝包“apache-hive-1.2.1-bin.tar.gz”拷貝到“usr/local/src”路徑下面步驟2:解壓文件,在終端命令窗口執(zhí)行如下命令tar-zxvfapache-hive-1.2.1-bin.tar.gz步驟3:進入hive主目錄,在終端命令窗口執(zhí)行如下命令cdapache-hive-1.2.1-bin步驟4:修改bin/hive配置文件,將以“sparkAssemblyPath”開頭那行改成如下任務(wù)實施:一、嵌入式安裝(不推薦)

sparkAssemblyPath=`ls${SPARK_HOME}/jars/*.jar`步驟5:把jar包拷貝到hadoop路徑,在終端命令窗口執(zhí)行如下命令復(fù)制JLine庫至HadoopYARN目錄cp/usr/local/src/apache-hive-1.2.1-bin/lib/jline-2.12.jar/usr/local/src/hadoop-2.7.3/share/hadoop/yarn/libSPARK_HOME}/jars/*.jar步驟6:進入hive主目錄,啟動hive,在終端命令窗口執(zhí)行如下命令bin/hive任務(wù)實施:二、本地和遠程模式安裝

HiveMySQL元數(shù)據(jù)配置本地和遠程模式安裝配置方式大致相同,本質(zhì)上是將Hive默認的元數(shù)據(jù)存儲介質(zhì)由自帶的Derby數(shù)據(jù)庫替換為MySQL數(shù)據(jù)庫,這樣無論在任何目錄下以任何方式啟動Hive,只要連接的是同一臺Hive服務(wù),那么所有節(jié)點訪問的元數(shù)據(jù)信息是一致的,從而實現(xiàn)元數(shù)據(jù)的共享首先安裝MySQL,這一步驟在之前已經(jīng)安裝完畢步驟1進入hive修改配置文件。進入hive主目錄下的conf目錄,將hive-env.sh.template文件拷貝并重命名為hive-env.sh,在終端命令窗口執(zhí)行如下命令cd/usr/local/src/apache-hive-1.2.1-bincphive-env.sh.templatehive-env.shvimhive-env.sh任務(wù)實施:二、本地和遠程模式安裝

步驟2編輯文件hive-env.sh。在hive-env.sh文件最后面,添加Hadoop環(huán)境變量exportHADOOP_HOME=/usr/local/src/hadoop-2.7.3步驟3:在conf目錄下新建配置文件hive-site.xml,輸入以下內(nèi)容XMLDocumentDeclaration<?xmlversion="1.0"encoding="UTF-8"standalone="no"ConfigurationXSL<?xml-stylesheettype="text/xsl"href="configuration.xsl"<configuration>任務(wù)實施:二、本地和遠程模式安裝

01<property>單擊此處添加項正文

02JDOConnectionURLConfiguration<name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>

03JDBCConnectString<description>MySql連接協(xié)議JDBCconnectstringforaJDBCmetastore</description>

04</property>單擊此處添加項正文

05<property>單擊此處添加項正文

06ConnectionDriverNameOption<name>javax.jdo.option.ConnectionDriverName</name>任務(wù)實施:二、本地和遠程模式安裝

<value>com.mysql.jdbc.Driver</value>JDBCDriverClassName<description>JDBC連接驅(qū)動DriverclassnameforaJDBCmetastore</description></property><property><name>javax.jdo.option.ConnectionUserName</name><value>root</value>任務(wù)實施:二、本地和遠程模式安裝

MetastoreUsername<description>用戶名usernametouseagainstmetastoredatabase</description></property><property><name>javax.jdo.option.ConnectionPassword</name><value>root</value>MetastoreDatabasePassword<description>密碼passwordtouseagainstmetastoredatabase</description>任務(wù)實施:二、本地和遠程模式安裝</property>

單擊此處添加項正文</configuration>

單擊此處添加項正文步驟4

安裝MySQL連接jar包。將mysql-connector-java-5.1.27-bin.jar這個jar包,拷貝到hive的lib目錄下步驟5

登錄進MySQL,新建一個名為“hive”的數(shù)據(jù)庫,用來保存hive的元數(shù)據(jù)。在終端命令窗口輸入如下命令mysql-uroot-p

單擊此處添加項正文createdatabasehive

單擊此處添加項正文任務(wù)實施:二、本地和遠程模式安裝

exit單擊此處添加項正文

步驟6:配置環(huán)境變量,在終端命令窗口輸入如下命令單擊此處添加項正文

vim/etc/profile單擊此處添加項正文

編輯profile文件,在文件末尾增加以下內(nèi)容單擊此處添加項正文

#hive單擊此處添加項正文

HiveHomeExportexportHIVE_HOME=/usr/local/src/apache-hive-1.2.1-bin任務(wù)實施:二、本地和遠程模式安裝

exportPATH=$PATH:${HIVE_HOME}/bin保存并退出,然后運行如下命令使得配置立即生效source/etc/profile步驟7hive是基于Hadoop的數(shù)據(jù)倉庫,會把用戶輸入的查詢語句自動轉(zhuǎn)換成MapReduce任務(wù)來執(zhí)行,并把結(jié)果返回給用戶。因此,啟動hive之前,需要先啟動Hadoop集群,在Hadoop主目錄下,執(zhí)行如下命令sbin/start-dfs.shsbin/start-yarn.sh任務(wù)實施:二、本地和遠程模式安裝

然后再切換到hive主目錄,執(zhí)行如下命令啟動hivehive小提示如果使用遠程模式的安裝方式,只需要將hive-site.xml配置文件中的localhost,修改為具有MySQL服務(wù)的節(jié)點即可,這樣無論用戶通過什么路徑下啟動Hive客戶端,都可以訪問相同的元數(shù)據(jù)信息。如果出現(xiàn)Hivemetastoredatabaseisnotinitialized的錯誤,原因是曾經(jīng)安裝過hive或MySQL,導(dǎo)致版本或者配置不一致。輸入以下命令即可解決schematool-dbTypemysql-initSchema任務(wù)二Hive內(nèi)部表外部表操作任務(wù)工單:任務(wù)描述

HiveDataWarehouseToolHive是建立在Hadoop之上的數(shù)據(jù)倉庫工具,它提供了類似于SQL的查詢語言(HiveQLHQL),為了方便地進行數(shù)據(jù)分析和處理。在Hive中,我們可以創(chuàng)建內(nèi)部表(InternalTable)和外部表(ExternalTable)來管理數(shù)據(jù)任務(wù)工單:任務(wù)準備全班學(xué)生以4人左右為一組,各組選出組長。請組長組織組員查找相關(guān)資料,并組織討論和匯總問題1:Hive內(nèi)部表有什么作用問題2:Hive外部表有什么作用問題3:Hive內(nèi)部表外部表區(qū)別是什么問題4:Hive內(nèi)部表外部表優(yōu)缺點是什么必備知識技能:一、Hive內(nèi)部表

切換并操作數(shù)據(jù)倉庫完成創(chuàng)建數(shù)據(jù)倉庫后,使用命令usetest01切換到新創(chuàng)建的test01數(shù)據(jù)倉庫,接下來就可以在數(shù)據(jù)庫中進行數(shù)據(jù)表的創(chuàng)建、修改等相關(guān)操作創(chuàng)建表語法格式如下CREATETABLESyntaxCREATE[EXTERNAL]TABLE[IFNOTEXISTS]table_name([col_namedata_type[COMMENTcol_comment],][COMMENTtable_comment]PartitionedBy[PARTITIONEDBY(col_namedata_type[COMMENTcol_comment],...)]必備知識技能:一、Hive內(nèi)部表

[CLUSTEREDBY(col_name,col_name,...)您未提供具體的待提煉正文,因此無法進行標題提煉。請?zhí)峁┮欢尉唧w的文本以便我能夠幫助您提煉標題。例如:“如何有效提高團隊協(xié)作效率”,我可以提煉為“團隊協(xié)作效率提升”。請嘗試再次提交需要提煉標題的正文[ROWFORMATDELIMITEDFIELDSTERMINATEDBYrow_format][STOREDASfile_format][LOCATIONhdfs_path]DBPropertiesSettings[WITHDBPROPERTIES(property_name=property_value,...)]Hive表創(chuàng)建參數(shù)說明需要說明的是,上述創(chuàng)建Hive數(shù)據(jù)表的語法中,[]中包含的內(nèi)容為可選項,在創(chuàng)建表的同時可以聲明很多約束信息,其中重要參數(shù)的說明如下必備知識技能:一、Hive內(nèi)部表

TEMPORARY創(chuàng)建一個臨時表,該表僅對當前會話可見。臨時表數(shù)據(jù)將存儲在用戶的暫存目錄中,并在會話結(jié)束時刪除EXTERNAL創(chuàng)建一個外部表,這時就需要指定數(shù)據(jù)文件的實際路徑(hdfs_path)。忽略EXTERNAL選項時,默認創(chuàng)建一個內(nèi)部表,Hive會將數(shù)據(jù)文件移動到數(shù)據(jù)倉庫所在的目錄下,而創(chuàng)建外部表時,僅記錄數(shù)據(jù)所在的路徑,并不會移動數(shù)據(jù)文件的位置PARTITIONEDBY創(chuàng)建帶有分區(qū)的表,一個表可以擁有一個或者多個分區(qū),每個分區(qū)以目錄的形式單獨存在于表目錄下,表和列名不區(qū)分大小寫,分區(qū)是以字段的形式在表結(jié)構(gòu)中存在,通過Describetablename命令可以查看到字段存在,但是該字段不存放實際的數(shù)據(jù)內(nèi)容,僅僅是分區(qū)的表示CLUSTEREDBY對于每個表或者分區(qū),可以進一步將若干個列放入一個桶中,分桶的目的一是為了獲得更高的查詢效率,二是使取樣更高效SORTEDBY:對列排序的選項,可以提高查詢性能ROWFORMAT行格式是指一行中的字段存儲格式,Hive默認采用'\001'作為分隔符(Linux系統(tǒng)下使用Vi編輯器輸入Ctrl+V和Ctrl+A所組成的字符,記作^A),它通常不會出現(xiàn)在數(shù)據(jù)文件中,因此在加載數(shù)據(jù)時,需要選用合適的字符作為分隔符來映射字段,否則表中數(shù)據(jù)為NULL必備知識技能:一、Hive內(nèi)部表

STOREDAS指文件存儲格式,默認指定Textfile格式,導(dǎo)入數(shù)據(jù)時會直接把數(shù)據(jù)文件復(fù)制到HDFS上不進行處理,數(shù)據(jù)不壓縮,解析開銷較大LOCATION:指需要映射為對應(yīng)Hive數(shù)據(jù)倉庫表的數(shù)據(jù)文件在HDFS上的實際路徑Hive數(shù)據(jù)表創(chuàng)建示例在對創(chuàng)建Hive數(shù)據(jù)表的語法格式有所了解后,接下來,就通過幾個示例來演示說明Hive數(shù)據(jù)表的具體創(chuàng)建方式Hive內(nèi)部表創(chuàng)建要點在創(chuàng)建Hive內(nèi)部表時,必須注意以下兩點:第一,建表語句必須根據(jù)結(jié)構(gòu)化文件內(nèi)容和需求,指定匹配的分隔符;第二,在創(chuàng)建Hive內(nèi)部表時,執(zhí)行建表語句后,還必須將結(jié)構(gòu)化文件移動到對應(yīng)的內(nèi)部表目錄下進行映射,才能夠生成對應(yīng)的數(shù)據(jù)必備知識技能:二、Hive外部表操作創(chuàng)建外部表解析在上文內(nèi)容中,講解了內(nèi)部表,即不添加關(guān)鍵字External,內(nèi)部表與結(jié)構(gòu)化數(shù)據(jù)文件要想產(chǎn)生關(guān)系映射,那么數(shù)據(jù)文件就必須在指定的內(nèi)部表目錄下,當遇到大文件的情況時,移動數(shù)據(jù)文件非常耗時,這就需要創(chuàng)建外部表,因為它不需要移動結(jié)構(gòu)化數(shù)據(jù)文件必備知識技能:內(nèi)部表和外部表的區(qū)別

外部表與內(nèi)部表的區(qū)別創(chuàng)建表時使用關(guān)鍵字external創(chuàng)建的表就是外部表,沒有使用該關(guān)鍵字創(chuàng)建的表就是內(nèi)部表。刪除表時(droptable)內(nèi)部表會刪除hdfs對應(yīng)路徑,而外部表不會刪除hdfs對應(yīng)的路徑,刪除表無論是內(nèi)部表還是外部表都會刪除元數(shù)據(jù)(metastore.TBLS、metastore.COLUMNS_V2)HDFS路徑設(shè)置location關(guān)鍵字用于指定hdfs路徑,如果不指定則使用默認的路徑,默認路徑規(guī)則為/db/location既可以用于內(nèi)部表也可以用于外部表HiveInternalTableDeletionHive內(nèi)部表(ManagedTable)是Hive默認創(chuàng)建的數(shù)據(jù)表類型,其數(shù)據(jù)存儲在Hadoop分布式文件系統(tǒng)(HDFS)上,通常位于數(shù)據(jù)庫路徑下與表名同名的目錄中。當您刪除一個內(nèi)部表時,表內(nèi)的數(shù)據(jù)和元數(shù)據(jù)都會被一并刪除HiveExternalTableExplanationHive外部表(ExternalTable)則是通過添加關(guān)鍵字`external`來創(chuàng)建的表類型。外部表的數(shù)據(jù)同樣存儲在HDFS上,但是它們的元數(shù)據(jù)存儲在Hive的元數(shù)據(jù)倉庫中。當您刪除一個外部表時,只有元數(shù)據(jù)信息會被刪除,而數(shù)據(jù)文件仍然保留在HDFS上內(nèi)部表適合于那些數(shù)據(jù)不會頻繁移動或者不需要獨立管理的場景外部表適合于那些數(shù)據(jù)需要在不同的應(yīng)用程序之間共享,或者數(shù)據(jù)源經(jīng)常變化的場景必備知識技能:內(nèi)部表和外部表的區(qū)別

01內(nèi)部表優(yōu)點在于管理簡單,數(shù)據(jù)和元數(shù)據(jù)都集中管理,便于維護和備份

02內(nèi)部表缺點在于一旦表被刪除,數(shù)據(jù)和元數(shù)據(jù)都會丟失,除非事先做了備份

03外部表的優(yōu)點在于即使表被刪除,數(shù)據(jù)仍然保留在HDFS上,可以避免數(shù)據(jù)丟失,但需要單獨管理數(shù)據(jù)文件

04外部表的缺點在于管理相對復(fù)雜,需要確保數(shù)據(jù)文件的安全和完整性

05關(guān)鍵知識點和最佳實踐

06理解內(nèi)部表和外部表的定義和區(qū)別必備知識技能:內(nèi)部表和外部表的區(qū)別

掌握創(chuàng)建內(nèi)部表和外部表的SQL語法

根據(jù)實際需求選擇合適的表類型

對于外部表,要特別注意數(shù)據(jù)文件的管理和備份

定期檢查和維護Hive元數(shù)據(jù)倉庫,確保數(shù)據(jù)的準確性和完整性任務(wù)實施:一、Hive內(nèi)部表操作

步驟1:切換到hive主目錄,執(zhí)行如下命令啟動hive

hive

步驟2:創(chuàng)建數(shù)據(jù)庫,在hive命令窗口輸入如下命令

createdatabaseifnotexiststest01

步驟3:切換到數(shù)據(jù)庫test01,在hive命令窗口輸入如下命令

usetest01任務(wù)實施:一、Hive內(nèi)部表操作

步驟4:在本地hive主目錄下創(chuàng)建一個文件user.txt,輸入以下內(nèi)容1,tom,182,jerry,193,lily,20步驟5:根據(jù)剛才創(chuàng)建的文件,我們創(chuàng)建一個內(nèi)部表CreateTableStatementcreatetablet_user(idint,namestring,ageint)ROWFORMATDELIMITEDFIELDSTERMINATEDBY任務(wù)實施:一、Hive內(nèi)部表操作

步驟6打開瀏覽器進入默認表的路徑查看,內(nèi)部表默認路徑:user/hive/warehouse/test01.db/t_user提示如果添加不了,把hive改成本地模式:sethive.exec.mode.local.auto=true;如果還不行,sethive.support.sql11.reserved.keywords=false步驟7:退出hive,上傳本地文件到HDFS中,在hive命令窗口輸入如下命令:quit在linux本地輸入如下命令HadoopFSPutCommandhadoopfs-putuser.txt/user/hive/warehouse/test01.db/t_user步驟8:回到hive中,查看是否有數(shù)據(jù)顯示,如圖8-2-1,在hive命令窗口輸入如下命令任務(wù)實施:一、Hive內(nèi)部表操作

select*fromt_user步驟9:針對復(fù)雜類型數(shù)據(jù)建表創(chuàng)建student.txt文件(1)退出hive,回到linux,在hive主目錄中創(chuàng)建一個文件student.txt,輸入以下內(nèi)容tom,唱歌:非常喜歡-跳舞:喜歡-游泳:一般般lily,打游戲:非常喜歡-打籃球:不喜歡回到hive,創(chuàng)建表格t_student,在hive命令窗口輸入如下命令任務(wù)實施:一、Hive內(nèi)部表操作

CreateTableStatementcreatetablet_student(idint,namestring,hobbymap<string,string)rowformatdelimitedfieldsterminatedby','collectionitemsterminatedby'-'mapkeysterminatedby退出hive,回到linux,上傳數(shù)據(jù)文件到對應(yīng)的路徑下面,在終端命令窗口輸入如下命令HadoopFSCommandhadoopfs-putstudent.txt/user/hive/warehouse/test01.db/t_student回到hive中查看是否有數(shù)據(jù),如圖8-2-2,在hive命令窗口輸入如下命令select*fromt_student任務(wù)實施:二、Hive外部表操作步驟1:在Linux本地hive主目錄下創(chuàng)建一個文件stu1.txt,輸入如下內(nèi)容001,張三,男,18002,李四,女,19003,王曉麗,男,20004,王君,女,18005,李一,男,19任務(wù)實施:二、Hive外部表操作

006,王五,女,20

007,趙茜,男,18

008,周二,女,19

009,風(fēng)五,男,20

步驟2:上傳文件到HDFS。首先,在HDFS中創(chuàng)建一個/stu目錄,在終端命令窗口執(zhí)行如下命令

hadoopfs-mkdir/stu任務(wù)實施:二、Hive外部表操作

步驟3:把stu1.txt上傳到這個目錄下,在終端命令窗口輸入如下命令hadoopfs-putstu1.txt/stu步驟4:創(chuàng)建外部表stu1并初始化數(shù)據(jù),進入hive,在hive命令窗口執(zhí)行如下命令CreateExternalTableStu1createexternaltablestu1(idint,namestring,sexstring,ageint)rowformatdelimitedfieldsterminatedby','location'/stu步驟5:查看創(chuàng)建好的外部表stu1的數(shù)據(jù),在hive命令窗口執(zhí)行如下命令任務(wù)實施:二、Hive外部表操作

select*fromstu1單擊此處添加項正文

提示Hive創(chuàng)建內(nèi)部表時,會將數(shù)據(jù)移動到數(shù)據(jù)庫指向的路徑;創(chuàng)建外部表時,僅記錄數(shù)據(jù)所在的路徑,不會對數(shù)據(jù)的位置做任何改變。在刪除表的時候,內(nèi)部表的元數(shù)據(jù)和數(shù)據(jù)會被一起刪除,而外部表只刪除元數(shù)據(jù),不刪除數(shù)據(jù)任務(wù)三Hive分區(qū)表操作06任務(wù)工單

任務(wù)描述分區(qū)表是按照屬性在目錄層面給文件更好的管理,實際上就是對應(yīng)一個HDFS文件系統(tǒng)上的獨立目錄,該目錄下是該分區(qū)所有的數(shù)據(jù)文件。Hive中的分區(qū)就是分目錄,把一個大的數(shù)據(jù)集根據(jù)業(yè)務(wù)需要分割成小的數(shù)據(jù)集

任務(wù)準備全班學(xué)生以4人左右為一組,各組選出組長。請組長組織組員查找相關(guān)資料,并組織討論和匯總問題1:Hive分區(qū)表有哪些操作?分別有什么作用問題2:Hive動態(tài)分區(qū)表和靜態(tài)分區(qū)表有什么區(qū)別必備知識技能

Hive分區(qū)表介紹分區(qū)表是按照屬性在目錄層面給文件更好地管理,實際上就是對應(yīng)一個HDFS上的獨立目錄,該目錄下是該分區(qū)所有的數(shù)據(jù)文件。Hive中的分區(qū)就是分目錄,把一個大的數(shù)據(jù)集根據(jù)業(yè)務(wù)需要分割成小的數(shù)據(jù)集。在查詢時通過WHERE子句中的表達式選擇查詢指定的分區(qū),這樣的查詢效率會提高很多。Hive分區(qū)表一共有兩種,分別為普通分區(qū)和動態(tài)分區(qū),下面分別進行介紹必備知識技能:一、Hive普通分區(qū)

單分區(qū)表詳解創(chuàng)建分區(qū)表分為兩種,一種是單分區(qū),也就是說在表目錄下只有一級目錄。另外一種是多分區(qū),表目錄下出現(xiàn)多目錄嵌套模式,現(xiàn)在只針對單分區(qū)進行詳解,若想學(xué)習(xí)多分區(qū)可以參考官網(wǎng)的官方文檔加載數(shù)據(jù)至Hive表其次,加載數(shù)據(jù)是將數(shù)據(jù)文件移動到與Hive表對應(yīng)的位置,從本地(Linux)復(fù)制或移動到HDFS的操作。由于分區(qū)表在映射數(shù)據(jù)時不能使用Hadoop命令移動文件,需要使用LOAD命令LoadDataIntoTableLOADDATA[LOCAL]INPATH‘filepath'[OVERWRITE]INTOTABLEtablename[PARTITION(partcol1=val1,partcol2=val2...)]LOADDATA是HQL固定的數(shù)據(jù)裝載語句,下面針對部分關(guān)鍵字進行講解必備知識技能:一、Hive普通分區(qū)

filepath它可以引用一個文件(在這種情況下,Hive將文件移動到表所對應(yīng)的目錄中),或者它可以是一個目錄(在這種情況下,Hive將把該目錄中的所有文件移動到表所對應(yīng)的目錄中)。它可以是相對路徑、絕對路徑以及完整的URI

LOCAL如果指定了LOCAL關(guān)鍵字,LOAD命令將在本地文件系統(tǒng)(Hive服務(wù)啟動方)中查找文件路徑,將其復(fù)制到對應(yīng)的HDFS路徑下;如果沒有指定LOCAL關(guān)鍵字,它將會從HDFS中移動數(shù)據(jù)文件至對應(yīng)的表路徑下

OVERWRITE如果使用了OVERWRITE關(guān)鍵字,當加載數(shù)據(jù)時目標表或分區(qū)中的內(nèi)容會被刪除,然后再將filepath指向的文件或目錄中的內(nèi)容添加到表或分區(qū)中。簡單地說就是覆蓋表中已有數(shù)據(jù);若不添加該關(guān)鍵字,則表示追加數(shù)據(jù)內(nèi)容

小提示分區(qū)字段不能與已存在字段重復(fù),且分區(qū)字段是一個虛擬的字段,它不存放任何數(shù)據(jù),該數(shù)據(jù)來源于裝載分區(qū)表時所指定的數(shù)據(jù)文件必備知識技能:二、Hive動態(tài)分區(qū)Hive動態(tài)分區(qū)功能上面介紹了Hive普通分區(qū)的創(chuàng)建和LOAD命令加載數(shù)據(jù)的操作。在默認情況下,加載數(shù)據(jù)時需要手動設(shè)置分區(qū)字段,并且針對一個分區(qū)就要寫一個插入語句。如果源數(shù)據(jù)量很大時(例如,現(xiàn)有許多日志文件,要求按照日期作為分區(qū)字段,在插入數(shù)據(jù)的時候無法手動添加分區(qū)),就可以利用Hive提供的動態(tài)分區(qū),可以簡化插入數(shù)據(jù)時的繁瑣操作,若想實現(xiàn)動態(tài)分區(qū),則需要開啟動態(tài)分區(qū)功能HiveDynamicPartitioningHive默認是不支持動態(tài)分區(qū)的,因此hive.exec.dynamic.partition默認值為false,需要啟動動態(tài)分區(qū)功能,可以將該參數(shù)設(shè)置為true:其中hive.exec.dynamic.partition.mode的默認值是strict,表示必須指定至少一個分區(qū)為靜態(tài)分區(qū),將此參數(shù)修改為nonstrict,表示允許所有的分區(qū)字段都可以使用動態(tài)分區(qū)。在Hive中insert語句是用于動態(tài)插入數(shù)據(jù)的,它主要是結(jié)合select查詢語句使用,且非常適用于動態(tài)分區(qū)插入數(shù)據(jù),語法格式如下所示SQLTableInsertionCommandINSERTINTOTABLEtable_name[PARTITION(partition_key=partition_value,...)][SELECT.]必備知識技能:二、Hive動態(tài)分區(qū)小提示動態(tài)分區(qū)不允許主分區(qū)采用動態(tài)列而子分區(qū)采用靜態(tài)列,這樣導(dǎo)致所有的主分區(qū)都創(chuàng)建子分區(qū)靜態(tài)列所定義的分區(qū)任務(wù)實施Hive分區(qū)表介紹與實訓(xùn)分區(qū)表是按照屬性在目錄層面給文件更好的管理,實際上就是對應(yīng)一個HDFS文件系統(tǒng)上的獨立目錄,該目錄下是該分區(qū)所有的數(shù)據(jù)文件。Hive中的分區(qū)就是分目錄,把一個大的數(shù)據(jù)集根據(jù)業(yè)務(wù)需要分割成小的數(shù)據(jù)集。在查詢時通過WHERE子句中的表達式選擇查詢指定的分區(qū),這樣的查詢效率會提高很多。Hive分區(qū)表一共有兩種,分別為普通分區(qū)和動態(tài)分區(qū),我們下面就對其分別進行實訓(xùn)任務(wù)實施:一、普通分區(qū)操作

01步驟1:準備數(shù)據(jù),在hive主目錄下新建文件,名為user_p.txt,內(nèi)容如下所示

021,lily

032,tom

043,jerry

05步驟2:切換到hive主目錄,在終端命令窗口執(zhí)行如下命令啟動hive

06hive任務(wù)實施:一、普通分區(qū)操作

步驟3:創(chuàng)建分區(qū)表t_user_p,在hive命令窗口輸入如下命令CreateTableStatementcreatetablet_user_p(idint,namestring)partitionedby(countrystring)rowformatdelimitedfieldsterminatedbyHDFS文件系統(tǒng)目錄查看創(chuàng)建成功以后,就可以在HDFS文件系統(tǒng)的/user/hive/warehouse/test01.db/目錄下看到文件t_user_p,如圖8-3-1所示步驟4給表格t_user_p加載數(shù)據(jù)。加載數(shù)據(jù)是從Linux本地復(fù)制或移動原始數(shù)據(jù)文件到HDFS文件系統(tǒng)。由于分區(qū)表在映射數(shù)據(jù)時不能使用Hadoop命令復(fù)制或移動文件,需要使用Load命令,在hive命令窗口輸入如下命令LoadDataintoTableloaddatalocalinpath'/usr/local/src/user_p.txt'intotablet_user_ppartition(country='USA')步驟5:查看數(shù)據(jù)是否加載成功,在hive命令窗口輸入如下命令任務(wù)實施:一、普通分區(qū)操作

select*fromt_user_p步驟6:顯示表頭,如圖8-3-2,在hive命令窗口輸入如下命令sethive.cli.print.header=true步驟7:新增分區(qū)country='China',在hive命令窗口輸入如下命令A(yù)ddChinaPartitiontot_user_pTablealtertablet_user_pADDpartition(country='China')location'/user/hive/warehouse/test01.db/t_user_p/country=China回到瀏覽器,可以看到增加了分區(qū)country='China',如圖8-3-3任務(wù)實施:一、普通分區(qū)操作

步驟8:修改分區(qū),在hive命令窗口輸入如下命令RenameUSAPartitiontoUKaltertablet_user_ppartition(country='USA')renametopartition(country='UK')執(zhí)行結(jié)果如圖8-3-4步驟9:刪除分區(qū)t_user_p,在hive命令窗口輸入如下命令DropUKPartitionaltertablet_user_pdropifexistspartition(country='UK')任務(wù)實施:一、普通分區(qū)操作執(zhí)行結(jié)果如圖8-3-5單擊此處添加項正文小提示分區(qū)字段不能與已存在字段重復(fù),且分區(qū)字段是一個虛擬的字段,它不存放任何數(shù)據(jù),該數(shù)據(jù)來源于裝載分區(qū)表時所指定的數(shù)據(jù)文件任務(wù)實施:二、動態(tài)分區(qū)操作

Hive動態(tài)分區(qū)加載數(shù)據(jù)上面介紹了Hive普通分區(qū)的創(chuàng)建和Load命令加載數(shù)據(jù)的操作。在默認情況下,我們加載數(shù)據(jù)時,需要手動設(shè)置分區(qū)字段,并且針對一個分區(qū)就要寫一個插入語句。如果源數(shù)據(jù)量很大時,比如有許多日志文件,要求按照日期作為分區(qū)字段,在插入數(shù)據(jù)的時候無法手動添加分區(qū)時,就可以利用Hive提供的動態(tài)分區(qū),簡化插入數(shù)據(jù)時的繁瑣操作步驟1:若想實現(xiàn)動態(tài)分區(qū),則需要開啟動態(tài)分區(qū)功能,具體命令如下sethive.exec.dynamic.partition=truesethive.exec.dynamic.partition.mode=nonstrict步驟2:在Linux本地hive主目錄下創(chuàng)建一個dynamic.txt文件,其內(nèi)容如下2024-05-10,ip1任務(wù)實施:二、動態(tài)分區(qū)操作

2024-05-10,ip2

2024-06-18,ip3

2024-06-18,ip4

2024-08-10,ip1

2024-08-10,ip2

步驟3:啟動hive,在hive中創(chuàng)建原始表,在hive命令窗口輸入如下命令任務(wù)實施:二、動態(tài)分區(qū)操作

CreateTableDynamiccreatetabledynamic(daystring,ipstring)rowformatdelimitedfieldsterminatedby步驟4:加載數(shù)據(jù)文件至原始表dynamic,在hive命令窗口輸入如下命令數(shù)據(jù)加載與查詢loaddatalocalinpath'/app/test/dynamic.txt'intotabledynamic;數(shù)據(jù)加載成功以后,查詢數(shù)據(jù)如圖8-3-6所示步驟5:再次創(chuàng)建目標表d_p_t,在hive命令窗口輸入如下命令CreatePartitionedTablecreatetabled_p_t(ipstring)partitionedby(monthstring,daystring)步驟6:設(shè)置hive為本地模式,在hive命令窗口輸入如下命令任務(wù)實施:二、動態(tài)分區(qū)操作

sethive.exec.mode.local.auto=true步驟7:動態(tài)插入數(shù)據(jù)到d_p_t,在hive命令窗口輸入如下命令DataProcessingCommandinsertoverwritetabled_p_tpartition(month,day)selectip,substr(day,1,7)asmonth,dayfromdynamic步驟8:查看目標表d_p_t中的分區(qū)數(shù)據(jù),在hive命令窗口輸入如下命令showpartitionsd_p_t任務(wù)實施:二、動態(tài)分區(qū)操作

執(zhí)行結(jié)果如圖8-3-7所示任務(wù)四Hive桶表操作07任務(wù)工單

任務(wù)描述為了將表進行更細粒度的范圍劃分,我們可以創(chuàng)建桶表。桶表,是根據(jù)某個字段把數(shù)據(jù)分成幾個桶(我們這里設(shè)置為4,默認值是-1,可自定義),也就是在文件的層面上把數(shù)據(jù)分開

任務(wù)準備全班學(xué)生以4人左右為一組,各組選出組長。請組長組織組員查找相關(guān)資料,并組織討論和匯總問題1:Hive的桶表有什么作用問題2:Hive臨時桶表有什么作用必備知識技能:一、數(shù)據(jù)分桶的定義HiveTableBucketing分桶是相對分區(qū)進行更細粒度的劃分。分桶將整個hive表數(shù)據(jù)內(nèi)容按照某列屬性值的hash值進行分區(qū),通過分區(qū)將這些表數(shù)據(jù)劃分到多個文件中進行存儲。其實桶的概念就是MapReduce分區(qū)的概念。物理上每個桶就是目錄里的一個文件,一個任務(wù)作業(yè)產(chǎn)生的桶(即:輸出文件)數(shù)量和設(shè)置的reduce任務(wù)個數(shù)相等。假設(shè)有hive表:test_student,按照其字段s_id屬性分為3個桶,那么就是對s_id屬性值的hash值對3取模,按照取模結(jié)果對數(shù)據(jù)分桶。如取模結(jié)果為0的數(shù)據(jù)記錄存放到一個文件,取模為1的數(shù)據(jù)存放到一個文件,取模為2的數(shù)據(jù)存放到一個文件必備知識技能:二、數(shù)據(jù)分析的意義

數(shù)據(jù)處理與分桶優(yōu)化在處理大規(guī)模數(shù)據(jù)集時,在開發(fā)和修改查詢階段,可以使用整個數(shù)據(jù)集的一部分進行抽樣測試查詢、修改,提高開發(fā)效率;解決單個表文件數(shù)據(jù)量過大的問題;分桶表數(shù)據(jù)進行抽樣和JOIN時可以提高MapReduce程序效率;均衡負載:數(shù)據(jù)經(jīng)過分桶后更容易實現(xiàn)均衡負載,數(shù)據(jù)可以分發(fā)到多個節(jié)點中,提高了查詢效率必備知識技能:三、分桶表和分區(qū)表區(qū)別分區(qū)與分桶的性能優(yōu)化差異分區(qū)和分桶的區(qū)別在于其提供的性能優(yōu)化方向不同。分區(qū)適用于對于數(shù)據(jù)常進行的聚合查詢數(shù)據(jù)分析,而分區(qū)適用于對于數(shù)據(jù)的均衡負載、高效聚合等方面的性能優(yōu)化。當數(shù)據(jù)量較大、查詢效率比較低時,使用分區(qū)和分桶可以有效優(yōu)化性能。分區(qū)主要關(guān)注數(shù)據(jù)的分區(qū)和存儲,而分桶則重點考慮數(shù)據(jù)的分布以及查詢效率任務(wù)實施創(chuàng)建桶表細化數(shù)據(jù)劃分為了將表進行更細粒度的范圍劃分,我們可以創(chuàng)建桶表。桶表是根據(jù)某個屬性字段把數(shù)據(jù)分成幾個桶,這里設(shè)置為4,默認值是-1,可自定義,也就是在文件的層面上把數(shù)據(jù)分開。下面通過演示桶表相關(guān)操作任務(wù)實施:一、創(chuàng)建桶表01步驟1:切換到hive主目錄,在終端命令窗口執(zhí)行如下命令啟動hive02hive03步驟2:開啟分桶功能,在hive命令窗口執(zhí)行如下命令04usetest0105sethive.enforce.bucketing=true06//由于HQL最終會轉(zhuǎn)成MR程序,所以分桶數(shù)與ReduceTask數(shù)保持一致任務(wù)實施:一、創(chuàng)建桶表

//從而產(chǎn)生相應(yīng)的文件個數(shù)setmapreduce.job.reduces=4setmapred.reduce.tasks=4步驟3:設(shè)置hive為本地模式并創(chuàng)建桶

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論