一、Hive简明笔记

本文详细介绍了Hive的使用,从基本概念、安装部署到数据类型、DDL、DML操作,深入探讨了分区表、分桶表、查询与优化等内容,适合大数据分析人员学习。
摘要由CSDN通过智能技术生成
目录

1、Hive基本概念

1.1 什么是Hive

  • hive简介

    Hive:由 Facebook 开源用于解决海量结构化日志的数据统计工具。

    Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并 提供类 SQL 查询功能。

  • Hive的本质

    Hive的本质,是将HQL转化成MapReduce程序

    • Hive处理的数据存储在HDFS上
    • Hive分析数据底层的实现是MapReduce
    • 执行程序运行在Yarn上

1.2 Hive的优缺点

  • 优点
    • 操作接口采用类Sql语法,提供快速开发的能力
    • 避免了去写MapReduce,减少开发人员学习成本
    • Hive的执行延迟比较高,所有Hive常用于数据分析,对实时性要求不高的场合
    • Hive的优势在于处理大数据,对于处理小数据没有优势
    • Hive支持用户自定义函数
  • 缺点
    • Hive 的 HQL 表达能力有限
      • 迭代式算法无法表达
      • 数据挖掘方面不擅长,由于 MapReduce 数据处理流程的限制,效率更高的算法却无法实现
    • Hive 的效率比较低
      • Hive 自动生成的 MapReduce 作业,通常情况下不够智能化
      • Hive 调优比较困难,粒度较粗

1.3 Hive架构原理

Hive 通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的 Driver, 结合元数据(MetaStore),将这些指令翻译成 MapReduce,提交到 Hadoop 中执行,最后,将 执行返回的结果输出到用户交互接口。

  • Client:用户接口

    CLI(command-line interface)、JDBC/ODBC(jdbc 访问 hive)、WEBUI(浏览器访问 hive)

  • MetaStore:元数据

    元数据包括:表名、表所属的数据库(默认是defualt)、表的拥有者、列/分区字段、表的类型(是否是外部类)、表的数据所在目录等。

    • 默认存储在自带的 derby 数据库中,推荐使用 MySQL 存储 Metastore
  • MapReduce:hadoop的组件

  • Driver:驱动器

    1. 解析器(SQL Parser)

      将sql字符串转换成抽象语法树AST,对AST进行语法分析:判断表是否存在、字段是否存在、sql语义是否有误...

    2. 编译器(Physical Plan)

      将AST编译生成逻辑执行计划

    3. 优化器(Query Optimizer)

      对逻辑执行计划进行优化

    4. 执行器(Execution)

      把逻辑执行计划转换成可以运行的物理计划,即MR/Spark

2、Hive安装

2.1 Hive安装部署

  1. 解压软件到/opt/software目录下面

    tar -zxvf xxx -C /opt/software
  2. 添加环境变量

    # HIVE_HOME
    export HIVE_HOME=/opt/software/hive-3.1.2
    export PATH=$PATH:$HIVE_HOME/bin
  3. 解决日志jar包冲突

    mv $HIVE_HOME/lib/log4j-slf4j-impl2.10.0.jar $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.bak
  4. 初始化元数据库(元数据库默认为 derby)

    schematool -dbType derby -initSchema

    Hive 默认使用的元数据库为 derby,开启 Hive 之后就会占用元数据库,且不与其他客户端共享数据,所以需要将 Hive 的元数据地址改为 MySQL

  5. 检测当前系统是否安装过Mysql

    rpm -qa|grep mariadb
  6. 卸载Mysql

    sudo rpm -e --nodeps mariadb-libs
  7. 安装mysql

    1. 安装Mysql

      参考:VMware workstation16 中Centos7下MySQL8.0安装过程+Navicat远程连接 - ld_nil - 博客园 (cnblogs.com)

      1. 下载及安装源

        wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
        sudo yum install mysql80-community-release-el7-3.noarch.rpm
        • /etc/yum.repos.d/mysql-community.repo中的enabled值为1,为安装,enabled值为0,为不安装
      2. 安装mysql程序

        sudo yum -y install deltarpm  # 安装依赖否则报错
        sudo yum install mysql-community-server
      3. 修改mysql服务器为开机启动

        systemctl start mysqld # 启动mysql服务
        systemctl enable mysqld
        systemctl daemon-reload # 设置mysql服务开机启动
        systemctl status mysqld # 查看mysql服务状态
      4. 查看mysql初始登录密码

        sudo grep "temporary" /var/log/mysqld.log
      5. 修改密码

        参考:

        1、MySQL的validate_password插件/组件总结 - 潇湘隐者 - 博客园 (cnblogs.com)

        2、ERROR 1819 (HY000): Your password does not satisfy the current policy requirements_Spring Boot-Common On With You-CSDN博客

        [1]  mysql -uroot -p<获取到的初始密码>;
        [2]  alter user user() identified by "EgxSeR!sF7xx";
        [3]  SHOW VARIABLES LIKE 'validate_password%';
        [4]  set global validate_password.check_user_name=OFF;
        [5]  set global validate_password.length=1;
        [6]  set global validate_password_length=1;
        [7]  set global validate_password.policy=0;
        [9]  set global validate_password_policy=0;
        [10] alter user user() identified by "root";
        [11] 完成设置
      6. 远程登录设置

        1. mysql -uroot -proot

        2. use mysql

        3. select host,user from user; -- 查看root用户的host属性

        4. root用户的host默认为localhost,需要改为%(上图是修改过的),即可允许远程登录数据库

          [1] update user set host='%' where user='root';

          [2] flush privileges;

2.2 Hive元数据配置到MySQL

2.2.1 拷贝JDBC驱动

将 MySQL 的 JDBC 驱动拷贝到 Hive 的 lib 目录下

wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.26.tar.gz

2.2.2 配置 Metastore 到 MySQL

  1. 在$HIVE_HOME/conf 目录下新建 hive-site.xml 文件

    vim $HIVE_HOME/conf/hive-site.xml

    添加如下内容:

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
    	 <!-- jdbc 连接的 URL -->
    	 <property>
    		<name>javax.jdo.option.ConnectionURL</name>
    		<value>jdbc:mysql://pc001:3306/metastore?useSSL=false</value>
    	</property>
    	
    	 <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值