日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > 互聯(lián)網(wǎng) > Hive學(xué)習(xí)(九)Hive體系結(jié)構(gòu)

Hive學(xué)習(xí)(九)Hive體系結(jié)構(gòu)

來源:程序員人生   發(fā)布時間:2014-11-12 09:04:12 閱讀次數(shù):4617次
1、Hive架構(gòu)與基本組成
    下面是Hive的架構(gòu)圖。
圖1.1 Hive體系結(jié)構(gòu)
    Hive的體系結(jié)構(gòu)可以分為以下幾部份:
    (1)用戶接口主要有3個:CLI,Client 和 WUI。其中最經(jīng)常使用的是CLI,Cli啟動的時候,會同時啟動1個Hive副本。Client是Hive的客戶端,用戶連接至Hive Server。在啟動 Client模式的時候,需要指出Hive Server所在節(jié)點,并且在該節(jié)點啟動Hive Server。 WUI是通過閱讀器訪問Hive。
    (2)Hive將元數(shù)據(jù)存儲在http://www.jyygyx.com/db/中,如mysql、derby。Hive中的元數(shù)據(jù)包括表的名字,表的列和分區(qū)及其屬性,表的屬性(是不是為外部表等),表的數(shù)據(jù)所在目錄等。
    (3)解釋器、編譯器、優(yōu)化器完成HQL查詢語句從詞法分析、語法分析、編譯、優(yōu)化和查詢計劃的生成。生成的查詢計劃存儲在HDFS中,并在隨后有MapReduce調(diào)用履行。
    (4)Hive的數(shù)據(jù)存儲在HDFS中,大部份的查詢、計算由MapReduce完成(包括*的查詢,比如select * from tbl不會生成MapRedcue任務(wù))。
    Hive將元數(shù)據(jù)存儲在RDBMS中,

有3種模式可以連接到http://www.jyygyx.com/db/:
    (1) 單用戶模式。此模式連接到1個In-memory 的http://www.jyygyx.com/db/Derby,1般用于Unit Test。
圖2.1 單用戶模式
    (2)多用戶模式。通過網(wǎng)絡(luò)連接到1個http://www.jyygyx.com/db/中,是最常常使用到的模式。


