hive统计网站指标总结

本文总结了在Hive中处理数据倾斜、优化SQL、预处理数据、生成唯一主键及进行页面访问深度计算的方法。介绍了使用MAPJOIN提高效率、数据采样、设置'hive.groupby.skewindata'参数、使用LATERAL VIEW与explode操作,以及Java正则表达式在处理复杂维度统计中的应用。此外,还探讨了流量来源分类和Hive排序的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于数据倾斜
我们分组统计,结果分组字段分布很不均匀,大的key造成所在机器内存不足,长时间处理不完,导致任务不能结束
1.MAPJION会把小表全部读入内存中,在map阶段直接拿另外一个表的数据和内存中表数据做匹配,效率也会高很多
mapjion虽然省去小表的磁盘读写开销,join操作的匹配命中率还是很低。
我们有个类似的例子:
有一个小表由,起始ip地址,结束ip地址,地域code组成,我们要根据访问的IP地址取地域code,我们 1.将80万的记录按起始iP排序,并保存文件到hdfs.2.写udf将文件读入内存,通过二分法查找匹配,不需要产生join后的笛卡尔积, 速度提高了很多。
2.数据采样
3.优化SQL,缩小小表记录,设定 hive.groupby.skewindata=true
4.预处理,提前统计结果,写入hdfs

 
sqoop 导出数据到mysql
sqoop效率不错,但是导出hive表时,一次只能导出一个分区文件,hive提供的dboutput导入数据是一条数据建立一次连接,我们改造了这个类,做了批量预处理10000条建立一次数据库连接

hive表的唯一主键
大数据理论上是不能有主键的,但是有些情况下,需要主键来标识唯一的记录
udf生成主键,一般在数据导入hive的一次全数据扫描过程中进行
键值由:ip+日期+序列数+进程id组成

基于session的页面访问深度的计算
LATERAL VIEW explode
页面访问深度指网站的某个指定页面,一个会话在第几次访问时到达该页面
1。按session分组,按utctime排序,写一个udaf返回(key:序列号,value:主键)的map
2. lateral view explode 将map行转列,在与大表做主键关联

Java正则表达式
1.Java正则比匹配group(1),只能按序号取值,不能按参数取值
2.在指标按 0 操作系统; 1:浏览器; 2:设备 等维度统计的时候,正则表达式很复杂,我们找了一套开源的正则匹配可以带参数,同样需要借助udf返回匹

### Hive统计表或区行数的方法 在 Hive 中,可以通过多种方式统计表或区中的行数。这些方法各有优劣,适合不同的场景。 #### 方法 1:使用 `COUNT(*)` 函数 这是最直观的方式之一,直接对整个表或特定区应用 `COUNT(*)` 来计算总行数。 ```sql -- 对整张表进行统计 SELECT COUNT(*) FROM your_table; -- 对特定区进行统计 SELECT COUNT(*) FROM your_partitioned_table WHERE partition_column='partition_value'; ``` 这种方法简单易懂,但可能会因为全表扫描而导致性能下降,尤其是在大表的情况下[^2]。 #### 方法 2:利用元数据中的统计信息 Hive 的元数据存储了关于表的一些预计算统计数据,其中包括每张表的估计行数 (`numRows`)。这种统计信息可以在不触发实际查询的前提下快速返回结果。 ```sql DESCRIBE FORMATTED your_table; ``` 然而需要注意的是,这类统计信息并非实时更新,因此可能不够精确。为了提高准确性,在读取前应该先刷新统计信息: ```sql -- 非区表 ANALYZE TABLE your_non_partitioned_table COMPUTE STATISTICS; -- 单区表 ANALYZE TABLE your_partitioned_table PARTITION(partition_column='partition_value') COMPUTE STATISTICS; -- 多级区表 ANALYZE TABLE your_multi_level_partitioned_table PARTITION(partition_col1='value1', partition_col2='value2') COMPUTE STATISTICS; ``` 完成上述操作之后再次运行 `DESCRIBE FORMATTED` 命令即可获得最新的行数估算值。 #### 方法 3:基于文件大小粗略推算 虽然这种方式并不推荐作为正式解决方案的一部,但在某些特殊场合下可以作为一种补充手段考虑——即依据底层 HDFS 文件系统的字节数除以平均记录长度得出近似的结果。不过由于压缩算法等因素的影响,最终得到的数据往往偏差较大,仅限于非常宽松的要求之下适用[^3]。 --- ### 总结 以上介绍了三种不同层次上的 Hive 数据集规模测量办法,别是通过 SQL 显式求和、依赖预先构建好的汇总指标以及借助物理存储特性间接推测。其中前者最为精准但也相对耗时较长;中间路线则平衡了效率与可靠性之间的关系;而后者更多时候只是起到辅助作用而已。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值