真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Hive筆記整理(一)

[TOC]

目前成都創(chuàng)新互聯(lián)公司已為成百上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站改版維護、企業(yè)網(wǎng)站設(shè)計、新豐網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。


Hive筆記整理(一)

Hive

Hive由facebook貢獻給Apache,是一款建立在Hadoop之上的數(shù)據(jù)倉庫的基礎(chǔ)框架。

數(shù)據(jù)倉庫
特點——關(guān)于存放在數(shù)據(jù)倉庫中的數(shù)據(jù)的說明:
    是能夠為企業(yè)的各個級別的決策提供數(shù)據(jù)支撐的數(shù)據(jù)
其實說白了,就是一個存放數(shù)據(jù)的倉庫
數(shù)據(jù)庫和數(shù)據(jù)倉庫之間的區(qū)別
現(xiàn)代數(shù)據(jù)倉庫,是構(gòu)建在數(shù)據(jù)庫之上的,使用數(shù)據(jù)庫作為載體存放數(shù)據(jù)。
            數(shù)據(jù)倉庫著重強調(diào)的是存放的歷史數(shù)據(jù),數(shù)據(jù)庫著重強調(diào)的是存放在線的數(shù)據(jù)。
            數(shù)據(jù)倉庫著重強調(diào)的是OLAP的操作,數(shù)據(jù)庫著重強調(diào)的是OLTP的操作
                OLAP:Online Analysis Processing 聯(lián)機分析處理--->對數(shù)據(jù)進行分析查詢select、load
                OLTP:Online Transcation Processing 聯(lián)機事務(wù)處理--->對數(shù)據(jù)進行事務(wù)性操作update delete
            數(shù)據(jù)倉庫操作的都是歷史數(shù)據(jù),數(shù)據(jù)庫操作的幾乎都是在線交易數(shù)據(jù)
ETL---是用來構(gòu)建我們一個數(shù)據(jù)倉庫的概念
E(Extract 提取) 獲取數(shù)據(jù)的過程,就稱之為提取,采集
T(Transform 轉(zhuǎn)化) 對進入倉庫的數(shù)據(jù)進行分類、清洗
L(Load 加載) 數(shù)據(jù)進入倉庫的過程就是Load
BI(Business Intelligence)
Hive是一款SQL的解析引擎,能夠?qū)QL轉(zhuǎn)移成為MR在hadoop計算hdfs上面的數(shù)據(jù)。

HIve的概述

存儲結(jié)構(gòu)
Hive的數(shù)據(jù)存儲基于Hadoop HDFS
Hive沒有專門的數(shù)據(jù)存儲格式
存儲結(jié)構(gòu)主要包括:數(shù)據(jù)庫、文件、表、視圖、索引
Hive默認可以直接加載文本文件(TextFile),還支持SequenceFile、RCFile 、ORCFile、Parquet
創(chuàng)建表時,指定Hive數(shù)據(jù)的列分隔符與行分隔符,Hive即可解析數(shù)據(jù)
系統(tǒng)架構(gòu)
用戶接口:包括 CLI,JDBC/ODBC,WebUI
元數(shù)據(jù)存儲:通常是存儲在關(guān)系數(shù)據(jù)庫如 MySQL, derby等等中
Driver:解釋器、編譯器、優(yōu)化器、執(zhí)行器
Hadoop:用 HDFS 進行存儲,利用 MapReduce 進行計算

Hive的安裝

三個前提
JDK
HADOOP
MySQL
也就是確保上面三步都安裝完成后再安裝Hive
第一步:安裝MySQL(離線)
操作目錄:/home/uplooking/soft --->安裝包所在目錄
1°、查詢linux中已有的mysql依賴包
    [uplooking@uplooking01 ~]$ rpm -qa | grep mysql mysql-libs-5.1.71-1.el6.x86_64

2°、刪除linux中已有的mysql依賴包
    [uplooking@uplooking01 ~]$ sudo rpm -e --nodeps `rpm -qa | grep mysql`

3°、安裝服務(wù)端和客戶端
    [uplooking@uplooking01 ~]$ sudo rpm -ivh soft/MySQL-server-5.5.45-1.linux2.6.x86_64.rpm
    [uplooking@uplooking01 ~]$ sudo rpm -ivh soft/MySQL-client-5.5.45-1.linux2.6.x86_64.rpm

4°、啟動mysql server服務(wù)
    [uplooking@uplooking01 ~]$ sudo service mysql start(注意:離線安裝后mysql的服務(wù)名稱為mysql,在線安裝后的服務(wù)名稱為msyqld)

5°、加入到開機啟動項
    [uplooking@uplooking01 ~]$ sudo chkconfig mysql on

6°、進行用戶名密碼設(shè)置
    [uplooking@uplooking01 ~]$ sudo /usr/bin/mysql_secure_installation

7°、對遠程可訪問的機器進行授權(quán)
    uplooking@uplooking01 ~]$ mysql -huplooking01 -uroot -puplooking
    ERROR 1130 (HY000): Host 'uplooking01' is not allowed to connect to this MySQL server
    在mysql服務(wù)器登錄:mysql -uroot -puplooking
    執(zhí)行以下語句:
    mysql> grant all privileges on *.* to 'root'@'%' identified by 'uplooking';
    mysql> flush privileges;
