Hadoop学习 第四章 Hive

第四章

Apache Hive概述

对数据进行统计分析,SQL是目前最为方便的编程工具。

大数据体系中充斥着非常多的统计分析场景

所以,使用SQL去处理数据,在大数据中也是有极大的需求的。

MapReduce支持程序开发(Java、Python等)

但不支持SQL开发

Apache Hive是一款分布式SQL计算的工具,其主要功能是:
将SQL语句 翻译成MapReduce程序运行

基于Hive为用户提供了分布式SQL计算的能力

写的是SQL、执行的是MapReduce

为什么使用Hive?

为什么使用Hive

使用Hadoop MapReduce直接处理数据所面临的问题

人员学习成本太高 需要掌握java、Python等编程语言

MapReduce实现复杂查询逻辑开发难度太大

使用Hive处理数据的好处

操作接口采用类SQL语法 ,提供快速开发的能力(简单、容易上手)

底层执行MapReduce,可以完成分布式海量数据的SQL处理

总结

模拟实现Hive功能

如果让您设计Hive这款软件,要求能够实现

1.用户只编写sql语句

2.Hive自动将sql转换MapReduce程序并提交运行

3.处理位于HDFS上的结构化数据。

如何实现?

元数据管理

解析器

基础架构

Hive是否也包含了这两个组件?

Hive基础架构

元数据存储

通常是存储在关系数据库如 mysql/derby中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。

Hive提供了 Metastore 服务进程提供元数据管理功能

Driver驱动程序,包括语法解析器、计划编译器、优化器、执行器

完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有执行引擎调用执行。

这部分内容不是具体的服务进程,而是封装在Hive所依赖的Jar文件即Java代码中。

用户接口

包括 CLI、JDBC/ODBC、WebGUl。其中,CLl(command line interface)为shell命令行:Hive中的Thrift服务器允许外部客户端通过网络与Hive进行交互,类似于JDBC或ODBC协议。WebGUl是通过浏览器访问Hive。

-- Hive提供了 Hive Shell、ThriftServer等服务进程向用户提供操作接口

Hive部署

Hive是分布式运行的框架还是单机运行的?

Hive是单机工具,只需要部署在一台服务器即可。

Hive虽然是单机的,但是它可以提交分布式运行的MapReduce

程序运行。

规划

我们知道Hive是单机工具后,就需要准备一台服务器供Hive使用即可。

同时Hive需要使用元数据服务,即需要提供一个关系型数据库,我们也选择一台服务器安装关系型数据库即可

步骤一:安装MySQL数据库

复制代码
# 更新密钥
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

# 安装Mysql yum库
rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm

更换yum源为阿里源可加快下载速度

复制代码
# yum安装Mysql
yum -y install mysql-community-server

# 启动Mysql设置开机启动
systemctl start mysqld
systemctl enable mysqld

# 检查Mysql服务状态
systemctl status mysqld

第一次启动mysql,会在日志文件(/var/log/mysqld.log)中生成root用户的一个随机密码,使用下面命令查看该密码

复制代码
cat  /var/log/mysqld.log | grep 'password'
复制代码
# 修改root用户密码
mysql -uroot -p 
复制代码
# 如果你想设置简单密码,需要降低Mysql的密码安全级别
 # 密码安全级别低

set global validate_password_policy=LOW;

# 密码长度最低4位即可
set global validate_password_length=4;    
复制代码
# 然后就可以用简单密码了(课程中使用简单密码,为了方便,生产中不要这样)
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

#设置远程密码

grant all privileges on *.* to root@"%" identified by '123456' with grant option;  

#刷新权限
flush privileges;

步骤二:配置Hadoop

Hive的运行依赖于Hadoop(HDFS、MapReduce、YARN都依赖)

同时涉及到HDFS文件系统的访问,所以需要配置Hadoop的代理用户

即设置hadoop用户允许代理(模拟)其它用户

配置如下内容在Hadoop的core-site.xml中,并分发到其它节点,且重启HDFS集群

