bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

為什么選擇Hive

這篇文章將為大家詳細(xì)講解有關(guān)為什么選擇Hive,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

創(chuàng)新互聯(lián)是一家專業(yè)的成都網(wǎng)站建設(shè)公司,我們專注成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷、企業(yè)網(wǎng)站建設(shè),買友情鏈接,廣告投放平臺為企業(yè)客戶提供一站式建站解決方案,能帶給客戶新的互聯(lián)網(wǎng)理念。從網(wǎng)站結(jié)構(gòu)的規(guī)劃UI設(shè)計到用戶體驗提高,創(chuàng)新互聯(lián)力求做到盡善盡美。

為什么選擇Hive?


 

基于Hadoop的大數(shù)據(jù)的計算/擴(kuò)展能力

支持SQL like查詢語言

統(tǒng)一的元數(shù)據(jù)管理

簡單編程

Hive的安裝

1.1在hadoop生態(tài)圈中屬于數(shù)據(jù)倉庫的角色。他能夠管理hadoop中的數(shù)據(jù),同時可以查詢hadoop中的數(shù)據(jù)。

  本質(zhì)上講,hive是一個SQL解析引擎。Hive可以把SQL查詢轉(zhuǎn)換為MapReduce中的job來運行。

  hive有一套映射工具,可以把SQL轉(zhuǎn)換為MapReduce中的job,可以把SQL中的表、字段轉(zhuǎn)換為HDFS中的文件(夾)以及文件中的列。

  這套映射工具稱之為metastore,一般存放在derby、MySQL中。

1.2 hive在hdfs中的默認(rèn)位置是/user/hive/warehouse,是由配置文件hive-conf.xml中屬性hive.metastore.warehouse.dir決定的。

2.hive的安裝

  (1)解壓縮、重命名、設(shè)置環(huán)境變量

  (2)在目錄$HIVE_HOME/conf/下,執(zhí)行命令mv hive-default.xml.template  hive-site.xml重命名

     在目錄$HIVE_HOME/conf/下,執(zhí)行命令mv hive-env.sh.template  hive-env.sh重命名

  (3)修改hadoop的配置文件hadoop-env.sh,修改內(nèi)容如下:

     export HADOOP_CLASSPATH=.:$CLASSPATH:$HADOOP_CLASSPATH:$HADOOP_HOME/bin

  (4)在目錄$HIVE_HOME/bin下面,修改文件hive-config.sh,增加以下內(nèi)容:

     export JAVA_HOME=/usr/local/jdk

     export HIVE_HOME=/usr/local/hive

     export HADOOP_HOME=/usr/local/hadoop

3.安裝mysql

  (1)刪除linux上已經(jīng)安裝的mysql相關(guān)庫信息。rpm  -e  xxxxxxx   --nodeps

     執(zhí)行命令rpm -qa |grep mysql 檢查是否刪除干凈

  (2)執(zhí)行命令 rpm -i   mysql-server-********  安裝mysql服務(wù)端 

  (3)啟動mysql 服務(wù)端,執(zhí)行命令  mysqld_safe &

  (4)執(zhí)行命令 rpm -i   mysql-client-********  安裝mysql客戶端

  (5)執(zhí)行命令mysql_secure_installation設(shè)置root用戶密碼

4. 使用mysql作為hive的metastore

  (1)把mysql的jdbc驅(qū)動放置到hive的lib目錄下

  (2)修改hive-site.xml文件,修改內(nèi)容如下:  

<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://hadoop0:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
</property>
<property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
</property>
<property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>admin</value>
</property>


 

   為什么選擇Hive

?用戶接口,包括 CLI,JDBC/ODBC,WebUI

?元數(shù)據(jù)存儲,通常是存儲在關(guān)系數(shù)據(jù)庫如 mysql, derby 中

?解釋器、編譯器、優(yōu)化器、執(zhí)行器

?Hadoop:用 HDFS 進(jìn)行存儲,利用 MapReduce 進(jìn)行計算


 


 

用戶接口主要有三個:CLI,JDBC/ODBC和 WebUI

.CLI,即Shell命令行

.JDBC/ODBC是 Hive 的Java,與使用傳統(tǒng)數(shù)據(jù)庫JDBC的方式類似

.WebGUI是通過瀏覽器訪問 Hive

Hive 將元數(shù)據(jù)存儲在數(shù)據(jù)庫中(metastore),目前只支持mysql、derby。Hive 中的元數(shù)據(jù)包括表的名字,表的列和分區(qū)及其屬性,表的屬性(是否為外部表等),表的數(shù)據(jù)所在目錄等

