《大數(shù)據(jù)技術實戰(zhàn)案例教程》課件教學課件-第5章部署本地模式Hive和Hive實戰(zhàn)_第1頁
《大數(shù)據(jù)技術實戰(zhàn)案例教程》課件教學課件-第5章部署本地模式Hive和Hive實戰(zhàn)_第2頁
《大數(shù)據(jù)技術實戰(zhàn)案例教程》課件教學課件-第5章部署本地模式Hive和Hive實戰(zhàn)_第3頁
《大數(shù)據(jù)技術實戰(zhàn)案例教程》課件教學課件-第5章部署本地模式Hive和Hive實戰(zhàn)_第4頁
《大數(shù)據(jù)技術實戰(zhàn)案例教程》課件教學課件-第5章部署本地模式Hive和Hive實戰(zhàn)_第5頁
已閱讀5頁,還剩86頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

【第4章回顧】1.了解ZooKeeper功能、起源和應用場景。2.理解ZooKeeper體系架構和工作原理。(重點,難點)3.理解ZooKeeper數(shù)據(jù)模型。(重點)4.掌握ZooKeeper部署要點,包括運行環(huán)境、運行模式和配置文件zoo.cfg、myid等。(重點)5.掌握ZooKeeperShell命令(重點),了解ZooKeeper四字命令和ZooKeeperJavaAPI。6.熟練掌握在Linux環(huán)境下部署ZooKeeper集群、使用ZooKeeperShell服務端命令、客戶端命令。(重點)【課程內(nèi)容】開學第一課(理論1學時)第1章部署全分布模式Hadoop集群(理論3學時+實驗2學時)第2章HDFS實戰(zhàn)(理論4學時+實驗2學時)第3章MapReduce編程(理論4學時+實驗2學時)第4章部署ZooKeeper集群和ZooKeeper實戰(zhàn)(理論4學時+實驗2學時)第5章部署本地模式Hive和Hive實戰(zhàn)(理論4學時+實驗2學時)第6章Flume實戰(zhàn)(理論4學時+實驗2學時)第7章Kafka實戰(zhàn)(理論4學時+實驗2學時)第8章Spark集群部署和基本編程(理論4學時+實驗2學時)第9章Flink集群部署和基本編程(選修)第5章部署本地的模式Hive和Hive實戰(zhàn)5.1初識Hive5.2Hive體系架構(重點)5.3Hive數(shù)據(jù)類型5.4Hive數(shù)據(jù)模型(重點)5.5Hive函數(shù)(重點,難點)5.6Hive部署要點(重點)5.7Hive接口(重點,難點)5.8綜合實戰(zhàn):部署本地模式Hive和Hive實戰(zhàn)(實驗)5.1初識HiveHive是一個基于Hadoop的數(shù)據(jù)倉庫工具,它可以將結(jié)構化的數(shù)據(jù)文件映射為一張表,并提供了類SQL查詢語言HiveQL(HiveQueryLanguage)。Hive由Facebook公司開源,主要用于解決海量結(jié)構化日志數(shù)據(jù)的離線分析。Hive的本質(zhì)是將HiveQL語句轉(zhuǎn)化成MapReduce程序,并提交到Hadoop集群上運行。Hive讓不熟悉MapReduce編程的開發(fā)人員直接編寫SQL語句來實現(xiàn)對大規(guī)模數(shù)據(jù)的統(tǒng)計分析操作,大大降低了學習門檻,同時也提升了開發(fā)效率。Hive處理的數(shù)據(jù)存儲在HDFS上,Hive分析數(shù)據(jù)底層的實現(xiàn)是MapReduce,執(zhí)行程序運行在YARN上。Hive基本工作流程Hadoop集群Hiveselectcity,count(1)pvfromad_tablewheredata='20191001'groupbycityMapReduceYARNHDFSuser/hive/warehouse/ad_table/data='20191001'/log-20191001生成MR調(diào)度MR運行MR讀取數(shù)據(jù)5.1初識Hive優(yōu)點:(1)操作接口采用類SQL語法,簡單易學,提供快速開發(fā)的能力。(2)避免編寫MapReduce應用程序,減少開發(fā)人員的學習成本。(3)Hive支持用戶自定義函數(shù),用戶可以根據(jù)需求來實現(xiàn)自己的函數(shù)。缺點:(1)Hive執(zhí)行延遲比較高,常用于對實時性要求不高的海量數(shù)據(jù)分析場合中。(2)Hive的HiveQL表達能力有限,例如迭代式算法無法表達,不擅長數(shù)據(jù)挖掘等。(3)Hive效率比較低,例如Hive自動生成的MapReduce作業(yè),通常情況下不夠智能化,另外Hive粒度較粗,調(diào)優(yōu)比較困難。5.2Hive體系架構1.客戶端組件1)CLI(CommmandLineInterface)2)JDBC/ODBC3)HWI(HiveWebInterface)2.服務端組件1)ThriftServer2)元數(shù)據(jù)(Metastore)3)驅(qū)動器(Driver)HiveHadoop集群MapReduceYARNHDFS驅(qū)動器(Driver)元數(shù)據(jù)(Metastore)CLIThriftServerHWIJDBCODBC解析器(SQLParser)編譯器(PhysicalPlan)優(yōu)化器(QueryOptimizer)執(zhí)行器(Execution)5.2Hive體系架構元數(shù)據(jù)(Metastore)Metastore組件用于存儲Hive的元數(shù)據(jù),表名、表所屬的數(shù)據(jù)庫(默認是default)、表的擁有者、列/分區(qū)字段、表的類型(是否是外部表)、表的數(shù)據(jù)所在目錄等。Hive元數(shù)據(jù)默認存儲在自帶的Derby數(shù)據(jù)庫中,推薦使用MySQL存儲Metastore。元數(shù)據(jù)對于Hive十分重要,因此Hive支持把Metastore服務獨立出來,安裝到遠程的服務器集群里,從而解耦Hive服務和Metastore服務,保證Hive運行的健壯性。Hive元數(shù)據(jù)通常有三種存儲位置形式:嵌入式元數(shù)據(jù)、本地元數(shù)據(jù)和遠程元數(shù)據(jù),根據(jù)元數(shù)據(jù)存儲位置的不同,Hive部署模式也不同。5.3Hive數(shù)據(jù)類型1.基本數(shù)據(jù)類型2.集合數(shù)據(jù)類型1.基本數(shù)據(jù)類型數(shù)據(jù)類型長度說明數(shù)字類TINYINT1字節(jié)有符號整型,-128~127SMALLINT2字節(jié)有符號整型,-32768~32767INT4字節(jié)有符號整型,-2,147,483,648~2,147,483,647BIGINT8字節(jié)有符號整型,-9,223,372,036,854,775,808~9,223,372,036,854,775,807FLOAT4字節(jié)有符號單精度浮點數(shù)DOUBLE8字節(jié)有符號雙精度浮點數(shù)DOUBLEPRECISION8字節(jié)同DOUBLE,Hive2.2.0開始可用DECIMAL--可帶小數(shù)的精確數(shù)字字符串NUMERIC--同DECIMAL,Hive3.0.0開始可用日期時間類TIMESTAMP--時間戳,內(nèi)容格式:yyyy-mm-ddhh:mm:ss[.f...]DATE--日期,內(nèi)容格式:YYYY-MM-DDINTERVAL--存儲兩個時間戳之間的時間間隔字符串類STRING--字符串VARCHAR字符數(shù)范圍1-65535長度不定字符串CHAR最大的字符數(shù):255長度固定字符串Misc類BOOLEAN--布爾類型TRUE/FALSEBINARY--字節(jié)序列2.集合數(shù)據(jù)類型數(shù)據(jù)類型長度說明ARRAY--數(shù)組,存儲相同類型的數(shù)據(jù),索引從0開始,可以通過下標獲取數(shù)據(jù)MAP--字典,存儲鍵值對數(shù)據(jù),鍵或者值的數(shù)據(jù)類型必須相同,通過鍵獲取數(shù)據(jù),MAP<primitive_type,data_type>STRUCT--結(jié)構體,存儲多種不同類型的數(shù)據(jù),一旦結(jié)構體被聲明,其各字段的位置不能改變,STRUCT<col_name:data_type[COMMENTcol_comment],...>UNIONTYPE--聯(lián)合體,UNIONTYPE<data_type,data_type,...>5.4Hive數(shù)據(jù)模型Hive沒有專門的數(shù)據(jù)存儲格式,也沒有為數(shù)據(jù)建立索引,用戶可以非常自由的組織Hive中的表,只需創(chuàng)建表時告訴Hive數(shù)據(jù)中的列分隔符和行分隔符,Hive就可以解析數(shù)據(jù)。Hive中所有的數(shù)據(jù)都存儲在HDFS中,根據(jù)對數(shù)據(jù)的劃分粒度,Hive包含以下數(shù)據(jù)模型:表(Table)、分區(qū)(Partition)和桶(Bucket)。表→分區(qū)→桶,對數(shù)據(jù)的劃分粒度越來越小。數(shù)據(jù)庫表表桶桶分區(qū)分區(qū)桶桶傾斜數(shù)據(jù)正常數(shù)據(jù)1.表(Table)Hive的表和關系數(shù)據(jù)庫中的表相同,具有各種關系代數(shù)操作。1)內(nèi)部表(Table)Hive默認創(chuàng)建的表都是內(nèi)部表,因為這種表,Hive會(或多或少地)控制著數(shù)據(jù)的生命周期。默認情況下Hive會將這些表的數(shù)據(jù)存儲在由配置項hive.metastore.warehouse.dir(例如/user/hive/warehouse)所定義的HDFS目錄的子目錄下,每一個Table在該數(shù)據(jù)倉庫目錄下都擁有一個對應的目錄存儲數(shù)據(jù)。當刪除一個內(nèi)部表時,Hive會同時刪除這個數(shù)據(jù)目錄。內(nèi)部表不適合和其它工具共享數(shù)據(jù)。2)外部表(ExternalTable)Hive創(chuàng)建外部表時需要指定數(shù)據(jù)讀取的目錄,外部表僅記錄數(shù)據(jù)所在的路徑,不對數(shù)據(jù)的位置做任何改變,而內(nèi)部表創(chuàng)建時就把數(shù)據(jù)存放到默認路徑下,當刪除表時,內(nèi)部表會將數(shù)據(jù)和元數(shù)據(jù)全部刪除,而外部表只刪除元數(shù)據(jù),數(shù)據(jù)文件不會刪除。外部表和內(nèi)部表在元數(shù)據(jù)的組織上是相同的,外部表加載數(shù)據(jù)和創(chuàng)建表同時完成,并不會移動數(shù)據(jù)到數(shù)據(jù)倉庫目錄中。2.分區(qū)(Partition)分區(qū)表通常分為靜態(tài)分區(qū)表和動態(tài)分區(qū)表,前者導入數(shù)據(jù)時需要靜態(tài)指定分區(qū),后者可以直接根據(jù)導入數(shù)據(jù)進行分區(qū)。分區(qū)表實際上就是一個對應HDFS文件系統(tǒng)上的獨立的文件夾,該文件夾下是該分區(qū)所有的數(shù)據(jù)文件。Hive中的分區(qū)就是分目錄,把一個大的數(shù)據(jù)集根據(jù)業(yè)務需要分割成小的數(shù)據(jù)集。分區(qū)的好處是可以讓數(shù)據(jù)按照區(qū)域進行分類,避免了查詢時的全表掃描。3.桶(Bucket)分桶就是將同一個目錄下的一個文件拆分成多個文件,每個文件包含一部分數(shù)據(jù),方便獲取值,提高檢索效率。分區(qū)針對的是數(shù)據(jù)的存儲路徑,分桶針對的是數(shù)據(jù)文件。分區(qū)提供一個隔離數(shù)據(jù)和優(yōu)化查詢的便利方式,但并非所有的數(shù)據(jù)集都可形成合理的分區(qū);分桶是將數(shù)據(jù)集分解成更容易管理的若干部分的另一種技術。用戶可以將分區(qū)或者未分區(qū)的表數(shù)據(jù)按某列的HASH函數(shù)值分配到桶中。事實上,每個桶通常是一個分區(qū)或者表目錄下的一個文件。例如,將分區(qū)劃分為n個桶,則將在分區(qū)目錄下產(chǎn)生n個文件。Hive通過某列的HASH值取模來決定桶的分配。使用桶分配數(shù)據(jù)的原因有兩個方面:第一,方便JOIN連接操作,連接時要求屬于同一個連接鍵的數(shù)據(jù)在一個分區(qū)中,假設分區(qū)Key和連接Key不同,則可以使用連接的鍵將表數(shù)據(jù)分桶,然后在桶內(nèi)進行連接。第二,分桶使采樣過程更高效,從而降低Hive的查詢時間?!景咐罕鞸tudent在Hive中的分區(qū)、分桶存儲】5.5Hive函數(shù)內(nèi)置運算符內(nèi)置函數(shù)自定義函數(shù)1.內(nèi)置運算符類型運算符說明算術運算符+、-、*、/加、減、乘、除%求余&、|、^、~按位與、或、異或、非關系運算符=、!=(或<>)、<、<=、>、>=等于、不等于、小于、小于等于、大于、大于等于ISNULL、ISNOTNULL判斷值是否為“NULL”LIKE、RLIKE、REGEXPLIKE進行SQL匹配,RLIKE進行Java匹配,REGEXP與RLIKE相同邏輯運算符AND、&&邏輯與OR、|邏輯或NOT、!邏輯非復雜運算符A[n]A是一個數(shù)組,n為int型。返回數(shù)組A的第n個元素,第一個元素的索引為0M[key]M是Map,關鍵值是key,返回關鍵值對應的值S.xS為struct,返回x字符串在結(jié)構S中的存儲位置2.內(nèi)置函數(shù)(字符串函數(shù))函數(shù)說明length(stringA)返回字符串的長度reverse(stringA)返回倒序字符串concat(stringA,stringB…)連接多個字符串,合并為一個字符串,可以接受任意數(shù)量的輸入字符串concat_ws(stringSEP,stringA,stringB…)鏈接多個字符串,字符串之間以指定的分隔符分開substr(stringA,intstart)substring(stringA,intstart)從文本字符串中指定的起始位置后的字符substr(stringA,intstart,intlen)substring(stringA,intstart,intlen)從文本字符串中指定的位置指定長度的字符upper(stringA)ucase(stringA)將文本字符串轉(zhuǎn)換成字母全部大寫形式lower(stringA)lcase(stringA)將文本字符串轉(zhuǎn)換成字母全部小寫形式trim(stringA)刪除字符串兩端的空格,字符之間的空格保留ltrim(stringA)刪除字符串左邊的空格,其他的空格保留rtrim(stringA)刪除字符串右邊的空格,其他的空格保留regexp_replace(stringA,stringB,stringC)字符串A中的B字符被C字符替換regexp_extract(stringsubject,stringpattern,intindex)通過下標返回正則表達式指定的部分parse_url(stringurlString,stringpartToExtract[,stringkeyToExtract])返回URL指定的部分2.內(nèi)置函數(shù)(字符串函數(shù))函數(shù)說明get_json_object(stringjson_string,stringpath)selecta.timestamp,get_json_object(a.appevents,‘$.eventid’),get_json_object(a.appenvets,‘$.eventname’)fromloga;space(intn)返回指定數(shù)量的空格repeat(stringstr,intn)重復N次字符串a(chǎn)scii(stringstr)返回字符串中首字符的數(shù)字值lpad(stringstr,intlen,stringpad)返回指定長度的字符串,給定字符串長度小于指定長度時,由指定字符從左側(cè)填補rpad(stringstr,intlen,stringpad)返回指定長度的字符串,給定字符串長度小于指定長度時,由指定字符從右側(cè)填補split(stringstr,stringpat)將字符串轉(zhuǎn)換為數(shù)組find_in_set(stringstr,stringstrList)返回字符串str第一次在strlist出現(xiàn)的位置。如果任一參數(shù)為NULL,返回NULL;如果第一個參數(shù)包含逗號,返回0sentences(stringstr,stringlang,stringlocale)將字符串中內(nèi)容按語句分組,每個單詞間以逗號分隔,最后返回數(shù)組ngrams(array>,intN,intK,intpf)SELECTngrams(sentences(lower(tweet)),2,100[,1000])FROMtwitter;context_ngrams(array>,array,intK,intpf)SELECTcontext_ngrams(sentences(lower(tweet)),array(null,null),100,[,1000])FROMtwitter;2.內(nèi)置函數(shù)(日期函數(shù))函數(shù)說明from_unixtime(bigintunixtime[,stringformat])UNIX_TIMESTAMP參數(shù)表示返回一個值YYYY-MM-DDHH:MM:SS或YYYYMMDDHHMMSS.uuuuuu格式,這取決于是否是在一個字符串或數(shù)字語境中使用的功能。該值表示在當前的時區(qū)unix_timestamp()如果不帶參數(shù)的調(diào)用,返回一個Unix時間戳(從“1970-01-0100:00:00”到現(xiàn)在的UTC秒數(shù))為無符號整數(shù)unix_timestamp(stringdate)指定日期參數(shù)調(diào)用UNIX_TIMESTAMP(),它返回參數(shù)值“1970-01-0100:00:00”到指定日期的秒數(shù)。unix_timestamp(stringdate,stringpattern)指定時間輸入格式,返回到1970年秒數(shù)to_date(stringtimestamp)返回時間中的年月日to_dates(stringdate)給定一個日期date,返回一個天數(shù)(0年以來的天數(shù))year(stringdate)返回指定時間的年份,范圍在1000到9999,或為“零”日期的0month(stringdate)返回指定時間的月份,范圍為1至12月,或為“零”月份的0day(stringdate)dayofmonth(date)返回指定時間的日期hour(stringdate)返回指定時間的小時,范圍為0到23minute(stringdate)返回指定時間的分鐘,范圍為0到59second(stringdate)返回指定時間的秒,范圍為0到59weekofyear(stringdate)返回指定日期所在一年中的星期號,范圍為0到53datediff(stringenddate,stringstartdate)兩個時間參數(shù)的日期之差date_add(stringstartdate,intdays)給定時間,在此基礎上加上指定的時間段date_sub(stringstartdate,intdays)給定時間,在此基礎上減去指定的時間段【案例:使用命令describefunction查看函數(shù)幫助】8.6.3自定義函數(shù)普通自定義函數(shù)(UDF)表生成自定義函數(shù)(UDTF)聚集自定義函數(shù)(UDAF)5.6Hive部署要點5.6.1Hive運行環(huán)境5.6.2Hive部署模式5.6.3Hive配置文件5.6.1Hive運行環(huán)境1)操作系統(tǒng)Hive支持不同平臺,在當前絕大多數(shù)主流的操作系統(tǒng)上都能夠運行,例如Unix/Linux、Windows等。2)Java環(huán)境Hive使用Java語言編寫,因此它的運行環(huán)境需要Java環(huán)境的支持。3)HadoopHive需要Hadoop的支持,它使用HDFS進行存儲,使用MapReduce進行計算。5.6.2Hive部署模式1)內(nèi)嵌模式(EmbeddedMetastore)2)本地模式(LocalMetastore)3)遠程模式(RemoteMetastore)5.6.2Hive部署模式1)內(nèi)嵌模式(EmbeddedMetastore)內(nèi)嵌模式是HiveMetastore最簡單的部署方式,使用Hive內(nèi)嵌的Derby數(shù)據(jù)庫來存儲元數(shù)據(jù)。但是Derby只能接受一個Hive會話的訪問,試圖啟動第二個Hive會話就會導致Metastore連接失敗。Hive官方并不推薦使用內(nèi)嵌模式,此模式通常用于開發(fā)者調(diào)試環(huán)境中,真正生產(chǎn)環(huán)境中很少使用。5.6.2Hive部署模式2)本地模式(LocalMetastore)本地模式是Metastore的默認模式。該模式下,單Hive會話(一個Hive服務JVM)以組件方式調(diào)用Metastore和Driver,允許同時存在多個Hive會話,即多個用戶可以同時連接到元數(shù)據(jù)庫中。常見JDBC兼容的數(shù)據(jù)庫如MySQL都可以使用,數(shù)據(jù)庫運行在一個獨立的Java虛擬機上。5.6.2Hive部署模式3)遠程模式(RemoteMetastore)遠程模式將Metastore分離出來,成為一個獨立的Hive服務,而不是和Hive服務運行在同一個虛擬機上。這種模式使得多個用戶之間不需要共享JDBC登錄帳戶信息就可以存取元數(shù)據(jù),避免了認證信息的泄漏,同時,可以部署多個Metastore服務,以提高數(shù)據(jù)倉庫可用性。5.6.3Hive配置文件Hive所有配置文件位于$HIVE_HOME/conf下文件名稱描述hive-env.shBash腳本,設置Linux/Unix環(huán)境下運行Hive要用的環(huán)境變量,主要包括Hadoop安裝路徑HADOOP_HOME、Hive配置文件存放路徑HIVE_CONF_DIR、Hive運行資源庫路徑HIVE_AUX_JARS_PATH等hive-default.xmlXML文件,Hive核心配置文件,包括Hive數(shù)據(jù)存放位置、Metastore的連接URL、JDO連接驅(qū)動類、JDO連接用戶名、JDO連接密碼等配置項,hive-site.xmlXML文件,其配置項會覆蓋默認配置hive-default.xml配置文件hive-site.xml涉及的主要參數(shù)配置參數(shù)功能hive.exec.scratchdirHDFS路徑,用于存儲不同map/reduce階段的執(zhí)行計劃和這些階段的中間輸出結(jié)果,默認值為/tmp/hive,對于每個連接用戶,都會創(chuàng)建目錄“${hive.exec.scratchdir}/<username>”,該目錄的權限為733hive.metastore.warehouse.dirHive默認數(shù)據(jù)文件存儲路徑,通常為HDFS可寫路徑,默認值為/user/hive/warehousehive.metastore.uris遠程模式下Metastore的URI列表javax.jdo.option.ConnectionURLMetastore的連接URLjavax.jdo.option.ConnectionDriverNameJDO連接驅(qū)動類javax.jdo.option.ConnectionUserNameJDO連接用戶名javax.jdo.option.ConnectionPasswordJDO連接密碼hive.hwi.war.fileHWI的war文件所在的路徑5.7Hive接口5.7.1HiveShell5.7.2HiveWebInterface(HWI)5.7.3HiveAPI5.7.1HiveShellHiveShell命令是通過$HIVE_HOME/bin/hive文件進行控制的,通過該文件可以進行Hive當前會話的環(huán)境管理,Hive表管理等操作。Hive命令需要使用“;”進行結(jié)束標示。在Linux終端下通過命令“hive-H”或“hive--servicecli--help”可以查看幫助信息。usage:hive-d,--define<key=value> VariablesubstitutiontoapplytoHivecommands.e.g.-dA=Bor--defineA=B--database<databasename> Specifythedatabasetouse-e<quoted-query-string> SQLfromcommandline-f<filename> SQLfromfiles-H,--help Printhelpinformation--hiveconf<property=value>Usevalueforgivenproperty--hivevar<key=value> VariablesubstitutiontoapplytoHivecommands.e.g.--hivevarA=B-i<filename> InitializationSQLfile-S,--silent Silentmodeininteractiveshell-v,--verbose Verbosemode(echoexecutedSQLtotheconsole)“hive”命令支持的主要參數(shù)選項參數(shù)說明-d,--define<key=value>給當前Hive會話定義新的變量--database<databasename>指定當前Hive會話使用的數(shù)據(jù)庫名稱-e<quoted-query-string>執(zhí)行查詢語句-f<filename>從文件執(zhí)行Hive查詢-H,--help顯示幫助信息--hiveconf<property=value>設置當前Hive會話的配置屬性--hivevar<key=value>和-d參數(shù)相同-i<filename>從文件中初始化Hive會話-S,--silent設置安靜模式,不提示日志信息-v,--verbose打印當前執(zhí)行的HiveQL指令1.HiveShell基本命令HiveShell常用的基本命令主要包含退出客戶端、添加文件、修改/查看環(huán)境變量、執(zhí)行l(wèi)inux命令、執(zhí)行dfs命令等。當不使用-e或-f參數(shù)時,默認進入交互模式,所有的命令都以分號結(jié)束。交互模式下,Hive支持以下命令。(1)quit/exit:離開Hive命令行。(2)setkey=value:設置配置參數(shù)信息,單獨使用set命令可以顯示所有配置參數(shù)列表。(3)set-v:顯示所有配置參數(shù)值。(4)reset:重置所有配置參數(shù)值為默認值。(5)addFILE[S]<file>*,addJAR[S]<file>*,addARCHIVE[S]<file>*:添加文件到Hive緩存中。(6)listFILE[S]<file>*,listJAR[S]<file>*,listARCHIVE[S]<file>*:檢查是否add命令添加過指定文件。(7)deleteFILE[S]<file>*,deleteJAR[S]<file>*,deleteARCHIVE[S]<file>*:刪除add命令添加的文件。(8)dfs<dfscommand>:執(zhí)行HDFS命令。(9)<query>:執(zhí)行查詢命令,并輸出結(jié)果。(10)sourceFILE<file>:執(zhí)行給定文件中的HiveShell命令。2.HiveQL除了HiveShell的基本命令外,其他的命令主要是DDL、DML、select等HiveQL語句,HiveQL簡稱HQL,是一種類SQL的查詢語言,絕大多數(shù)語法和SQL類似。1)HiveQLDDLHiveQLDDL主要有數(shù)據(jù)庫、表等模式的創(chuàng)建(CREATE)、修改(ALTER)、刪除(DROP)、顯示(SHOW)、描述(DESCRIBE)等命令,詳細參考官方文檔/confluence/display/Hive/LanguageManual+DDL。DDLOverview、CREATEDATABASECREATETABLECREATETABLECREATETABLE:創(chuàng)建一個指定名字的表。如果相同名字的表已經(jīng)存在,則拋出異常;用戶可以用IFNOTEXISTS選項來忽略這個異常。EXTERNAL:讓用戶創(chuàng)建一個外部表,在建表的同時指定一個指向?qū)嶋H數(shù)據(jù)的路徑(LOCATION)。COMMENT:為表和列添加注釋。PARTITIONEDBY:創(chuàng)建分區(qū)表。CLUSTEREDBY:創(chuàng)建分桶表。ROWFORMAT:指定數(shù)據(jù)切分格式。DELIMITED[FIELDSTERMINATEDBYchar[ESCAPEDBYchar]][COLLECTIONITEMSTERMINATEDBYchar][MAPKEYSTERMINATEDBYchar][LINESTERMINATEDBYchar][NULLDEFINEDASchar]|SERDEserde_name[WITHSERDEPROPERTIES(property_name=property_value,property_name=property_value,...)]用戶在建表的時候可以自定義SerDe或者使用自帶的SerDe。如果沒有指定ROWFORMAT或者ROWFORMATDELIMITED,將會使用自帶的SerDe。在建表的時候,用戶還需要為表指定列,用戶在指定表的列的同時也會指定自定義的SerDe,Hive通過SerDe確定表的具體列的數(shù)據(jù)。STOREDAS:指定存儲文件類型。常用的存儲文件類型:SEQUENCEFILE(二進制序列文件)、TEXTFILE(文本)、RCFILE(列式存儲格式文件)。LOCATION:指定表在HDFS上的存儲位置。2.HiveQL2)HiveQLDMLHiveQLDML主要有數(shù)據(jù)導入(LOAD)、數(shù)據(jù)插入(INSERT)、數(shù)據(jù)更新(UPDATE)、數(shù)據(jù)刪除(DELETE)等命令,詳細參考官方文檔(網(wǎng)站是最新版本Hive的參考文檔)/confluence/display/Hive/LanguageManual+DML

