07-hive---基础部分1

一、Hive简介

Hive 是一个框架,可以通过编写sql的方式,自动的编译为MR任务的一个工具。
在这个世界上,会写SQL的人远远大于会写java代码的人,所以假如可以将MR通过sql实现,这个将是一个巨大的时长,FaceBook就这么干。(脸书)
FaceBook --> Meta (元宇宙) --> 社交网站(校内网)
在大数据中,发展趋势:所有的技术全部都变为SQL
1、Hive是一个数据仓库工具
2、可以将数据加载到表中,编写sql进行分析
3、底层依赖Hadoop,所以每一次都需要启动hadoop(hdfs以及yarn)
4、Hive的底层计算框架可以使用MR、也可以使用Spark、TEZ
5、Hive不是数据库,而是一个将MR包了一层壳儿。类似于一个中介。
Hive官网地址:http://hive.apache.org/
GitHub地址:  https://github.com/apache/hive
文档查看地址:https://cwiki.apache.org/confluence/display/Hive/GettingStarted
目前最新的版本稳定版:3.1.3 
beta版本正在开发4.0

Hive天然的就是当做数据仓库使用的。什么是数据仓库?

数据仓库:数据的仓库,一般只要能存数据的软件都可以当做数据仓库。
比如:开了一个超市,必须有一个仓库,这个仓库是不是可大可小。以前数据量特别小的时候,一般都使用Oracle当做数据仓库,现在企业中一般都使用大数据技术中 的Hive或者跟Hive类似的技术当做数据仓库。
普通的仓库:一般也是分类的,比如食品区、衣服区、电子产品区
数据仓库:也是需要搭建的(分层),方便使用者从仓库中快速的获取想要的数据。仓库搭建的好不好,就叫做建模。

二、体系结构

注意:
- 包含*的全表查询,比如select * from table 不会生成MapRedcue任务
- 包含*的limit查询,比如select * from table limit 3 不会生成MapRedcue任务

image.png

三、安装

分为三种:内嵌模式、本地模式、远程模式

Hive会自动检测Hadoop的环境变量,如有就必须启动Hadoop

 1、内嵌模式

上传 压缩包  /opt/modules
解压:
tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/installs/
重命名:
mv apache-hive-3.1.2-bin/ hive
配置环境变量:vi /etc/profile
  export HIVE_HOME=/opt/installs/hive
  export PATH=$HIVE_HOME/bin:$PATH
刷新环境变量:
source /etc/profile
配置hive-env.sh
进入这个文件夹下:/opt/installs/hive/conf
cp hive-env.sh.template hive-env.sh
修改hive-env.sh 中的内容:
export HIVE_CONF_DIR=/opt/installs/hive/conf
export JAVA_HOME=/opt/installs/jdk
export HADOOP_HOME=/opt/installs/hadoop
export HIVE_AUX_JARS_PATH=/opt/installs/hive/lib

进入到conf 文件夹下,修改这个文件hive-site.xml
cp hive-default.xml.template hive-site.xml
接着开始修改:
把Hive-site.xml 中所有包含${system:java.io.tmpdir}替换成/opt/installs/hive/tmp。如果系统默认没有指定系统用户名,那么要把配置${system:user.name}替换成当前用户名root。

使用nodepad++,打开该文件,进行替换:

一个替换了4处

一个替换了3处

启动集群:

start-all.sh

 给hdfs创建文件夹:

[root@yunhe01 conf] # hdfs dfs -mkdir -p /user/hive/warehouse 
[root@yunhe01 conf] # hdfs dfs -mkdir -p /tmp/hive/ 
[root@yunhe01 conf] # hdfs dfs -chmod 750 /user/hive/warehouse 
[root@yunhe01 conf] # hdfs dfs -chmod 777 /tmp/hive

初始化元数据,因为是内嵌模式,所以使用的数据库是derby

schematool --initSchema -dbType derby
在hive-site.xml中,3215行,96列的地方有一个非法字符

将这个非法字符,删除,保存即可。

需要再次进行元数据的初始化操作:

schematool --initSchema -dbType derby

提示初始化成功!

初始化操作要在hive的家目录执行,执行完毕之后,会出现一个文件夹:

image.png

测试是否成功:

输入hive  进入后,可以编写sql
hive> show databases;
OK
default

 2、心血来潮想把zk集群换掉(跟hive没什么关系)

切换zookeeper集群。
先将以前的zk集群停止。
下载一个对应版本的zk安装包,解压
解压到 /opt/installs
将以前的老的zookeeper 文件夹进行重命名
xcall.sh mv /opt/installs/zookeeper  /opt/installs/zookeeper-tmp
将新的zk,进行重命名 为zookeeper
接着分发一下:
xsync.sh zookeeper
xcall.sh cp /opt/installs/zookeeper-tmp/conf/zoo.cfg  /opt/installs/zookeeper/conf
接着在三台服务上创建文件夹:
xcall.sh mkdir /opt/installs/zookeeper/zkData
接着将不同电脑上的myid拷贝到相应的zkData里面
xcall.sh cp /opt/installs/zookeeper-tmp/zkData/myid  /opt/installs/zookeeper/zkData
启动zk集群:
zk.sh start

3、测试内嵌模式

-- 进入后可以执行下面命令进行操作:
hive>show databases;  	-- 查看数据库
hive>show tables;  	 	-- 查看表
-- 创建表
hive> create table dog(id int,name string);
hive> select * from dog;
hive> insert into dog values(1,'wangcai');
hive> desc dog; -- 查看表结构
hive> quit; -- 退出
但是内嵌模式有一个弊端:假如有一个窗口在使用你的hive,另一个窗口能进入,但是会报错!

image.png

4、本地模式--最常使用的模式

使用本地模式的最大特点是:将元数据从derby数据库,变为mysql数据库,并且支持多窗口同时使用。

image.png

 第一步:检查你的mysql是否正常

systemctl status mysqld

第二步:删除以前的derby数据

进入到hive中,删除 
rm -rf metastore_db/ derby.log

第三步:修改配置文件 hive-site.xml

<!--配置MySql的连接字符串-->
<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
  <description>JDBC connect string for a JDBC metastore</description>
</property>
<!--配置MySql的连接驱动-->
<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.cj.jdbc.Driver</value>
  <description>Driver class name for a JDBC metastore</description>
</property>
<!--配置登录MySql的用户-->
<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>root</value>
  <description>username to use against metastore database</description>
</property>
<!--配置登录MySql的密码-->
<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>123456</value>
  <description>password to use against metastore database</description>
</property>
<!-- 以下两个不需要修改,只需要了解即可 -->
<!-- 该参数主要指定Hive的数据存储目录  -->
<property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
  </property>
<!-- 该参数主要指定Hive的临时文件存储目录  -->
 <property>
    <name>hive.exec.scratchdir</name>
    <value>/tmp/hive</value>
  </property>

将mysql的驱动包,上传至 hive 的lib 文件夹下

image.png

初始化元数据(本质就是在mysql中创建数据库,并且添加元数据)

schematool --initSchema -dbType mysql

 测试:同时打开两个窗口都可以使用, 支持多个会话。

insert 语句 走MR任务
insert into stu values(1,'wangcai');
select * from stu;
select * from stu limit 10; 
不走MR任务。
创建表的时候,varchar类型需要指定字符长度,否则报错!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YuPangZa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值