实战hadoop海量数据处理系列04预热篇:窗函数row_number 从理论到实践

本文主要是介绍实战hadoop海量数据处理系列04预热篇:窗函数row_number 从理论到实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实战hadoop海量数据处理系列04预热篇:窗函数row_number 从理论到实践

作者写第一版书的时候,,hive还没有官方支持row_number,需要使用UDF来实现额外的jar;
不过幸运的是,从hive 0.11过后,官方就加入这个函数,所以入门更容易啦。

1 row_number定义

结合情景分析

row_number()over (partition by tran_idorder by timestamp desc) num  

会先根据tran_id进行分组,并在分组内部按timestamp降序排序,row_number()函数计算的值就表示某个tran_id组内部排序后的顺序编号(该编号在一个组内是连续并且唯一的) 。
更多详情,请查看here

2 实践过程

2.1 查看hive表结构

hive> desc cubey;
OK
c1                      int                                         
c2                      string                                      
Time taken: 0.093 seconds, Fetched: 2 row(s)

2.2 查看hive表的内容

hive> select * from cubey;
OK
1       str1
2       str2
3       str3
3       str31
3       str33
4       str41
4       str42
Time taken: 0.252 seconds, Fetched: 7 row(s)

2.3执行窗函数的查询1

可以看到输出内容按照第一例进行分组,按照第二组进行倒序排序,最后输出一例来表示对应组内的序号。

hive> select c1 ,c2, row_number() over> ( distrubute by c1 sort by c2 desc) rownum> from cubey;
(省略若干)  
Stage-Stage-1: Map: 1  Reduce: 1   Cumulative CPU: 2.92 sec   HDFS Read: 267 HDFS Write: 67 SUCCESS
Total MapReduce CPU Time Spent: 2 seconds 920 msec
OK
1       str1    1
2       str2    1
3       str33   1
3       str31   2
3       str3    3
4       str42   1
4       str41   2
Time taken: 34.029 seconds, Fetched: 7 row(s)

2.4 执行窗函数的查询2

在上一小节的基础上,只取本组的第一条记录

hive> select c1,c2 from (>   select c1,c2 ,row_number() over> (distribute by c1 sort by c2 desc) rownum> from cubey )aa> where aa.rownum = 1;(省略若干)  
Total MapReduce CPU Time Spent: 3 seconds 320 msec
OK
1       str1
2       str2
3       str33
4       str42
Time taken: 27.536 seconds, Fetched: 4 row(s)

3 小结

通过案例实践典型窗函数row_number,对于etl中的关键步骤“去重”有进一步的基础。

4 其他 项目心得及思考

  • 得多熟悉hdfs 文件系统的常用命令
    比如ls -r
  • 得多熟悉hadoop /spark等官方example例子
    学习来自官方的案例可以少走很多弯路
  • 得理解hadoop内部的排序TeraSort
    有一个入门的实现可以去深入理解下,请点击这里[here](http://kubicode.me/2015/06/27/Hadoop/TeraSort-in-Hadoop/
    )

  • jar包查看class等的命令
    一般用jar tf test.jar 来查看jar包内的clas,
    有些时候,我们需要查看一个jar文件中是否包含了某个方法,这个在linux下可以通过下面的命令来查询
    grepjar methodName class.jar

4.1 活用hive的job日志

当触发hive map reduce的工作不是期望的,可以查看日志,该日志一般在/tmp/

4.2 得熟悉 常用的hadoop页面监控信息网址

以默认的端口来说,

  1. http://master:50030

查看MapReduce上的jobtracker(在启动了hdfs和MapReduce之后查阅)

  1. http://master:50060

查看MapReduce上的tasktracker(在启动了hdfs和MapReduce之后查阅)

  1. http://master:50070

查看HDFS上的节点信息(在启动了HDFS之后查阅)

  1. http://master:60010/master.jsp

查看master连点信息 (在启动了HDFS、MapReduce、ZooKeeper和HBase之后查阅)

  1. http://master:60030/regionserver.jsp

查看regionserver信息(在启动了HDFS、MapReduce、ZooKeeper和HBase之后查阅)

  1. http://master:60010/zk.jsp

查看zookeeper信息(在启动了HDFS、MapReduce、ZooKeeper和HBase之后查阅)

这篇关于实战hadoop海量数据处理系列04预热篇:窗函数row_number 从理论到实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/894385

相关文章

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

PowerShell中15个提升运维效率关键命令实战指南

《PowerShell中15个提升运维效率关键命令实战指南》作为网络安全专业人员的必备技能,PowerShell在系统管理、日志分析、威胁检测和自动化响应方面展现出强大能力,下面我们就来看看15个提升... 目录一、PowerShell在网络安全中的战略价值二、网络安全关键场景命令实战1. 系统安全基线核查

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

Spring WebFlux 与 WebClient 使用指南及最佳实践

《SpringWebFlux与WebClient使用指南及最佳实践》WebClient是SpringWebFlux模块提供的非阻塞、响应式HTTP客户端,基于ProjectReactor实现,... 目录Spring WebFlux 与 WebClient 使用指南1. WebClient 概述2. 核心依

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

Python函数作用域示例详解

《Python函数作用域示例详解》本文介绍了Python中的LEGB作用域规则,详细解析了变量查找的四个层级,通过具体代码示例,展示了各层级的变量访问规则和特性,对python函数作用域相关知识感兴趣... 目录一、LEGB 规则二、作用域实例2.1 局部作用域(Local)2.2 闭包作用域(Enclos

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语