———沉寂了一個(gè)寒假建车,沒有更新一篇文章椒惨,仿佛一切都是陌生的。所見的的人领斥,所看的景。
????
hive的服務(wù)組成:
??????? Hive是建立在Hadoop平臺(tái)上的月洛,本身沒有特定的數(shù)據(jù)存儲(chǔ)模式,也不會(huì)為數(shù)據(jù)建立索引导而。數(shù)據(jù)以任意的形式存儲(chǔ)在Hdfs上隔崎,或者以特定分類的形式存儲(chǔ)在分布式數(shù)據(jù)庫HBase(Nosql的一種)。在創(chuàng)建Hive表時(shí)候指明數(shù)據(jù)的列分隔符和行分隔符即可解析存儲(chǔ)在HDFS和HBase上的數(shù)據(jù)虚缎。
???????? hive 建立在Hadoop平臺(tái)上钓株。主要是提供一個(gè)sql解析的過程。把外部sql命令解析成一個(gè)mapreduce作業(yè)計(jì)劃轴合,并把按照該計(jì)劃生成的Mapreduce任務(wù)交給Hadoop集群處理。所以题涨,要進(jìn)行hive 處理总滩,必須要保證Hadoop 集群正常啟動(dòng)。
??????? 簡而言之 hive是一個(gè)數(shù)據(jù)倉庫工具席函,作用是可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表冈涧,并提供簡單查詢功能,可以將sql語句轉(zhuǎn)化為Mapreduce任務(wù)進(jìn)行督弓,是在Hadoop上的數(shù)據(jù)庫基礎(chǔ)架構(gòu)。數(shù)據(jù)倉庫面向主題是集成的溶推,不可更新 ,不隨時(shí)間改變的虱痕。
???????? hive的運(yùn)行方式底層走的是maoreduce辐赞,可任意實(shí)現(xiàn)自定義的mapper 和reduce 任務(wù)、hive是SQL解析引擎响委,它將SQL語句解析翻譯成M/PJob管理 運(yùn)行在Hadoop上執(zhí)行
?????? hive表其實(shí)就是HDFS的目錄赘风。按照表名把文件夾分開,如果是分區(qū)表邀窃,則分區(qū)值是文件夾,可以直接在Mr/job中使用這些數(shù)據(jù)鞍历。hive 相當(dāng)于是Hadoop客服端工具肪虎,部署時(shí)候不放在,不一定集群上扇救,可以放在某個(gè)節(jié)點(diǎn)上爵政。
按照原理標(biāo)準(zhǔn)圖word手繪圖如下:
hive的安裝
步驟:
1.上傳安裝包并解壓
2.配置環(huán)境變量,指定安裝路徑, 要配置 path hive_home等
3饱岸,安裝MySQL 數(shù)據(jù)庫。
我在安裝MySQL數(shù)據(jù)庫遇到問題了汤锨,先是用的是tmp包百框,也就是源碼包,不能·達(dá)到預(yù)期結(jié)果柬泽,然后改成rmp二進(jìn)制包,安裝成功后锨并,但是hive不能與MySQL建立連接,問題出在MySQL密碼與hive-site.xml設(shè)置的不一樣導(dǎo)致無法建立連接解幼,之后修改密碼連接成功
包警,之所以安裝MySQL是因?yàn)閔ive 默認(rèn)的數(shù)據(jù)庫是Derby數(shù)據(jù)庫,其與MySQL數(shù)據(jù)庫比較存在缺陷台汇。
hive shell
hive shell是運(yùn)行在Hadoop環(huán)境上的篱瞎,是hive提供的命令行接口,在hive提示符出現(xiàn)后輸入hive命令俐筋,hiveshell會(huì)把這些hiveSQL查詢轉(zhuǎn)換一系列的mapreduce作業(yè)任務(wù)進(jìn)行并行處理澄者。然后返回處理結(jié)果。
hiveshell 還可以在非交互式模式下運(yùn)行
HiveQLq與SQL語言非常類似粱挡,hive
不存儲(chǔ)數(shù)據(jù),只是管理存儲(chǔ)在hdfs上的數(shù)據(jù)榕堰,也就是管理hdfs上文件的目錄嫌套,也可以稱作是管理元數(shù)據(jù)信息的。通過hive表導(dǎo)入數(shù)據(jù)只是簡單的將數(shù)據(jù)移動(dòng)【如果數(shù)據(jù)在hdfs上】或復(fù)制【如果數(shù)據(jù)是本地文件系統(tǒng)中】到hive表所在的HDFS目錄中
hive 管理數(shù)據(jù)有以下幾種方式魏蔗,內(nèi)部表痹筛,外部表廓鞠,分區(qū)谣旁,桶。
1夕土、內(nèi)部表:Hive中的表和關(guān)系型數(shù)據(jù)庫中的表在概念上很類似瘟判,每個(gè)表在HDFS中都有相應(yīng)的目錄用來存儲(chǔ)表的數(shù)據(jù),這個(gè)目錄可以通
過${HIVE_HOME}/conf/hive-site.xml配置文件中的hive.metastore.warehouse.dir屬性來配置篮撑,
這個(gè)屬性默認(rèn)的值是/user/hive/warehouse(這個(gè)目錄在HDFS上)匆瓜,我們可以根據(jù)實(shí)際的情況來修改這個(gè)配置。如果我有一個(gè)表wyp驮吱,
那么在HDFS中會(huì)創(chuàng)建/user/hive/warehouse/wyp目錄(這里假定hive.metastore.warehouse.dir配置
為/user/hive/warehouse);wyp表所有的數(shù)據(jù)都存放在這個(gè)目錄中桐筏。這個(gè)例外是外部表拇砰。
2、外部表:Hive中的外部表和表很類似牧氮,但是其數(shù)據(jù)不是放在自己表所屬的目錄中瑰枫,而是存放到別處,這樣的好處是如果你要?jiǎng)h除這個(gè)外部表剖毯,該
外部表所指向的數(shù)據(jù)是不會(huì)被刪除的教馆,它只會(huì)刪除外部表對(duì)應(yīng)的元數(shù)據(jù)擂达;而如果你要?jiǎng)h除表胶滋,該表對(duì)應(yīng)的所有數(shù)據(jù)包括元數(shù)據(jù)都會(huì)被刪除悲敷。
3、分區(qū):在Hive中部宿,表的每一個(gè)分區(qū)對(duì)應(yīng)表下的相應(yīng)目錄瓢湃,所有分區(qū)的數(shù)據(jù)都是存儲(chǔ)在對(duì)應(yīng)的目錄中。比如wyp表有dt和city兩個(gè)分區(qū)绵患,
則對(duì)應(yīng)dt=20131218,city=BJ對(duì)應(yīng)表的目錄為/user/hive/warehouse/dt=20131218/city=BJ落蝙,所有
屬于這個(gè)分區(qū)的數(shù)據(jù)都存放在這個(gè)目錄中。
4筏勒、桶:對(duì)指定的列計(jì)算其hash,根據(jù)hash值切分?jǐn)?shù)據(jù)厨埋,目的是為了并行病瞳,每一個(gè)桶對(duì)應(yīng)一個(gè)文件(注意和分區(qū)的區(qū)別)。比如將wyp表id
列分散至16個(gè)桶中亲善,首先對(duì)id列的值計(jì)算hash逗柴,對(duì)應(yīng)hash值為0和16的數(shù)據(jù)存儲(chǔ)的HDFS目錄為:/user/hive/warehouse
/wyp/part-00000;而hash值為2的數(shù)據(jù)存儲(chǔ)的HDFS
目錄為:/user/hive/warehouse/wyp/part-00002渣蜗。
hive表DDL操作
create /drop/ alter 數(shù)據(jù)庫
eg: create database shopping
location '/hive/shopping'
with dbproperties('creator'='bush','date'='2017-1-1')
使用hdfs? dfs -ls 可以查看hdfs上的/hive 目錄
接下來就是hive 的DDL 和 DML 操作了
更多?