大数据生态组件——Hive安装及配置

2023-11-03

以下安装配置均是在虚拟机环境下进行的(我使用的是centos)

Hive简介

  • HIve是一个基于hadoop的开源数据仓库工具,用于存储和处理海量的(半)结构化数据
  • Hive将海量的数据存储于hadoop文件系统,而不是数据库,但提供了 一套类数据库的数据存储和处理机制,并采用HQL(类SQL)语言对这些数据进行自动化管理和处理,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制
  • Hive的本质是将SQL转换为SQL转换为MapReduce程序
    在这里插入图片描述
  • Hive诞生于Facebook的日志分析需求,面对海量的结构化数据,Hive以较低的成本完成了以往需要大规模数据库才能完成的任务,并且学习门槛相对较低,应用开发灵活而高效。

Hive的安装与配置(一)

Hive不存在集群,Hive不用配置是伪分布式还是完全分布式模式,它只是一个客户端工具,可以运行在集群的任意一个节点上

  1. 下载解压apache-hive-2.3.3-bin.tar.gz/usr/local
  2. 重命名文件夹为hive
  3. 修改所属组和所属用户(root环境下不需要这一步)
  4. 配置环境变量~/.bashrc
[hadoop@s0 ~]$ sudo tar -zxvf downloads/apache-hive-2.3.3-bin.tar.gz  -C  /usr/local/
[hadoop@s0 ~]$ cd /usr/local/
[hadoop@s0 local]$ sudo mv apache-hive-2.3.3-bin/ hive
[hadoop@s0 local]$ sudo chown -R hadoop:hadoop  hive
[hadoop@s0 ~]$ vi .bashrc
# 在.bashrc 中输入以下内容(前三行不是本次需要输入的内容):
export JAVA_HOME=/usr/local/jdk
export HADOOP_HOME=/usr/local/hadoop
export SPARK_HOME=/usr/local/spark
export HIVE_HOME=/usr/local/hive  #输入此行

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


Hive的启动

  1. 启动hadoop集群(前面有博客介绍过,这里就不再介绍安装了)
[hadoop@s0 ~]$ start-all.sh   # Yarn必须要启动

启动Hive之前要先启动Hadoop集群,不能只启动HDFS文件系统,Yarn也需要启动,因为以后执行Hive语句的时候会转化为MapReduce任务

  1. 启动hive
[hadoop@s0 ~]$ hive

启动时会报错:不能建立元数据库的错误

在这里插入图片描述

hive的元数据库

  • hive中的元数据(Metastore)

    • 元数据包括表的名字、表的列和分区及其属性、表的属性(是否为外部表等)、表的数据所在目录等。

    • Hive 将元数据存储在关系型数据库中,目前只支持MySQL、Derby;原始的Hive默认使用Derby数据库

    • 请注意区分,Hive存储的海量数据放在HDFS中,但是Hive自己的元数据放在关系型数据库中

    • 元数据库默认使用内嵌的Derby数据库作为存储引擎;Derby引擎的缺点:一次只能打开一个会话

    • 需要更换Hive的数据库为MySQL,使用MySQL作为外置存储引擎,支持多用户同时访问。

所以先要安装一下MySQL(本地方式),即MySQL数据库同hive安装在一个系统中。

安装配置MySQL

  1. 观察是否安装过MySQL
[hadoop@s0 ~]$ rpm -qa | grep -i mysql
mysql-libs-5.1.73-3.el6_5.x86_64

已存在mysql-libs-5.1.73-3.el6_5.x86_64的库(这是linux自带的)

  1. 在线安装MySQL
[hadoop@s0 ~]$ sudo yum install mysql-server
  1. 观察MySQL版本
[hadoop@s0 ~]$ mysql  -V  #是大写的V
mysql  Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1

  1. 观察MySQL是否正常运行
[hadoop@s0 ~]$ netstat -an | grep 3306
# 结果为空 证明没有运行
  1. 启动MySQL
[hadoop@s0 ~]$ sudo service mysqld  start  # service mysqld start/stop/restart
[sudo] password for hadoop: 
Starting mysqld:                                           [  OK  ]

[hadoop@s0 ~]$ netstat -an | grep 3306
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN

  1. 进入和退出MySQL
