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下载到本地,查看数据的内容。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值