《Hive系列》Hive快速入门教程

一、Hive快速入门教程

1 hive是什么

hive是一个数据仓库工具。基于hadoop的,可以通过类sql的语句进行数据读、写、分析、管理。
特点:

  • 支持类SQL轻松访问数据的工具
  • 它的数据直接存储在HDFS中,或者HBase。
  • 它在做数据分析的时候,它自己本身也没有分析的能力,它是利用底层的分析引擎:Mapreduce(default)、Tez、Spark。
  • 使用HQL(类SQL)语言进行查询
  • 可以实现亚秒级的查询

2 Hive底层是如何运行的

在这里插入图片描述

3 Hive的架构

在这里插入图片描述

hive默认端口是10000
元数据库:默认Derby。我们后面要切换为Mysql

4 快速入门(Hadoop、Jdk、mysql)

4.1 安装步骤

##1. 解压apache-hive-1.2.1-bin.tar.gz
[root@hadoop software]# tar -zxvf apache-hive-1.2.1-bin.tar.gz 
##2. 改名
[root@hadoop apps]# mv apache-hive-1.2.1-bin/ hive-1.2.1

##3. 配置环境变量
[root@hadoop hive-1.2.1]# vi /etc/profile
## 自定义环境变量
export JAVA_HOME=/opt/apps/jdk1.8.0_45
export HADOOP_HOME=/opt/apps/hadoop-2.8.1
export HIVE_HOME=/opt/apps/hive-1.2.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin
export CLASS_PATH=.:$JAVA_HOME/lib

##4. 启动命令行
[root@hadoop bin]# start-dfs.sh
[root@hadoop bin]# start-yarn.sh
[root@hadoop bin]# hive
hive>show databases;
OK
default
hive> create table t_user(
    > id int,
    > name string);
hive> show tables;
OK
t_user
hive> insert into t_user values(1, 'zxy'); ## 这句话会执行mr
hive> select * from t_user;
hive> select count(*) from t_user; ## 这句话会执行mr

我们默认使用的存储元数据的是hive自带的derby数据库。这个数据库最大的缺点是只支持单session

4.2 hive的远程模式——元数据在其他的服务器

[root@hadoop hive-1.2.1]# cd conf
[root@hadoop conf]#vim hive-site.xml 
  • hive-site.xml
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://hadoop:3307/hive?createDataBaseIfNotExists=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>

</configuration>
  • 上传一个mysql jdbc的驱动jar到hive的lib
mysql-connector-java-5.1.47-bin.jar

上传之后

  1. mysql的服务启动着
  2. mysql远程授权
mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
mysql> flush privileges;
# hadoop是当前虚拟机的主机名
mysql> grant all privileges on *.* to 'root'@'hadoop' identified by '123456' with grant option;
mysql> flush privileges;
  1. HDFS/YARN开启
[root@hadoop conf]# start-dfs.sh
[root@hadoop conf]# start-yarn.sh
  1. 环境变量
java+hadoop+hive环境变量配置成功
  1. 新建数据库(可视化工具中操作)

在这里插入图片描述

[root@hadoop conf]# hive

4.3 thrift server

在这里插入图片描述

##1. 开启hiveserver2
[root@hadoop bin]# hive --service hiveserver2 &
##2. beeline客户端链接
[root@hadoop bin]# beeline
beeline> !connect jdbc:hive2://hadoop:10000
Enter username for jdbc:hive2://hadoop:10000: root
Enter password for jdbc:hive2://hadoop:10000: ******
0: jdbc:hive2://hadoop:10000> show databases;
OK
+----------------+--+
| database_name  |
+----------------+--+
| default        |
+----------------+--+
1 row selected (0.948 seconds)
0: jdbc:hive2://hadoop:10000> show tables;
OK
+-----------+--+
| tab_name  |
+-----------+--+
| t_user    |
+-----------+--+
1 row selected (0.037 seconds)
0: jdbc:hive2://hadoop:10000> select * from t_user;
OK
+------------+--------------+--+
| t_user.id  | t_user.name  |
+------------+--------------+--+
| 1          | lixi         |
+------------+--------------+--+
1 row selected (0.347 seconds)
0: jdbc:hive2://hadoop:10000>

二、Hive自定义函数的三种类型

  • 类型一 UDF(User-Defined-Function)

一进一出

  • 类型二 UDAF(User-Defined Aggregation Function)

聚集函数, 多进一出
类似于: count/max/min

  • 类型三 UDTF(User-Defined Table-Generating Functions)

一进多出
如 lateral view explode()

三、hive和presto的求数组长度函数区别(hive&cardinality)

1.数据示例:

123456@qq.com

2.目的:

获取邮箱字符串’@'后字符串

3.实现

3.1 hive用法

SELECT 
email.email,
(case when size(split(email.email, '@')) = 2 then split(t1.email, '@')[1] else '' end ) as email_suffix
FROM `email`

3.2 presto用法

SELECT 
email.email,
(case when cardinality(split(email.email, '@')) = 2 then split(t1.email, '@')[2] else '' end ) as email_suffix
FROM `email`

4.比较

在计算数组长度的时候,hive和presto的函数不同
其中hive的size函数默认数组的下标从0开始
presto的cardinality函数默认数组的下标从1开始
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

DATA数据猿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值