Hive 学习笔记

Hive 数据仓库

概述

  1. Hive 是 Hadoop的子项目, 但是后来被独立出来成为了Apache的一个顶级项目
  2. 是 Apache 提供的一套基于Hadoop的进行数据仓库管理的工具
  3. Hive 提供大量的类SQL(Hive QL 简称为, HQL) 来对Hadoop上的数据进行操作, 底层会将HQL语句转换为MapReduce程序
  4. 适合进行离线开发
  5. Hive可以管理HDFS上的数据, 用表结构的形式来管理HDFS上的数据
  6. 默认环境下: Hive的元数据信息不是存储在HDFS上的, 而是存储在Hive自带的Derby关系型数据库中
  7. Hive安装完成后, 在实际开发中通常都是要替换元数据库, 然而到目前为止Hive只支持Derby和Mysql两种, 需要将Derby替换为Mysql
  8. Derby 存在的问题
    1. Derby数据库是一种文件型数据库, 在进入检查的时候当前目录是否有metastore.db文件夹用来存储数据库数据, 如果有则直接使用, 如果没有就会默认创建一个新的目录, 一旦更换目录则意味着元数据就找不到了
    2. Derby数据库是一个单用户的数据库, 无法支持多用户同时操作, 而Hive使用Derby作为元数据库意味着也只能支持单用户操作, 这就导致了数据量大连接多的情况下会产生大量的连接积压

配置Hive的元数据库

1 编辑环境变量

vim /etc/profile

# Java
JAVA_HOME=/home/software/jdk1.8
PATH=$JAVA_HOME/bin:$PATH
# Hadoop
HADOOP_HOME=/home/software/hadoop-2.7.6
# Hive
HIVE_HOME=/home/software/hive-2.3.7

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