圖2.2 多用戶模式

    (3) 遠(yuǎn)程http://www.jyygyx.com/server/模式。用于非Java客戶端訪問元http://www.jyygyx.com/db/,在http://www.jyygyx.com/server/端啟動MetaStoreServer,客戶端利用Thrift協(xié)議通過MetaStoreServer訪問元http://www.jyygyx.com/db/。
 
    對數(shù)據(jù)存儲,Hive沒有專門的數(shù)據(jù)存儲格式,也沒有為數(shù)據(jù)建立索引,用戶可以非常自由的組織Hive中的表,只需要在創(chuàng)建表的時候告知Hive數(shù)據(jù)中的列分隔符和行分隔符,Hive就能夠解析數(shù)據(jù)。Hive中所有的數(shù)據(jù)都存儲在HDFS中,存儲結(jié)構(gòu)主要包括http://www.jyygyx.com/db/、文件、表和視圖。Hive中包括以下數(shù)據(jù)模型:Table內(nèi)部表,External Table外部表,Partition分區(qū),Bucket桶。Hive默許可以直接加載文本文件,還支持sequence file 、RCFile。

    Hive的數(shù)據(jù)模型介紹以下:
    (1)Hivehttp://www.jyygyx.com/db/
    類似傳統(tǒng)http://www.jyygyx.com/db/的DataBase,在第3方http://www.jyygyx.com/db/里實際是1張表。簡單示例命令行 hive > create database test_database;

    (2)內(nèi)部表
    Hive的內(nèi)部表與http://www.jyygyx.com/db/中的Table在概念上是類似。每個Table在Hive中都有1個相應(yīng)的目錄存儲數(shù)據(jù)。例如1個表pvs,它在HDFS中的路徑為/wh/pvs,其中wh是在hive-site.xml中由${hive.metastore.warehouse.dir} 指定的數(shù)據(jù)倉庫的目錄,所有的Table數(shù)據(jù)(不包括External Table)都保存在這個目錄中。刪除表時,元數(shù)據(jù)與數(shù)據(jù)都會被刪除。
    內(nèi)部表簡單示例:
    創(chuàng)建數(shù)據(jù)文件:test_inner_table.txt
    創(chuàng)建表:create table test_inner_table (key string)
    加載數(shù)據(jù):LOAD DATA LOCAL INPATH ‘filepath’ INTO TABLE test_inner_table
    查看數(shù)據(jù):select * from test_inner_table;  select count(*) from test_inner_table
    刪除表:drop table test_inner_table

    (3)外部表
    外部表指向已在HDFS中存在的數(shù)據(jù),可以創(chuàng)建Partition。它和內(nèi)部表在元數(shù)據(jù)的組織上是相同的,而實際數(shù)據(jù)的存儲則有較大的差異。內(nèi)部表的創(chuàng)建進(jìn)程和數(shù)據(jù)加載進(jìn)程這兩個進(jìn)程可以分別獨立完成,也能夠在同1個語句中完成,在加載數(shù)據(jù)的進(jìn)程中,實際數(shù)據(jù)會被移動到數(shù)據(jù)倉庫目錄中;以后對數(shù)據(jù)對訪問將會直接在數(shù)據(jù)倉庫目錄中完成。刪除表時,表中的數(shù)據(jù)和元數(shù)據(jù)將會被同時刪除。而外部表只有1個進(jìn)程,加載數(shù)據(jù)和創(chuàng)建表同時完成(CREATE EXTERNAL TABLE ……LOCATION),實際數(shù)據(jù)是存儲在LOCATION后面指定的 HDFS 路徑中,其實不會移動到數(shù)據(jù)倉庫目錄中。當(dāng)刪除1個External Table時,僅刪除該鏈接。
    外部表簡單示例:
    創(chuàng)建數(shù)據(jù)文件:test_external_table.txt
    創(chuàng)建表:create external table test_external_table (key string)
    加載數(shù)據(jù):LOAD DATA INPATH ‘filepath’ INTO TABLE test_inner_table
    查看數(shù)據(jù):select * from test_external_table;  ?select count(*) from test_external_table
    刪除表:drop table test_external_table

    (4)分區(qū)
    Partition對應(yīng)于http://www.jyygyx.com/db/中的Partition列的密集索引,但是Hive中Partition的組織方式和http://www.jyygyx.com/db/中的很不相同。在Hive中,表中的1個Partition對應(yīng)于表下的1個目錄,所有的Partition的數(shù)據(jù)都存儲在對應(yīng)的目錄中。例如pvs表中包括ds和city兩個Partition,則對應(yīng)于ds = 20090801, ctry = US 的HDFS子目錄為/wh/pvs/ds=20090801/ctry=US;對應(yīng)于 ds = 20090801, ctry = CA 的HDFS子目錄為/wh/pvs/ds=20090801/ctry=CA。
    分區(qū)表簡單示例:
    創(chuàng)建數(shù)據(jù)文件:test_partition_table.txt
    創(chuàng)建表:create table test_partition_table (key string) partitioned by (dt string)
    加載數(shù)據(jù):LOAD DATA INPATH ‘filepath’ INTO TABLE test_partition_table partition (dt=‘2006’)
    查看數(shù)據(jù):select * from test_partition_table;  select count(*) from test_partition_table
    刪除表:drop table test_partition_table

    (5)桶
    Buckets是將表的列通過Hash算法進(jìn)1步分解成不同的文件存儲。它對指定列計算hash,根據(jù)hash值切分?jǐn)?shù)據(jù),目的是為了并行,每個Bucket對應(yīng)1個文件。例如將user列分散至32個bucket,首先對user列的值計算hash,對應(yīng)hash值為0的HDFS目錄為/wh/pvs/ds=20090801/ctry=US/part-00000;hash值為20的HDFS目錄為/wh/pvs/ds=20090801/ctry=US/part-00020。如果想利用很多的Map任務(wù)這樣是不錯的選擇。
    桶的簡單示例:
    創(chuàng)建數(shù)據(jù)文件:test_bucket_table.txt
    創(chuàng)建表:create table test_bucket_table (key string) clustered by (key) into 20 buckets
    加載數(shù)據(jù):LOAD DATA INPATH ‘filepath’ INTO TABLE test_bucket_table
    查看數(shù)據(jù):select * from test_bucket_table;  set hive.enforce.bucketing = true;

    (6)Hive的視圖
    視圖與傳統(tǒng)http://www.jyygyx.com/db/的視圖類似。視圖是只讀的,它基于的基本表,如果改變,數(shù)據(jù)增加不會影響視圖的顯現(xiàn);如果刪除,會出現(xiàn)問題。?如果不指定視圖的列,會根據(jù)select語句后的生成。
    示例:create view test_view as select * from test

    2、Hive的履行原理


