Hive详解(一)

Apache Hive(一)

第一章 简单了解Hive

1.1 什么是Hive?

​ Apache Hive是一个数据仓库。数据仓库和数据库的区别在于,数据仓库的数据是长期不变的,而数据库的数据需要经常修改。

​ Hive可以用SQL语法来读取、写入和管理驻留在分布式存储的大数据。Hadoop本来是要手写MapReduce的,但是自从出现了Hive,一些简单的mapreduce就可以通过hive的SQL自动生成,降低了开发难度,而且SQL比MapReduce简洁,易懂。

1.2 Hive的功能

​ Hive建立与Hadoop之上,它提供以下功能

  • 通过SQL轻松访问大数据的工具,从而支持数据仓库的相关工作,如extract(提取)/transform(转换)/load 加载(ETL),报告,和数据分析
  • 对各种数据格式施加结构
  • 访问直接存储HDFS的文件或者访问别的数据存储系统,如HBase
  • 通过Apache的Tez、Spark或者MapReduce执行查询(查询引擎)
  • 基于HPL-SQL的过程语言
  • 通过Hive LLAP、Apache YARN和Apache Slider进行亚秒级的查询

Hive的SQL还可以通过用户定义函数(UDFs)、用户定义聚合(UDAFs)和用户定义表函数(UDTFs)用用户代码进行扩展。

1.3 Hive官网

Hive官网地址

第二章 开始使用Hive

2.1 安装和配置

要求环境:

  • Java1.8
  • Hadoop 2.x
  • Linux

稳定版Hive的安装

稳定版下载地址

  1. 下载
  2. 解压
tar -xzvf hive-x.y.z.tar.gz
  1. 设置Hive环境变量指向安装目录
cd hive-x.y.z
export HIVE_HOME={{pwd}}
  1. 最后添加bin目录
export PATH=$HIVE_HOME/bin:$PATH

2.2 运行Hive

2.2.1 配置Hadoop路径

Hive是基于Hadoop的,所以:

  • 你必须在环境变量中配置Hadoop目录

  • export HADOOP_HOME=<hadoop-install-dir>
    
2.2.2 创建元数据仓库目录

此外,你必须启动Hadoop的HDFS,并创建/tmp和/user/hive/warehouse(又叫做hive.metastore.warehouse.dir),并赋予这两个文件夹权限,这样才能够在hive中创建表

$ $HADOOP_HOME/bin/hadoop fs -mkdir /tmp
$ $HADOOP_HOME/bin/hadoop fs -mkdir /user/hive/warehouse
$ $HADOOP_HOME/bin/hadoop fs -chmod g+w /tmp
$ $HADOOP_HOME/bin/hadoop fs -chmod g+w /user/hive/warehouse

你会发现将Hive放进环境变量里面很有用,尽管这不是必要的。

$ export HIVE_HOME=<hive-install-dir>
2.2.3 运行Hive CLI

注意:使用Hive前要把Hadoop启动了

CLI:command line interface(命令行接口)

$HIVE_HOME/bin/hive
2.2.4 运行HiveServer2和Beeline

​ 从hive2.1开始,我们需要运行下面的schematool命令作为初始化步骤。例如,我们可以使用“derby”作为db类型。

$HIVE_HOME/bin/schematool -dbType <db type> -initSchema

​ HiveServer2(在hive0.11中引入)有自己的CLI,称为Beeline。HiveCLI现在不赞成使用,而应该使用Beeline,因为HiveCLI缺乏HiveServer2的多用户、安全性和其他功能。要从shell运行HiveServer2和Beeline:

 $ $HIVE_HOME/bin/hiveserver2

 $ $HIVE_HOME/bin/beeline -u jdbc:hive2://$HS2_HOST:$HS2_PORT

​ Beeline由HiveServer2的JDBC URL启动,这取决于HiveServer2启动的地址和端口。默认情况下,它将是(localhost:10000),所以地址看起来像jdbc:hive2://localhost:10000.

​ 或者在相同的过程中启动Beeline和HiveServer2以进行测试,以获得与HiveCLI类似的用户体验:

$ $HIVE_HOME/bin/beeline -u jdbc:hive2://

2.3 配置管理

2.3.1 概览
  • 默认配置<install-dir>/conf/hive-default.xml

  • 环境变量/etc/profile

  • 详细配置<install-dir>/conf/hive-site.xml

  • Log4j日志配置<install-dir>/conf/hive-log4j.properties

  • Hive默认集成Hadoop的配置

2.3.1 Hive日志
  • 默认的log4j日志存在/tmp/<user.name>/hive.log

  • 要配置不同的日志位置,在$HIVE_HOME/conf/hive-log4j.properties中配置hive.log.dir即可

  • 为了确保目录能够使用(chmod 1777 <dir>)

hive.log.dir=<other_location>

如果用户愿意,可以通过添加以下参数将日志发送到控制台:

bin/hive --hiveconf hive.root.logger=INFO,console  //for HiveCLI (deprecated)
bin/hiveserver2 --hiveconf hive.root.logger=INFO,console

2.4 数据定义语言(DDL)

2.4.1 创建Hive表
  • 创建一个名为pokes的表,其中有两列,第一列是整数,另一列是字符串。
hive> CREATE TABLE pokes (foo INT, bar STRING);
  • 创建一个名为invites的表,其中包含两列和一个名为ds的分区列。分区列是虚拟列。它不是数据本身的一部分,而是从装入特定数据集的分区派生出来的。默认情况下,表假定为文本输入格式,分隔符假定为^A(ctrl-A)。
 hive> CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);
2.4.2 浏览表
hive> SHOW TABLES;

列出所有表

列出以“s”结尾的所有表。模式匹配遵循Java正则表达式。查看此链接以获取文档

 hive> SHOW TABLES '.*s';

显示列信息

hive> DESCRIBE invites;

2.4.3 更改和删除表

​ 表名可以更改,列可以添加或替换

hive> ALTER TABLE events RENAME TO 3koobecaf;
hive> ALTER TABLE pokes ADD COLUMNS (new_col INT);
hive> ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT 'a comment');
hive> ALTER TABLE invites REPLACE COLUMNS (foo INT, bar STRING, baz INT COMMENT 'baz replaces new_col2');

注意:REPLACE COLUMNS替换所有现有列并且只改变表的结构,而不会改变数据。REPLACE COLUMNS还可以用来从表结构中删除列

hive> ALTER TABLE invites REPLACE COLUMNS (foo INT COMMENT 'only keep the first column');

​ 删除表

 hive> DROP TABLE pokes;
UMNS替换所有现有列并且只改变表的结构,而不会改变数据。REPLACE COLUMNS还可以用来从表结构中删除列

```sql
hive> ALTER TABLE invites REPLACE COLUMNS (foo INT COMMENT 'only keep the first column');
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李南想做条咸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值