2 配置Hive文件夹下conf文件加下

  1. 复制模板文件 cp hive-env.sh.template hive-env.sh`

  2. 编辑 hive-env.sh 文件

    # Set HADOOP_HOME to point to a specific hadoop install directory  line: 48
    export JAVA_HOME=/home/software/jdk1.8
    export HADOOP_HOME=/home/software/hadoop-2.7.6
    
    # Hive Configuration Directory can be controlled by:
    export HIVE_CONF_DIR=/home/software/hive-2.3.7/conf
    
    # Folder containing extra libraries required for hive compilation/execution can be controlled by:
    export HIVE_AUX_JARS_PATH=/home/software/hive-2.3.7/lib
    

3 从hive-default.xml.template中获取模板

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
</configuration>

4 新建并编辑 hive-site.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
	<property>
         <!-- 指定Hive的数据存储目录 -->
		<name>hive.metastore.warehouse.dir</name>
		<value>/home/software/hive-2.3.7/warehouse</value>
	</property>
	
	<property>
         <!-- 指定配置MySQL的连接字符串 -->
		<name>javax.jdo.option.ConnectionURL</name>
		<value>jdbc:mysql://hadoop01:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false</value>
	</property>
	
	<property>	
         <!-- 配置MySQL的连接驱动 -->
		<name>javax.jdo.option.ConnectionDriverName</name>
		<value>com.mysql.jdbc.Driver</value>
	</property>
	
	<property>
         <!-- 配置登录MySQL的用户名 -->
		<name>javax.jdo.option.ConnectionUserName</name>
		<value>root</value>
	</property>
	
    <property>
         <!-- 配置登录MySQL的密码 -->
		<name>javax.jdo.option.ConnectionPassword</name>
		<value>root</value>
	</property>
    
	<property>
         <!-- 配置Hive的慢查询的日志记录 -->
		<name>hive.querylog.location</name>
		<value>hdfs://192.168.61.130:9000/user/hive/log</value>
	</property>
    
	<property>
         <!-- 配置 Hive 的 Server2 端口-->
		<name>hive.server2.thrift.port</name>
		<value>10000</value>
	</property>
    
    <property>
         <!-- 配置 Hive 的 Server2 连接主机名称-->
		<name>hive.server2.thrift.bind.host</name>
		<value>192.168.61.130</value>
	</property>
    
    <property>
         <!-- 配置 Hive 的元数据服务的uri-->
		<name>hive.metastore.uris</name>
		<value>thrift://192.168.61.130:9083</value>
	</property>
</configuration>
  1. 查看系统默认数据源
rpm -qa | grep mariadb
  1. 删除默认数据源
rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64
  1. 将mysql的java驱动放置到hive目录下的lib文件夹中

    mv mysql-connector-java-5.1.38-bin.jar hive-2.3.7/lib/

下载安装MySQL

下载/更新 wget

yum -y install wget

wget 获取mysql安装包

wget https://dev.mysql.com/get/mysql-5.7.18-1.el7.x86_64.rpm-bundle.tar

# 解压压缩包 
tar -xvf mysql-5.7.18-1.el7.x86_64.rpm-bundle.tar
# 安装顺序
rpm -ivh mysql-community-common-5.7.18-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.18-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.18-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.18-1.el7.x86_64.rpm

如果出现问题报错则执行如下命令

yum install perl
yum install net-tools
# 然后再次运行如下命令
rpm -ivh mysql-community-server-5.7.18-1.el7.x86_64.rpm

报错信息: 归档文件中异常的EOF

==> 传输文件时, 未传输完成就进行文件移动, 重新传输文件即可

MySQL启动

启动MySQL
systemctl start mysqld
查看状态
systemctl status mysqld

在这里插入图片描述

设置开机启动
systemctl enable mysqld
获取初始密码
grep 'password' /var/log/mysqld.log

在这里插入图片描述

登录mysql 进入mysql客户端
mysql -u root -p
# 在提示输入密码中 输入上面的密码

在这里插入图片描述

修改mysql密码
set global validate_password_policy=0;
set global validate_password_length=1;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';

在这里插入图片描述

退出重新使用命令mysql -u root -p 进入客户端 使用新密码登录, 登录成功即为成功

设置访问权限
grant all privileges on *.* to root@"%" identified by "root";
flush privileges;
初始化 Schema
schematool -initSchema -dbType mysql

在这里插入图片描述

初始化完成后, 会发现会有个hive的数据库

show databases;

在这里插入图片描述

# 使用hive数据库
use hive;
# 查看 hive 数据库中的数据表
show tables;

如果出现如上图所示, 则代表hive更换元数据库成功

启动metastoore服务

hive --service metastore &

在这里插入图片描述

程序会阻塞在这里, 可以按回车之后回到命令行, 该服务会在后台运行

Hive 常用命令

命令效果
show databases;显示数据库
create database park;创建一个park数据库
use park;进入使用 park 数据库
show tables;显示数据库中的所有表
create table stu(id int, name string) row format delimited fields terminated by ’ ';创建stu表及两个字段, 并以’ '作为分隔符
drop table stu;删除 stu 表
insert into stu values(1, ‘tom’);向stu表中插入数据
select * from stu;查看stu中所有的数据
load data local inpath ‘/home/haha.txt’ into table stu;将路径下的文件中的数据加载到stu表中, 其文件会上传到HDFS中
desc stu;查看 stu 表结构
create table stu1 like stu;创建一个表结构与stu相同的新表(只复制表结构, 而不复制结构)
insert overwrite table stu1 select * from stu;从stu表重查出数据写入到 stu1 表中
insert overwrite local directory ‘/home/stu’ row format delimited fields terminated by ’ ’ select * from stu1;将从stu1表中查出来的数据写入到本地文件夹目录中
alter table stu rename stu2;将 stu 表重命名为 stu2
alter stu1 add columens(age int);为stu1 表增加一个age字段
exit;退出hive
create external table word(name string, score int) row format delimited fields terminated by ’ ’ location ‘/txt/score2’将hdfs文件加中的文件作为外部表通过hive进行管理

Hive 的表结构

1 外部表

​ HDFS里面已经存在数据, 然后通过Hive创建表结构管理HDFS上的数据

2 内部表

​ 现在Hive中建立一个表结构然后向这个表中插入数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值