解釋器、編譯器、優(yōu)化器完成 HQL 查詢語句從詞法分析、語法分析、編譯、優(yōu)化以及查詢計劃(plan)的生成。生成的查詢計劃存儲在HDFS 中,并在隨后有 MapReduce 調(diào)用執(zhí)行

Hive 的數(shù)據(jù)存儲在 HDFS 中,大部分的查詢由 MapReduce 完成(包含 * 的查詢,比如 select * from table 不會生成 MapRedcue 任務(wù))

Hive的metastore
 


 

metastore是hive元數(shù)據(jù)的集中存放地。metastore默認(rèn)使用內(nèi)嵌的derby數(shù)據(jù)庫作為存儲引擎

Derby引擎的缺點:一次只能打開一個會話

使用Mysql作為外置存儲引擎,多用戶同時訪問 

Hive的shell

1、hive 命令行模式,直接輸入#/hive/bin/hive的執(zhí)行程序,或者輸入#hive --service cli

2、 hive web界面的 (端口號9999) 啟動方式

#hive --service hwi&

用于通過瀏覽器來訪問hive

http://hadoop0:9999/hwi/

3、 hive 遠(yuǎn)程服務(wù) (端口號10000) 啟動方式

#hive --service hiveserver&


 

Hive與傳統(tǒng)數(shù)據(jù)庫

查詢語言

HiveQL

SQL

數(shù)據(jù)存儲位置

HDFS

Raw  Device or 本地FS

數(shù)據(jù)格式

用戶定義

系統(tǒng)決定

數(shù)據(jù)更新

不支持

支持

索引

新版本有,但弱

執(zhí)行

MapReduce

Executor

執(zhí)行延遲

可擴(kuò)展性

數(shù)據(jù)規(guī)模


 

Hive的數(shù)據(jù)類型

基本數(shù)據(jù)類型
tinyint / smalint / int /bigint
float / double
boolean
string
復(fù)雜數(shù)據(jù)類型
Array/Map/Struct
沒有date /datetime 


 

Hive的數(shù)據(jù)存儲

Hive的數(shù)據(jù)存儲基于Hadoop HDFS

Hive沒有專門的數(shù)據(jù)存儲格式

存儲結(jié)構(gòu)主要包括:數(shù)據(jù)庫、文件、表、視圖

Hive默認(rèn)可以直接加載文本文件(TextFile),還支持sequence file

創(chuàng)建表時,指定Hive數(shù)據(jù)的列分隔符與行分隔符,Hive即可解析數(shù)據(jù)


 

Hive的數(shù)據(jù)模型-內(nèi)部表


 

與數(shù)據(jù)庫中的 Table 在概念上是類似

每一個 Table 在 Hive 中都有一個相應(yīng)的目錄存儲數(shù)據(jù)。例如,一個表test,它在 HDFS 中的路徑為:/ warehouse/test。 warehouse是在hive-site.xml 中由 ${hive.metastore.warehouse.dir} 

指定的數(shù)據(jù)倉庫的目錄
 

所有的 Table 數(shù)據(jù)(不包括 External Table)都保存在這個目錄中。
 

刪除表時,元數(shù)據(jù)與數(shù)據(jù)都會被刪除
 


 

Hive的數(shù)據(jù)模型-分區(qū)表

Partition 對應(yīng)于數(shù)據(jù)庫的 Partition 列的密集索引

在 Hive 中,表中的一個 Partition 對應(yīng)于表下的一個目錄,所有的 Partition 的數(shù)據(jù)都存儲在對應(yīng)的目錄中

例如:test表中包含 date 和 city 兩個 Partition,

?則對應(yīng)于date=20130201, city = bj 的HDFS 子目錄?:

/warehouse/test/date=20130201/city=bj

?對應(yīng)于date=20130202, city=sh 的HDFS 子目錄為;?

/warehouse/test/date=20130202/city=sh


 

CREATE TABLE tmp_table #表名

(

title   string, #字段名稱 字段類型

minimum_bid     double,

quantity        bigint,

have_invoice    bigint

)COMMENT'注釋:XXX' #表注釋

 PARTITIONED BY(ptSTRING) #分區(qū)表字段(如果你文件非常之大的話,采用分區(qū)表可以快過濾出按分區(qū)字段劃分的數(shù)據(jù))

 ROW FORMAT DELIMITED

   FIELDSTERMINATED BY '\001'   # 字段是用什么分割開的

