Hive介紹&部署&配置&簡單使用

Hive官網:https://cwiki.apache.org/confluence/display/Hive

Hadoop

  • 狹義
    Hadoop是最重要最基礎的一個部分
  • 廣義
    Hadoop生態圈,包括Hadoop、Hive、Sqoop、HBase…

Hive概述

構建在Hadoop(HDFS/MapReduce/YARN)之上的數據倉庫
Hive的數據是存放在HDFS之上
Hive底層執行引擎:MapReduce/Tez/Spark,只需要通過一個參數就能夠切換底層的執行引擎,Hive作業提交到YARN上運行
提供了HQL查詢語言

	和SQL類似,但不完全相同
	所謂的大數據“雲化”:是一個很大項目

適用於離線處理/批處理
HDFS上的數據:文本 壓縮、列式存儲
SQL on Hadoop:Hive/Presto/Impala/Spark SQL…
元數據 vs 源數據

	源數據:HDFS上的文件
	元數據:是描述數據的數據

Hive架構

在這裏插入圖片描述
用戶接口層:黑窗口(cli)、JDBC
Driver/驅動器
SQL解析:SQL ==> AST(antlr)
查詢優化:邏輯/物理執行計劃
UDF/SerDes:
Execution:執行
元數據:表名、所屬數據庫、列(名/類型/index)、表類型、表數據所在目錄

	id,username,password,age	

Hive的數據是存放在HDFS之上
Hive的數據分爲兩部分:數據 + 元數據

Hive和RDBMS的對比

Hive和RDBMS的對比
相同點

	SQL
	事務
	insert/update/delete   Hive-0.14才支持
		針對Hive數據倉庫,寫比較少的,批次加載數據到Hive然後進行統計分析

不同點

	體量/集羣規模
	延遲/時性

Hive部署

前置

要求 linux,jdk8以上,hadoop2.x以及mysql數據庫

安裝

移動tar包到指定目錄下
[root@JD ~]# mv hive-1.1.0-cdh5.16.2.tar.gz 		     /home/hadoop/software

切換hadoop用戶
[root@JD ~]# su - hadoop

解壓到app目錄下
[hadoop@JD software]$ tar -zxvf hive-1.1.0-cdh5.16.2.tar.gz -C ~/app/

在配置環境變量
[hadoop@JD hive-1.1.0-cdh5.16.2]$ vi ~/.bashrc 
export HIVE_HOME=/home/hadoop/app/hive-1.1.0-cdh5.16.2
export PATH=$HIVE_HOME/bin:$PATH

重新加載環境變量
[hadoop@JD hive-1.1.0-cdh5.16.2]$ source ~/.bashrc

配置

$HIVE_HOME下目錄說明

bin:腳本
lib:依賴包
conf:配置文件

修改配置文件

  • 創建hive-site.xml並增加配置,包括配置mysql數據配

      [hadoop@JD conf]$ vi hive-site.xml
    
    javax.jdo.option.ConnectionURL jdbc:mysql://JD:3306/ruozedata_hive?createDatabaseIfNotExist=true
      <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>xxx</value>
      </property>
    
      <property>
              <name>hive.cli.print.current.db</name>
              <value>true</value>
      </property>
    
      <property>
              <name>hive.cli.print.header</name>
              <value>true</value>
      </property>
    
  • 將mysql驅動放到lib目錄下

      使用root用戶將驅動放到lib目錄下
      [root@JD ~]# mv mysql-connector-java-5.1.27-bin.jar /home/hadoop/app/hive-1.1.0-cdh5.16.2/lib
    
      修改該文件的用戶和用戶組
      [root@JD lib]# cd /home/hadoop/app/hive-1.1.0-cdh5.16.2/lib
      [root@JD lib]# chown hadoop:hadoop mysql-connector-java-5.1.27-bin.jar
    
  • 配置hive日誌

      [hadoop@JD conf]$ cp  hive-log4j.properties.template hive-log4j.properties
    
  • 解析hive日誌路徑

       在hive-log4j.properties中查看到日誌的生成路徑
       hive.log.dir=${java.io.tmpdir}/${user.name}
      hive.log.file=hive.log
      解析結果
      ${java.io.tmpdir}/${user.name}/${hive.log.file}
      /tmp/hadoop/hive.log
    
  • Hive配置屬性

      全局配置在hive-site.xml中進行配置
      
      當前session配置
      查看當前的屬性:set key;
      修改當前的屬性:set key=value;
      hive -hiveconf hive.cli.print.current.db=true
    
  • Hive中交互式命令

      -e:不需要進入hive命令後,就可以跟上sql語句查詢
      	-f:執行指定文件(內容是SQL語句)
    
  • 拓展:基於Hive的離線統計/數據倉庫

      把SQL封裝到shell腳本中去,使用hive -e "query sql..."
      定時調度:crontab 
    

