Hive详解以及CentOS下部署Hive和Mysql

本文涉及的产品
RDSClaw,2核4GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: Hive详解以及CentOS下部署Hive和Mysql

前言


本人大三大数据专业,配置的虚拟机为Centos6.7系统,hadoop版本为2.6.0版本,先前已经完成搭建CentOS部署Hbase、CentOS6.7搭建Zookeeper和编写MapReduce前置插件Hadoop-Eclipse-Plugin 安装。在此基础上进行Hive下的部署以及mysql的一个连接,完成Hive的应用


一、什么是Hive?


20201111101122726.png


根据我们整体的Hadoop的架构来看,Hive是建立在hadoop整体运行机制上作为数据仓库的存在。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。


二、为什么要使用Hive


如果直接越过Hive操作hadoop的话有以下不便之处


人员学习成本太高

项目周期要求太短

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

而当我们直接使用Hive的话有以下方便之处:


操作接口采用类SQL语法,提供快速开发的能力。

避免了去写MapReduce,减少开发人员的学习成本。

支持了绝大多数的语句如DDL、DML以及常见的聚合函数、连接查询、条件查询。

为数据操作提供了良好的伸缩性和可扩展性。

统一的元数据管理,可与impala/spark等共享元数据。

但是Hive的话也有以下缺点:


Hive不适合用于联机(online)事务处理,也不提供实时查询功能。(它最适合应用在基于大量不可变数据的批处理作业。)

Hive 并不能够在大规模数据集上实现低延迟快速的查询。(例如,hive 在几百MB 的数据集上执行查询一般有分钟级的时间延迟。)

Hive 并不适合那些需要高实时性的应用。(例如,联机事务处理(OLTP)。)

Hive的特点是:


1.可扩展


Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。


2.延展性


Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。


3.容错


良好的容错性,节点出现问题SQL仍可完成执行。


4.输入格式的松散耦合。


三、Hive的架构

2020111110410047.png


20201111104554171.png


> 用户接口:Client


CLI(hive shell)、JDBC/ODBC(java访问hive),WEBUI(web访问hive)


> Hive服务器


Hive应用可以以JDBC、ODBC和Thirft(基于socket通讯)接口访问指定地址和端口的Hive服务器。


> 元数据:Metastore


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


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


>Hadoop


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


> 驱动器: Driver


负责处理Hive语句,完成编译、 优化和执行的工作。

生成相应的MapReduce任务与 HDFS节点进行数据交互。

包含:解析器、编译器、优化器、执行器;


解析器:将SQL字符串转换成抽象语法树AST,这一步一般都用第二方工具库完成,比如antlr;对AST进行方法分析,比如表是否存在、字段是否存在、SQL语义是否有误(比如select中被判定为聚合的字段在group by 中是否有出现);


编译器:将AST编译成逻辑执行计划;


优化器:对逻辑执行计划进行优化;


执行器:把逻辑执行计划转换成可以运行的物理计划。对Hive来说,就是MR/TEZ/Spark;


四、Hive sql编译过程

20201111110944947.png

Antlr定义SQL的语法规则,完成SQL词法,语法解析,将SQL转化为抽象语法树AST Tree

遍历AST Tree,抽象出查询的基本组成单元QueryBlock

遍历QueryBlock,翻译为执行操作树OperatorTree

逻辑层优化器进行OperatorTree变换,合并不必要的ReduceSinkOperator,减少shuffle数据量

遍历OperatorTree,翻译为MapReduce任务

物理层优化器进行MapReduce任务的变换,生成最终的执行计划

这里推荐美团技术博客,里面写的相当详细了:


Hive SQL的编译过程


五、部署Hive以及Mysql


1.查看版本兼容性


先查看一下自己的Hadoop版本能否兼容其他版本的Hive:


20201111112422925.png

我的hadoop版本为2.6.0版本,我选择Hive的版本是2.3.7的版本:


2.安装Hive


1.获取安装包


wget https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.3.7/apache-hive-2.3.7-bin.tar.gz


2.解压缩


tar zxvf apache-hive-2.3.7-bin.tar.gz

mv apache-hive-2.3.7-bin hive-2.3.7

mv hive-2.3.7 /usr/local/


3.添加运行路径


vi /etc/profile.d/hive.sh
export HIVE_HOME=/usr/local/hive-2.3.7
export PATH=$PATH:$HIVE_HOME/bin


hive.sh需要自己创建


执行生效:


source /etc/profile.d/hive.sh


4.查看hive是否能启动


