AmosCloud

Library

Have a Question?

If you have any question you can ask below or enter what you are looking for!

Hive

  • 数据库

    1. 存储结构化数据
    2. 直接使用SQL语句进行表的增删改查
    3. 查询延迟低,适合与交互式应用配合使用
    4. 不合适存储海量数据
    5. Oracle Mysql
  • 数据仓库 (Hive)

    1. 存储结构化数据
    2. 使用功能更加强大的SQL进行表的 增 删 查(受到HDFS不能修改文件的限制)
    3. 查询延迟较高,适合做海量数据的离线统计分析
    4. 适合海量存储的存储,不适合处理小数据集
    5. Hive SparkSQL

Hive

1. Hive安装

1.1 安装Mysql

我们需要将Hive的元数据存储在一个RDB中
Hive默认使用的是derby数据库,不好用
所以我们安装MySQL作为Hive元数据的存储数据库
http://www.amoscloud.com/?p=1562

1.2 安装Hive

  1. 下载上传解压改名

  2. 修改配置文件

  • hive-env.sh

    HADOOP_HOME=/opt/hadoop-2.7.7
    export HIVE_CONF_DIR=/opt/hive-1.2.2/conf
    export JAVA_HOME=/opt/jdk1.8
  • hive-site.xml

<configuration>
<!-- 设置Hive保存元数据使用的Mysql数据库 -->
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://bd0203:3306/hive?createDatabaseIfNotExist=true</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>123456</value>
  </property>
  <!-- hive客户端打印标题信息 -->
  <property>
    <name>hive.cli.print.header</name>
    <value>true</value>
  </property>
  <!-- hive客户端打印当前数据库名 -->
  <property>
    <name>hive.cli.print.current.db</name>
    <value>true</value>
  </property>
</configuration>
  1. 测试启动

/bin/hive

hive>

1.3 使用Hive

1.3.1 表的真实数据保存在HDFS上

  • 默认(默认库default)路径/user/hive/warehouse/

  • 新创建的database在/user/hive/warehouse/db1.db

  • 创建的表会以目录的形式存在对应的库的目录下

1.3.2 Hive切换元数据存储到Mysql

  1. 安装Mysql
  2. (关闭所有的hive客户端)修改hive的配置文件(见上面的hive-site.xml)
  3. 在mysql中创建hive的元数据库
  4. 执行Hive的元数据库初始化
    schematool -initSchema -dbType mysql
  5. 重新启动hive

1.4 HQL

  • Hive Stract Query Language

1. DML

2. DDL

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...)
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]

3. DQL

select
from
where
group by
having
order by
limit

4. DCL

2 核心知识点

2.1 内部表外部表

  • hive中可选的可以创建外部表,默认创建的是内部表(管理表)

  • 内部表
    和普通数据库中的表类似,hive对他有完全的控制权限
    删除表时,会将Mysql中的元数据删除,并且会将HDFS上的表文件删除

  • 外部表
    建表时加上使用external关键字,可以创建外部表
    外部表在使用时和内部表没有区别,但是hive不能删除外部表的数据
    删除外部表时,会将Mysql中的元数据删除,并且会将HDFS上的表文件保留

元meta 属性
源source原 原始