hadoop生态之hive

本文介绍了Hive在大数据生态中的作用,作为数据仓库工具,它简化了SQL编程,将SQL转换为MapReduce任务在Hadoop上执行。Hive依赖HDFS存储数据,元数据通常存储在MySQL中。文章讨论了Hive的不同计算引擎,如MapReduce、Tez和Spark,并强调了Hive适用于离线批量计算。此外,还提到了Hive的配置、元数据管理和常见错误排查。
摘要由CSDN通过智能技术生成

序言

    大数据的生态包含各种各样的组件,hive是其中之一,hive主要是作为数据仓库的工具,简化相关人员的代码工作,只要编写简单的SQL就可以实现mapreduce效果。

    

    hive是建立在hadoop之上的,也就是将海量的数据存储在HDFS之中,而对于数据的分析和计算则是借助mapreduce。

HIVE

    1 hive的作用及组成部分

    hive主要是将用户编写的SQL语句,进行词法分析,语法解析,最后将SQL转变成mapreduce程序在hadoop之中执行,最后拿到结果返回给用户。

    hive将hdfs中的结构化文件映射成数据库,表,从而需要一个元数据中心保存相关的信息,一般保存在mysql中,这部分主要就是metastore;hive的服务端提供提供编译器,执行器,根据mr的模板程序将sql转变为mr程序,然后由执行器将job提交给yarn进行调度,读取hdfs的数据,运行mapreduce程序。

    hive本身是不提供计算引擎,在低版本中,主要是mapreduce来负责,不过这个map阶段,shuffle阶段,reduce阶段都是需要大量的磁盘读写,性能不高,从而有了tez计算框架,使用DAG有向无环图的方式来进行各个阶段的复用,从而能提升部分性能,比较推荐的是使用spark的计算引擎,这种全部都是内存的操作,从而能大大提升性能。

    hive主要适合于离线数据的批量计算,也就是通常所说的batch computing,适合于数据的转换处理。

    hive的高可用架构比较简单,也就是后端同时运行几个hive服务,反正自己也不用保存啥数据,因为需要保存的数据都是元数据,持久化存储在mysql中。

2 hive的配置

    hive首先需要一个metstore,也就是元数据存储的地方,一般使用mysql主从来实现,可以查看保存在其中的元数据信息。

mysql> use hive;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A


Database changed
mysql> SELECT * FROM VERSION;
+--------+----------------+----------------------------+
| VER_ID | SCHEMA_VERSION | VERSION_COMMENT            |
+--------+----------------+----------------------------+
|      1 | 1.2.0          | Hive release version 1.2.0 |
+--------+----------------+----------------------------+
1 row in set (0.00 sec)


mysql> SELECT * FROM DBS;
+-------+-----------------------+--------------------------------------+---------+------------+------------+
| DB_ID | DESC                  | DB_LOCATION_URI                      | NAME    | OWNER_NAME | OWNER_TYPE |
+-------+-----------------------+--------------------------------------+---------+------------+------------+
|     1 | Default Hive database | hdfs://ns/user/hive/warehouse        | default | public     | ROLE       |
|     2 | NULL                  | hdfs://ns/user/hive/warehouse/kel.db | kel     | root       | USER       |
+-------+-----------------------+--------------------------------------+---------+------------+------------+
2 rows in set (0.01 sec)


mysql> SELECT * FROM PARTITIONS;
+---------+-------------+------------------+---------------------------+-------+--------+----------------+
| PART_ID | CREATE_TIME | LAST_ACCESS_TIME | PART_NAME                 | SD_ID | TBL_ID | LINK_TARGET_ID |
+---------+-------------+------------------+---------------------------+-------+--------+----------------+
|       1 |  1613477304 |                0 | country=CHINA             |    13 |     12 |           NULL |
|       2 |  1613477401 |                0 | country=USA               |    14 |     12 |           NULL |
|       3 |  1613478060 |                0 | dt=2021%2F02%2F16/hour=12 |    16 |     13 |           NULL |
|       4 |  1613478129 |                0 | dt=2021%2F02%2F16/hour=11 |    17 |     13 |           NULL |
|       5 |  1613478134 |                0 | dt=2021%2F02%2F17/hour=11 |    18 |     13 |           NULL |
+---------+-------------+------------------+---------------------------+-------+--------+----------------+
5 rows in set (0.00 sec)

    在安装hive的时候,会自动初始化这个元数据库,各个表之间的关系可以在官网上查看到。

//hive和hadoop的联系
[root@KEL1 conf]# grep hadoop hive-env.sh
# Set HADOOP_HOME to point to a specific hadoop install directory
HADOOP_HOME=/opt/module/hadoop-2.7.2
//hive连接元数据库配置
[root@KEL1 conf]# cat hive-site.xml 
<configuration>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
  </property>


  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.cj.jdbc.Driver</value>
  </property>


  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>root</value>
  </property>
//防止远程会话超时断开
  <property>
    <name>hive.server2.idle.session.timeout</name>
    <value>0</value>
  </property>
  <property>
    <name>hive.server2.idle.operation.timeout</name>
    <value>0</value>
  </property>
  <property>
    <
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值