热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Hive详解

1 Hive基本概念Hive是一个构建在Hadoop上的数据仓库框架。最初,Hive是由Facebook开发,后来移交由Apache软件基金会开发,并作为一个Apache开源项目。

1 Hive基本概念

Hive是一个构建在Hadoop上的数据仓库框架。最初,Hive是由Facebook开发,后来移交由Apache软件基金会开发,并作为一个Apache开源项目。

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

其本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据的存储,说白了hive可以理解为一个将SQL转换为MapReduce的任务的工具,甚至更进一步可以说hive就是一个MapReduce的客户端。


2 Hive的特点与架构图



  • Hive最大的特点是通过类SQL来分析大数据,而避免了写MapReduce程序来分析数据,这样使得分析数据更容易。

  • 数据是存储在HDFS上的,Hive本身并不提供数据的存储功能,它可以使已经存储的数据结构化。

  • Hive是将数据映射成数据库和一张张的表,库和表的元数据信息一般存在关系型数据库上(比如MySQL)。

  • 数据存储方面:它能够存储很大的数据集,可以直接访问存储在Apache HDFS或其他数据存储系统(如Apache HBase)中的文件。

  • 数据处理方面:因为Hive语句最终会生成MapReduce任务去计算,所以不适用于实时计算的场景,它适用于离线分析。

  • Hive除了支持MapReduce计算引擎,还支持Spark和Tez这两种分布式计算引擎;

  • 数据的存储格式有多种,比如数据源是二进制格式,普通文本格式等等;

  • hive具有sql数据库的外表,但应用场景完全不同,hive只适合用来做批量数据统计分析


3 Hive的安装方式

hive的安装一共有三种方式:内嵌模式、本地模式、远程模式 

元数据服务(metastore)作用是:客户端连接metastore服务,metastore再去连接MySQL数据库来存取元数据。有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可。

  (1) 内嵌模式

  内嵌模式使用的是内嵌的Derby数据库来存储元数据,也不需要额外起Metastore服务。数据库和Metastore服务都嵌入在主Hive Server进程中。这个是默认的,配置简单,但是一次只能一个客户端连接,适用于用来实验,不适用于生产环境。解压hive安装包  bin/hive 启动即可使用

  缺点:不同路径启动hive,每一个hive拥有一套自己的元数据,无法共享。

 (2)本地模式

  本地模式采用外部数据库来存储元数据,目前支持的数据库有:MySQL、Postgres、Oracle、MS SQL Server.在这里我们使用MySQL。本地模式不需要单独起metastore服务,用的是跟hive在同一个进程里的metastore服务。也就是说当你启动一个hive 服务,里面默认会帮我们启动一个metastore服务。hive根据hive.metastore.uris 参数值来判断,如果为空,则为本地模式。

  缺点:每启动一次hive服务,都内置启动了一个metastore。

  (3)远程模式

  远程模式下,需要单独起metastore服务,然后每个客户端都在配置文件里配置连接到该metastore服务。远程模式的metastore服务和hive运行在不同的进程里。在生产环境中,建议用远程模式来配置Hive Metastore。在这种情况下,其他依赖hive的软件都可以通过Metastore访问hive。

  远程模式下需要配置hive.metastore.uris 参数来指定metastore服务运行的机器ip和端口,并且需要单独手动启动metastore服务。hiveserver2是Hive启动了一个server,客户端可以使用JDBC协议,通过IP+ Port的方式对其进行访问,达到并发访问的目的。


4 Hive的安装

之前文章介绍过按照Hadoop,继Hadoop后按照Hive。在此处选择第三台机器node3作为我们hive的安装机器,安装方式使用远程方式。

准备工作:① 必须按照有Hadoop(可以是单节点也可以是高可用)和MySQL数据库。可参照我其他两篇文章。

     ② 在Node3主机上创建目录(已创建有可以忽略):

mkdir -p /export/server/
mkdir -p /export/data/
mkdir -p /export/software/

准备一个Hive的包,可以去官网下载 http://archive.apache.org/dist/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz

(1)上传压缩包到/export/software目录里,并解压安装包

# 上传压缩包到/export/software目录里,并解压安装包
cd /export/software/
tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /export/server
cd /export/server
mv apache-hive-3.1.2-bin hive-3.1.2

(2)解决hadoop、hive之间guava版本差异

#解决hadoop、hive之间guava版本差异
cd /export/server/hive-3.1.2
rm -rf lib/guava-19.0.jar
cp /export/server/hadoop-3.1.4/share/hadoop/common/lib/guava-27.0-jre.jar ./lib/

