自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Hive從概念到安裝使用總結(jié)

開發(fā) 前端
hive中的表實(shí)質(zhì)就是HDFS的目錄,按表名將文件夾分開,若是分區(qū)表,則分區(qū)值是子文件夾。這些數(shù)據(jù)可以直接在M/R中使用。hive中的數(shù)據(jù)是存放在HDFS中的。

一、Hive的基本概念

1.1 hive是什么?

(1)Hive是建立在hadoop數(shù)據(jù)倉庫基礎(chǔ)之上的一個(gè)基礎(chǔ)架構(gòu);

(2)相當(dāng)于hadoop之上的一個(gè)客戶端,可以用來存儲(chǔ)、查詢和分析存儲(chǔ)在hadoop中的數(shù)據(jù);

(3)是一種SQL解析引擎,能夠?qū)QL轉(zhuǎn)換成Map/Reduce中的Job在hadoop上執(zhí)行。

1.2 hive的數(shù)據(jù)存儲(chǔ)特點(diǎn)

(1)數(shù)據(jù)存儲(chǔ)是基于hadoop的HDFS;

(2)沒有專門的數(shù)據(jù)存儲(chǔ)格式;

(3)存儲(chǔ)結(jié)構(gòu)主要有:數(shù)據(jù)庫、文件(默認(rèn)可以直接加載文本文件)、表、視圖、索引;

說明:hive中的表實(shí)質(zhì)就是HDFS的目錄,按表名將文件夾分開,若是分區(qū)表,則分區(qū)值是子文件夾。這些數(shù)據(jù)可以直接在M/R中使用。hive中的數(shù)據(jù)是存放在HDFS中的。

二、hive的系統(tǒng)結(jié)構(gòu)

存儲(chǔ)hive的元數(shù)據(jù)(表及表的屬性、數(shù)據(jù)庫名字等)

分析執(zhí)行hive QL語句,將執(zhí)行計(jì)劃投遞給hadoop,轉(zhuǎn)到map/reduce執(zhí)行

2.1 hive的系統(tǒng)結(jié)構(gòu)– metastore存儲(chǔ)方式

默認(rèn)情況,元數(shù)據(jù)使用內(nèi)嵌的derby數(shù)據(jù)庫作為存儲(chǔ)引擎

將存儲(chǔ)數(shù)據(jù)獨(dú)立出來,支持多用戶同時(shí)訪問

將metastore獨(dú)立出來,遠(yuǎn)程方法調(diào)用

三、hive的安裝與使用

3.1下載hive源文件,解壓hive文件

進(jìn)入$HIVE_HOME/conf/修改文件

  1. cp  hive-default.xml.template  hive-site.xml 
  2. cp  hive-env.sh.template hive-env.sh 

修改$HIVE_HOME/bin的hive-env.sh,增加以下三行

  1. HADOOP_HOME=    --hadoop的home目錄 
  2. export HIVE_CONF_DIR=   --hive的conf目錄 
  3. export HIVE_AUX_JARS_PATH=   --hive的lib目錄 

生效文件:

  1. source /hive-env.sh(生效文件) 

3.2 配置MySQL的metastore

修改$HIVE_HOME/conf/hive-site.xml

  1. <property> 
  2.  
  3. <name>javax.jdo.option.ConnectionURL</name> 
  4.  
  5. <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value> 
  6.  
  7. </property> 
  8.  
  9. <property> 
  10.  
  11. <name>javax.jdo.option.ConnectionDriverName</name> 
  12.  
  13. <value>com.mysql.jdbc.Driver</value> 
  14.  
  15. </property> 
  16.  
  17. <property> 
  18.  
  19. <name>javax.jdo.option.ConnectionUserName</name> 
  20.  
  21. <value>root</value> 
  22.  
  23. </property> 
  24.  
  25. <property> 
  26.  
  27. <name>javax.jdo.option.ConnectionPassword</name> 
  28.  
  29. <value>123456</value> 
  30.  
  31. </property> 

3.3hive臨時(shí)目錄的配置

修改$HIVE_HOME/conf/hive-site.xml

(1)設(shè)定數(shù)據(jù)目錄

  1. <property> 
  2.  
  3. <name>hive.metastore.warehouse.dir</name> 
  4.  
  5. <value>/usr/local/hive/warehouse</value> 
  6.  
  7. </property> 

(2)設(shè)定臨時(shí)文件目錄

  1. <property> 
  2.  
  3. <name>hive.exec.scratdir</name> 
  4.  
  5. <value>/usr/local/hive/tmp</value> 
  6.  
  7. </property> 