[hadoop@s0 ~]$ mysql -uroot   #此root与Linux的root用户毫无关系;u和root之间可以有空格,也可以没有
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.1.73 Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql安装后会创建一个默认用户root,与linux的root用户无关
root用户默认没有密码

mysql> exit;  #MySQL数据库的命令输入时最后也要加分号
Bye


  1. 设置root用户密码
[hadoop@s0 ~]$ mysqladmin -uroot password 123456
  1. 以带密码的root用户身份登录
[hadoop@s0 ~]# mysql -uroot -p
Enter password:  #此处输入密码123456
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 23
Server version: 5.6.40 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

  1. 添加远程登录的用户hive及权限
mysql>GRANT all ON *.* TO hiver@'%' IDENTIFIED BY '123456';// *.*:所有库下的所有表   %:任何IP地址或主机都可以连接,此处的hiver是一个远程访问MySQL数据库的用户
mysql>GRANT all ON *.* TO hiver@'s0' IDENTIFIED BY '123456';
mysql> GRANT all ON *.* TO hiver@'localhost' IDENTIFIED BY '123456';
mysql>FLUSH PRIVILEGES; //让前3条命令生效

#可以使用下述命令删除用户及权限:
mysql >drop user hiver@'%';
mysql> drop user hiver@'s0';
mysql> drop user hiver@'localhost';

  1. 创建hive的元数据库名称为hive_metastore_db
mysql> create database hive_metastore_db;
Query OK, 1 row affected (0.00 sec)
#此数据库用于存放Hive的metastore元数据,即Hive的元数据存放在MySQL数据库中 

  1. 显示数据库
mysql> show databases;

MySQL的开机自启操作

  • 设置开机自启
[hadoop@s0 ~]$ sudo chkconfig mysqld on
[hadoop@s0 ~]$ chkconfig --list | grep mysql
mysqld         	0:off	1:off	2:on	3:on	4:on	5:on	6:off

配置hive(二)

配置hive-env.sh

  1. 将hive-env.sh.template复制一份为hive-env.sh
  2. 配置hive-env.sh
    在这里插入图片描述
    注意查看自己文件的位置,将自己的位置写上去

配置hive-site.xml

  • 将/usr/local/hive/conf/hive-default.xml.template复制一份并重命名为hive-site.xml
[hadoop@s0 ~]$ cd /usr/local/hive/conf/
[hadoop@s0 conf]$ cp hive-default.xml.template   hive-site.xml #注意不是hive-default.xml
[hadoop@s0 conf]$ sudo vi hive-site.xml #虽然可以不用sudo,加上可以保证格式容易控制

  • 原始的hive-default.xml.template中的配置
    在这里插入图片描述

javax.jdo.option.ConnectionURL:数据库链接字符串。

在这里插入图片描述

javax.jdo.option.ConnectionDriverName:连接数据库的驱动包。

在这里插入图片描述

javax.jdo.option.ConnectionUserName:数据库用户名(默认是APP)。

在这里插入图片描述

javax.jdo.option.ConnectionPassword:连接数据库的密码。

修改为对应以下内容:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
	<name>javax.jdo.option.ConnectionURL</name>
	<value>jdbc:mysql://s0:3306/hive_metastore_db</value>
</property>
<property>
	<name>javax.jdo.option.ConnectionDriverName</name>
	<value>com.mysql.jdbc.Driver</value>
</property>
<property>
	<name>javax.jdo.option.ConnectionUserName</name>
	<value>hiver</value>
</property>
<property>
	<name>javax.jdo.option.ConnectionPassword</name>
	<value>123456</value>
</property>
</configuration>

上传mysql-connector-java-5.1.38-bin.jar到$HIVE_HOME/lib

[hadoop@s0 downloads]$ sudo cp mysql-connector-java-5.1.38-bin.jar /usr/local/hive/lib/

观察此时的Hive的元数据库hive_metastore_db

mysql> use hive_metastore_db;
Database changed
mysql> show tables;
Empty set (0.00 sec)

此时Hive的元数据库hive_metastore_db的元数据库中没有表

重新给整个Hive目录授权(建议再做一遍授权操作)

[hadoop@s0 local]$ sudo chown -R hadoop:hadoop  hive

