日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案

一、Hive的基本概念

成都創(chuàng)新互聯(lián)公司主營玉州網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP軟件開發(fā),玉州h5微信小程序搭建,玉州網(wǎng)站營銷推廣歡迎玉州等地區(qū)企業(yè)咨詢

1.1 hive是什么?

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

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

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

1.2 hive的數(shù)據(jù)存儲特點

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

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

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

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

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

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

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

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

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

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

將metastore獨立出來,遠程方法調(diào)用

三、hive的安裝與使用

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

進入$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. javax.jdo.option.ConnectionURL
  2. jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true
  3. javax.jdo.option.ConnectionDriverName
  4. com.mysql.jdbc.Driver
  5. javax.jdo.option.ConnectionUserName
  6. root
  7. javax.jdo.option.ConnectionPassword
  8. 123456

3.3hive臨時目錄的配置

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

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

 
 
  1. hive.metastore.warehouse.dir
  2. /usr/local/hive/warehouse

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

 
 
  1. hive.exec.scratdir
  2. /usr/local/hive/tmp

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

 
 
  1. hive.querylog.location
  2. /usr/local/hive/log

3.4hive的運行模式的指定

Hive的運行模式即任務(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默認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)測試連接數(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 表與目錄的對應(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的腳本運行

$>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 遠程服務(wù) (端口號10000) 啟動方式

3.9 hive常用的命令– set命令

hive控制臺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] 下標訪問

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

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

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

默認使用的是“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沒有 行級別的插入,更新和刪除操作,往表中插入數(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)部表或受控表

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

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

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

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

(5)加載數(shù)據(jù)的過程,實際數(shù)據(jù)會被移動到數(shù)據(jù)倉庫目錄中;對數(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. //這個要指定,否則load的時候數(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的表叫做外部表

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

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

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

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

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

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

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

分類的標準就是分區(qū)字段,可以一個,也可以多個;

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

創(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. select count(*) from partition_table
  3. 刪除表 drop table partition_table

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

CREATE TABLE tmp_table #表名

 
 
  1. (
  2. title   string, # 字段名稱 字段類型
  3. minimum_bid     double,
  4. quantity        bigint,
  5. have_invoice    bigint
  6. )COMMENT '注釋:XXX' #表注釋
  7. PARTITIONED BY(pt STRING) #分區(qū)表字段(如果你文件非常之大的話,采用分區(qū)表可以快過濾出按分區(qū)字段劃分的數(shù)據(jù))
  8. ROW FORMAT DELIMITED
  9. FIELDS TERMINATED BY '\001'   # 字段是用什么分割開的
  10. STORED AS SEQUENCEFILE; #用哪種方式存儲數(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 動態(tài)分區(qū)裝載數(shù)據(jù)

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

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

#查詢字段一樣

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

單語句建表并同時裝載數(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的存儲形式比較

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

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

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

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

總結(jié)

 


分享文章:Hive從概念到安裝使用總結(jié)
網(wǎng)址分享:http://www.5511xx.com/article/dhhjdcd.html