Hive使用

啓動hive

[hadoop@JD hive-1.1.0-cdh5.16.2]$ hive

基本命令

查看庫
hive (default)> show databases;
OK
database_name
default
Time taken: 3.231 seconds, Fetched: 1 row(s)

創建表
hive (default)> create table stu(id int,name string,age int);
OK
Time taken: 2.546 seconds

向表中插入數據
hive (default)> insert into stu values(1,'stefanboy',18);
Time taken: 16.617 seconds

查詢數據
hive (default)> select * from stu;
OK
stu.id  stu.name        stu.age
1       stefanboy       18
Time taken: 0.059 seconds, Fetched: 1 row(s)

清屏
hive (default)> !clear;
退出
hive (default)> !exit;
切換數據庫
hive (default)> use dbname;

查看錶結構
hive (default)> desc stu;
OK
col_name        data_type       comment
id                      int                                         
name                    string                                      
age                     int                                         
Time taken: 0.063 seconds, Fetched: 3 row(s)

查看錶的詳細信息
hive (default)> desc formatted stu;
OK
col_name        data_type       comment
# col_name              data_type               comment             

id                      int                                         
name                    string                                      
age                     int                                         

# Detailed Table Information             
Database:               default                  
OwnerType:              USER                     
Owner:                  hadoop                   
CreateTime:             Sun Dec 15 17:35:59 CST 2019     
LastAccessTime:         UNKNOWN                  
Protect Mode:           None                     
Retention:              0                        
Location:               hdfs://JD:9000/user/hive/warehouse/stu   
Table Type:             MANAGED_TABLE            
Table Parameters:                
		COLUMN_STATS_ACCURATE   true                
		numFiles                1                   
		numRows                 1                   
		rawDataSize             14                  
		totalSize               15                  
		transient_lastDdlTime   1576402663          

# Storage Information            
SerDe Library:          org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe       
InputFormat:            org.apache.hadoop.mapred.TextInputFormat         
OutputFormat:           org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat       
Compressed:             No                       
Num Buckets:            -1                       
Bucket Columns:         []                       
Sort Columns:           []                       
Storage Desc Params:             
		serialization.format    1                   
Time taken: 0.098 seconds, Fetched: 34 row(s)

默認存放路徑和執行日誌

創建stu表,默認存儲在HDFS的目錄是(可通過desc formatted stu命令進行查看)

hdfs://JD:9000/user/hive/warehouse/stu  
其中hive默認的存放路徑(hive.metastore.warehouse.dir)爲:/user/hive/warehouse
表名:stu
表的完整路徑是: ${hive.metastore.warehouse.dir}/tablename

創建刪除庫

Hive中的數據抽象
在這裏插入圖片描述
Hive中的表(stu)必須要歸屬於某個數據庫(default)
Database

包含了0到N張表,每個db對應HDFS上的一個文件夾
default==>/user/hive/warehouse

創建數據庫(可以指定存儲路徑)

  其中!是表示選擇一個 []表示可選
  CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
  [COMMENT database_comment]#備註
  [LOCATION hdfs_path]#指定存儲路徑
  [WITH DBPROPERTIES (property_name=property_value, ...)];#數據庫的信息

  例如
  CREATE DATABASE IF NOT EXISTS bigdata_hive;
  CREATE DATABASE IF NOT EXISTS bigdata_hive3 COMMENT 'this is bigdata database' WITH DBPROPERTIES('creator'='stefanoy', 'date'='2016-12-15');

刪除數據庫(如果數據庫下面有表則刪除不成功;強制刪除命令CASCADE,哪怕下面有表也會刪除,慎用)

	DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];
	
	命令樣例
	DROP DATABASE IF EXISTS bigdata_hive2;
	CASCADE(瞭解即可,慎用): one2many ==  1 db 對 多 table 

數據類型

數值類型:int bigint float double  decimal
字符串類型:string  90% #用的最廣
布爾類型:boolean: true/false
日期類型:date  timestamp ...

分隔符

各種分隔符介紹

 delimiter   code
^A          \001  字段之間的分隔符
\n          \n    記錄分隔符
^B          \002  ARRAY/STRUCT (Hive中的複雜數據類型)
^C          \003  key/value of MAP (Hive中的複雜數據類型)

創建表的時候可以指定分隔符

指定','爲分隔符
create table stu2(id int, name string, age int) row format delimited fields terminated by ',';
insert into stu2 values(1,'stefanboy',18);
把/user/hive/warehouse/stu/000000_0下載到本地,查看數據的內容。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章