hive 学习使用

hive建表说明:

目前我们建表主要使用两种方式,默认的text格式和orc格式。orc格式采用列式存储方式,可以较好的减少磁盘IO。orc增加了轻量级的索引,默认采用ZLIB压缩,有很好的压缩比。
使用场景:每天上G的数据建议采用ORC。数据量比较小的话可以自由选择text和orc两种方式。

hive 小文件处理说明:


解决方式分为两种。1)控制每个任务处理的最小数据量 2)输出结果控制,通过配置参数让程序自动启动一个任务来合并文件。两种方法应用场景不太一样。

针对表格式为ORC存储的小文件处理参数为:
set hive.merge.mapredfiles = true;
set hive.merge.mapfiles = true;
set hive.merge.smallfiles.avgsize = 134217728;

set mapred.min.split.size = 134217728;
set mapred.max.split.size = 268435456;
set mapred.min.split.size.per.node = 134217728;
set mapred.min.split.size.per.rack = 134217728;
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; 

针对表格式为TEXT存储的小文件处理参数为:

set hive.merge.mapredfiles = true;
set hive.merge.mapfiles = true;
 set hive.merge.smallfiles.avgsize = 134217728;

hive主要参数调优使用场景
查询时间过长或者partition(分区)比较多的场景:jvm
set mapred.job.reuse.jvm.num.tasks=10;

reducer数据量过大的情况或者reducer负载过高
可以适当调整reducer个数,不要过高,目前集群默认配置最大数目为100。此参数一般不要设置。

set hive.exec.reducers.max=150;

Hive 编程注意点

注意:hive sql运行是否高效,主要在于sql本身编写的是否合理高效,参数调优只是在某种条件下对减少运行时间有帮助。

避免不必要的数据扫描,设定分区
各个表之间的连接最好采用括号括起来的子查询方式,如果可以在连接之前进行的计算,那么尽量在连接之前进行计算,减少连接之后的数据量。一方面是因为mysql和hive执行引擎优化逻辑不一样,mysql会更加智能一 些,另一方面是为了方便查找sql问题,可以更快速的定位问题。
注意多表连接的执行计划
减少不必要的数据表的重复扫描,同时减少不必要的java对象生成

Hive 函数介绍:

见此博客:https://blog.youkuaiyun.com/hellojoy/article/details/82592059

这里我只记录一个使用点:

select  date, 2 is_asdk from test ;

在本查询语句中使查询出来的is_asdk字段值为2。

 

top n:

需求:求取华为和oppo这两个品牌中使用者数目排行前十的机型;

select manu,model from(select manu,model,row_number() over(partition by manu order by number desc)  rank from (select  split(device,"_")[0] manu, split(device,"_")[1] model,count(distinct(cuid)) number from dsdk.user_behavior where upper(split(device,"_")[0]) in("HUAWEI","OPPO") and date= '20190103' group by split(device,"_")[0],split(device,"_")[1] ) tb )tb1 where tb1.rank <=10 

 

stream join:

在多表级联时,一般大表都写在最后,因为写在最后的表默认使用stream形式加载,其他表的结果缓存在内存中。
可以使用/*+ STREAMTABLE(a) */ 来标示具体哪个表使用stream形式。在表关联时,使用该标识来指出大表,能避免数据表过大导致占用内存过多而产生的问题

SELECT /*+ STREAMTABLE(a) */ a.val, b.val, c.val FROM a JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key1)

 

Hive体系结构

角色:gateway, metadata,hiveserver1,hiveserver2

gateway:由于Hive服务没有工作者角色,因此需要另一种机制来支持将客户机配置自动传播到集群中的其他主机。网关角色实现此功能。网关实际上并不是真正的角色,也没有状态,但是它们作为指示客户端配置应该放在哪里的指示器。在添加Hive服务时,默认情况下会创建Hive网关。当配置了gateway,当一个节点的hive数据发生更改时,其余节点同步更改。

metadata: 元数据服务组件,这个组件存储hive的元数据,hive的元数据存储在关系数据库里,hive支持的关系数据库有derby、mysql。元数据对于hive十分重要,因此hive支持把metastore服务独立出来,安装到远程的服务器集群里,从而解耦hive服务和metastore服务,保证hive运行的健壮性.

Hive有2个服务端守护进程:Hiveserver2:支撑JDBC访问,Thrift服务。MetaStore Server:支撑访问元数据库的服务。

 

 

 

学习 Hive 数据仓库工具是一个系统性的过程,需要从基础知识、环境搭建、SQL 查询语言、数据建模等多个方面入手。以下是详细的学习指南和入门教程建议。 ### 基础知识准备 在开始学习 Hive 之前,应具备一定的 Hadoop 生态系统基础,包括对 HDFS 和 MapReduce 的基本理解。Hive 是构建在 Hadoop 之上的数据仓库工具,主要用于大规模数据集的存储、查询与分析[^1]。此外,熟悉 SQL 语言对于快速上手 Hive 是非常有帮助的,因为 HiveQL 是一种类似于 SQL 的查询语言,旨在让熟悉 SQL 的用户能够轻松地进行大数据处理[^4]。 ### 环境搭建 为了实践 Hive 的功能,首先需要搭建一个合适的开发环境。推荐使用以下配置作为起点: - **Java**:1.8.0_171 或更高版本 - **Hadoop**:2.7.6 版本 - **Hive**:1.2.1 稳定版本(主流版本) - **MySQL**:5.7 或其他支持 JDBC 的数据库用于元数据存储[^2] 安装步骤通常包括解压 Hive 发行包、配置 `hive-site.xml` 文件以设置数据库连接信息、以及确保 Hadoop 配置文件正确无误。完成这些后,可以通过运行简单的 HiveQL 命令来验证安装是否成功。 ### 学习 HiveQL 一旦环境就绪,就可以开始学习如何编写 HiveQL 查询了。这应该从最基础的数据定义语句(如 CREATE TABLE)和数据操作语句(如 LOAD DATA INTO TABLE)开始。随着技能的增长,可以逐步探索更复杂的特性,比如分区表、桶表、视图等高级主题。例如,创建一个简单的外部表并加载数据的示例代码如下: ```sql CREATE EXTERNAL TABLE IF NOT EXISTS logs ( id INT, log_message STRING, timestamp BIGINT ) LOCATION '/user/hive/logs'; ``` 接着,你可以通过下面这条命令向这个表中加载数据: ```sql LOAD DATA INPATH '/path/to/local/file' INTO TABLE logs; ``` ### 数据建模与优化 深入学习时,重点在于掌握如何有效地组织数据结构以便高效查询。这涉及到星型模式或雪花模式的设计原则,以及了解维度建模的概念。同时,也要学会利用索引、压缩技术以及其他性能调优技巧来提高查询效率。分层建模是构建高效数据仓库的关键环节之一,它可以帮助企业更好地管理和分析其海量业务数据[^5]。 ### 实战项目 最后但同样重要的是参与实际项目的开发。尝试基于真实世界场景设计解决方案,比如日志数据分析系统或者销售报告生成器。这样的练习不仅有助于巩固所学知识,还能增强解决复杂问题的能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值