Hive--概述与使用

  本博客主要讲解Hive的特点Hive的数据存储数据单元Hive的系统架构Hive的metastore。以及安装hive和简单使用,最后修改hive默认的metadata derby为mysql。

认识Hive

  Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。本质就是将SQL转换为MapReduce程序。与关系型数据库的SQL 略有不同,但支持了绝大多数的语句如DDL、DML 以及常见的聚合函数、连接查询、条件查询。HIVE不适合用于联机事务处理,也不提供实时查询功能它最适合应用在基于大量不可变数据的批处理作业。

  • Hive特点
  1. 支持索引,加快数据查询。
  2. 不同的存储类型,如数据库、文件、表、视图、索引
  3. 将元数据保存在关系数据库中,大大减少了在查询过程中执行语义检查的时间。
  4. 可以直接使用存储在Hadoop 文件系统中的数据。
  5. 内置大量用户函数UDF 来操作时间、字符串和其他的数据挖掘工具,支持用户扩展UDF 函数来完成内置函数无法实现的操作。
  6. 类SQL 的查询方式,将SQL 查询转换为MapReduce 的job 在Hadoop集群上执行。
  • Hive的数据存储
  1. 存储基于Hadoop HDFS,没有专门的数据存储格式。
  2. 存储结构:数据库、文件、表、视图、索引。
  3. Hive默认可以直接加载文本文件(TextFile),SequenceFileRCFile (facebook)。
  4. 在我们创建表时,指定数据的列、行分隔符,Hive就可以解析数据。(当然它有自己默认的行列分隔符’\n’,’\001’)
  • Hive的数据单元
    databases : 数据库,和关系型数据库中一个概念;
    tables : 表。和关系型数据库中的表一个概念;
    partitions : 分区。将同一组数据存放到一个固定的分区中。
    buckets(clusters) : 分桶。对现有数据再进行划分。

  • Hive的系统架构
    Hive的系统架构
    •用户接口,包括 CLI,JDBC/ODBC,WebUI
    •元数据存储,通常是存储在关系数据库如 mysql, derby 中
    •解释器、编译器、优化器、执行器
    •Hadoop:用 HDFS 进行存储,利用 MapReduce 进行计算

  • Hive的metastore
    metastore : 是hive元数据的集中存放地。
    metastore : 默认使用内嵌的derby数据库作为存储引擎
    Derby : 引擎的缺点:一次只能打开一个会话(一般使用mysql)
    Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等

  • HiveQL和SQL的对比
    HiveQL和SQL的对比

安装

  • 准备
  1. 提前已安装好hadoop
  2. Hive 下载,作者使用apache-hive-0.14.0-bin.tar.gz
  • 安装
  1. 解压hive文件,进入$HIVE_HOME/conf/修改文件:

    1
    2
    cp  hive-env.sh.template  hive-env.sh
    cp hive-default.xml.template hive-site.xml
  2. 修改$HIVE_HOME/bin的hive-env.sh,增加以下三行:

    1
    2
    3
    4
    ################ 添加环境变量 ,例如#############################
    export JAVA_HOME=/usr/local/jdk1.7.0_79
    export HIVE_HOME=/opt/hive
    export HADOOP_HOME=/usr/local/hadoop-2.6.0
  3. 修改$HIVE_HOME/conf/hive-site.xml,临时目录

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <property>
    <name>hive.querylog.location</name>
    <value>/opt/hive/tmp</value>
    </property>

    <property>
    <name>hive.exec.local.scratchdir</name>
    <value>/opt/hive/tmp</value>
    </property>

    <property>
    <name>hive.downloaded.resources.dir</name>
    <value>/opt/hive/tmp</value>
    </property>

使用

  • 运行hdfs
  • 运行:$HIVE_HOME/bin/hive
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    [root@xxo07 bin]# hive
    Logging initialized using configuration in jar:file:/opt/hive/lib/hive-common-0.14.0.jar!/hive-log4j.properties
    SLF4J: Class path contains multiple SLF4J bindings.
    SLF4J: Found binding in [jar:file:/usr/local/hadoop-2.6.0/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: Found binding in [jar:file:/opt/hive/lib/hive-jdbc-0.14.0-standalone.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
    SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
    hive> show databases;
    OK
    default
    Time taken: 0.667 seconds, Fetched: 1 row(s)
    hive>

    #######################创建表############################
    hive> create table t_1(id int);
    OK
    Time taken: 0.736 seconds

    #######################查看表信息########################
    hive> desc extended t_1;
    OK
    id int

    Detailed Table Information Table(tableName:t_1, dbName:default, owner:root, createTime:1464418129, lastAccessTime:0, retention:0, sd:StorageDescriptor(cols:[FieldSchema(name:id, type:int, comment:null)], location:hdfs://xxo07:9000/user/hive/warehouse/t_1, inputFormat:org.apache.hadoop.mapred.TextInputFormat, outputFormat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat, compressed:false, numBuckets:-1, serdeInfo:SerDeInfo(name:null, serializationLib:org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, parameters:{serialization.format=1}), bucketCols:[], sortCols:[], parameters:{}, skewedInfo:SkewedInfo(skewedColNames:[], skewedColValues:[], skewedColValueLocationMaps:{}), storedAsSubDirectories:false), partitionKeys:[], parameters:{transient_lastDdlTime=1464418129}, viewOriginalText:null, viewExpandedText:null, tableType:MANAGED_TABLE)
    Time taken: 0.787 seconds, Fetched: 3 row(s)
    hive> quit;

修改metadata为mysql

  1. 以本地mysql为例 , 修改$HIVE_HOME/conf/hive-site.xml ,修改链接url、驱动、账号、密码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=UTF-8</value>
    </property>
    <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>root</value>
    </property>
  2. 复制mysql驱动jar包到$HIVE_HOME/lib/目录下
    可以在这下载:https://blog.csdn.net/qiangqiang816/article/details/81541090

  3. 初始化数据库命令:schematool -dbType mysql -initSchema

  4. 启动。查看mysql数据库

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    mysql> use hive;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A

    Database changed
    mysql> show tables;
    +---------------------------+
    | Tables_in_hive |
    +---------------------------+
    | BUCKETING_COLS |
    | CDS |
    | COLUMNS_V2 |
    | DATABASE_PARAMS |
    | DBS |
    | FUNCS |
    | FUNC_RU |
    | GLOBAL_PRIVS |
    | PARTITIONS |
    | PARTITION_KEYS |
    | PARTITION_KEY_VALS |
    | PARTITION_PARAMS |
    | PART_COL_STATS |
    | ROLES |
    | SDS |
    | SD_PARAMS |
    | SEQUENCE_TABLE |
    | SERDES |
    | SERDE_PARAMS |
    | SKEWED_COL_NAMES |
    | SKEWED_COL_VALUE_LOC_MAP |
    | SKEWED_STRING_LIST |
    | SKEWED_STRING_LIST_VALUES |
    | SKEWED_VALUES |
    | SORT_COLS |
    | TABLE_PARAMS |
    | TAB_COL_STATS |
    | TBLS |
    | VERSION |
    +---------------------------+
    29 rows in set (0.00 sec)
  • 参考资料:
    《Hive编程指南》

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器