hive
Logging initialized using configuration in jar:file:/usr/local/hive-2.3.7/lib/hive-common-2.3.7.jar!/hive-log4j.properties
hive> quit;


3.安装MYSQL


查看一下本机MYsql版本:


rpm -qa |grep mysql

mysql-libs-5.1.73-5.el6_6.x86_64

 yum list |grep mysql
mysql.x86_64                           5.1.73-8.el6_8              @base        
mysql-libs.x86_64                      5.1.73-8.el6_8              @base        
mysql-server.x86_64                    5.1.73-8.el6_8              @base        
mysql57-community-release.noarch       el7-8                       installed    
apr-util-mysql.x86_64                  1.3.9-3.el6_0.1             base         
bacula-director-mysql.x86_64           5.0.0-13.el6                base         
bacula-storage-mysql.x86_64            5.0.0-13.el6                base         
dovecot-mysql.x86_64                   1:2.0.9-22.el6_10.1         updates      
freeradius-mysql.x86_64                2.2.6-7.el6_9               base         
libdbi-dbd-mysql.x86_64                0.8.3-5.1.el6               base         
mod_auth_mysql.x86_64                  1:3.0.0-11.el6_0.1          base         
mysql-bench.x86_64                     5.1.73-8.el6_8              base         
mysql-community-release.noarch         el7-5                       mysql-connectors-community
mysql-connector-c++.x86_64             8.0.22-1.el7                mysql-connectors-community
mysql-connector-c++-debuginfo.x86_64   8.0.22-1.el7                mysql-connectors-community
mysql-connector-c++-devel.x86_64       8.0.22-1.el7                mysql-connectors-community
mysql-connector-c++-jdbc.x86_64        8.0.22-1.el7                mysql-connectors-community
mysql-connector-java.noarch            1:8.0.22-1.el7              mysql-connectors-community
mysql-connector-odbc.x86_64            8.0.22-1.el7                mysql-connectors-community
mysql-connector-odbc-debuginfo.x86_64  8.0.22-1.el7                mysql-connectors-community
mysql-connector-odbc-setup.x86_64      8.0.22-1.el7                mysql-connectors-community
mysql-connector-python.noarch          2.0.4-1.el7                 mysql-connectors-community
mysql-connector-python.x86_64          8.0.22-1.el7                mysql-connectors-community
mysql-connector-python-cext.x86_64     8.0.21-1.el7                mysql-connectors-community
mysql-connector-python-debuginfo.x86_64
                                       2.1.7-1.el7                 mysql-connectors-community
mysql-connector-python3.x86_64         8.0.22-1.el7                mysql-connectors-community
mysql-connector-python3-cext.x86_64    8.0.21-1.el7                mysql-connectors-community
mysql-devel.i686                       5.1.73-8.el6_8              base         
mysql-devel.x86_64                     5.1.73-8.el6_8              base         
mysql-embedded.i686                    5.1.73-8.el6_8              base         
mysql-embedded.x86_64                  5.1.73-8.el6_8              base         
mysql-embedded-devel.i686              5.1.73-8.el6_8              base         
mysql-embedded-devel.x86_64            5.1.73-8.el6_8              base         
mysql-libs.i686                        5.1.73-8.el6_8              base         
mysql-router.x86_64                    8.0.12-1.el7                mysql-tools-community
mysql-router-community.x86_64          8.0.22-1.el7                mysql-tools-community
mysql-router-debuginfo.x86_64          8.0.12-1.el7                mysql-tools-community
mysql-shell.x86_64                     8.0.22-1.el7                mysql-tools-community
mysql-shell-debuginfo.x86_64           8.0.22-1.el7                mysql-tools-community
mysql-test.x86_64                      5.1.73-8.el6_8              base         
mysql-utilities.noarch                 1.6.5-1.el7                 mysql-tools-community
mysql-utilities-extra.noarch           1.5.6-1.el7                 mysql-tools-community
mysql-workbench-community.x86_64       8.0.22-1.el7                mysql-tools-community
mysql-workbench-community-debuginfo.x86_64
                                       8.0.22-1.el7                mysql-tools-community
pcp-pmda-mysql.x86_64                  3.10.9-9.el6                base         
php-mysql.x86_64                       5.3.3-50.el6_10             updates      
qt-mysql.i686                          1:4.6.2-28.el6_5            base         
qt-mysql.x86_64                        1:4.6.2-28.el6_5            base         
rsyslog-mysql.x86_64                   5.8.10-12.el6               base         
rsyslog7-mysql.x86_64                  7.4.10-7.el6                base    


