Hadoop回顾--Hive特性(一)

本文详细介绍了Hive作为数据仓库的特点、文件格式、操作方法及其与传统数据库的区别。重点讲解了Hive的HQL语言、存储位置、数据格式、数据更新机制等关键概念。
 一、Hive的特点

- HQL:一种类SQL语言

- 存储位置
    - Hive:所有数据存储在HDFS上

    - 数据库:存储在块设备或者本地文件系统中

- 数据格式
    - Hive:没有专门的数据格式,数据格式可以自定义,文件格式有三个默认格式(TextFile、SequenceFile、RCFile),由于在加载数据时不用进行格式转换

    - 数据库:有自己的存储引擎,定义自己的数据格式,所以数据库加载数据的过程会比较耗时

- 数据更新
    - Hive:是一种数据仓库,不支持对数据的改写和添加,所有数据都是在加载时确定的

    - 数据库:可以修改

- 索引
    - Hive:加载数据后没有建立索引,所以需要暴力扫描,但是在查询数据的时候实际上是MapReduce的执行过程,并行查询的效率会提高很多

    - 数据库:通常针对一个或几个列建立索引

- 执行延迟
    - Hive:没有索引,延迟较高,MapReduce框架也会增加延迟,不适合在线查询,并行计算特性适合大规模数据查询

    - 数据库:数据规模较小的时候延迟较低

- 可扩展性
    - Hive:基于HDFS,与HDFS的扩展性一致

    - 数据库:由于ACID的限制,扩展性有限

二、Hive文件格式

- TextFile:直接复制数据文件到HDFS上(默认),数据不做压缩,磁盘开销大,数据解析开销大
- SequenceFile:使用方便、可分割、可压缩。支持三种压缩格式NONE、RECORD(压缩率低)、BLOCK
- RCFile

    - 特点:快速加载数据、快速查询数据、最大化磁盘利用率、同一份数据集会供给不同用户分析

    - 结构:先水平划分,再垂直划分

    - 数据格式

        - 存储在一个HDFS块中的所有记录被划分成了多个行组,对于一张表,所有行组大小都相同

        - 行组第一部分:行组头部的同步标识,主要用于分隔HDFS块中两个连续行组

        - 行组第二部分:行组的元数据头部,用于存储行组单元的信息,包括行组中的记录数、每个列的字节数、列中每个域的字节数

        - 行组第三部分:实际的列存储数据

    - 压缩方式:元数据头部(RLE算法压缩)和表格数据段压缩(Gzip算法压缩)

    - 数据追加:仅支持尾部追加(每列维护一个已经记录元数据的内存column holder)

    - 数据读取:仅仅读取元数据头部和给定查询的列
    - Lazy压缩:如果where没有满足的列,则select查询的列没有必要解压

    - 行组大小:行组大的时候数据压缩效率会比行组小的时候更高,但高于一个阈值后会占用更多内存,这会影响并发执行的其他MapReduce作业

三、Hive操作

- 创建表

    - 创建表时ROW FORMAT DELIMITED 必须写在其他子句之前(除了STORED AS...)

    - 设置列分隔符:FIELDS TERMINATED BY '\001'

    - 设置集合元素间分隔符:COLLECTION ITEMS TERMINATED BY '\002'

    - 设置map键和值之间的分隔符:MAP KEYS TERMINATED BY '\003'

- 查询表

    - 没有解释成MapReduce的查询
        - select * from table
        - 带分区时,直接查询分区
    - Hive不支持在WHERE子句中的IN、EXIST或子查询
    - Hive不支持HAVING子句,可以将HAVING子句转换成一个子查询

    - 不允许在一个查询内存在多个DISTINCT
    - ORDER BY会对输入进行全局排序,因此只有一个Reduce
    - CLUSTER BY查询除了具有DISTRIBUTE BY的功能还具有SORT BY功能

- 视图
    - VIEW是逻辑存在,Hive不支持物化视图
    - VIEW只读
    - VIEW支持迭代视图

- 索引

    - 索引Key冗余存储,提供基于Key的数据视图

    - 存储设计以优化查询和检索性能

    - 对于某些查询减少I/O,从而提高性能

- 分区

    - 查询的时候分区的信息会添加到最后的列上,插入数据时不会检查分区数据是否正确

    - 分区数据不存储在文件中

- 动态分区

    - 动态分区按顺序写在SELECT后

    - 不允许主分区采用动态列,而副分区采用静态列
- LIKE与RLIKE的区别
    - LIKE不是正则,而是通配符; RLIKE是正则,写法与java类似

- 连接类型(对于Join,Hive会将前面的表存储在Reduce的内存中,然后后面的表流式进入Reduce与Reduce内存中的其他表进行连接)

    - 内连接(inner join)

        - 默认的查询方式

    - 左外连接(left outer join)

        - 把左边表的元组全部选出来,没有数据的内容填充NULL

    - 右外连接(right outer join)

        - 将右边表的元组全部选出来,没有数据的内容填充NULL

    - 全外连接(full outer join)

        - 综合2、3两种情况

    - 左半连接(left semi-join)

        - 用来代替in(子查询)或exists操作,只查询左表在右表有涉及的部分

    - 笛卡尔积
    - map-side join

