zoukankan      html  css  js  c++  java
  • hive初探_框架组成、简单使用

    1、hive:建立在Hadoop上的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供了简单的类SQL查询语言,称为QL,允许用户开发自定义的mapper、reducer来处理复杂的分析工作,十分适合数据仓库的统计分析。

    2、Hive架构包括如下组件:

    CLI、JDBC、Thrift Server、WEB GUI、Metastore and Diver,分成两类:服务端组件、客户端组件

    服务端组件

    Driver组件:包括编译器、优化器、执行器,作用是将我们写的HQL进行解析、编译优化、生成执行计划,然后调用底层的marreduce计算框架

    metastore组件:元数据服务组件,负责存储hive的元数据,hive的元数据存储在关系型数据库中,hive支持把metastore服务独立出来,安装到远程的服务集群里,从而解耦hive服务和metastore服务,从而保证hive运行的健壮性

    thrift服务:用来进行可扩展且跨语言服务的开发,hive集成该服务,能让不同的开发语言调用hive接口

    客户端组件

    CLI:命令行接口

    thrift客户端:hive的许多客户端接口是建立在thrift客户端的基础之上,包括JDBC、ODBC

    WEB GUI:可以通过浏览器的方式访问hive提供的服务接口,该接口对应hive的hwi(hive web interface),所以首先要启动hwi服务

    3、metastore组件:

    hive元数据存放地,包括metastore服务、后台数据存储两部分

    metastore服务

    建立在后台数据存储介质上,并且可以和hive提供的服务进行交互的服务组件,默认情况下metastore服务是和hive服务安装在一起的,但是也可以独立出来,提升hive服务效率

    hive执行流程如下图:

    4、和普通关系数据库的区别

     

    Hive

    RDBMS

    查询语言

    HQL

    SQL

    数据存储

    HDFS

    Raw Device or Local FS

    索引

    执行

    MapReduce

    Excutor

    执行延迟

    处理数据规模

    5、数据格式:hive中没有定义专门的数据格式,可以由用户指定,需要指定三个属性:(1)列分隔符(空格、 、x001)、(2)行分隔符(" "、x002)、(3)读取数据的方法

    hive中文件有3种格式:TextFile、SequenceFile、RCFile

    hive在进行加载时不需要进行数据格式的转换,只是将数据复制到相应的HDFS目录,所以数据加载速度相对数据库要快一些

    6、Hive中的数据不允许修改,在加载的时候就已经确定

    7、索引:由于Hive中没有索引,当要访问hive数据中满足条件的特定值时,需要暴力扫描整个数据,因此访问延迟要高,但是由于MR的引入,可以并行访问数据,但是不适合在线数据查询

    8、hive中除了select * from语句不需要生成MR任务执行外,其它都需要

    9、hive包含以下几种数据模型:

    (1)table:

    每个table在hive中都有一个相应的目录存储数据,如table  a的hdfs目录为/warehouse/a,其中warehouse是hive-site.xml中由hive.metastore.warehouse.dir属性指定,所有的table数据都保存在这个目录下

    (2)external table:

    数据存储在hdfs中,可以创建分区,并不会将数据移动到仓库目录中

    (3)partition:表table的一个partition对应表下的一个目录,所有partition的数据都对应在相应的目录下,如表a包含dt、city两个partition,则对应于 dt = 20100801, ctry = US 的 HDFS 子目录为:/ warehouse /xiaojun/dt=20100801/ctry=US;对应于 dt = 20100801, ctry = CA 的 HDFS 子目录为;/ warehouse /xiaojun/dt=20100801/ctry=CA

    (4)buckets:对指定列进行hash,根据hash值切分数据,每个bucket对应一个文件,例如将表a中 user 列分散至 32 个 bucket,首先对 user 列的值计算 hash,对应 hash 值为 0 的 HDFS 目录为:/ warehouse /xiaojun/dt =20100801/ctry=US/part-00000;hash 值为 20 的 HDFS 目录为:/ warehouse /xiaojun/dt =20100801/ctry=US/part-00020

    下面记录一下hive加载本地数据的方法:

    1、首先在本地创建一个文本文件,如empinfo.txt,内容如下:

    1|name1|25|13188888888888
    2|name2|30|13888888888888
    3|name3|3|147896221

    2、输入hive进入hive模式:

    hive>

    3、创建表:

    create table tb_emp_info
        > (id int,
        > name string,
        > age int,
        > tel string)
        > ROW FORMAT DELIMITED
        > FIELDS TERMINATED BY '|'
        > STORED AS TEXTFILE;

    4、加载本地数据:

    load data local inpath 'empinfo.txt' into table tb_emp_info; 

    5、select * from tb_emp_info;查询是否有数据,验证数据是否加载成功。

    6、查看该表对应的hdfs目录:

    dfs -ls /user/hive/warehouse/tb_emp_info;

    查看文件内容:

     dfs -text /user/hive/warehouse/tb_emp_info/empinfo.txt;

    显示如下内容:

    1|name1|25|13188888888888
    2|name2|30|13888888888888
    3|name3|3|147896221

     

    在界面查看hdfs目录也能看到该文件。

  • 相关阅读:
    Laravel报500错误
    本地部署laravel项目遇到500错误 软链接
    Class 'Maatwebsite\Excel\ExcelServiceProvider' not found
    laravel5.8报500服务器错误
    phpstudy安装redis
    如何在FastAdmin中使用Ajax发送请求?
    关于mysql处理百万级以上的数据时如何提高其查询速度的方法
    判断一个数组里面的所有键所对应的值是否是为int型
    将json字符串中含有非int型的数字字符全部改为int型
    php判断json是否是一个标准的json字符串
  • 原文地址:https://www.cnblogs.com/zhli/p/4852570.html
Copyright © 2011-2022 走看看