【hive】笔记

1.什么是Hive

hive是一个sql工具;

它能接收用户输入的sql语句,然后把它翻译成mapreduce程序对HDFS上的数据进行查询、运算,并返回结果,或将结果存入HDFS;

2.Hive的关键工作机制

核心点:

HIVE利用HDFS来存储数据文件;

利用MAPREDUCE来做数据分析运算;

利用SQL来为用户提供查询接口;

3.Hive怎么用

3.1 Hive的安装

问题1:装在哪?随便一台能够跟HADOOP集群联网的linux机器;

简单安装(使用derby作为hive的元数据库)

步骤:

  1. 上传安装包
  2. 解压
  3. 启动

上述安装,hive是使用内置的derby来记录元数据;非常不靠谱;

可以为hive安装一个mysql来作为它的元数据存储库;

标准安装(使用mysql作为hive的元数据库)

做法:

  1. 安装一个mysql,并授予远程连接的权限;
  2. 修改hive的配置文件

      hive-site.xml:

<configuration>

<property>

<name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:mysql://cts04: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>root</value>

</property>

</configuration>

修改完配置后,在hive的lib目录中放置一份mysql的jdbc驱动jar包

启动hive:

bin/hive

 

3.2 Hive的使用方式

方式1: bin/hive  交互式查询

 

方式2: 启动hive的网络服务,然后通过一个客户端beeline去连接服务进行查询;

   启动服务: bin/hiveserver2 

   启动客户端去连接hive服务:  bin/beeline -u jdbc:hive2://cts03:10000 -n root

 

方式3:shell脚本方式查询

#!/bin/bash

HIVE_HOME=/root/apps/hive-1.2.2

$HIVE_HOME/bin/hive -e 'insert into table t_avg  as  select skuid,avg(amount) from t_2 group by skuid'

$HIVE_HOME/bin/hive -e 'create table t_result as select skuid,sum(amount) from t_2 group by skuid'

补充: bin/hive -f /root/etl.sql  (把sql语句写到一个专门的文件里)

 

hive的DDL

1.建库

create database db1;

2.建表

内部表:

create table t1(id int,name string,age int)

row format delimited fields terminated by ‘,’;

外部表:

create external table t2(id int,name string,age int)

row format delimited fields terminated by ‘:’

location ‘/xx/yy/’;

注意:内部表被drop时,表目录会被删除,表的元数据也会被删除

      外部表被drop时,表的元数据会被删除;但是表目录还在!

3.导入数据到表中

本质上:你想办法把数据文件放入表目录即可!  hadoop fs -put ......

当然,hive提示符中,有对应的导入数据的命令:

如果文件在hive的本地磁盘: LOAD DATA LOCAL INPATH ‘/root/t1.dat’ INTO TABLE t1;

如果文件在HDFS上:    LOAD DATA INPATH ‘/t2.dat’ INTO TABLE t1;

 

注意:hive不会对用户所导入的数据做任何的检查和约束;

4.修改表定义

修改表名:alter table t1 rename to t_1;

修改字段名、字段类型

修改分区!

4.1分区表

分区表的实质:就是在表目录下还可以建子目录,以便于在查询的时候可以指定具体的子目录进行查询,提高查询效率;

内部表分区建表语法:

CREATE TABLE t_2(id int,skuid string,price float,amount int)

partitioned by (day string,city string)

row format delimited fields terminated by ',';

导入数据到指定分区(子目录):

LOAD DATA LOCAL INPATH '/root/t2.1' into TABLE t_2 PARTITION(day='2018-04-15',city='beijing');

或者,将一个已存在的文件夹作为表的一个分区:

ALTER TABLE t_2_ex ADD PARTITION(day=’2018-04-16’) LOCATION ‘/2018-04-16’;

hive的DML

sql运算模型一:逐行运算模型(逐行表达式,逐行过滤)

sql运算模型二:分组运算模型(分组表达式,分组过滤)

sql的join联表机制:join的实质是将多个表的数据连成一个表,作为查询的输入数据集!

笛卡尔积连接

内连接

左外连接

右外连接

全外连接

左半连接

 

猜你喜欢

转载自blog.csdn.net/weixin_39227099/article/details/86659295