Hive学习笔记

启动:
进入到apache-hive/bin目录中,sh hive启动hive

简介

在这里插入图片描述

命令

在这里插入图片描述
在这里插入图片描述
在hive中新建的库,在hdsf中对应的位置为:
在这里插入图片描述

表结构

一.外部表和内部表

在这里插入图片描述
创建外部表的时候,会依据/score路径下的一个score文件创建。

分区表

在这里插入图片描述
在这里插入图片描述
在向表中加载数据的时候,指定分区,那么每一个分区在HDFS上的表文件夹下都会对应一个目录。

在这里插入图片描述
手动添加分区:如果我在表目录下创建了一个分区目录,province=‘湖北’,如果想要这个分区生效,就需要执行以上命令
修复分区:如果需要手动添加多个分区的时候使用。

动态分区

在这里插入图片描述

多字段分区

前一个字段形成的目录会包含后一个字段形成的目录。在实际过程中,如果需要对数据进行多级分类的时候,考虑多字段分区。
案例:
在这里插入图片描述

分桶表

注意:只能insert添加数据,不能load添加
在这里插入图片描述
**注意:**根据后边的排序部分的知识可知,这里的clustered by 实际上是先进行了分区,然后distribute by将数据分桶,然后在sort by对数据排序。如果distribute by和sort by后边的字段相同的话,就可以简写成:clustered by。

数据类型和函数

一.数据类型

1.Hive中包含了2两大类数据类型:基本类型和复杂类型
2.基本类型包含:tinyint,smallint,int,bigint,boolean,float,doublestring,timestamp,binary
3.复杂类型包含:array、map和struct类型
4.array类型-数组类型,对应的Java中的数组和集合
在这里插入图片描述
在这里插入图片描述

扩展

关于网站域名的介绍

在这里插入图片描述

在Hive中,如何提高查询效率?

分区查询
SQL语句优化:join where,使用子查询,先where再join
使用索引
使用视图,字段少了,查起来快
缓存 map side join,join的时候将小表放在内存中,查询大表的时候如果用到校表的数据从缓存中取
order by 和 limit一块用的时候可以提高效率
窗口函数

函数

在这里插入图片描述
这里regexp_extract函数中最后那个是捕获组的编号
捕获组
捕获组就是把正则表达式中子表达式匹配的内容,保存到内存中以数字编号或显式命名的组里,方便后面引用。当然,这种引用既可以是在正则表达式内部,也可以是在正则表达式外部。
在这里插入图片描述

explode

在这里插入图片描述

列转行

在这里插入图片描述
关于lateral view
lateral view用于和split, explode等UDTF一起使用,它能够将一行数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。lateral view首先为原始表的每行调用UDTF,UTDF会把一行拆分成一或者多行,lateral view再把结果组合,产生一个支持别名表的虚拟表。

行转列

在这里插入图片描述

hive中函数的分类

函数的分类上看行数的变化,一行数据变成了一行这是UDF,一行数据变成了多行数据,这是UDTF,多行数据变成了一行,这叫UDAF
在这里插入图片描述

排序

orderby 和sortby正常使用时没有差别,但是如果对mapReduce进行了分区,效果就会不一样。对于orderby,分区前后排序效果不变,;对于sortby,分区后,一般都会有distribute by,按照指定字段的hash值进行分类,分到不同的桶中,在每个桶中数据是根据指定字段排序的。
分区:set mapred.reduce.tasks=3
在这里插入图片描述

join

在这里插入图片描述

Serde

在这里插入图片描述
案例:
原始数据:
在这里插入图片描述
在这里插入图片描述

beeline

在这里插入图片描述

view-视图

在这里插入图片描述

元数据

在这里插入图片描述
因为derby是单连接的,不支持并发,所以我们把derby换成MySQL

首先安装MySQL

  1. 查看是否有残缺的MySQL
    rpm -qa | grep mysql

  2. 卸载残缺的MySQL
    rpm -ev --nodeps mysql-libs-5.1.73-8.el6_8.x86_64
    rpm -ev --nodeps tcl-mysqltcl-3.052-1.el6.x86_64

  3. 添加用户组和用户
    groupadd mysql
    useradd -r -g mysql mysql

  4. 下载安装包
    wget http://bj-yzjd.ufile.cn-north-02.ucloud.cn/MySQL-client-5.6.29-1.linux_glibc2.5.x86_64.rpm
    wget http://bj-yzjd.ufile.cn-north-02.ucloud.cn/MySQL-server-5.6.29-1.linux_glibc2.5.x86_64.rpm

  5. 安装MySQL
    rpm -ivh MySQL-server-5.6.29-1.linux_glibc2.5.x86_64.rpm
    rpm -ivh MySQL-client-5.6.29-1.linux_glibc2.5.x86_64.rpm

  6. 修改
    vim /usr/my.cnf
    添加
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    [mysqld]
    character_set_server=utf8
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

  7. 可以将MySQL添入开机自启
    cp /usr/share/mysql/mysql.server /etc/init.d/mysql

  8. 启动MySQL
    service mysql start

  9. 查看初始随机密码
    cat /root/.mysql_secret

  10. 修改启动密码
    mysqladmin -u root -p password root

切换Hive的元数据库

  1. 进入Hive的安装目录的lib目录下
    cd /home/software/apache-hive-1.2.0-bin/lib
  2. 添加MySQL的连接驱动包
    wget http://bj-yzjd.ufile.cn-north-02.ucloud.cn/mysql-connector-java-5.1.38-bin.jar
  3. 进入Hive的安装目录的conf目录下
    cd …/conf
  4. 编辑
    vim hive-site.xml
    添加
    javax.jdo.option.ConnectionURL jdbc:mysql://hadoop01:3306/hive?createDatabaseIfNotExist=true javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver javax.jdo.option.ConnectionUserName root javax.jdo.option.ConnectionPassword root
  5. 进入MySQL执行如下命令
    grant all privileges on . to ‘root’@‘hadoop01’ identified by ‘root’ with grant option;
    grant all on . to ‘root’@’%’ identified by ‘root’;
    flush privileges;
    create database hive character set latin1;
  6. 启动Hive
    cd …/bin
    sh hive
    如果出现错误,如下解决方案:
    从第三个错误开始查看,在错误信息中是否有READ or UNREAD COMMITTED
    解决方案
  7. 编辑
    vim /usr/my.cnf
  8. 在文件尾部追加
    binlog_format=mixed
  9. 重启mysql
    service mysql restart

Hive的体系结构

在这里插入图片描述

优化

map side join

在这里插入图片描述

join和where的优化

在这里插入图片描述

group by的优化

在这里插入图片描述

调整切片大小

在这里插入图片描述

开启严格模式

在这里插入图片描述

count和distinct连用

当count和distinct连用的时候,可以考虑先利用子查询进行去重,再去重的是i后可以使用多个ReduceTask完成,最终在利用一个ReduceTask来完成计数。
案例:
在这里插入图片描述
在这里插入图片描述

Sqoop

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值