初始化MySQL数据库

[hadoop@s0 ~]$ cd /usr/local/hive/bin/
[hadoop@s0 bin]$ schematool -dbType mysql -initSchema

  • 观察此时的Hive的元数据库hive_metastore_db
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hive_metastore_db  |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mysql> use hive_metastore_db;
Database changed

mysql> show tables;
+-----------------------------+
| Tables_in_hive_metastore_db |
+-----------------------------+
| BUCKETING_COLS              |
| CDS                         |
| COLUMNS_V2                  |
| DATABASE_PARAMS             |
| DBS                         |
……
29 rows in set (0.00 sec)

hive-shell的基本操作命令

  • 启动hadoop集群
  • 启动hive
hive> show databases;  #最后的分号必须有,为英文分号,风格与MySQL的命令类似
OK
default
Time taken: 2.832 seconds, Fetched: 1 row(s)

可以看到只有一个默认的数据库default

hive> show tables;
OK
Time taken: 1.23 seconds

hive> create database student;  #创建数据库student
hive> create database student;  #再次创建数据库student会报错
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Database student already exists

hive> create database if not exists student;
OK
Time taken: 0.048 seconds

hive> describe database student;
OK
student		hdfs://s0:9000/user/hive/warehouse/student.db	hadoop	USER	
Time taken: 0.073 seconds, Fetched: 1 row(s)


hive> use student;  #创建好的数据库要被使用,必须使用use命令
hive> create table stu(id int, name string);  #在数据库student中创建表stu
hive> show tables; #注意table是复数形式
OK
stu
Time taken: 0.101 seconds, Fetched: 1 row(s)

#显示表的结构
hive> desc stu;
OK
id                  	int
nam                string 	                    
Time taken: 0.263 seconds, Fetched: 1 row(s)

#插入一条记录,会启动MR作业
hive> insert into stu values(1,'zhangsan');


hive> insert into stu values(2,'lisi');

#只带*号的返回全部字段的查询不启动MR作业
hive> select * from stu;
OK
1	zhangsan
2	lisi
Time taken: 0.191 seconds, Fetched: 2 row(s)

#使用了排序子句 会启动MR作业
hive> select * from stu order by id desc;

hive> drop table stu; #删除表
hive> drop database student; #在Hive中删除数据库,必须要先删除数据库中的表才能删除数据库
hive> quit;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

大数据生态组件——Hive安装及配置 的相关文章

