当前位置:   article > 正文

《Hive系列》Hive快速入门教程_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
  • 1
  • 2

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

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

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

[root@hadoop hive-1.2.1]# cd conf
[root@hadoop conf]#vim hive-site.xml 
  • 1
  • 2
  • 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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 上传一个mysql jdbc的驱动jar到hive的lib
mysql-connector-java-5.1.47-bin.jar
  • 1

上传之后

  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
  • 2
  • 3
  • 4
  • 5
  1. HDFS/YARN开启
[root@hadoop conf]# start-dfs.sh
[root@hadoop conf]# start-yarn.sh
  • 1
  • 2
  1. 环境变量
java+hadoop+hive环境变量配置成功
  • 1
  1. 新建数据库(可视化工具中操作)

在这里插入图片描述

[root@hadoop conf]# hive
  • 1

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>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

二、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`
  • 1
  • 2
  • 3
  • 4

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`
  • 1
  • 2
  • 3
  • 4

4.比较

在计算数组长度的时候,hive和presto的函数不同
其中hive的size函数默认数组的下标从0开始
presto的cardinality函数默认数组的下标从1开始
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/979055
推荐阅读
相关标签
  

闽ICP备14008679号