圖2.1 Hive的履行原理
    Hive構(gòu)建在Hadoop之上, 
    (1)HQL中對查詢語句的解釋、優(yōu)化、生成查詢計劃是由Hive完成的 
    (2)所有的數(shù)據(jù)都是存儲在Hadoop中 
    (3)查詢計劃被轉(zhuǎn)化為MapReduce任務(wù),在Hadoop中履行(有些查詢沒有MR任務(wù),如:select * from table)
    (4)Hadoop和Hive都是用UTF⑻編碼的
    Hive編譯器將1個Hive QL轉(zhuǎn)換操作符。操作符Operator是Hive的最小的處理單元,每一個操作符代表HDFS的1個操作或1道MapReduce作業(yè)。Operator都是hive定義的1個處理進(jìn)程,其定義有:
protected List <Operator<? extends Serializable >> childOperators; 
protected List <Operator<? extends Serializable >> parentOperators; 
protected boolean done;   // 初始化值為false
    所有的操作構(gòu)成了Operator圖,hive正是基于這些圖關(guān)系來處理諸如limit, group by, join等操作。
圖2.2 Hive QL的操作符
    操作符以下:
    TableScanOperator:掃描hive表數(shù)據(jù)
    ReduceSinkOperator:創(chuàng)建將發(fā)送到Reducer真?zhèn)€<Key,Value>對
    JoinOperator:Join兩份數(shù)據(jù)
    SelectOperator:選擇輸出列
    FileSinkOperator:建立結(jié)果數(shù)據(jù),輸出至文件
    FilterOperator:過濾輸入數(shù)據(jù)
    GroupByOperator:GroupBy語句
    MapJoinOperator:/*+mapjoin(t) */
    LimitOperator:Limit語句
    UnionOperator:Union語句
    Hive通過ExecMapper和ExecReducer履行MapReduce任務(wù)。在履行MapReduce時有兩種模式,即本地模式和散布式模式 。
    Hive編譯器的組成:
   



圖2.3 Hive編譯器的組成
    編譯流程以下:

   
圖2.4 Hive QL編譯流程



    3、Hive和http://www.jyygyx.com/db/的異同
    由于Hive采取了SQL的查詢語言HQL,因此很容易將Hive理解為http://www.jyygyx.com/db/。其實從結(jié)構(gòu)上來看,Hive和http://www.jyygyx.com/db/除具有類似的查詢語言,再無類似的地方。http://www.jyygyx.com/db/可以用在Online的利用中,但是Hive是為數(shù)據(jù)倉庫而設(shè)計的,清楚這1點,有助于從利用角度理解Hive的特性。
    Hive和http://www.jyygyx.com/db/的比較以下表:


Hive

RDBMS
查詢語言
HQL
SQL
數(shù)據(jù)存儲
HDFS
Raw Device or Local FS
數(shù)據(jù)格式
用戶定義
系統(tǒng)決定
數(shù)據(jù)更新
不支持
支持
索引
履行
MapReduce
Executor
履行延遲
處理數(shù)據(jù)范圍
可擴(kuò)大性

     (1)查詢語言。由于 SQL 被廣泛的利用在數(shù)據(jù)倉庫中,因此專門針對Hive的特性設(shè)計了類SQL的查詢語言HQL。熟習(xí)SQL開發(fā)的開發(fā)者可以很方便的使用Hive進(jìn)行開發(fā)。

     (2)數(shù)據(jù)存儲位置。Hive是建立在Hadoop之上的,所有Hive的數(shù)據(jù)都是存儲在HDFS中的。而http://www.jyygyx.com/db/則可以將數(shù)據(jù)保存在塊裝備或本地文件系統(tǒng)中。

  &nb
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 成年人在线免费观看 | 日本福利一区二区三区 | 成人做爰www免费看视频网站 | 久久最新 | www.色com情11 | 91视频久久久久久 | 国产乱妇4p交换乱免费视频 | 在线国产专区 | 麻豆一区二区99久久久久 | 精品不卡 | 五月婷婷影院 | 国产精品久久久久久久久久久久 | 在线欧美视频 | 97精品国产97久久久久久粉红 | 亚洲三级免费 | 毛片免费看 | 在线精品一区 | 久久国产精品首页 | 国产精品日韩一区二区 | 免费看的av | 一级在线视频 | 亚洲高清色图 | 成人黄色免费观看视频 | 色九九 | 久久999精品 | 麻豆免费视频 | 欧美精品乱码久久久久久 | 99色网站 | 免费成人在线看 | 亚洲国产成人精品女人久 | 久久国产系列 | 这里只有精品视频 | 美女精品一区 | 亚洲艹 | 看av片 | 一区二区日本 | 国产精品不卡av | 国产福利第一导航 | 日韩欧美高清一区二区 | 国产精品99精品久久免费 | 在线免费激情视频 |