(3)hive相關(guān)日志的目錄

  1. <property> 
  2.  
  3. <name>hive.querylog.location</name> 
  4.  
  5. <value>/usr/local/hive/log</value> 
  6.  
  7. </property> 

3.4hive的運(yùn)行模式的指定

Hive的運(yùn)行模式即任務(wù)的執(zhí)行環(huán)境,分為本地與集群兩種,我們可以通過mapred.job.tracker 來指明

本地模式設(shè)置方式:

  1. hive > set mapred.job.tracker=local; 
  2. hive > set hive.exec.mode.local.auto=true
  3. hive.exec.mode.local.auto.inputbytes.max默認(rèn)128M 

3.5 sqoop的安裝

(1)下載、解壓:

  1. tar -zxvf sqoop-1.4.4.bin__hadoop-2.0.4-alpha.tar.gz /root 
  2. cd /root 
  3. ln -s sqoop-1.4.3.bin sqoop 

(2)配置sqoop:

  1. vi ~/.bash_profile 
  2. export SQOOP_HOME=/usr/local/sqoop 
  3. export PATH=$SQOOP_HOME/bin:$PATH 

(3)測(cè)試連接數(shù)據(jù)庫并列出數(shù)據(jù)庫:

  1. sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root --password 123456 

(4)將mysql中的表導(dǎo)入到hive中:

  1. sqoop import --connect jdbc:mysql://localhost:3306/gwifi --username root --password 123456 --table think_access --hive-import -m 1; 

3.6 hive的命令行方式

1、輸入#/hive/bin/hive執(zhí)行應(yīng)用程序, 或者

  1. #hive 
  2. hive> create table test(id int, name string); 
  3. hive> show tables; 
  4. hive>quit; 

查看并修改表與目錄之間的關(guān)系

  1. #hadoop fs -ls /user/hive/warehouse/ 

修改參數(shù):hive.metastore.warehouse.dir 表與目錄的對(duì)應(yīng)關(guān)系

3.6 命令行方式

顯示或修改參數(shù)值

在代碼中可以使用${…}來使用

命名空間

使用權(quán)限

描述

hivevar

可讀寫

$ hive -d name=zhangsan;

hiveconf

可讀寫

$ hive –hiveconf hive.cli.print.current.db=true;$ hive –hiveconf hive.cli.print.header=true;

system

可讀寫

java定義的配置屬性,如system:user.name

env

只讀

shell環(huán)境變量,如env:USER

3.7 hive的腳本運(yùn)行

$>hive -i /home/my/hive-init.sql
$hive>source file

與linux交互命令 !

!ls
!pwd

與hdfs交互命令

dfs -ls /
dfs -mkdir /hive

3.8 hive的jdbc模式

JAVA API交互執(zhí)行方式

hive 遠(yuǎn)程服務(wù) (端口號(hào)10000) 啟動(dòng)方式

3.9 hive常用的命令– set命令

hive控制臺(tái)set命令:

set hive.cli.print.current.db=true;
set hive.metastore.warehouse.dir=/hive

hive參數(shù)初始化配置set命令:

~/.hiverc

四、HiveQL數(shù)據(jù)操作

4.1數(shù)據(jù)類型

1、基本數(shù)據(jù)類型:與mysql等數(shù)據(jù)庫中基本數(shù)據(jù)類型類似;

2、復(fù)合數(shù)據(jù)類型:

(1)array 數(shù)組類型 如:array[int] 下標(biāo)訪問

(2)struct結(jié)構(gòu)類型 如: struct{name:STRING,age:INT} .訪問

(3)Map結(jié)構(gòu)

4.2 數(shù)據(jù)庫/表的定義、操作

默認(rèn)使用的是“default”數(shù)據(jù)庫,使用命令選擇數(shù)據(jù)庫:

hive> use <數(shù)據(jù)庫名>

創(chuàng)建數(shù)據(jù)庫: create database <數(shù)據(jù)庫名>

查看所有數(shù)據(jù)庫: show databases;

查看/刪除數(shù)據(jù)庫:desc/drop database <數(shù)據(jù)庫名>;

注:Hive沒有 行級(jí)別的插入,更新和刪除操作,往表中插入數(shù)據(jù)的唯一方法就是使用成批載入操作

hive>create table 表名(字段名 字段類型,……)

hive>show tables;

hive>create table t2 like t1;

hive> drop table 表名    —刪除表

增加列

hive>ALTER TABLE t3 ADD COLUMNS(gender int);

在mysql中hive數(shù)據(jù)庫中show tables; 在TBLS表中可以查看到hie創(chuàng)建的表。