复制代码
 <property>
    <name>hadoop.proxyuser.hadoop.groups</name>
    <value>*</value>
 </property>

 <property>
    <name>hadoop.proxyuser.hadoop.hosts</name>
    <value>*</value>
 </property>

步骤三:下载解压Hive

•切换到hadoop用户

su - hadoop

•下载Hive安装包:

http://archive.apache.org

•解压到node1服务器的:/export/server/内

tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /export/server/

•设置软连接

ln -s /export/server/apache-hive-3.1.3-bin /export/server/hive

步骤四:提供 MySQL Driver

•下载MySQL驱动包:

https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.34/mysql-connector-java-5.1.34.jar

•将下载好的驱动jar包,放入:Hive安装文件夹的lib目录内

mv mysql-connector-java-5.1.34.jar /export/server/hive/lib/

步骤五:配置Hive

使用mv命令把hive-env.sh.template文件改名为hive-env.sh

•在Hive的conf目录内,新建hive-env.sh文件,填入以下环境变量内容:

export HADOOP_HOME=/export/server/hadoop

export HIVE_CONF_DIR=/export/server/hive/conf

export HIVE_AUX_JARS_PATH=/export/server/hive/lib

•在Hive的conf目录内,新建hive-site.xml文件,填入以下内容:

复制代码
<configuration>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://node1:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8</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>

  <property>
    <name>hive.server2.thrift.bind.host</name>
    <value>node1</value>
  </property>

  <property>
    <name>hive.metastore.uris</name>
    <value>thrift://node1:9083</value>
  </property>

  <property>
    <name>hive.metastore.event.db.notification.api.auth</name>
    <value>false</value>
  </property>

</configuration>

步骤六:初始化元数据库

支持,Hive的配置已经完成,现在在启动Hive前,需要先初始化Hive所需的元数据库。

•在MySQL中新建数据库:hive

CREATE DATABASE hive CHARSET UTF8;

•执行元数据库初始化命令:

cd /export/server/hive

bin/schematool -initSchema -dbType mysql -verbos

初始化成功后,会在MySQL的hive库中新建74张元数据管理的表。

步骤七:启动Hive(使用hadoop用户)

•确保Hive文件夹所属为hadoop用户

chown -R hadoop:hadoop apache-hive-3.1.3-bin hive

•切换到hadoop用户,创建一个hive的日志文件夹:

mkdir /export/server/hive/logs

•启动元数据管理服务(必须启动,否则无法工作)

前台启动:bin/hive --service metastore

后台启动:nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &

•启动客户端,二选一(当前先选择Hive Shell方式)

Hive Shell方式(可以直接写SQL): bin/hive

Hive ThriftServer方式(不可直接写SQL,需要外部客户端链接使用): bin/hive --service hiveserver2

记得要把HDFS和YARN启动了

这样就成功了

相关推荐
strongwyy30 分钟前
9、nRF52xx蓝牙学习(pca10056.h学习)
单片机·嵌入式硬件·学习
每天题库32 分钟前
2025 年江苏保安员职业资格考试经验分享
学习·安全·考试·题库·考证
viperrrrrrrrrr76 小时前
大数据学习(105)-Hbase
大数据·学习·hbase
行思理8 小时前
go语言应该如何学习
开发语言·学习·golang
oceanweave9 小时前
【k8s学习之CSI】理解 LVM 存储概念和相关操作
学习·容器·kubernetes
吴梓穆11 小时前
UE5学习笔记 FPS游戏制作43 UI材质
笔记·学习·ue5
学会870上岸华师11 小时前
c语言学习16——内存函数
c语言·开发语言·学习
XYN6111 小时前
【嵌入式面试】
笔记·python·单片机·嵌入式硬件·学习
啊哈哈哈哈哈啊哈哈11 小时前
R3打卡——tensorflow实现RNN心脏病预测
人工智能·深度学习·学习
KangkangLoveNLP12 小时前
深度探索:策略学习与神经网络在强化学习中的应用
人工智能·深度学习·神经网络·学习·机器学习·自然语言处理