• Hive学习笔记,你想知道的Hive


    1、 什么是Hive(蜂巢)?

      Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。Hive是基于HDFS之上的数据仓库,也就是说Hive中的数据最终都是以文件的形式保存到HDFS,下表为其对应关系。而Hive的元信息(e.g.,表名、列名、列的类型等)主要存放在哪?Hive的官方文档中推荐使用的是MySQL数据库。

    Hive

    HDFS

    目录

    数据

    文件

    分区

    目录

      Hive还是一个翻译器,Hive是一个数据处理引擎,也就是在上一层执行的SQL语句,会有hive的引擎(Hive Driver)转换成MapReduce的程序去操作HDFS上的数据。

           

    2、 和传统型数据库的区别

     

    Hive

    RDBMS

    查询语言

    HQL

    SQL

    数据存储

    HDFS

    Raw Device or Local FS

    执行

    MapReduce

    Executor

    执行延迟

    处理数据规模

    索引

    0.8版本后加入位图索引

    有复杂的索引

    3、 为什么使用Hive?

      a)   直接使用hadoop所面临的问题

    • 公司人员学习成本高
    • 由于项目周期要求太短
    • 如果使用MapReduce实现复杂查询逻辑开发难度太大

      b)   操作接口采用类SQL语法,提供快速开发的能力,避免了去写MapReduce,减少开发人员的学习成本,hive扩展功能很方便(自定义函数)。

    4、 Hive的特性

      a)    可扩展:Hive可以自由的扩展集群的规模,一般情况下不需要重启服务

      b)    延展性:Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数

      c)    容错:良好的容错性,节点出现问题SQL仍可完成执行

    5、 Hive的应用实践

      以基于CDH的Hive为例,进入目录/opt/cloudera/parcels/CDH/lib/hive/bin,输入hive命令,进入hive数据库,即可以进行相关操作了。

      然而,我们会发现界面非常不友好、不直观,而hive给我们提供了一个服务端,对比感受一下效果,那么怎么利用Hive给我们提供的服务端,进行相关操作呢?请看如下步骤。

                            

      首先,在bin目录下有一个hiveserver2,然后开启服务端./hiveserver2或hive --service hiveserver2

      其次,再连接一下服务器进入hive的bin目录下,会发现有一个beeline,用beeline的方式进行连接./beeline

      最后,使用!connect jdbc:hive2://slaver0:10000 命令进行连接,连接成功即可进行操作数据库。

     

      怎么向Hive建立的表中导入数据?

      首先,我们准备一个文本数据(先简单介绍数据导入流程)

      其次,我们要创建一个Hive的表,在创建的时候跟普通的数据库表的创建方式有所不同,如下图所示。在建表时可以建立1、内部表(类似MySQL中的表,下图所示)2、为了提高查询效率可以建立分区表(Hive特有的),具体建立方法如代码所示;3、桶表;4、外部表;5、为了简化查询也可以建立视图。查看创建表的信息用 desc demo1; 如果查看表的详细信息则用desc formatted demo1;

     

       创建分区表
            hive> create table demo1 > ( no int, > name string > ) partitioned by (no int) > row format delimited fields terminated by ' ';
    向分区表中导入数据也略有不同
        load data local inpath '/root/bigdata1016.china' into table demo2 partition(country='china');
      修改表,添加分区
          alter table demo2 add partition(country='american');
      修改表,删除分区
          alter table demo2 drop partition(country='japan');
      查看分区
         show partition demo2
      创建外部表,通过location指定表存放的位置
        > create external table exdemo(id int, name string)
        >row format delimited fields terminated by '	'
        >stored as textfile
        >location '/test';
      创建桶
        在创建分桶表之前,要设置一些参数,如下
        > set hive.enforce.bucketing = true;
        > set mapreduce.job.reduces=4 (分几个桶设置几个)
        > set hive.enforce.bucketing; 查看是否设置成功
        
    > create table demo_buck(id int, name string)     > clustered by (id)     > sorted by(id)     > into 4 buckets
        > row format delimited fields terminated by ',';
      desc extended demo_buck;
      将一个表中的数据查询出来插入另一个表
        > insert into table demo_buck
        > select id,name from demo1 distribute by (id) sort by (id);

      然后,进行数据的导入

      本地数据:load data local inpath '/root/bigdata1016' into table demo;
      HDFS:load data inpath '/HDFS的目录/bigdata1016 ' into table demo; 

      最后,进行查看数据是否添加成功!

     

    6、 对表中数据的操作

      Hive相较于传统的数据库不仅具有存储数据的功能,还可以进行数据的处理。那么怎么进行数据的处理呢?

      例如对刚才的表利用HQL进行一个简单的处理,select count(1) from demo1; 得到表中有多少条记录。这样就可以使用简单的HQL语句来实现MapReduce的功能(基本可是实现绝大部分的MapReduce程序,但是对于少部分逻辑比较复杂的程序还是不行的)

     

    7、怎么覆盖数据库中的原有记录

      首先,准备新的数据,这里我准备的数据文件的名字是bigdata10161

        其次,执行如下语句进行Hive数据库中数据的更新操作

        最后,查看是否更新成功!

    load data local inpath '/root/bigdata10161' overwrite into table demo1;

    8、怎么将新查询结果保存到新的Hive表中

           > create table new_tb
        > as
        > select * from demo1;

    hive --service hiveserver2

  • 相关阅读:
    React Native配置和使用
    使用ES6语法重构React代码
    git 起点
    Win32API程序中自建按钮
    C语言中数组与指针
    我的第一个博客
    Solr6.5配置中文分词IKAnalyzer和拼音分词pinyinAnalyzer (二)
    Solr6.5在Centos6上的安装与配置 (一)
    PHP版微信公共平台消息主动推送,突破订阅号一天只能发送一条信息限制
    MariaDB+Keepalived双主高可用配置MySQL-HA
  • 原文地址:https://www.cnblogs.com/ltolstar/p/9800132.html
Copyright © 2020-2023  润新知