4.3 數(shù)據(jù)庫/表的定義、操作

插入數(shù)據(jù):insert overwrite table t_table1 select * from t_table1 where XXXX;

刪除數(shù)據(jù):insert overwrite table test select * from test where 1=0;

數(shù)組類型的表的操作:

定義復(fù)合數(shù)據(jù)類型的 表:create table demo_array(id int, mydata array[string])  PARTITIONED BY (dt STRING)  row format delimited fields terminated by ’\t’ collection items terminated by ’|';

–id 與mydata之間是’\t’隔開,其后的mydata數(shù)據(jù)之間用’|'隔開

4.3.1 Hive的數(shù)據(jù)模型-管理表

管理表,也稱作內(nèi)部表或受控表

特點(diǎn):(1)數(shù)據(jù)全部保存在warehouse目錄中;

(2)刪除表時(shí)元數(shù)據(jù)和表中的數(shù)據(jù)都會(huì)被刪除;

(3)創(chuàng)建表和數(shù)據(jù)加載可以在同一條語句中實(shí)現(xiàn);

(4)每個(gè)表在HDFS中都有相應(yīng)的目錄用來存儲(chǔ)表的數(shù)據(jù)

(5)加載數(shù)據(jù)的過程,實(shí)際數(shù)據(jù)會(huì)被移動(dòng)到數(shù)據(jù)倉庫目錄中;對(duì)數(shù)據(jù)的訪問是在數(shù)據(jù)倉庫目錄中完成。

4.3.1 Hive的數(shù)據(jù)模型-管理表

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

創(chuàng)建表

  1. hive>create table inner_table (key string) 
  2. row format delimited fields terminated by '\t'
  3. //這個(gè)要指定,否則load的時(shí)候數(shù)據(jù)為NULL; 

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

hive>load data local inpath '/root/inner_table.dat' into table inner_table;

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

select * from inner_table

select count(*) from inner_table

刪除表 drop table inner_table

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

包含externable的表叫做外部表

特點(diǎn):(1)刪除外部表只刪除metastore的元數(shù)據(jù),不刪除hdfs中的表數(shù)據(jù);

(2)加載數(shù)據(jù)和創(chuàng)建表是同時(shí)完成的,并不會(huì)移動(dòng)到數(shù)據(jù),只是與外部數(shù)據(jù)建立一個(gè)鏈接;刪除一個(gè)外部表,只是刪除了該鏈接

(3)指向已經(jīng)在 HDFS 中存在的數(shù)據(jù)

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

  1. CREATE EXTERNAL TABLE page_view 
  2.  
  3. ( viewTime INT, 
  4.  
  5. userid BIGINT, 
  6.  
  7. page_url STRING, 
  8.  
  9. referrer_url STRING, 
  10.  
  11. ip STRING COMMENT 'IP Address of the User'
  12.  
  13. country STRING COMMENT 'country of origination‘ 
  14.  
  15.  
  16. COMMENT 'This is the staging page view table' 
  17.  
  18. ROW FORMAT DELIMITED FIELDS TERMINATED BY '44'  LINES  TERMINATED BY '12' 
  19.  
  20. STORED AS TEXTFILE 
  21.  
  22. LOCATION 'hdfs://centos:9000/user/data/staging/page_view'

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

分區(qū)可以理解為分類,通過分類把不同類型的數(shù)據(jù)放到不同的目錄下;

分類的標(biāo)準(zhǔn)就是分區(qū)字段,可以一個(gè),也可以多個(gè);

分區(qū)表的意義在于優(yōu)化查詢,查詢時(shí)盡量利用分區(qū)字段;如果不使用分區(qū)字段,就會(huì)全部掃描。

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

創(chuàng)建表

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

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

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

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

 

  1. select * from partition_table 
  2.  
  3. select count(*) from partition_table 
  4.  
  5. 刪除表 drop table partition_table 

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

CREATE TABLE tmp_table #表名

  1.  
  2. title   string, # 字段名稱 字段類型 
  3.  
  4. minimum_bid     double
  5.  
  6. quantity        bigint, 
  7.  
  8. have_invoice    bigint 
  9.  
  10. )COMMENT '注釋:XXX' #表注釋 
  11.  
  12. PARTITIONED BY(pt STRING) #分區(qū)表字段(如果你文件非常之大的話,采用分區(qū)表可以快過濾出按分區(qū)字段劃分的數(shù)據(jù)) 
  13.  
  14. ROW FORMAT DELIMITED 
  15.  
  16. FIELDS TERMINATED BY '\001'   # 字段是用什么分割開的 
  17.  
  18. STORED AS SEQUENCEFILE; #用哪種方式存儲(chǔ)數(shù)據(jù),SEQUENCEFILE是hadoop自帶的文件壓縮格式 