(3) 配置一个MySQL的连接包。这步必须配置,Mysql5.X和Mysql8.X的连接包可能不同,具体可以去官网下载,附上脚本之家的下载教程(https://www.jb51.net/article/190860.htm)

#上传这个包到此目录下/export/server/hive-3.1.2/lib
mysql-connector-java-5.1.41-bin.jar

(5)修改hive环境变量文件 添加Hadoop_HOME

#修改hive环境变量文件 添加Hadoop_HOME
cd /export/server/hive-3.1.2/conf/
mv hive-env.sh.template hive-env.sh
vim hive-env.sh
#---将以下的配置放到配置文件中,以hadoop-3.1.4和hive-3.1.2为例
HADOOP_HOME=/export/server/hadoop-3.1.4
export HIVE_CONF_DIR=/export/server/hive-3.1.2/conf
export HIVE_AUX_JARS_PATH=/export/server/hive-3.1.2/lib

(6)配置mysql等相关信息,新增hive-site.xml 

#--打开配置文件
vim hive-site.xml
#--将以下配置内容写入配置文件中,具体的连接端口以自己本机为准,附上备注



javax.jdo.option.ConnectionURL
jdbc:mysql://node3:3306/hive?createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8


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


javax.jdo.option.ConnectionUserName
root


javax.jdo.option.ConnectionPassword
123456



hive.server2.thrift.bind.host
node3



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



hive.metastore.event.db.notification.api.auth
false



hive.metastore.schema.verification
false

(7)初始化metadata(只需要在配置完Hive之后进行一次操作)

cd /export/server/hive-3.1.2
#初始化成功会在mysql中创建74张表
bin/schematool -initSchema -dbType mysql -verbos

(8)系统环境变量配置

#添加环境变量
vim /etc/profile
#将以下环境变量新增到/etc/profile文件中
export HIVE_HOME=/export/server/hive-3.1.2
export PATH=:$HIVE_HOME/bin:$PATH
#刷新,让环境变量生效
source /etc/profile

 (9)通过后台运行启动metastore和hiveserver2 启动前需要查看下Hadoop是否启动,Hadoop未启动会报错:连接失败

#查看Hadoop是否启动
jps
#Hadoop未启动:没有DataNode和NodeManage节点代表Hadoop未启动
#一键启动Hadoop(已启动则忽略)
start-add.sh
#-----------------Metastore 和 Hiveserver2启动----
nohup /export/server/hive-3.1.2/bin/hive --service metastore 2>&1 &
nohup /export/server/hive-3.1.2/bin/hive --service hiveserver2 2>&1 &
#启动成功会生成日志,进入可以查看是否有问题
vim nohup.out

 (10)验证是否安装成功

#在Linux中输入,hive直接回车,
hive
#出现一个终端,在该终端中可以输入sql命令:
show databases;


5  Hive的交互方式

Hive交互方式有多种,这里以远程模式的hiveserver2交互为例。需要对Hadoop配置文件进行更新。

#第一步:在NameNode节点上的主机上关闭Hadoop(我的是Node1主机)
stop-all.sh
#第二步:Node1主机上进入到Hadoop配置文件的路径,然后编辑 core-site.xml文件
cd /export/server/hadoop-3.1.4/etc/hadoop/
vim core-site.xml
#第三步:在文件末尾内追加配置


hadoop.proxyuser.root.hosts
*


hadoop.proxyuser.root.groups
*

#第四步:将修改好的core-site.xml文件分发到node2和node3
scp core-site.xml node2:$PWD
scp core-site.xml node3:$PWD
#第五步:然后重启Hadoop(stop-all.sh start-all.sh)
start-all.sh

在hive运行的服务器上,确保已经启动metastore服务和hiveserver2服务,如果没有启动,则执行以下语句

nohup /export/server/hive-3.1.2/bin/hive --service metastore 2>&1 &
nohup /export/server/hive-3.1.2/bin/hive --service hiveserver2 2>&1 &

 为了方便快捷,直接通过制作脚本进行登录Hive

#Hive一键登录脚本,安装expect
yum -y install expect
#新建一个脚本文件夹,并写一个脚本
mkdir -p /export/server/script
cd /export/server/script
vim beenline.exp
#脚本的内容如下:
#!/bin/expect
spawn beeline
set timeout 5
expect "beeline>"
send "!connect jdbc:hive2://node3:10000\r"
expect "Enter username for jdbc:hive2://node3:10000:"
send "root\r"
expect "Enter password for jdbc:hive2://node3:10000:"
send "123456\r"
interact
#:wq保存脚本后,需要修改脚本权限
chmod 777 beenline.exp
#最后可以实现一键脚本登录Hive
expect beenline.exp


推荐阅读
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • 字节跳动深圳研发中心安全业务团队正在火热招募人才! ... [详细]
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
  • 在Linux系统中,原本已安装了多个版本的Python 2,并且还安装了Anaconda,其中包含了Python 3。本文详细介绍了如何通过配置环境变量,使系统默认使用指定版本的Python,以便在不同版本之间轻松切换。此外,文章还提供了具体的实践步骤和注意事项,帮助用户高效地管理和使用不同版本的Python环境。 ... [详细]
  • Storm集成Kakfa
    一、整合说明Storm官方对Kafka的整合分为两个版本,官方说明文档分别如下:StormKafkaIntegratio ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • PostgreSQL 与 MySQL 的主要差异及应用场景分析
    本文详细探讨了 PostgreSQL 和 MySQL 在架构、性能、功能以及适用场景方面的关键差异。通过对比分析,帮助读者更好地理解两种数据库系统的特性和优势,为实际应用中的选择提供参考。 ... [详细]
  • 美团优选推荐系统架构师 L7/L8:算法与工程深度融合 ... [详细]
  • 构建高可用性Spark分布式集群:大数据环境下的最佳实践
    在构建高可用性的Spark分布式集群过程中,确保所有节点之间的无密码登录是至关重要的一步。通过在每个节点上生成SSH密钥对(使用 `ssh-keygen -t rsa` 命令并保持默认设置),可以实现这一目标。此外,还需将生成的公钥分发到所有节点的 `~/.ssh/authorized_keys` 文件中,以确保节点间的无缝通信。为了进一步提升集群的稳定性和性能,建议采用负载均衡和故障恢复机制,并定期进行系统监控和维护。 ... [详细]
  • Facebook 强一致性键值存储 ZippyDB 架构简介
    更多内容关注微信公众号:fullstack888Facebook工程团队最近发布了一篇博客文章,阐述了如何构建其通用的键值存储的,也就是Z ... [详细]
  • Hadoop——实验七:MapReduce编程实践
    文章目录一.实验目的二.实验内容三.实验步骤及结果分析 1.基于ubuntukylin14.04(7)版本,安装hadoop-eclipse-kepler-plugi ... [详细]
author-avatar
小白一枚
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有