栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Hive 之旅

Hive 之旅

Hive 之旅
  • Hive基本概念
    • Hive是什么
      • hive简介
      • Hive本质
    • Hive的优缺点
      • 优点
      • 缺点
    • Hive架构原理
    • Hive和 数据库比较
      • 查询语言
      • 数据更新
      • 执行延迟
      • 数据规模
  • Hive安装
    • Hive安装地址
    • MySql安装
    • Hive安装部署
    • Hive 元数据配置到 MySql
      • 拷贝驱动
      • 配置 metastore 到 MySql
    • 启动Hive
      • 初始化元数据库
      • 启动Hive
      • 使用元数据服务的方式访问 Hive
      • 使用JDBC方式访问Hive
      • 编写启动 metastore 和 hiveserver2 脚本
    • Hive常用交互命令
    • Hive其他命令操作
    • Hive常见属性配置
      • hive窗口打印默认库和表头
      • Hive运行日志信息配置
      • 参数配置方式
  • Hive数据类型

Hive基本概念 Hive是什么 hive简介

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

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

Hive本质

将HQL转化成MapReduce程序

  • Hive 处理的数据存储在 HDFS
  • Hive 分析数据底层的实现是 MapReduce
  • 执行程序运行在 Yarn 上
Hive的优缺点 优点
  • 操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)
  • 避免了去写MapReduce,减少开发人员的学习成本
  • Hive的执行延迟比较高,因此Hive常用于数据分析,对实时性要求不高的场合
  • Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高
  • Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数
缺点

Hive的HQL表达能力有限

  • 迭代式算法无法表达
  • 数据挖掘方面不擅长,由于MapReduce数据处理流程的限制,效率更高的算法却无法实现

Hive的效率比较低

  • Hive自动生成的MapReduce作业,通常情况下不够智能化
  • Hive调优比较困难,粒度较粗
Hive架构原理

用户接口:Client

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

元数据:metastore

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

默认存储在自带的 derby 数据库中,推荐使用 MySQL 存储 metastore

Hadoop

使用HDFS进行存储,使用MapReduce进行计算

驱动器:Driver

  • 解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误
  • 编译器(Physical Plan):将AST编译生成逻辑执行计划
  • 优化器(Query Optimizer):对逻辑执行计划进行优化
  • 执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/Spark

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

Hive和 数据库比较

由于 Hive 采用了类似SQL 的查询语言 HQL(Hive Query Language),因此很容易将 Hive 理解为数据库。其实从结构上来看,Hive 和数据库除了拥有类似的查询语言,再无类似之处。

数据库可以用在 online 的应用中,但是Hive 是为数据仓库而设计的,清楚这一点,有助于从应用角度理解 Hive 的特性

查询语言

由于SQL被广泛的应用在数据仓库中,因此,专门针对Hive的特性设计了类SQL的查询语言HQL。熟悉SQL开发的开发者可以很方便的使用Hive进行开发

数据更新

由于Hive是针对数据仓库应用设计的,而数据仓库的内容是读多写少的。因此,Hive中不建议对数据的改写,所有的数据都是在加载的时候确定好的。而数据库中的数据通常是需要经常进行修改的,因此可以使用 INSERT INTO … VALUES 添加数据,使用 UPDATe … SET修改数据

执行延迟

Hive 在查询数据的时候,由于没有索引,需要扫描整个表,因此延迟较高。另外一个导致 Hive 执行延迟高的因素是 MapReduce框架。由于MapReduce 本身具有较高的延迟,因此在利用MapReduce 执行Hive查询时,也会有较高的延迟。相对的,数据库的执行延迟较低。当然,这个低是有条件的,即数据规模较小,当数据规模大到超过数据库的处理能力的时候,Hive的并行计算显然能体现出优势

数据规模

由于Hive建立在集群上并可以利用MapReduce进行并行计算,因此可以支持很大规模的数据;对应的,数据库可以支持的数据规模较小

Hive安装 Hive安装地址

Hive官网地址 : http://hive.apache.org/

文档查看地址 : https://cwiki.apache.org/confluence/display/Hive/GettingStarted

下载地址 : http://archive.apache.org/dist/hive/

github地址 : https://github.com/apache/hive

MySql安装

为什么需要Mysql

原因在于Hive默认使用的元数据库为derby,开启Hive之后就会占用元数据库,且不与其他客户端共享数据,如果想多窗口操作就会报错,操作比较局限。以我们需要将Hive的元数据地址改为MySQL,可支持多窗口操作