yum install mysql-server.x86_64
rpm -qa |grep -i mysql
mysql-5.1.73-7.el6.x86_64
mysql-libs-5.1.73-7.el6.x86_64
mysql-server-5.1.73-7.el6.x86_64
perl-DBD-MySQL-4.013-3.el6.x86_64

这里直接使用hadoop自带的mysql就好了,一般测试够用了。


4.Hive和mysql连接


将MySQL的JDBC驱动文件mysql-connector-java-5.1.40-bin.jar复制到Hive的依赖库中,也可自行下载。


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


解压:


tar zxvf mysql-connector-java-5.1.40.tar.gz
cp mysql-connector-java-5.1.40/mysql-connector-java-5.1.40-bin.jar /usr/local/hive-2.3.7/lib/


设置Mysql:


先启动mysql:


/etc/init.d/mysqld start


以root的身份进入mysql,不需要密码直接enter进入:


mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.73 Source distribution


创建一个hiveDB的账户:


mysql> create database hiveDB;


修改root密码,将root的密码也设置为root,当然你也可以自己设定一个密码格式为update user set password=password('密码') where user='用户名';:


mysql> use mysql;
mysql> update user set password=password('root') where user='root';


刷新系统权限表


mysql> FLUSH PRIVILEGES;
mysql> quit;


重新登录mysql


mysql -u root –p


在root用户下授权root用户于hivedb数据库于登陆身份为root主机:


mysql> grant all privileges on hiveDB.* to 'root'@'%' identified by 'root';
mysql> flush privileges;
mysql> quit;


配置Hive:


vi /usr/local/hive-2.3.7/conf/hive-env.sh.templat


修改

# HADOOP_HOME=${bin}/../../hadoop
HADOOP_HOME=/usr/lib/hadoop
mv /usr/local/hive-2.3.7/conf/hive-env.sh.template /usr/local/hive-2.3.7/conf/hive-env.sh
hdfs dfs -ls /

查看hdfs目录下是否存在hive存储的目录,没有的话创建


hdfs dfs -mkdir /tmp/hive
hdfs dfs -mkdir /user/hive
hdfs dfs -mkdir /user/hive/warehouse


文件hive-site.xml内保存Hive运行时所需要的相关配置信息,没有就建一个。


vi /usr/local/hive-2.3.7/conf/hive-site.xml

在里面添加


<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<configuration>
  <!-- Hive Execution Parameters -->
  <property>
    <name>hive.exec.scratchdir</name>
    <value>/tmp/hive</value>
    <description>HDFS root scratch dir for Hive jobs which gets created with write all (733) permission. For each connecting user, an HDFS scratch dir: ${hive.exec.scratchdir}/<username> is created, with ${hive.scratch.dir.permission}.</description>
  </property>
  <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>hdfs://hadoop1:9000/hive/warehouse</value>
    <description>location of default database for the warehouse</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
  </property>
  <property>
<name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
    <description>Username to use against metastore database</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>root</value>
    <description>password to use against metastore database</description>
  </property>
  <property>
    <name>javax.jdo.option.Multithreaded</name>
    <value>true</value>
    <description>Set this to true if multiple threads access metastore through JDO concurrently.</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://hadoop1:3306/hiveDB?createDatabaseIfNotExist=true</value>
    <description>JDBC connect string for a JDBC metastore</description>
  </property>
</configuration>

属性hive.exec.scratchdir:执行Hive操作访问HDFS时用于存储临时数据的目录,默认为/tmp/目录,通常设置为/tmp/hive/。

属性hive.metastore.warehouse.dir:执行Hive数据仓库操作的数据存储目录,设置为HDFS存储路径hdfs://master_hostname:port/hive/warehouse,这里设为hdfs://hadoop1:9000/hive/warehouse。

属性javax.jdo.option.ConnectionDriverName:设置Hive连接MySQL的驱动名称,属性值为com.mysql.jdbc.Driver。

属性javax.jdo.option.ConnectionUserName:Hive连接存储metastore内容的数据库的用户名。

属性javax.jdo.option.ConnectionPassword:Hive连接存储metastore内容的数据库的密码。

属性javax.jdo.option.Multithreaded:是否允许Hive与MySQL之间存在多条连接,设置为true,表示允许。

属性javax.jdo.option.ConnectionURL:设置Hive通过JDBC模式连接MySQL数据库存储metastore内容,属性值为jdbc:mysql://host/database_name?createDatabaseIfNotExist=true,这里设为jdbc:mysql://hadoop1:3306/hiveDB?createDatabaseIfNotExist=true。