STOREDAS SEQUENCEFILE; #用哪種方式存儲數(shù)據(jù),SEQUENCEFILE是hadoop自帶的文件壓縮格式


 

一些相關(guān)命令

SHOW TABLES; #查看所有的表

SHOW TABLES '*TMP*'; #支持模糊查詢

SHOWPARTITIONS TMP_TABLE; #查看表有哪些分區(qū)

DESCRIBE TMP_TABLE; #查看表結(jié)構(gòu)

分區(qū)表的shell


 

創(chuàng)建數(shù)據(jù)文件partition_table.dat

創(chuàng)建表

create table partition_table(rectime string,msisDNString) partitioned by(daytime string,citystring) row format delimited fields terminated by '\t' stored as TEXTFILE;

加載數(shù)據(jù)到分區(qū)

load data local inpath'/home/partition_table.dat' into table partition_tablepartition (daytime='2013-02-01',city='bj');

查看數(shù)據(jù)

select * from partition_table

select count(*) from partition_table

刪除表 drop table partition_table


 

Hive的數(shù)據(jù)模型—桶表

桶表是對數(shù)據(jù)進(jìn)行哈希取值,然后放到不同文件中存儲。

創(chuàng)建表create table bucket_table(id string) clustered by(id) into 4 buckets; 加載數(shù)據(jù)set hive.enforce.bucketing = true;

insert into table bucket_table select name from stu; 

insert overwrite table bucket_table select name from stu;

數(shù)據(jù)加載到桶表時,會對字段取hash值,然后與桶的數(shù)量取模。把數(shù)據(jù)放到對應(yīng)的文件中。

抽樣查詢

select * from bucket_table tablesample(bucket 1 out of 4 on id);


 

Hive的數(shù)據(jù)模型-外部表

指向已經(jīng)在 HDFS 中存在的數(shù)據(jù),可以創(chuàng)建 Partition

它和 內(nèi)部表 在元數(shù)據(jù)的組織上是相同的,而實際數(shù)據(jù)的存儲則有較大的差異

內(nèi)部表 的創(chuàng)建過程和數(shù)據(jù)加載過程(這兩個過程可以在同一個語句中完成),在加載數(shù)據(jù)的過程中,實際數(shù)據(jù)會被移動到數(shù)據(jù)

倉庫目錄中;之后對數(shù)據(jù)對訪問將會直接在數(shù)據(jù)倉庫目錄中完成。刪除表時,表中的數(shù)據(jù)和元數(shù)據(jù)將會被同時刪除

外部表只有一個過程,加載數(shù)據(jù)和創(chuàng)建表同時完成,并不會移動到數(shù)據(jù)倉庫目錄中,只是與外部數(shù)據(jù)建立一個鏈接。當(dāng)刪除一個外部表時,僅刪除鏈接

CREATEEXTERNAL TABLE page_view


( viewTimeINT,

  useridBIGINT,

  page_urlSTRING,  

  referrer_urlSTRING,  

  ipSTRING COMMENT 'IP Address of the User',

  country STRING COMMENT 'country of origination‘

)
   
    COMMENT 'This is the staging page view table'


    ROW FORMAT DELIMITED FIELDSTERMINATED BY '44' LINES   TERMINATED BY '12'

    STORED ASTEXTFILE

    LOCATION 'hdfs://centos:9000/user/data/staging/page_view';


 


 

外部表的shell  

創(chuàng)建數(shù)據(jù)文件external_table.dat

創(chuàng)建表

hive>create external table external_table1 (key string) ROW FORM   AT  DELIMITED FIELDS TERMINATED BY '\t' location '/home/external';

在HDFS創(chuàng)建目錄/home/external


 

#hadoop fs -put /home/external_table.dat /home/external

加載數(shù)據(jù)

LOAD DATA INPATH '/home/external_table1.dat' INTO TABLE external_table1;

查看數(shù)據(jù)

select * from external_table

select count(*) from external_table

刪除表
 

drop table external_table


 

導(dǎo)入數(shù)據(jù)


 

?當(dāng)數(shù)據(jù)被加載至表中時,不會對數(shù)據(jù)進(jìn)行任何轉(zhuǎn)換。Load 操作只是將數(shù)據(jù)復(fù)制/移動至 Hive 表對應(yīng)的位置。

 LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE]
    INTO TABLE tablename
    [PARTITION (partcol1=val1, partcol2=val2 ...)]