4.4.1 裝載數(shù)據(jù)

從文件中裝載數(shù)據(jù)

hive>LOAD DATA [LOCAL] INPATH '...' [OVERWRITE] INTO TABLE t2 [PARTITION (province='beijing')];

通過查詢表重新裝載數(shù)據(jù)

hive>INSERT OVERWRITE TABLE t2 PARTITION (province='beijing') SELECT * FROM xxx WHERE xx

設(shè)置job并行數(shù)量 hive.exec.parallel =true;

hive.exec.parallel. thread.number =3;

4.4.2 動(dòng)態(tài)分區(qū)裝載數(shù)據(jù)

開啟動(dòng)態(tài)分區(qū)支持

  1. hive>set hive.exec.dynamic.partition=true
  2.  
  3. hive>set hive.exec.dynamic.partition.mode=nostrict; 
  4.  
  5. hive>set hive.exec.max.dynamic.partitions.pernode=1000

#查詢字段一樣

  1. hive>INSERT OVERWRITE TABLE t3 PARTITION(province, city) 
  2.  
  3. SELECT t.province, t.city FROM temp t; 
  4.  
  5. hive>INSERT OVERWRITE TABLE t3 PARTITION(province='bj', city) 
  6.  
  7. SELECT t.province, t.city FROM temp t WHERE t.province='bj'

單語句建表并同時(shí)裝載數(shù)據(jù)

hive>CREATE TABLE t4 AS SELECT ....

select count(0) from (select id from test where name like 'zh%') a join (select id from test where name like '%i%') b on a.id = b.id;

五、hive的存儲(chǔ)形式比較

hive在建表時(shí),可以通過‘STORED AS FILE_FORMAT’ 指定存儲(chǔ)文件格式。有以下幾種:

1.TextFile:存儲(chǔ)空間較大,壓縮之后的文件不能分割與合并,查詢效率低;可直接存儲(chǔ),加載速度最快;

2.sequencefile:hadoop API提供的一種二進(jìn)制文件支持,存儲(chǔ)空間最大,可分割與合并,查詢效率高,需要text文件轉(zhuǎn)換來加載

3.RcFile:是一種行列存儲(chǔ)相結(jié)合的存儲(chǔ)方式。(1)將數(shù)據(jù)按行分塊,保證同一個(gè)record在一個(gè)塊上,避免讀一個(gè)記錄需要讀取多個(gè)block;(2)塊數(shù)據(jù)列式存儲(chǔ),有利于數(shù)據(jù)壓縮和快速的列存取。查詢效率最高、存儲(chǔ)空間最小、但加載最慢

總結(jié)

 

責(zé)任編輯:王雪燕 來源: 碼農(nóng)網(wǎng)
相關(guān)推薦

2024-05-29 12:50:49

2022-05-25 16:32:36

云原生Cloud

2012-04-25 10:02:39

H3CNGIP

2020-03-05 09:53:59

ElasticSearLuceneJava

2009-07-09 18:20:53

云存儲(chǔ)云計(jì)算云服務(wù)

2017-07-25 16:04:31

概念應(yīng)用強(qiáng)化學(xué)習(xí)

2010-08-25 17:05:41

DHCP服務(wù)器

2013-08-19 11:55:48

華為HCC大會(huì)HCC2013華為

2014-06-04 13:20:52

大數(shù)據(jù)

2019-04-17 09:53:11

物聯(lián)網(wǎng)網(wǎng)關(guān)物聯(lián)網(wǎng)IOT

2012-09-17 09:54:35

云計(jì)算云安全

2014-03-06 09:38:59

微軟云計(jì)算Windows Azu

2019-07-12 11:28:00

元數(shù)據(jù)大數(shù)據(jù)存儲(chǔ)

2018-05-30 08:15:08

人工智能神經(jīng)網(wǎng)絡(luò)

2015-09-16 10:58:53

物聯(lián)網(wǎng)

2020-05-20 15:27:44

智慧城市數(shù)據(jù)技術(shù)

2017-01-12 16:13:28

自然語言深度學(xué)習(xí)系統(tǒng)

2021-09-16 19:22:06

Java概念concurrent

2017-03-27 20:42:17

遷移學(xué)習(xí)人工智能機(jī)器學(xué)習(xí)

2010-01-15 14:02:48

軟交換技術(shù)應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)