。數(shù)據(jù)導入(LOAD)語句LOADDATA[LOCAL]INPATH'filepath'[OVERWRITE]INTOTABLEtablename[PARTITION(partcol1=val1,partcol2=val2...)]LOADDATA[LOCAL]INPATH'filepath'[OVERWRITE]INTOTABLEtablename[PARTITION(partcol1=val1,partcol2=val2...)][INPUTFORMAT'inputformat'SERDE'serde'](3.0orlater)2.HiveQL3)HiveQLSECLETHiveQLSECLET用于數(shù)據(jù)查詢,詳細參考官方文檔/confluence/display/Hive/LanguageManual+Select。5.7.2HiveWebInterface(HWI)HiveWebInterface(HWI)是Hive自帶的一個Web-GUI,功能不多,可用于效果展示。由于Hive的bin目錄中沒有包含HWI的頁面,因此需要首先下載源碼從中提取jsp文件并打包成war文件到Hive安裝目錄下lib目錄中;然后編輯配置文件hive-site.xml,添加屬性參數(shù)“hive.hwi.war.file”的配置;這時在瀏覽器中輸入<IP>:9999/hwi會出現(xiàn)錯誤“JSPsupportnotconfigured”以及后續(xù)的“Unabletofindajavaccompiler”,究其原因,需要以下4個jar包:commons-el.jar、jasper-compiler-X.X.XX.jar、jasper-runtime-X.X.XX.jar、jdk下的tools.jar,將這些jar包拷貝到Hive的lib目錄下;最后使用命令“hive--servicehwi”啟動HWI,在瀏覽器中輸入<IP>:9999/hwi即可看到HiveWeb頁面。5.7.3HiveAPIHive支持Java、Python等語言編寫的JDBC/ODBC應用程序訪問Hive,HiveAPI詳細參考官方文檔/javadocs/,其中有各種版本的HiveJavaAPI。Java想要訪問Hive,需要通過beeline的方式連接Hive,HiveServer2提供了一個新的命令行工具beeline,HiveServer2對之前的HiveServer做了升級,功能更加強大,它增加了權限控制,要使用beeline需要先啟動HiveServer2,再使用beeline連接。5.8綜合實戰(zhàn):部署本地模式Hive和Hive實戰(zhàn)規(guī)劃Hive部署本地模式Hive驗證Hive使用HiveQL5.8.1規(guī)劃Hive主機名IP地址運行服務軟硬件配置master30NameNodeSecondaryNameNodeResourceManagerJobHistoryServerMySQLHive內(nèi)存:4GCPU:1個2核硬盤:40G操作系統(tǒng):CentOS7.6.1810Java:OracleJDK8u191Hadoop:Hadoop2.9.2MySQL:MySQL5.7.27Hive:Hive2.3.4Eclipse:EclipseIDE2018-09forJavaDevelopersslave131DataNodeNodeManager內(nèi)存:1GCPU:1個1核硬盤:20G操作系統(tǒng):CentOS7.6.1810Java:OracleJDK8u191Hadoop:Hadoop2.9.2slave232DataNodeNodeManager內(nèi)存:1GCPU:1個1核硬盤:20G操作系統(tǒng):CentOS7.6.1810Java:OracleJDK8u191Hadoop:Hadoop2.9.25.8.1規(guī)劃Hive軟件名稱軟件版本發(fā)布日期下載地址VMwareWorkstationProVMwareWorkstation14.5.7ProforWindows2017年6月22日/products/workstation-pro.htmlCentOSCentOS7.6.18102018年11月26日/download/JavaOracleJDK8u1912018年10月16日/technetwork/java/javase/downloads/index.htmlHadoopHadoop2.9.22018年11月19日/releases.htmlMySQLConnector/JMySQLConnector/J5.1.482019年7月29日/downloads/connector/j/MySQLCommunityServerMySQLCommunity5.7.272019年7月22日/get/mysql57-community-release-el7-11.noarch.rpmHiveHive2.3.42018年11月7日/downloads.html5.8.2部署本地模式Hive1.初始軟硬件環(huán)境準備(1)準備三臺機器,安裝操作系統(tǒng),編者使用CentOSLinux7。(2)對集群內(nèi)每一臺機器,配置靜態(tài)IP、修改機器名、添加集群級別域名映射、關閉防火墻。(3)對集群內(nèi)每一臺機器,安裝和配置Java,要求Java1.7或更高版本,編者使用OracleJDK8u191。(4)安裝和配置Linux集群中主節(jié)點到從節(jié)點的SSH免密登錄。(5)在Linux集群上部署全分布模式Hadoop集群,編者采用Hadoop2.9.2。5.8.2部署本地模式Hive1.初始軟硬件環(huán)境準備(1)準備三臺機器,安裝操作系統(tǒng),編者使用CentOSLinux7。(2)對集群內(nèi)每一臺機器,配置靜態(tài)IP、修改機器名、添加集群級別域名映射、關閉防火墻。(3)對集群內(nèi)每一臺機器,安裝和配置Java,要求Java1.7或更高版本,編者使用OracleJDK8u191。(4)安裝和配置Linux集群中主節(jié)點到從節(jié)點的SSH免密登錄。(5)在Linux集群上部署全分布模式Hadoop集群,編者采用Hadoop2.9.2。5.8.2部署本地模式Hive1.初始軟硬件環(huán)境準備(1)準備三臺機器,安裝操作系統(tǒng),編者使用CentOSLinux7。(2)對集群內(nèi)每一臺機器,配置靜態(tài)IP、修改機器名、添加集群級別域名映射、關閉防火墻。(3)對集群內(nèi)每一臺機器,安裝和配置Java,要求Java1.7或更高版本,編者使用OracleJDK8u191。(4)安裝和配置Linux集群中主節(jié)點到從節(jié)點的SSH免密登錄。(5)在Linux集群上部署全分布模式Hadoop集群,編者采用Hadoop2.9.2。5.8.2部署本地模式Hive2.安裝和配置MySQLMySQL在Linux下提供多種安裝方式,例如二進制方式、源碼編譯方式、YUM方式等,其中YUM方式比較簡便,但需要網(wǎng)速的支持。1)下載MySQL官方的YumRepositoryCentOS7不支持MySQL,其Yum源中默認沒有MySQL,為了解決這個問題,需要先下載MySQL的YumRepository。讀者可以直接使用瀏覽器到下載鏈接/get/mysql57-community-release-el7-11.noarch.rpm下進行下載,或者使用命令wget完成,假設當前目錄是“/home/xuluhui/Downloads”,下載到該目錄下。[root@masterDownloads]#wget/get/mysql57-community-release-el7-11.noarch.rpm5.8.2部署本地模式Hive2.安裝和配置MySQL2)安裝MySQL官方的YumRepository使用以下命令安裝MySQL官方的YumRepository。rpm-ivhmysql57-community-release-el7-11.noarch.rpm安裝完這個包后,會獲得兩個MySQL的yumrepo源:/etc/yum.repos.d/mysql-community.repo和/etc/yum.repos.d/mysql-community-source.repo。3)查看提供的MySQL版本yumrepolistall|grepmysql使用yumrepolist查看有哪些版本MySQL5.8.2部署本地模式Hive2.安裝和配置MySQL4)安裝MySQL例如采用默認的MySQLX.X進行安裝,使用以下命令安裝mysql-community-server,其他相關的依賴庫mysql-community-client、mysql-community-common和mysql-community-libs均會自動安裝。yuminstall-ymysql-community-server當看到“Complete!”提示后,MySQL就安裝完成了,接下來啟動MySQL并進行登錄數(shù)據(jù)庫的測試。5.8.2部署本地模式Hive2.安裝和配置MySQL5)啟動MySQLsystemctlstartmysqld還可以使用命令“systemctlstatusmysqld”查看狀態(tài)。5.8.2部署本地模式Hive2.安裝和配置MySQL6)測試MySQL(1)使用root和空密碼登錄測試使用root用戶和空密碼登錄數(shù)據(jù)庫服務器。mysql-uroot–p系統(tǒng)報錯,這是因為MySQL5.7調(diào)整了策略,新安裝數(shù)據(jù)庫之后,默認root密碼不是空的了。在啟動時隨機生成了一個密碼,可以/var/log/mysqld.log中找到臨時密碼,使用命令“grep‘temporarypassword’/var/log/mysqld.log”查找臨時密碼。5.8.2部署本地模式Hive2.安裝和配置MySQL6)測試MySQL(2)使用root和初始化臨時密碼登錄測試使用root和其臨時密碼再次登錄數(shù)據(jù)庫,此時可以成功登錄,但是不能做任何事情,這是因為MySQL5.7默認必須修改密碼之后才能操作數(shù)據(jù)庫。5.8.2部署本地模式Hive2.安裝和配置MySQL6)測試MySQL(3)修改root的初始化臨時密碼ALTERUSER'root'@'localhost'IDENTIFIEDBY'xijing’;出錯,這是由于MySQL5.7默認安裝了密碼安全檢查插件(validate_password),默認密碼檢查策略要求密碼必須包含:大小寫字母、數(shù)字和特殊符號,并且長度不能少于8位。MySQL5.7默認密碼檢查策略MySQL密碼策略中相關參數(shù)說明(部分)參數(shù)說明validate_password_dictionary_file指定密碼驗證的密碼字典文件路徑validate_password_length固定密碼的總長度,默認為8,至少為4validate_password_mixed_case_count整個密碼中至少要包含大/小寫字母的個數(shù),默認為1validate_password_number_count整個密碼中至少要包含阿拉伯數(shù)字的個數(shù),默認為1validate_password_special_char_count整個密碼中至少要包含特殊字符的個數(shù),默認為1validate_password_policy指定密碼的強度驗證等級,默認為MEDIUM。validate_password_policy的取值有3種:0/LOW:只驗證長度1/MEDIUM:驗證長度、數(shù)字、大小寫、特殊字符2/STRONG:驗證長度、數(shù)字、大小寫、特殊字符、字典文件5.8.2部署本地模式Hive2.安裝和配置MySQL6)測試MySQL(3)修改root的初始化臨時密碼可以通過修改密碼策略使密碼“xijing”有效,步驟如下:①設置密碼的驗證強度等級“validate_password_policy”為“LOW”,注意選擇“STRONG”時需要提供密碼字典文件。方法是:修改配置文件/etc/f,在最后添加“validate_password_policy”配置,指定密碼策略,為了使密碼“xijing”有效,編者選擇“LOW”,具體內(nèi)容如下所示。validate_password_policy=LOW②設置密碼長度“validate_password_length”為“6”,注意密碼長度最少為4。方法是:繼續(xù)修改配置文件/etc/f,在最后添加“validate_password_length”配置,具體內(nèi)容如下所示。validate_password_length=6③保存配置/etc/f并退出,重新啟動MySQL服務使配置生效,使用的命令如下所示。systemctlrestartmysqld5.8.2部署本地模式Hive2.安裝和配置MySQL6)測試MySQL(4)再次修改root的初始化臨時密碼使用root和初始化臨時密碼登錄MySQL,再次修改root密碼,如新密碼為“xijing”,密碼“xijing”符合當前的密碼策略。使用命令“flushprivileges;”刷新MySQL的系統(tǒng)權限相關表。5.8.2部署本地模式Hive2.安裝和配置MySQL6)測試MySQL(5)使用root和新密碼登錄測試5.8.2部署本地模式Hive3.在MySQL中創(chuàng)建Hive所需用戶和數(shù)據(jù)庫并授權(1)在MySQL中創(chuàng)建用戶hive,密碼為xijing,使用的命令如下所示。createuser'hive'identifiedby'xijing';(2)創(chuàng)建數(shù)據(jù)庫hive,使用的命令如下所示。createdatabasehive;(3)將數(shù)據(jù)庫hive的所有權限授權于用戶hive,使用的命令如下所示。grantallprivilegesonhive.*to'hive'@'localhost'identifiedby'xijing';(4)刷新權限,使其立即生效,使用的命令如下所示。flushprivileges;5.8.2部署本地模式Hive3.在MySQL中創(chuàng)建Hive所需用戶和數(shù)據(jù)庫并授權(5)使用hive用戶登錄,并查看是否能看到數(shù)據(jù)庫hive。5.8.2部署本地模式Hive4.獲取HiveHive官方下載地址為/downloads.html,建議讀者下載stable目錄下的當前穩(wěn)定版本。編者采用的Hive穩(wěn)定版本是2018年11月7日發(fā)布的Hive2.3.4,其安裝包文件apache-hive-2.3.4-bin.tar.gz例如存放在master機器的/home/xuluhui/Downloads中。5.8.2部署本地模式Hive5.安裝Hive并設置屬主(1)在master機器上,切換到root,解壓apache-hive-2.3.4-bin.tar.gz到安裝目錄如/usr/local下,依次使用的命令如下所示。surootcd/usr/localtar-zxvf/home/xuluhui/Downloads/apache-hive-2.3.4-bin.tar.gz(2)由于Hive的安裝目錄名字過長,可以使用mv命令將安裝目錄重命名為hive-2.3.4,使用以下命令完成。此步驟可以省略,但下文配置時Hive的安裝目錄就是“apache-hive-2.3.4-bin”。mvapache-hive-2.3.4-binhive-2.3.4(3)為了在普通用戶下使用Hive,將Hive安裝目錄的屬主設置為Linux普通用戶例如xuluhui,使用以下命令完成。chown-Rxuluhui/usr/local/hive-2.3.45.8.2部署本地模式Hive6.將MySQL的JDBC驅(qū)動包復制到Hive安裝目錄/lib(1)獲取MySQL的JDBC驅(qū)動包,并保存至/home/xlh/Downloads下,下載地址為/downloads/connector/j/。編者使用的版本是2019年7月29日發(fā)布的MySQLConnector/J5.1.48,文件名是mysql-connector-java-5.1.48.tar.gz(2)將mysql-connector-java-5.1.48.tar.gz解壓至如/home/xlh/Downloads下,使用的命令如下所示。cd/home/xlh/Downloadstar-zxvf/home/xuluhui/Downloads/mysql-connector-java-5.1.48.tar.gz(3)將解壓文件下的MySQLJDBC驅(qū)動包mysql-connector-java-5.1.48-bin.jar移動至Hive安裝目錄/usr/local/hive-2.3.4/lib下,并刪除目錄mysql-connector-java-5.1.41,依次使用的命令如下所示。mvmysql-connector-java-5.1.48/mysql-connector-java-5.1.48-bin.jar/usr/local/hive-2.3.4/librm-rfmysql-connector-java-5.1.485.8.2部署本地模式Hive7.配置Hive1)配置文件hive-env.sh環(huán)境配置文件hive-env.sh用于指定Hive運行時的各種參數(shù),主要包括Hadoop安裝路徑HADOOP_HOME、Hive配置文件存放路徑HIVE_CONF_DIR、Hive運行資源庫路徑HIVE_AUX_JARS_PATH等。(1)使用命令“cphive-env.sh.templatehive-env.sh”復制模板配置文件hive-env.sh.template并命名為“hive-env.sh”。(2)使用命令“vimhive-env.sh”編輯配置文件hive-env.sh。①配置HADOOP_HOME。將第48行HADOOP_HOME注釋去掉,并指定為個人機器上的Hadoop安裝路徑,例如,修改后的內(nèi)容如下所示。HADOOP_HOME=/usr/local/hadoop-2.9.2②配置HIVE_CONF_DIR。將第51行HIVE_CONF_DIR注釋去掉,并指定為個人機器上的Hive配置文件存放路徑,例如,修改后的內(nèi)容如下所示。exportHIVE_CONF_DIR=/usr/local/hive-2.3.4/conf②配置HIVE_AUX_JARS_PATH。將第51行HIVE_AUX_JARS_PATH注釋去掉,并指定為個人機器上的Hive運行資源庫路徑,例如,修改后的內(nèi)容如下所示。exportHIVE_AUX_JARS_PATH=/usr/local/hive-2.3.4/lib5.8.2部署本地模式Hive7.配置Hive2)配置文件hive-default.xml使用命令“cphive-default.xml.templatehive-default.xml”復制模板配置文件為hive-default.xml,這是Hive默認加載的文件。5.8.2部署本地模式Hive7.配置Hive3)配置文件hive-site.xml新建hive-site.xml,寫入MySQL的配置信息。讀者請注意,此處不必復制配置文件模板“hive-default.xml.template”為“hive-site.xml”,模板中參數(shù)過多,不宜讀。<?xmlversion="1.0"encoding="UTF-8"standalone="no"?><?xml-stylesheettype="text/xsl"href="configuration.xsl"?><configuration><property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&useSSL=false</value></property><property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value></property><property><name>javax.jdo.option.ConnectionUserName</name><value>hive</value></property><property><name>javax.jdo.option.ConnectionPassword</name><value>xijing</value></property></configuration>5.8.2部署本地模式Hive8.初始化HiveMetastore此時,啟動HiveCLI,若輸入HiveShell命令例如“showdatabases;”,會出現(xiàn)錯誤,告知不能初始化HiveMetastore。5.8.2部署本地模式Hive8.初始化HiveMetastore使用命令“schematool-initSchema-dbTypemysql”初始化元數(shù)據(jù),將元數(shù)據(jù)寫入MySQL中,若出現(xiàn)信息“schemaToolcompleted”,即表示初始化成功。5.8.2部署本地模式Hive9.在系統(tǒng)配置文件目錄/etc/profile.d下新建hive.sh另外,為了方便使用Hive各種命令,可以在Hive所安裝的機器上使用“vim/etc/profile.d/hive.sh”命令在/etc/profile.d文件夾下新建文件hive.sh,并添加如下內(nèi)容。exportHIVE_HOME=/usr/local/hive-2.3.4exportPATH=$HIVE_HOME/bin:$PATH重啟機器,使之生效。此步驟可省略。5.8.3驗證Hive1.啟動Hadoop集群Hive的運行需要Hadoop集群,因此需要首先啟動全分布模式Hadoop集群的守護進程,只需在主節(jié)點master上依次執(zhí)行以下3條命令即可。start-dfs.shstart-yarn.shmr-jobhistory-daemon.shstarthistoryserver5.8.3驗證Hive2.啟動HiveCLI啟動HiveCLI測試Hive是否部署成功,使用HiveShell的統(tǒng)一入口命令“hive”進入,并使用“showdatabases”等命令測試。5.8.3驗證Hive當HiveCLI啟動時,在master節(jié)點上會看到多一個進程“RunJar”,若啟動兩個HiveCLI,會多出2個進程“RunJar”。5.8.3驗證Hive讀者也可以查看HDFS文件,可以看到在目錄/tmp下生成了目錄hive,且該目錄權限為733。5.8.4使用HiveQL【案例5-1】已知一個關于電影評分的本地文件/usr/local/hive-2.3.4/testData/movie.csv,該文件內(nèi)容以下所示:tt13462900,長津湖,陳凱歌/徐克/林超賢,吳京/易烊千璽/段奕宏,劇情/歷史/戰(zhàn)

溫馨提示

  • 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

提交評論