0
点赞
收藏
分享

微信扫一扫

HIVE基础知识

婉殇成长笔记 2022-04-02 阅读 64

学习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比较关系型数据库

hiveRDBMS(关系型数据库)
分布式支持支持
节点支持支持
成本 廉价昂贵
数据量TB  PBGB
事务   支持支持
延时性
DML0.14之后支持(但是不建议用)支持 

三、hive适用场景

批处理 / 离线处理

四、 hive的优缺点

优点:易上手,比MR使用起来简单多了

缺点:延时性高

五、一些问题

1、Hive的执行速度对比于Mysql谁快

没有对比性,具体问题具体分析

2、hive sql  和mysql sql  有什么关系

除了语法类似之外,没有任何关系

 六、hive安装

1、解压压缩包,并更名如下:

 2、 hive一些目录整理

bin 可执行的文件
conf 配置文件
libhive相关的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 

七、作业

举报

相关推荐

0 条评论