Hive

本文详细介绍了Hive的安装步骤,包括启动HDFS、YARN、Zookeeper和Kafka。接着讲解了如何启动和使用Hive服务,通过Beeline连接Hive服务器。还详细阐述了Hive的建库、建表、数据导入,包括内部表、外部表和分区表的创建及管理。最后给出了分区表的实例,展示了如何针对不同分区进行查询。
摘要由CSDN通过智能技术生成

一、hive的安装

二、hive的使用

一、启动集群

1,([root@hdp-1 ~]#)启动hdfs,yarn,zookeeper,kafka

(1)启动hdfs,yarn(start-dfs.sh和start-yarn.sh)

start-all.sh

(2) 脚本文件启动zookeeper

./zkmanager.sh start

 zkmanager.sh

#!/bin/bash
for host in hdp-1 hdp-2 hdp-4
do
echo "${host}:${1}ing..."
ssh $host "source /etc/profile;/root/apps/zookeeper-3.4.6/bin/zkServer.sh $1"
done

增加可执行权限

chmod +x zkmanager.sh

 

(3)脚本文件启动kafka

./kafkaManager.sh start

 vi kafkaManager.sh

#!/bin/bash
for host in hdp-1 hdp-2 hdp-4
do
echo "${host}:${1}ing..."
ssh $host "source /etc/profile;/root/apps/kafka_2.12-2.2.0/bin/kafka-server-$1.sh -daemon /root/apps/kafka_2.12-2.2.0/config/server.properties"
done

二、启动hive服务

1,最简单运行:([root@hdp-1 apache-hive-1.2.1-bin]#)

bin/hiveserver2

查看10000端口为当前服务端口

netstat -nltp

2,启动服务在后台运行([root@hdp-1 apache-hive-1.2.1-bin]#)

nohup bin/hiveserver2 1>/dev/null 2>&1 &

3,客户端链接hive服务器:([root@hdp-1 apache-hive-1.2.1-bin]#)

启动成功后,可以在别的节点上用beeline去连接

方式(一)

bin/beeline

回车,进入beeline的命令界面

输入命令连接hiveserver2

!connect jdbc:hive2://hdp-3:10000

方式(二)

启动时直接连接:

bin/beeline -u jdbc:hive2://hdp-3:10000 -n root

查看程序的进程

ps -ef | group proname

三、脚本化运行

四、hive建库建表与数据导入

一、建库

hive中有一个默认的库:

库名: default

库目录:hdfs://hdp-1:9000/user/hive/warehouse

在分布式文件系统中看不到以default为名字的数据库

如果在default数据库中创建table,则出现在user/hive/warehouse下

新建库:(hive>)

create database db_order;

库建好后,在hdfs中会生成一个库目录:

hdfs://hdp-1:9000/user/hive/warehouse/db_order.db

二、建表

1,建表(hive>)

use school;
create table teacher(id string,name string,gender string);

表建好后,会在所属的库目录中生成一个表目录

/user/hive/warehouse/school/teacher

只是,这样建表的话,hive会认为表数据文件中的字段分隔符为 ^A

2,正确的建表语句为:(hive>)

create table teacher(id string,name string,gender string)

row format delimited

fields terminated by ',';

这样就指定了,我们的表数据文件中的字段分隔符为 ","

3,([root@hdp-1 ~]#)脚本插入数据

vi testdata.dat

脚本数据代码 

1,lucas,male
2,nimoo,female
3,jack,male

 把脚本文件中的数据插入到teacher表中

hadoop fs -put testdata.dat /user/hive/warehouse/school.db/teacher

三、删除表

删除表(hive>)

drop table teacher;

删除表的效果是:

hive会从元数据库中清除关于这个表的信息;

hive还会从hdfs中删除这个表的表目录(有时候删不了)

四、内部表和外部表

1,内部表(MANAGED_TABLE):表目录按照hive的规范来部署,位于hive的仓库目录/user/hive/warehouse中

2,外部表(EXTERNAL_TABLE):表目录由建表用户自己指定

(1)建脚本文件([root@hdp-1 ~]#)

vi pv.log

(2)脚本数据代码 ([root@hdp-1 ~]#)

1,lucas,male

2,nimoo,female

3,jack,male

Esc             :wq 

//忽略这一步,把pv.log移动到hiveData文件夹

mv pv.log hiveData

 (3)创建表(hive>)

create external table t_pvlog(id string, name string, gender string) 
row format delimited 
fields terminated by ',' 
location '/pvlog/pv';

(4)方法1将文件上传([root@hdp-1 ~]#)

hadoop fs -put pv.log /pvlog/pv/ 

方法2将数据插入到表中(hive>)

 load data local inpath '/root/hiveData/pv.log' into table school.t_pvlog;

外部表和内部表的特性差别:

 1,内部表的目录在hive的仓库目录中 VS 外部表的目录由用户指定

2,drop一个内部表时:hive会清除相关元数据,并删除表数据目录

3,drop一个外部表时:hive只会清除相关元数据; 

一个hive的数据仓库,最底层的表,一定是来自于外部系统,为了不影响外部系统的工作逻辑,在hive中可建external表来映射这些外部系统产生的数据目录;

然后,后续的etl操作,产生的各种表建议用managed_table

五、分区表

分区表的实质是:在表目录中为数据文件创建分区子目录,以便于在查询时,MR程序可以针对分区子目录中的数据进行处理,缩减读取数据的范围。

一、一个分区字段的实例

(1)数据([root@hdp-1 ~]#)

vi personv.log.21
192.168.33.2,http://www.sina.com/a, 2019-05-30 20:08:24

192.168.33.3,http://www.sina.com/b, 2019-05-30 21:08:24

192.168.33.4,http://www.sina.com/a, 2019-05-30 22:08:24

192.168.33.5,http://www.sina.com/c, 2019-05-30 23:08:24

192.168.33.2,http://www.sina.com/a, 2019-05-30 24:08:24

192.168.33.7,http://www.sina.com/b, 2019-05-30 20:09:24

192.168.33.2,http://www.sina.com/a, 2019-05-30 20:12:24
:%s/30/21/g 

  替换所有的30成21

cp personv.log.21 personv.log.22

(2)建分区表(hive>)

create table school.t_personvlog(ip string,url string,access_time string)
partitioned by(day string)
row format delimited
fields terminated by ',';

注意:分区字段不能是表定义中的已存在字段

(3)插入数据(hive>)

load data local inpath '/root/hiveData/personv.log.21' into table school.t_personvlog partition(day='20191021');
load data local inpath '/root/hiveData/personv.log.22' into table school.t_personvlog partition(day='201910222');

(4)查询(hive>)针对分区进行查询

 select * from school.t_personvlog;

+------------------+------------------------+---------------------------+-------------------+--+
| t_personvlog.ip  |    t_personvlog.url    | t_personvlog.access_time  | t_personvlog.day  |
+------------------+------------------------+---------------------------+-------------------+--+
| 192.168.33.2     | http://www.sina.com/a  |  2019-10-21 20:08:24      | 20191021          |
| 192.168.33.3     | http://www.sina.com/b  |  2019-10-21 21:08:24      | 20191021          |
| 192.168.33.4     | http://www.sina.com/a  |  2019-10-21 22:08:24      | 20191021          |
| 192.168.33.5     | http://www.sina.com/c  |  2019-10-21 23:08:24      | 20191021          |
| 192.168.33.2     | http://www.sina.com/a  |  2019-10-21 24:08:24      | 20191021          |
| 192.168.33.7     | http://www.sina.com/b  |  2019-10-21 20:09:24      | 20191021          |
| 192.168.33.2     | http://www.sina.com/a  |  2019-10-21 20:12:24      | 20191021          |
| 192.168.33.2     | http://www.sina.com/a  |  2019-10-22 20:08:24      | 20191022          |
| 192.168.33.3     | http://www.sina.com/b  |  2019-10-22 22:08:24      | 20191022          |
| 192.168.33.4     | http://www.sina.com/a  |  2019-10-22 22:08:24      | 20191022          |
| 192.168.33.5     | http://www.sina.com/c  |  2019-10-22 23:08:24      | 20191022          |
| 192.168.33.2     | http://www.sina.com/a  |  2019-10-22 24:08:24      | 20191022          |
| 192.168.33.7     | http://www.sina.com/b  |  2019-10-22 20:09:24      | 20191022          |
| 192.168.33.2     | http://www.sina.com/a  |  2019-10-22 20:12:24      | 20191022          |
+------------------+------------------------+---------------------------+-------------------+--+

方式一:统计表中所有数据总PV

select count(*) a from school.t_personvlog;

注:a为别名  

结果为:

+------+--+
| a      |
+------+--+
| 14    |
+-----二、多个分区字段示例-+--+

方式二:统计10月21日的总PV

select count(*) b from school.t_personvlog where day='20191021';

注:b为别名 

结果为:

+------+--+
| b    |
+------+--+
| 7    |
+------+--+

二、多个分区字段示例

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值