学习hive --》官网
一、hive简介
hadoop 广义上:大数据生态圈,其中hive是使用SQL完成大数据统计分析的工具
狭义上:HDFS MR YARN
HDFS :hive的数据是存在HDFS上的(Distributed storge 分布式存储),元数据(Metadata)存储在对应的底层关系数据库。一般是Mysql
MR(计算引擎):hive的作业(sql)是通过hive的框架,翻译成MR作业
这里的引擎也可以是 Tez,Spark
不管底层使用什么引擎,对于用户来说是不感知的,同样的sql,只需要通过参数切换就可以实现。
YARN:hive的作业是提交到YARN上去运行的
hadoop开发可以是单机,但生产上一定是分布式
hive其实就是一个客户端,没有集群的概念,提交作业到集群的yarn上面去运行(没有感情的提交机器)
SQL--》 Hive --》MR --》YARN
生产环境上,哪台机器需要提交hive,就在哪台机器上配置hive,不同机器上的hive是相互独立的
总结:hive职责,将sql翻译成底层对应的执行引擎作业
Distributed storge 分布式存储
HDFS ,AWS S3 ,各种云 OOS COS
这些系统,hive都可以对接,只需要有相应的jar包,本地的文件系统(File开头)也可以对接
Metadata 元数据
统一的元数据管理
元数据:描述数据的数据
源数据:来源系统的数据,HDFS数据,各个数据库的数据
spark impala presto 等等,统一可以使用Metadata
也就是说 hive里建的表 sparksql 也可以使用
二、hive比较关系型数据库
hive | RDBMS(关系型数据库) | |
分布式 | 支持 | 支持 |
节点 | 支持 | 支持 |
成本 | 廉价 | 昂贵 |
数据量 | TB PB | GB |
事务 | 支持 | 支持 |
延时性 | 高 | 低 |
DML | 0.14之后支持(但是不建议用) | 支持 |
三、hive适用场景
批处理 / 离线处理
四、 hive的优缺点
优点:易上手,比MR使用起来简单多了
缺点:延时性高
五、一些问题
1、Hive的执行速度对比于Mysql谁快
没有对比性,具体问题具体分析
2、hive sql 和mysql sql 有什么关系
除了语法类似之外,没有任何关系
六、hive安装
1、解压压缩包,并更名如下:
2、 hive一些目录整理
bin | 可执行的文件 |
conf | 配置文件 |
lib | hive相关的jar包 |
3、添加hive环形变量
在 /etc/profile 中添加
#HIVE_HOME
export HIVE_HOME=/home/peizk/app/hive-3.1.2
export PATH=$PATH:$HIVE_HOME/bin
source 一下 使其生效
4、配置文件
[peizk@hadoop conf]$ vim hive-site.xml
内容如下:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop:3306/metastore?useSSL=false</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.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>hadoop</value>
</property>
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
</configuration>
导入jar包到 hive lib 下
5、初始化元数据
(1)创建一个元数据库
mysql> create database metastore;
Query OK, 1 row affected (0.00 sec)
(2)初始化
[peizk@hadoop conf]$ schematool -initSchema -dbType mysql -verbose
hive启动一下,show databases
出现 ok!
初始化成功
6、测试
创建一个表 插入一条数据
hive (default)> create table test0401(id bigint,name string);
OK
Time taken: 0.478 seconds
hive (default)> insert into test0401 values(1,'zhangsan');
Query ID = peizk_20220402153441_0c2729a1-961c-46ad-a03e-ef60c85e3af7
Total jobs = 3
Launching Job 1 out of 3
Number of reduce tasks determined at compile time: 1
In order to change the average load for a reducer (in bytes):
set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
set mapreduce.job.reduces=<number>
Job running in-process (local Hadoop)
2022-04-02 15:34:44,673 Stage-1 map = 100%, reduce = 100%
Ended Job = job_local1960812315_0001
Stage-4 is selected by condition resolver.
Stage-3 is filtered out by condition resolver.
Stage-5 is filtered out by condition resolver.
Moving data to directory hdfs://hadoop:9000/user/hive/warehouse/test0401/.hive-staging_hive_2022-04-02_15-34-41_544_4957939646936871229-1/-ext-10000
Loading data to table default.test0401
MapReduce Jobs Launched:
Stage-Stage-1: HDFS Read: 0 HDFS Write: 166 SUCCESS
Total MapReduce CPU Time Spent: 0 msec
OK
_col0 _col1
Time taken: 3.488 seconds
hive (default)> select * from test0401;
OK
test0401.id test0401.name
1 zhangsan
Time taken: 0.126 seconds, Fetched: 1 row(s)
hive (default)>
查看hdfs 有
查看目录下文件内容
[root@hadoop ~]# hadoop fs -cat /user/hive/warehouse/test0401/*
2022-04-02 15:41:10,235 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
1zhangsan
查看下mysql下metastore下 tbls 元数据
mysql> select * from TBLS;
+--------+-------------+-------+------------------+-------+------------+-----------+-------+----------+---------------+--------------------+--------------------+--------------------+
| TBL_ID | CREATE_TIME | DB_ID | LAST_ACCESS_TIME | OWNER | OWNER_TYPE | RETENTION | SD_ID | TBL_NAME | TBL_TYPE | VIEW_EXPANDED_TEXT | VIEW_ORIGINAL_TEXT | IS_REWRITE_ENABLED |
+--------+-------------+-------+------------------+-------+------------+-----------+-------+----------+---------------+--------------------+--------------------+--------------------+
| 1 | 1648884858 | 1 | 0 | peizk | USER | 0 | 1 | test0401 | MANAGED_TABLE | NULL | NULL | |
+--------+-------------+-------+------------------+-------+------------+-----------+-------+----------+---------------+--------------------+--------------------+--------------------+
1 row in set (0.00 sec)
mysql>
7、修改配置的其他办法
(1)hive --hiveconf
hive 启动,跟上需要修改的参数
例如不显示列名
hive --hiveconf hive.cli.print.header = false
(2) set
进入hive之后,可以通过 set 命令去配置
set hive.cli.print.header = true;
总结:生效顺序
hive-site.xml < hive --hiveconf < set
七、作业