• 大数据系列之—-02 工具 HIVE简介&使用


    1. HIVE简介

    官网用户手册
    Hive是一种建立在Hadoop文件系统上的数据仓库架构,并对存储在HDFS中的数据进行分析和管理;它可以将结构化的数据文件映射为一张数据库表,并提供完整的 SQL 查询功能,可以将 SQL 语句转换为 MapReduce 任务进行运行,通过自己的 SQL 去查询分析需要的内容,这套 SQL 简称 Hive SQL(HQL),使不熟悉MapReduce 的用户也能很方便地利用 SQL 语言对数据进行查询、汇总、分析。

    Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据。它架构在Hadoop之上,总归为大数据,并使得查询和分析方便。
    Hive的表其实就是HDFS的目录/文件,按表名把文件夹分开。如果是分区表,则分区值是子文件夹,可以直接在M/RJob里使用这些数据。
    Hive不支持更改数据的操作

    Hive的执行流程如下图所示:

    2. HIVE的优点 与 缺点

    优点

    1. 简单容易上手:提供了类SQL查询语言HQL
    2. 可扩展:为超大数据集设计了计算/扩展能力(MR作为计算引擎,HDFS作为存储系统),一般情况下不需要重启服务Hive可以自由的扩展集群的规模。
    3. 提供统一的元数据管理
    4. 延展性:Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数
    5. 容错:良好的容错性,节点出现问题SQL仍可完成执行

    缺点(局限性)

    1. hive的HQL表达能力有限
      1.1) 迭代式算法无法表达,比如pagerank
      1.2) 数据挖掘方面,比如kmeans
    2. hive的效率比较低
      2.1) hive自动生成的mapreduce作业,通常情况下不够智能化
      2.2) hive调优比较困难,粒度较粗
      2.3) hive可控性差

    3. HIVE下载 与 安装

    下载
    安装HIVE前,先要安装JDK, Hadoop

    验证 Hadoop 集群的所有应用程序:http://localhost:8088/

    4. HIVE的使用

    数据类型

    分为四种类型如下:
    列类型:整型,字符串型,时间戳,日期,小数点,联合类型
    文字 :浮点类型,十进制类型
    Null 值
    复杂类型:数组,映射,结构体

    创建数据库&删除数据库

    #创建数据库。语法如下:
    CREATE DATABASE|SCHEMA [IF NOT EXISTS] <database name>
    
    #删除所有的表并删除数据库的语句。语法如下:
    DROP DATABASE StatementDROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];
    

    创建表、修改表、删除表

    #创建表的语句。语法:
    CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.] table_name
    [(col_name data_type [COMMENT col_comment], ...)]
    [COMMENT table_comment]
    [ROW FORMAT row_format]
    [STORED AS file_format]
    
    #内部表与外部表转换
    ##内部表转外部表
    #修改表语法:
    ALTER TABLE TABLEA SET TBLPROPERTIES('EXTERNAL'='true');
    #修改表语法:
    ALTER TABLE TABLEA SET TBLPROPERTIES('EXTERNAL'='false');
    
    #使用LOAD DATA语句插入数据。加载数据有两种方法:一种是从本地文件系统,第二种是从Hadoop文件系统。
    #语法:
    LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
    
    #修改表语法:
    ALTER TABLE name RENAME TO new_name
    ALTER TABLE name ADD COLUMNS (col_spec[, col_spec ...])
    ALTER TABLE name DROP [COLUMN] column_name
    ALTER TABLE name CHANGE column_name new_name new_type
    ALTER TABLE name REPLACE COLUMNS (col_spec[, col_spec ...])
    
    #删除表语法:
    DROP TABLE [IF EXISTS] table_name;
    
    #查看创建表语句
    SHOW CREATE td_part;
    
    #查看表分区
    SHOW partitions td_part;
    

    HIVE分区

    Hive组织表到分区。方便对数据进行部分查询。表或分区是细分成桶,桶的工作是基于表的一些列的散列函数值。

    #添加分区,可以通过添加分区表改变所述表。语法:
    ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec [LOCATION 'location1'] partition_spec [LOCATION 'location2'] ...;
    
    #重命名分区。语法:
    ALTER TABLE table_name PARTITION partition_spec RENAME TO PARTITION partition_spec;
    
    #删除分区。语法:
    ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec, PARTITION partition_spec,...;
    

    视图和索引

    #创建一个视图, 语法:
    CREATE VIEW [IF NOT EXISTS] view_name [(column_name [COMMENT column_comment], ...) ]
    [COMMENT table_comment]
    AS SELECT ...
    
    #删除一个视图, 语法:
    DROP VIEW view_name
    
    #创建索引, 语法:
    CREATE INDEX index_name
    ON TABLE base_table_name (col_name, ...)
    AS 'index.handler.class.name'
    [WITH DEFERRED REBUILD]
    [IDXPROPERTIES (property_name=property_value, ...)]
    [IN TABLE index_table_name]
    [PARTITIONED BY (col_name, ...)]
    [
       [ ROW FORMAT ...] STORED AS ...
       | STORED BY ...
    ]
    [LOCATION hdfs_path]
    [TBLPROPERTIES (...)]
    
    #删除索引, 语法:
    DROP INDEX <index_name> ON <table_name>
    

    内置运算符

    关系运算符
    算术运算符
    逻辑运算符
    复杂运算符

    Hive内置函数

    5. HIVE相关

    5.1 HIVE中sort by、order by、cluster by、distribute by的区别:

    1、sort by: 不是全局排序,分区内有序。其在数据进入reducer前完成排序。
    2、order by:全局排序,因此只有一个reducer,如果有多个reducer无法保证全局的排序。计算规模较大,时间可能会很长。
    3、distribute by: 按照指定的字段对数据进行划分输出到不同的reduce中。类似MR中Partition。
    4、cluster by: 除了具有distribute by的功能,还具有了sort by的功能。但排序只能是升序,不能指定排序规则为ASC或者DESC。

    在生产环境中Order By用的比较少,容易导致OOM。Sort By+ Distrbute By用的多。

    5.2 Hive几种基本表类型

    内部表、外部表、分区表、桶表

    5.3 Hive中的外部表和内部表的区别:

    ①创建内部表的时候,会将数据移动到数据仓库指向的路径,创建外部表的时候,仅记录数据所在的位置,不对数据做任何的该表。
    ②删除外部表的时候,只是删除元数据,不会删除数据,删除内部表的时候,元数据和数据都会被删除,相对来说,外部表更加安全和灵活,易于数据的共享。

    5.4 Hive有哪些方式保存元数据,各有哪些特点?

    Hive支持三种不同的元存储服务器,分别为:内嵌式元存储服务器、本地元存储服务器、远程元存储服务器,每种存储方式使用不同的配置参数。

    内嵌式元存储主要用于单元测试,在该模式下每次只有一个进程可以连接到元存储,Derby是内嵌式元存储的默认数据库。
    在本地模式下,每个Hive客户端都会打开到数据存储的连接并在该连接上请求SQL查询。
    在远程模式下,所有的Hive客户端都将打开一个到元数据服务器的连接,该服务器依次查询元数据,元数据服务器和客户端之间使用Thrift协议通信。

  • 相关阅读:
    解析三种常见分布式锁的实现
    RabbitMQ基础概念详解
    数据库事务概念
    ECIF与CRM
    MQ(消息队列)学习
    数据粒度的设计
    链表之 头节点与尾指针 区别
    牛客之错题(2016.1.15) && 带头节点与不带头的区别
    数据结构之递归回溯算法
    LeetCode--Single Number
  • 原文地址:https://www.cnblogs.com/liuyitan/p/14178483.html
Copyright © 2020-2023  润新知