四、数据库与数据仓库的区别

- 数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策。

    - 面向主题:指数据仓库中的数据是按照一定的主题域进行组织。

    - 集成:指对原有分散的数据库数据经过系统加工, 整理得到的消除源数据中的不一致性。

    - 相对稳定:指一旦某个数据进入数据仓库以后只需要定期的加载、刷新。

    - 反映历史变化:指通过这些信息,对企业的发展历程和未来趋势做出定量分析预测。

- 数据仓库建设是一个工程,是一个过程,而不是一种可以购买的产品。企业数据处理方式是以联机事务处理形式信息,并利用信息进行决策;在信息应用过程中管理信息。

- 数据仓库的出现,并不是要取代数据库。目前,大部分数据仓库还是用关系数据库管理系统来管理的。

- 数据仓库与数据库的主要区别在于:

    - 数据库是面向事务的设计,数据仓库是面向主题设计的。

    - 数据库一般存储在线交易数据,数据仓库存储的一般是历史数据。

    - 数据库设计是尽量避免冗余,数据仓库在设计是有意引入冗余。

    - 数据库是为捕获数据而设计,数据仓库是为分析数据而设计。 
.大作业包含:封面(格式见附件3)、目录、正文。(格式要求参照见后面附件2)。 3.正文内容主要包括(提纲): ①数据准备flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple flink spark hive Hadoop orange banana apple ②MapReduce实现词频统计 ③Hive实现词频统计 ④Spark实现词频统计 ⑤Flink实现词频统计 ⑥四种技术的对比分析 ⑦总结 备注: ①-⑦是提交文档的级标题; 正文①中包含:数据描述、数据上传HDFS的过程; 正文②-⑤包含:环境及软件版本说明、代码实现、结果截图、结果说明; 正文⑥包含:原理上对比分析、结果分析; 正文⑦包含:总结大数据技术的理解和收获(不超500字)
最新发布
01-08
<think>嗯,用户现在的问题是关于如何在Hive 4.0.1中正确配置hive-core以确保与MySQL的连接配置正确。我需要先回顾之前的对话,看看用户之前问了什么,以及我之前是怎么回答的。 用户之前问的是如何验证Hive与MySQL的连接配置是否正确,我给出了详细的步骤,包括网络连通性、权限验证、驱动兼容性等方面。现在用户提到了Hive 4.0.1和hive-core的配置,可能需要更具体的指导,特别是针对新版本的可能变化。 首先,用户提到了引用[1]中的内容,涉及Hive 4.0.0部署以及与MySQL8.4连接,在Hadoop的core-site.xml中添加了代理用户配置。现在用户可能是在升级到Hive 4.0.1时遇到了类似的问题,或者需要确认配置是否适用于新版本。 我需要确保回答中包含Hive 4.0.1的特定配置,特别是hive-core可能指的是核心配置文件,如hive-site.xml,或者其他相关配置文件。同时,用户可能混淆了hive-core和Hadoop的配置,需要明确区分。 接下来,用户的问题可能涉及到配置步骤,比如如何修改hive-site.xml,选择正确的MySQL驱动版本,处理权限问题,以及可能的常见错误。同时,用户可能希望得到针对Hive 4.0.1和MySQL 8.4的兼容性建议,特别是驱动版本的选择,比如是否必须使用MySQL Connector/J 8.x版本。 另外,用户之前的问题中提到的代理用户配置在Hadoop的core-site.xml中,这是否在Hive 4.0.1中仍然适用?可能需要确认这部分是否需要调整,或者是否有其他新增的配置项需要注意。 还需要考虑权限问题,特别是在MySQL 8.4中,用户的认证插件是否还是mysql_native_password,或者是否需要使用caching_sha2_password,以及如何处理可能出现的认证错误。例如,如果用户遇到“Public Key Retrieval”错误,可能需要建议在JDBC URL中添加allowPublicKeyRetrieval=true参数。 此外,用户可能需要了解如何验证配置是否正确,比如使用Hive CLI进行测试,检查日志文件中的错误信息,或者通过直接连接MySQL来确认权限和驱动是否正常。之前的回答中提到的步骤是否仍然适用,或者是否需要针对新版本进行调整? 最后,用户可能需要常见问题的解决方案,比如驱动未找到、连接超时、权限拒绝等,这些都需要在回答中涵盖,特别是针对Hive 4.0.1和MySQL 8.4的组合可能出现的新问题。 总结下来,回答需要包括以下几个部分: 1. 核心配置文件hive-site.xml的详细配置,包括连接URL、驱动类、用户名密码。 2. 驱动版本的兼容性建议,如MySQL Connector/J 8.0.x。 3. Hadoop的core-site.xml中的代理用户配置是否需要调整。 4. MySQL用户权限和认证插件的设置。 5. 验证步骤,包括启动Hive服务、检查日志、执行简单查询。 6. 常见错误及解决方法,如驱动问题、SSL配置、权限问题等。 7. 注意事项,如配置文件的正确放置、服务重启、防火墙设置等。 需要确保所有配置项都是针对Hive 4.0.1和MySQL 8.4的最新版本,避免过时的参数或方法。同时,引用之前提到的引用内容,如代理用户配置,但也要确认这些在Hive 4.0.1中是否仍然适用,或者是否有变化。</think>### Hive 4.0.1 连接MySQL 8.4 配置指南 --- #### 、核心配置项(hive-site.xml) 1. **元数据存储配置** 在`hive-site.xml`中添加以下**核心参数**(重点关注版本特性差异): ```xml <!-- MySQL 8.4连接地址(注意时区参数) --> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://mysql_host:3306/hive_metastore? useSSL=false &allowPublicKeyRetrieval=true &serverTimezone=UTC</value> <!-- MySQL 8.4必须设置时区 --> </property> <!-- 驱动类名(必须匹配MySQL 8.4驱动) --> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.cj.jdbc.Driver</value> <!-- 旧版驱动类名无效 --> </property> <!-- 认证信息 --> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive_admin</value> <!-- 建议使用专用账号 --> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>your_secure_password</value> </property> ``` *注意:Hive 4.0.1要求MySQL连接URL必须包含`serverTimezone`参数[^1]* --- #### 二、驱动部署 1. **驱动版本选择** - 必须使用 **MySQL Connector/J 8.0.30+**(兼容MySQL 8.4) - 下载地址: ```bash wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.33.tar.gz ``` 2. **驱动部署路径** - 将驱动文件部署到以下位置: ```bash # Hive服务端 $HIVE_HOME/lib/mysql-connector-java-8.0.33.jar # Hadoop公共库(避免Hive CLI报错) $HADOOP_HOME/share/hadoop/common/lib/mysql-connector-java-8.0.33.jar ``` --- #### 三、Hadoop代理配置 1. **core-site.xml增强配置** 根据引用[1]的实践经验,补充代理用户配置(防止权限继承问题): ```xml <!-- 允许Hive服务代理用户操作 --> <property> <name>hadoop.proxyuser.${HIVE_USER}.hosts</name> <!--hadoop.proxyuser.hive.hosts --> <value>*</value> </property> <property> <name>hadoop.proxyuser.${HIVE_USER}.groups</name> <value>*</value> </property> ``` *说明:`${HIVE_USER}`需替换为实际运行Hive服务的系统账户名* --- #### 四、MySQL权限配置 1. **创建专用账号** ```sql CREATE USER 'hive_admin'@'%' IDENTIFIED WITH mysql_native_password BY 'your_secure_password'; GRANT ALL PRIVILEGES ON hive_metastore.* TO 'hive_admin'@'%'; FLUSH PRIVILEGES; ``` *重点:MySQL 8.4默认使用`caching_sha2_password`插件,必须显式指定`mysql_native_password`[^3]* --- #### 五、验证步骤 1. **元数据库初始化** ```bash schematool -initSchema -dbType mysql -verbose # 观察输出是否包含"Initialization script completed" ``` 2. **服务启动测试** ```bash hive --service metastore # 检查日志输出是否包含"JDBC connection pool is active" ``` 3. **功能验证** ```bash hive> CREATE TABLE test_conn(id int); hive> DESCRIBE test_conn; # 确认元数据写入MySQL ``` --- #### 六、典型问题处理 | 故障现象 | 解决方案 | |-----------------------------------|------------------------------------------------------------------------| | `SSLHandshakeException` | 在URL添加`useSSL=false`并检查MySQL的`require_secure_transport`设置[^2] | | `Specified key was too long` | 修改MySQL配置:`innodb_large_prefix=ON` & `innodb_file_format=Barracuda` | | `NoSuchMethodError` | 确认Hadoop/Hive版本与MySQL驱动兼容,建议使用Hive 4.0.1 + MySQL Connector 8.0.33 | --- #### 配置检查清单 ```mermaid graph LR A[驱动版本8.0.33] --> B{核心配置检查} B -->|通过| C[MySQL权限验证] C -->|成功| D[Hadoop代理配置] D -->|生效| E[服务启动测试] E -->|正常| F[功能验证] ``` --- **关键提示**: 1. Hive 4.0.1对MySQL 8.4的时区配置敏感,务必在URL中添加`serverTimezone=UTC` 2. 修改配置后需**同时重启Hive Metastore和HiveServer2**服务 3. 若使用Kerberos认证,需额外配置`javax.jdo.option.ConnectionURL`中的`useKerberos=true`参数
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值