第二步:安裝Hive
1°、解壓Hive文件:
    進入$HIVE_HOME/conf/修改文件
    cp  hive-env.sh.template  hive-env.sh
    cp  hive-default.xml.template  hive-site.xml

2°、修改$HIVE_HOME/bin的hive-env.sh,增加以下三行
    export JAVA_HOME=/opt/jdk
    export HADOOP_HOME=/home/uplooking/app/hadoop
    export HIVE_HOME=/home/uplooking/app/hive

3°、修改$HIVE_HOME/conf/hive-site.xml
    
        javax.jdo.option.ConnectionURL
        jdbc:mysql://uplooking01:3306/hive?createDatabaseIfNotExist=true
    
    
        javax.jdo.option.ConnectionDriverName
        com.mysql.jdbc.Driver
    
    
        javax.jdo.option.ConnectionUserName
        root
    
    
        javax.jdo.option.ConnectionPassword
        uplooking
    
    
        hive.querylog.location
        /home/uplooking/app/hive/tmp
    
    
        hive.exec.local.scratchdir
        /home/uplooking/app/hive/tmp
    
    
        hive.downloaded.resources.dir
        /home/uplooking/app/hive/tmp
    

4°、拷貝mysql驅(qū)動jar包到$HIVE_HOME/lib下面
    [uplooking@uplooking01 hive]$ cp ~/soft/mysql-connector-java-5.1.39.jar lib/

5°、初始化hive元數(shù)據(jù)倉庫
    該執(zhí)行目錄$HIVE_HOME/bin
    bin]$ ./schematool -initSchema -dbType mysql -userName root -passWord uplooking

6°、啟動hive
    ./hive

Hive的訪問

有本地運行模式和集群運行模式
本地模式需要打開開關(guān):set hive.exec.mode.local.auto=true
默認是集群模式
本地模式在對sql進行調(diào)試,測試的時候經(jīng)常使用

    hive.exec.mode.local.auto
    false
    Let Hive determine whether to run in local mode automatically


    hive.exec.mode.local.auto.inputbytes.max
    134217728//128M
    When hive.exec.mode.local.auto is true, input bytes should less than this for local mode.


    hive.exec.mode.local.auto.input.files.max
    4
    When hive.exec.mode.local.auto is true, the number of tasks should less than this for local mode.
有CLI、WebGUI、JDBC的三種訪問方式
CLI是最常用,也就是命令行模式

WebGUI需要自己通過hive源碼制作一個war,部署到hive里面,才能夠使用其提供的一個web界面來訪問hive,進行相關(guān)操作

JDBC就是進行sql編程,如果hive使用的是MR的計算引擎,則其運行非常之慢,不能作為交互式查詢

hive目前支持三種計算引擎:mr、spark、tez,默認是mr,spark在hive-2.0以后的版本才支持

    hive.execution.engine
    mr

Hive基本操作

數(shù)據(jù)庫操作
創(chuàng)建數(shù)據(jù)庫:
    create database mydb1;
使用數(shù)據(jù)庫:
    use mydb1;
顯示當前正在使用的數(shù)據(jù)庫:
    set hive.cli.print.current.db=true;
顯示數(shù)據(jù)庫列表:
    show databases;
刪除:
    drop database mydb1;
表操作

表的數(shù)據(jù)類型,除了string和復(fù)合數(shù)據(jù)類型(array, map, struct)之外,幾乎和mysql一致。

DDL

DDL即數(shù)據(jù)庫模式定義語言DDL(Data Definition Language),用于描述數(shù)據(jù)庫中要存儲的現(xiàn)實世界實體的語言,其實說白了就是數(shù)據(jù)庫中關(guān)于表操作的語句。

表的創(chuàng)建
    create table 表名(
        字段名 字段類型 注解comment, ... , 
        字段名 字段類型 注解comment
    ) comment "";
    eg.
    create table t1(
        id int,
        name string comment "this is t1's column name"
    ) comment "TABLE t1";

增加一列:
    alter table t1 add columns (age int) ;

刪除一列?不支持刪除一列
    alter table t1 drop column age;

替換,曲線完成刪除一列的內(nèi)容
    alter table t1 replace columns(online string);使用當前列替換掉原有的所有列

工作中,經(jīng)常使用腳本的方式來對編寫,并執(zhí)行hql:

hive客戶端:hive> source /opt/data/hive/hive-t1.hql;
linux終端一:/opt/hive/bin/hive -f hive-t1-1.hql
linux終端二:/opt/hive/bin/hive -e "set hive.exec.mode.local.auto=true;select * from test;"
    對上述linux終端的執(zhí)行方式,我們還可以添加相關(guān)參數(shù)選項
    /opt/hive/bin/hive -f hive-t1-1.hql --hiveconf hive.exec.mode.local.auto=true
    /opt/hive/bin/hive -e "select * from test;" --hiveconf hive.exec.mode.local.auto=true