检查当前系统是否安装过Mysql

rpm -qa | grep mariadb

如果存在通过如下命令卸载

sudo rpm -e --nodeps mariadb-libs

将MySQL安装包拷贝到/opt/software目录下

解压MySQL安装包

tar -xf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar

在安装目录下执行rpm安装

sudo rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm

注意:按照顺序依次执行

如果Linux是最小化安装的,在安装 mysql-community-server-5.7.28-1.el7.x86_64.rpm 时可能会出 现如下错误

sudo rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm

通过yum安装缺少的依赖,然后重新安装 mysql-community-server-5.7.28-1.el7.x86_64 即可

yum install -y libaio

删除 /etc/my.cnf 文件中 datadir 指向的目录下的所有内容,如果有内容的情况下

[mysqld]
datadir=/var/lib/mysql

删除 /var/lib/mysql 目录下的所有内容

cd /var/lib/mysql
sudo rm -rf ./*

初始化数据库

sudo mysqld --initialize --user=mysql

查看临时生成的root用户的密码

cat /var/log/mysqld.log

启动MySQL服务

sudo systemctl start mysqld

登录MySQL数据库

mysql -uroot -p

必须先修改root用户的密码 , 否则执行其他的操作会报错

set password = password("新密码")

修改 mysql 库下的 user 表中的 root 用户允许任意ip连接

update mysql.user set host='%' where user='root';
flush privileges;
Hive安装部署

把 apache-hive-3.1.2-bin.tar.gz 上传到linux的 /opt/software 目录下

解压 apache-hive-3.1.2-bin.tar.gz 到 /opt/module/ 目录下面

tar -zxvf /opt/software/apache-hive-3.1.2-bin.tar.gz -C /opt/module/

修改 apache-hive-3.1.2-bin.tar.gz 的名称为 hive-3.1.2

 mv /opt/module/apache-hive-3.1.2-bin/ /opt/module/hive-3.1.2

修改/etc/profile.d/my_env.sh,添加环境变量

sudo vim /etc/profile.d/my_env.sh

添加内容

#HIVE_HOME
HIVE_HOME=/opt/module/hive-3.1.2

PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin
export PATH JAVA_HOME HADOOP_HOME HIVE_HOME

解决日志Jar包冲突

mv $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.jar $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.bak
Hive 元数据配置到 MySql 拷贝驱动

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

cp /opt/software/mysql-connector-java-5.1.48.jar $HIVE_HOME/lib
配置 metastore 到 MySql

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

vim $HIVE_HOME/conf/hive-site.xml

添加如下内容




    
    
        javax.jdo.option.ConnectionURL
        jdbc:mysql://cpucode101:3306/metastore?useSSL=false


    
    
        javax.jdo.option.ConnectionDriverName
        com.mysql.jdbc.Driver
	

	
    
        javax.jdo.option.ConnectionUserName
        root
    

    
    
        javax.jdo.option.ConnectionPassword
        123456
	

    
    
        hive.metastore.warehouse.dir
        /user/hive/warehouse
    
    
   
    
        hive.metastore.schema.verification
        false
    
   
    
    
        hive.metastore.event.db.notification.api.auth
        false
    

启动Hive 初始化元数据库

登陆MySQL

mysql -uroot -p000000

新建Hive元数据库

create database metastore;
quit;

初始化Hive元数据库

schematool -initSchema -dbType mysql -verbose
启动Hive

先启动hadoop集群

启动Hive

bin/hive

使用Hive

show databases;
show tables;
create table test (id int);
insert into test values(1);
select * from test;

开启另一个窗口测试开启 hive

bin/hive
使用元数据服务的方式访问 Hive

在 hive-site.xml 文件中添加如下配置信息

    
    
        hive.metastore.uris
        thrift://cpucode100:9083
    

启动 metastore

hive --service metastore

注意: 启动后窗口不能再操作,需打开一个新的shell窗口做别的操作

启动 hive

bin/hive
使用JDBC方式访问Hive

在hive-site.xml文件中添加如下配置信息

    
    
        hive.server2.thrift.bind.host
        cpucode100
    

    
    
        hive.server2.thrift.port
        10000
    
bin/hive --service hiveserver2
编写启动 metastore 和 hiveserver2 脚本 Hive常用交互命令
bin/hive -help
Hive其他命令操作 Hive常见属性配置 hive窗口打印默认库和表头 Hive运行日志信息配置 参数配置方式 Hive数据类型
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/651785.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号