?把一個Hive表導(dǎo)入到另一個已建Hive表

 INSERT OVERWRITE TABLE tablename[PARTITION (partcol1=val1, partcol2=val2 ...)] select_statementFROM from_statement

?CTAS

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name

  (col_namedata_type, ...)  …

  AS SELECT …

例:create table new_external_testas  select * from external_table1

 

查詢


 

?基于Partition的查詢 

一般 SELECT查詢是全表掃描。但如果是分區(qū)表,查詢就可以利用分區(qū)剪枝(input pruning)的特性,類似“分區(qū)索引“”,只掃描一個表中它關(guān)心的那一部分。Hive當(dāng)前的實現(xiàn)是,只有分區(qū)斷言(Partitioned by)出現(xiàn)在離FROM子句最近的那個WHERE子句中,才會啟用分區(qū)剪枝。例如,如果page_views表(按天分區(qū))使用date列分區(qū),以下語句只會讀取分區(qū)為‘2008-03-01’的數(shù)據(jù)。

 SELECT page_views.*    FROM page_views    WHERE page_views.date>= '2013-03-01' AND page_views.date<= '2013-03-01'

?LIMIT Clause

Limit可以限制查詢的記錄數(shù)。查詢的結(jié)果是隨機(jī)選擇的。下面的查詢語句從t1表中隨機(jī)查詢5條記錄:

SELECT * FROM t1 LIMIT 5

?Top N查詢

下面的查詢語句查詢銷售記錄最大的5個銷售代表。

SETmapred.reduce.tasks= 1
SELECT * FROM sales SORT BY amount DESC LIMIT 5

表連接



 

導(dǎo)入ac信息表

hive> create table acinfo(name string,acipstring)  row format delimited fields terminated by '\t' stored as TEXTFILE;

hive> load data local inpath'/home/acinfo/ac.dat' into table acinfo;

內(nèi)連接

select b.name,a.* from dim_aca join acinfo b on (a.ac=b.acip) limit 10;

左外連接

select b.name,a.* from dim_ac a left outer join acinfo b on a.ac=b.acip limit 10;


 



Java客戶端

Hive遠(yuǎn)程服務(wù)啟動#hive --service hiveserver>/dev/null  2>/dev/null &

JAVA客戶端相關(guān)代碼

Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver");
Connection con = DriverManager.getConnection("jdbc:hive://192.168.1.102:10000/wlan_dw", "", "");
Statement stmt = con.createStatement();
String querySQL="SELECT * FROM wlan_dw.dim_m order by flux desc limit 10";
ResultSet res = stmt.executeQuery(querySQL); 
while (res.next()) {
System.out.println(res.getString(1) +"\t" +res.getLong(2)+"\t" +res.getLong(3)+"\t" +res.getLong(4)+"\t" +res.getLong(5));
}

UDF


1、UDF函數(shù)可以直接應(yīng)用于select語句,對查詢結(jié)構(gòu)做格式化處理后,再輸出內(nèi)容。

2、編寫UDF函數(shù)的時候需要注意一下幾點:

a)自定義UDF需要繼承org.apache.hadoop.hive.ql.UDF。

b)需要實現(xiàn)evaluate函數(shù),evaluate函數(shù)支持重載。

4、步驟

a)把程序打包放到目標(biāo)機(jī)器上去;

b)進(jìn)入hive客戶端,添加jar包:hive>add jar /run/jar/udf_test.jar;

c)創(chuàng)建臨時函數(shù):hive>CREATE TEMPORARY FUNCTION add_example AS 'hive.udf.Add';

d)查詢HQL語句:

SELECT add_example(8, 9) FROM scores;

SELECT add_example(scores.math, scores.art) FROM scores;

SELECT add_example(6, 7, 8, 6.8) FROM scores;

e)銷毀臨時函數(shù):hive> DROP TEMPORARY FUNCTION add_example;

注:UDF只能實現(xiàn)一進(jìn)一出的操作,如果需要實現(xiàn)多進(jìn)一出,則需要實現(xiàn)UDAF

 

關(guān)于“為什么選擇Hive”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

分享題目:為什么選擇Hive
標(biāo)題網(wǎng)址:http://vcdvsql.cn/article2/jhjgoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、網(wǎng)站建設(shè)搜索引擎優(yōu)化、外貿(mào)建站全網(wǎng)營銷推廣、企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司