随机推荐

  • js new Promise的基本用法

    function easyShare config return new Promise resolve reject gt try if config true console log 11 config setTimeout gt re
  • 2021秋招复习——CSS

    目录 文章目录 选择器 float布局 position定位 flex布局 水平垂直居中 水平居中 行内元素 块级元素 垂直居中 行内元素 块级元素 BFC 盒模型 CSS3动画 回流 重排 和重绘 响应式布局 选择器 选择器主要包括 选择
  • matlab求解正负因子目标规划,matlab学习系列27多目标规划.docx

    matlab学习系列27多目标规划 docx 27多目标规划一 线性规划的局限性1线性规划要求所求解问题必须满足全部的约束 而实际问题中并非所有约束都需要严格的满足 2线性规划只能处理单目标的优化问题 从而对一些次目标只能转化为约束处理 而
  • AngularJS 截取字符串

    In HTML Template Binding 在HTML的模板绑定中 limitTo expression limitTo limit begin In JavaScript filter limitTo input limit beg
  • 计算机开机键盘屏幕无反应,电脑开机后键盘显示器无反应怎么解决

    电脑开机后主机灯正常 有风扇和机器声音 但是键盘显示器都没有反应 这是怎么回事呢 电脑开机后键盘显示器无反应怎么解决呢 下面学习啦小编就为大家带来了解决电脑开机后键盘显示器无反应的方法 电脑开机后键盘显示器无反应解决方法一 开机状态下把鼠标
  • 机器学习(五):高斯朴素贝叶斯(基础篇)

    机器学习 五 高斯朴素贝叶斯 基础篇 在高斯朴素贝叶斯中 每个特征都是连续的 并且都呈高斯分布 高斯分布又称为正态分布 图画出来以后像一个倒挂的钟 以均值为轴对称 如下图所示 GaussianNB 实现了运用于分类的高斯朴素贝叶斯算法 特征
  • SQLyog出现错误代码1045

    直接修改mysql的密码即可
  • Elasticsearch 常见的 8 种错误及最佳实践

    Elasticsearch 社区有大量关于 Elasticsearch 错误和异常的问题 深挖这些错误背后的原因 把常见的错误积累为自己的实战经验甚至是工具 不仅可以节省我们的开发和运维时间 而且可以帮助确保 Elasticsearch 集
  • matlab批量读入dat数据,并将dat数据转换为tiff格式

    将dat数据 序号1 1500 读入matlab 并将其转换为 png格式 代码参考如下 clear close all num 1500 待读入的dat数量 addpath K 科目2 2 train dat dat 文件夹 cd K 科
  • Nginx 使用---拒绝指定IP访问

    一 问题描述 服务器可能会受到攻击者的恶意访问 攻击者IP会不断的猜测路径 上传文件 木马 或者进行短信消耗 或者破解密码 等等行为 我们要做的是 对这些恶意的访问IP进行拦截 二 Nginx的日志格式 因为首先一定是要查看日志的 所以首先
  • Oracle入门笔记(六)——多表查询

    多表查询 1 多表查询概览 2 基础多表查询 3 SQL99标准的外连接 4 Oracle自定义的外连接 5 SQL99标准的交叉连接 6 SQL99标准的自然连接 7 SQL99标准的内连接 8 子查询 9 union和intersect
  • 刷爆 LeetCode 双周赛 100,单方面宣布第一题最难

    上周末是 LeetCode 第 100 场双周赛 你参加了吗 这场周赛整体没有 Hard 题 但是也没有 Easy 题 第一题国服前百名里超过一半人 wa 很少见 小彭的技术交流群 02 群来了 公众号回复 加群 加入我们 周赛概览 259
  • Python学习32:计算圆周率——无穷级数法

    描述 是个超越数 圆周率的超越性否定了化圆为方这种尺规作图精确求解问题的可能性 有趣的是 可以用无穷级数表示 左边的展式是一个无穷级数 被称为莱布尼茨级数 Leibniz 这个级数收敛到 4 它通常也被称为格雷戈里 莱布尼茨级数 用以纪念莱
  • RabbitMQ的简单使用、轮询

    视频地址 首先创建一个工程 首先创建一个空的工程 在空的工程里面创建一个maven工程 加入依赖
  • 工具详解-sqlmap使用详解

    sqlmap使用详解 简介 sqlmap是一款基于python编写的渗透测试工具 在sql检测和利用方面功能强大 支持多种数据库 一 SQLMap拖库 SQLMap可以完成注入点的发现 数据库类型的确认 WebShell权限和路径的确认 拖
  • JAVA异常详解

    异常的定义 异常就是有异于常态 和正常情况不一样 有错误出现 在java中 阻止当前方法或作用域的情况 称之为异常 异常的分类 Error 是程序中无法处理的错误 表示运行应用程序中出现了严重的错误 此类错误一般表示代码运行时JVM出现问题
  • java中Collection(集合)

    文章目录 集合 Collection 一 集合的分类 二 集合的特点 三 集合的访问 四 List 1 List 接口方法 2 List的实现方式 1 List接口提供的of 方法 2 ArrayLIst 3 LinkList 3 遍历Li
  • 汇编语言(王爽第三版)实验八

    实验八 题目与个人思路 分析下面的程序 在运行前思考 这个程序可以正确返回吗 运行后再思考 为什么是这种结果 通过这个程序加深对相关内容的理解 assume cs codesg codesg segment mov ax 4c00h int
  • SAP 变更记录表 : CDHDR / CDPOS - 说明及使用

    From 1 http blog sina com cn s blog 7dce1fac01014yp2 html 2 http www cnblogs com cnlmjer archive 2012 04 18 4099808 html
  • 大数据生态组件——Hive安装及配置

    Hive安装与配置 Hive简介 Hive的安装与配置 一 Hive的启动 hive的元数据库 安装配置MySQL MySQL的开机自启操作 配置hive 二 配置hive env sh 配置hive site xml 上传mysql co