Hive-Hive排序

1. DQL 排序问题

1.1 order by

默认是升序asc,可指定降序desc。
order by是全局排序 只能有一个reduce作业来完成
多个reduce 如何保证全局顺序?

hive.mapred.mode改为strict,则使用order by的时候有以下限制:

  • 如果是普通表,则需要加 limit
  • 如果是分区表则:
    • 需要加 limit
    • 需要限定分区条件

建议:慎用

1.2 sort by

mapred.reduce.tasks指定reduce的个数
sort by能保证每个分区有序,你有几个reduce作业,每个reduce输出的结果是有序
sort by不受hive.mapred.mode=strict影响,col可以是多个。
如果数值是数值类型,那么按照数字排序
如果数值是字符串类型,那么按照字典顺序排序

  • 补充:MR中多少个reduce作业就对应多少个输出文件。Spark中多少个task就对应多少个输出文件
1.3 distribute by

不是排序。+ col,根据指定的字段把数据分发到不同的reduce上去。相当于MapReduce中的Partitioner,通常与sort by连用

1.4 Cluster By

根据by的值的hash值进行分区和排序,分发到不同的reduce
当Distribute By和Sort By的字段相同是,就等价于cluster by

1.5 by总结
  • order by:全局有序,只有一个reduce,大数据量下的场景下,效率低。相关参数hive.mapred.mode影响其是否需要加限制条件
  • sort by:多个每个reduce内有序,不能保证全局有序。mapred.reduce.tasks指定reduce的个数,不受hive.mapred.mode的影响。
  • distribute by:是按照指定字段进行数据分发,常与sort by连用,确保每个reduce内有序。语句顺序,先 distribute by 再 sort by.
  • cluster by = distribute by + sort by

思考:需求:业务统计结果要求有序。
order by用不了啊,sort by又不能保证全局有序,咋整????
(根据需要排序的字段查看字段值分布,先distribute by再sort by)

HiveServer2是Hive的一个服务端,通过它可以通过JDBC连接Hive,并且可以通过一个WEB服务查看当前有哪些Session进行连接,以及执行了哪些语句等详细信息。要开启HiveServer2的WEB服务,需要在hive-site.xml文件中配置相应参数,如hive.server2.webui.host和hive.server2.webui.port。使用$HIVE_HOME/bin/hiveserver2命令可以开启HiveServer2,也可以使用$HIVE_HOME/bin/hive --service hiveserver2命令来开启。要查看hiveserver2命令的帮助信息,可以使用$HIVE_HOME/bin/hiveserver2 -H命令。可以使用--hiveconf参数来直接指定hive-site.xml文件中的参数,比如修改HiveServer2的端口可以使用$HIVE_HOME/bin/hiveserver2 --hiveconf hive.server2.thrift.port=14000命令。使用Beeline工具可以连接HiveServer2,连接命令形式为$HIVE_HOME/bin/beeline -u jdbc:hive2://hostname:port/default -n hadoop,其中hostname是HiveServer2开启服务的机器的主机名,port是HiveServer2服务开启的端口,默认是10000。连接成功后可以执行相应的Hive代码查询数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Hive--HiveServer2 命令行代码连接、Hive常用命令、自定义UDF函数、排序](https://blog.csdn.net/qq_41301707/article/details/111238833)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [hive-exec-1.2.1.spark2.jar](https://download.csdn.net/download/u010374412/86745169)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值