這樣做,可以非常方便將hive的執(zhí)行語句,組成成為shell腳本,在linux中調(diào)度相關(guān)shell計算hive中的數(shù)據(jù)
這兩個-e和-f不能互換,

eg。
/opt/hive/bin/hive -e "use mydb1; select * from test where line like '%you%';" --hiveconf hive.cli.print.header=true
/opt/hive/bin/hive -f hive-t1-1.hql --hiveconf hive.cli.print.header=true
數(shù)據(jù)操作
向hive表中導(dǎo)入數(shù)據(jù)的方式
hive cli:
hive> load data local inpath '/opt/data/hive/hive-t1-1.txt' into table t1;
Linux終端:
$ hdfs dfs -put /opt/data/hive/hive-t1-1.txt /user/hive/warehouse/t1/

我們在導(dǎo)入數(shù)據(jù)的時候,發(fā)現(xiàn)數(shù)據(jù)沒有解析成功,那是因為自定義的數(shù)據(jù),行列有相關(guān)的分隔符,并沒有告知當前表如何解析,或者說自定義數(shù)據(jù)的解析方式和hive表的默認的解析方式不一致。

hive表默認的解析方式----行列的分隔符
默認的行分隔符\n
默認的列分隔符\001 在鍵盤上如何輸入呢ctrl+v ctrl+a
數(shù)據(jù)進入數(shù)據(jù)庫表中的模式
讀模式
    將數(shù)據(jù)加載到表中的時候,對數(shù)據(jù)的合法性不進行校驗,只有在操作表的時候,才對數(shù)據(jù)合法性進行校驗,不合法的數(shù)據(jù)顯示為NULL(比如某一列的數(shù)據(jù)類型為日期類型,如果load的某條數(shù)據(jù)是該列不是日期類型,則該條數(shù)據(jù)的這一列不合法,導(dǎo)入hive之后就會顯示為NULL)
    適合大數(shù)據(jù)的加載,比如hive
寫模型
    在數(shù)據(jù)加載到表中的時候,需要對數(shù)據(jù)的合法性進行校驗,加載到數(shù)據(jù)庫中的數(shù)據(jù),都是合法的數(shù)據(jù)。
    適合事務(wù)性數(shù)據(jù)庫加載數(shù)據(jù),常見的mysql、oracle等都是采用這種模式
自定義分隔符
create table t2 (
    id int,
    name string,
    birthday date,
    online boolean
) row format delimited ---->開啟使用自定義分隔符的標識
fields terminated by '\t'   ---->對每一列分隔符的定義
lines terminated by '\n';   ---->對每一行分隔符的定義,當然可以省略不寫,默認和linux保持一致,同時注意,這兩個順序不能顛倒
Hive表的復(fù)合數(shù)據(jù)類型
array ---->java中的array
create table t3_arr(
    id int,
    name string,
    hobby array
)
row format delimited
fields terminated by '\t';

array的默認分割是\002,在shell中如何敲出來ctrl+v ctrl+b
默認不能滿足需求,需要自定義分隔符

create table t3_arr_1(
    id int,
    name string,
    hobby array
)
row format delimited
fields terminated by '\t'
collection items terminated by ','; 

在導(dǎo)入數(shù)據(jù)時,數(shù)據(jù)的格式應(yīng)該如下:
1   香飄葉子    IT,Computer

array的引用,使用arrayName[index],索引從0開始
map---->java中的map
每個人都有學(xué)習(xí)(語文、數(shù)學(xué)、體育)成績
create table t4_map(
    id int,
    name string,
    score map comment "this is score"
) row format delimited 
fields terminated by '\t'
collection items terminated by ','
map keys terminated by '=';

根據(jù)上面的定義,導(dǎo)入的數(shù)據(jù)格式應(yīng)該如下:
1   香飄葉子    Chinese=102,Math=121,English=124

map里面的默認的key和value之間的分隔符:\003,在shell里面通過ctrl+v ctrl+c

map具體值的調(diào)用格式,列名["屬性"],比如score["chinese"]
struct---->java中的object
id  name    address(province:string, city:string, zip:int)
1   小陳  bj,chaoyang,100002
2   老王  hb,shijiazhuang,052260
3   小何  hn,huaiyang,466000
4   小馬  hlj,harbin,10000

create table t5_struct (
    id int,
    name string,
    address struct
) row format delimited 
fields terminated by '\t'
collection items terminated by ',';

調(diào)用的格式:列名.屬性,比如address.province
復(fù)合數(shù)據(jù)類型案例

有一張員工表:

id          int
name        string
subordinate array
salary      float
tax         map
home_info   struct

創(chuàng)建表:

create table t7_emp (
    id          int,
    name        string,
    subordinate array,
    salary      float,
    tax         map,
    home_info   struct           
);

查詢員工的稅后工資,查詢家鄉(xiāng)為河北的人員:

select id, name, salary * (1 - tax["gs"] - tax["gjj"] - tax["sb"]) sh_salary from t7_emp where home_info.province = "河北";

網(wǎng)站題目:Hive筆記整理(一)
鏈接URL:http://weahome.cn/article/ihpiih.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部