20201111194407987.png


配置完之后测试一下hive是否可用:


hive
Logging initialized using configuration in jar:file:/usr/local/hive-2.3.7/lib/hive-common-2.3.7.jar!/hive-log4j.properties
hive> SHOW TABLES;
hive> SHOW TABLES;
OK
Time taken: 1.637 seconds
hive> quit;


配置完成!

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
7月前
|
安全 关系型数据库 MySQL
CentOS 7 yum 安装 MySQL教程
在CentOS 7上安装MySQL 8,其实流程很清晰。首先通过官方Yum仓库来安装服务,然后启动并设为开机自启。最重要的环节是首次安全设置:需要先从日志里找到临时密码来登录,再修改成你自己的密码,并为远程连接创建用户和授权。最后,也别忘了在服务器防火墙上放行3306端口,这样远程才能连上。
1787 16
|
6月前
|
存储 关系型数据库 MySQL
MySQL Docker 容器化部署全指南
MySQL是一款开源关系型数据库,广泛用于Web及企业应用。Docker容器化部署可解决环境不一致、依赖冲突问题,实现高效、隔离、轻量的MySQL服务运行,支持数据持久化与快速迁移,适用于开发、测试及生产环境。
936 4
|
8月前
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
618 10
|
8月前
|
关系型数据库 MySQL 数据库
为什么 MySQL 不推荐用 Docker 部署?
本文探讨了MySQL是否适合容器化的问题,分析了Docker容器在数据安全、性能瓶颈、状态管理及资源隔离等方面的挑战,并指出目前主流分布式数据库如TDSQL和OceanBase仍倾向于部署在物理机或KVM上。
420 0
|
11月前
|
开发框架 Java 关系型数据库
在Linux系统中安装JDK、Tomcat、MySQL以及部署J2EE后端接口
校验时,浏览器输入:http://[your_server_IP]:8080/myapp。如果你看到你的应用的欢迎页面,恭喜你,一切都已就绪。
686 17
|
Linux 网络安全 开发工具
centos7部署l2tp ipsec
1、查询操作系统版本 #cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) 2、查询系统是否支持ppp,返回yes代表通过。 #modprobe ppp-compress-18 && echo yes 3、查询系统是否开启了tun,返回File descriptor in bad state代表通过。
8851 0
|
8月前
|
存储 Ubuntu Linux
VMware-安装CentOS系统教程及安装包
虚拟机相当于是一个独立于你电脑的环境,在这个环境上面,你可以安装Linux、Windows、Ubuntu等各个类型各个版本的系统,在这个系统里面你不用担心有病读等,不用担心文件误删导致系统崩溃。 虚拟机也和正常的电脑系统是一样的,也可以开关机,不用的时候,你关机就可以了,也不会占用你的系统资源,使用起来还是比较方便 这里也有已经做好的CentOS 7系统,下载下来解压后直接用VMware打开就可以使用
1429 69
|
7月前
|
存储 分布式计算 Linux
安装篇--CentOS 7 虚拟机安装
VMware 装 CentOS 7 不知道从哪下手?这篇超详细图文教程手把手教你在 VMware Workstation 中完成 CentOS 7 桌面系统的完整安装流程。从 ISO 镜像下载、虚拟机配置,到安装图形界面、设置用户密码,每一步都有截图讲解,适合零基础新手快速上手。装好之后无论你是要搭 Hadoop 集群,还是练 Linux ,这个环境都够你折腾一整天!
3161 4
|
8月前
|
Ubuntu Linux 索引
Centos 7、Debian及Ubuntu系统中安装和验证tree命令的指南。
通过上述步骤,我们可以在CentOS 7、Debian和Ubuntu系统中安装并验证 `tree`命令。在命令行界面中执行安装命令,然后通过版本检查确认安装成功。这保证了在多个平台上 `tree`命令的一致性和可用性,使得用户无论在哪种Linux发行版上都能使用此工具浏览目录结构。
713 78
|
9月前
|
Linux 网络安全 Apache
针对在Centos/Linux安装Apache过程中出现的常见问题集锦
以上每个问题的解决方案应深入分析错误日志、系统消息和各种配置文件,以找到根本原因并加以解决。务必保持系统和Apache软件包更新到最新版本,以修复已知的bugs和安全漏洞。安装和管理Web服务器是一项需要细致关注和不断学习的任务。随着技术的发展,推荐定期查看官方文档和社区论坛,以保持知识的更新。
353 80