Hive小文件处理

MR任务

mr任务参考链接

set hive.exec.reducers.max=3

set hive.exec.dynamic.partition.mode = true; --使用动态分区时,设置为ture。 set hive.exec.dynamic.partition.mode = nonstrict; --动态分区模式,默认值:strict,表示必须指定一个分区为静态分区;nonstrict模式表示允许所有的分区字段都可以使用动态分区。一般需要设置为nonstrict。 set hive.exec.max.dynamic.partitions.pernode =10; --在每个执行MR的节点上,最多可以创建多少个动态分区,默认值:100。 set hive.exec.max.dynamic.partitions =1000; --在所有执行MR的节点上,最多一共可以创建多少个动态分区,默认值:1000。 set hive.exec.max.created.files = 100000; --整个MR Job中最多可以创建多少个HDFS文件,默认值:100000。 set hive.error.on.empty.partition = false; --当有空分区产生时,是否抛出异常,默认值:false。 Hive文件产生大量小文件的原因: 一是文件本身的原因:小文件多,以及文件的大小; 二是使用动态分区,可能会导致产生大量分区,从而产生很多小文件,也会导致产生很多Mapper; 三是Reduce数量较多,Hive SQL输出文件的数量和Reduce的个数是一样的。 小文件带来的影响: 文件的数量和大小决定Mapper任务的数量,小文件越多,Mapper任务越多,每一个Mapper都会启动一个JVM来运行,所以这些任务的初始化和执行会花费大量的资源,严重影响性能。 在NameNode中每个文件大约占150字节,小文件多,会严重影响NameNode性能。 解决小文件问题: 如果动态分区数量不可预测,最好不用。如果用,最好使用distributed by分区字段,这样会对字段进行一个hash操作,把相同的分区给同一个Reduce处理; 减少Reduce数量; 进行以一些参数调整。

Hdfs文件数

指定目录下的文件夹,文件,容量大小
[root@mz-hadoop-01 ~]# hdfs dfs -count  /user/hive/warehouse/paascloud_tcm.db/dwd/dwd_t_record_detailed568         7433         6065483664 /user/hive/warehouse/paascloud_tcm.db/dwd/dwd_t_record_detailed[root@mz-hadoop-01 ~]# hdfs dfs -count -h /user/hive/warehouse/paascloud_tcm.db/dwd/dwd_t_record_detailed568        7.3 K              5.6 G /user/hive/warehouse/paascloud_tcm.db/dwd/dwd_t_record_detailed

Hive文件数

SELECT tbl_id,SUM(PARAM_VALUE) AS file_cnts
FROM
(
SELECT * FROM PARTITIONS WHERE tbl_id='97387'
) aLEFT JOIN (SELECT * FROM partition_params WHERE PARAM_KEY='numFiles' ) b
ON a.part_id=b.part_idGROUP BY tbl_id
ORDER BY file_cnts DESC;TBL_ID  file_cnts  
------  -----------97387         2082

所有文件数

SELECT SUM(PARAM_VALUE) AS file_cnts
FROM
(
SELECT * FROM PARTITIONS
) aLEFT JOIN (SELECT * FROM partition_params WHERE PARAM_KEY='numFiles' ) b
ON a.part_id=b.part_idfile_cnts  
-----------340323

表文件数topN

SELECT e.*,f.*
FROM 
(SELECT c.*,d.db_id,d.tbl_name
FROM
(
SELECT tbl_id,SUM(PARAM_VALUE) AS file_cnts
FROM
(
SELECT * FROM PARTITIONS
) aLEFT JOIN (SELECT * FROM partition_params WHERE PARAM_KEY='numFiles' ) b
ON a.part_id=b.part_idGROUP BY tbl_id
ORDER BY file_cnts DESC
) cLEFT JOIN (SELECT * FROM tbls
) d
ON c.tbl_id=d.tbl_id) e LEFT JOIN
(SELECT db_id AS db_id2,`desc`,DB_LOCATION_URI,NAME as db_name,OWNER_NAME,OWNER_TYPE FROM dbs
)f ON e.db_id=f.DB_ID2

库文件数topN

select 
db_id,db_name,DB_LOCATION_URI,sum(file_cnts) as file_cnts
from (SELECT e.*,f.*
FROM 
(SELECT c.*,d.db_id,d.tbl_name
FROM
(
SELECT tbl_id,SUM(PARAM_VALUE) AS file_cnts
FROM
(
SELECT * FROM PARTITIONS
) aLEFT JOIN (SELECT * FROM partition_params WHERE PARAM_KEY='numFiles' ) b
ON a.part_id=b.part_idGROUP BY tbl_id
ORDER BY file_cnts DESC
) cLEFT JOIN (SELECT * FROM tbls
) d
ON c.tbl_id=d.tbl_id) e LEFT JOIN
(SELECT db_id AS db_id2,`desc`,DB_LOCATION_URI,NAME as db_name,OWNER_NAME,OWNER_TYPE FROM dbs
)f ON e.db_id=f.DB_ID2)g group by db_id,db_name,DB_LOCATION_URI order by file_cnts desc

小文件压缩任务

package com.mingzhi.common.universalimport com.mingzhi.common.interf.{IDate, MySaveMode}
import com.mingzhi.common.utils.{HiveUtil, SinkUtil, SparkUtils, TableUtils}
import org.apache.commons.lang3.StringUtils
import org.apache.spark.sql.{DataFrame, SparkSession}
import org.apache.spark.storage.StorageLevel/*** 处理只有一个分区dt的表*/
object table_compress_process {private var hive_dbs: String = "paascloud"private var hive_tables: String = "dwd_order_info_abi"private var dt: String = "2023-06-30"private var dt1: String = "2023-06-30"def main(args: Array[String]): Unit = {System.setProperty("HADOOP_USER_NAME", "root")val builder = SparkUtils.getBuilderif (System.getProperties.getProperty("os.name").contains("Windows")) {builder.master("local[*]")} else {hive_dbs = args(0)hive_tables = args(1)dt = args(2)dt1 = args(3)}val spark: SparkSession = builder.appName("clean_process").getOrCreate()HiveUtil.openDynamicPartition(spark)spark.sql("set spark.sql.shuffle.partitions=1")if ("all".equalsIgnoreCase(hive_dbs)) {val builder = new StringBuilder()val frame_db = spark.sql("show databases").select("databaseName")frame_db.show(false)frame_db.collect().foreach(db => {builder.append(db.toString().replace("[", "").replace("]", ","))})println("dbs:" + builder.toString())hive_dbs = builder.toString()}hive_dbs.split(",").foreach(db => {if (StringUtils.isNotBlank(db)) {if ("all".equalsIgnoreCase(hive_tables)) {compress_all_table(spark, db)} else {hive_tables.split(",").foreach(t => {compress_the_table(spark, db, t)})}}})spark.stop()}private def compress_the_table(spark: SparkSession, hive_db: String, table: String): Unit = {println("compress_the_table======>:" + hive_db + "." + table)spark.sql(s"use $hive_db")if (TableUtils.tableExists(spark, hive_db, table)) {try {new IDate {override def onDate(dt: String): Unit = {/*** 建议:对需要checkpoint的RDD,先执行persist(StorageLevel.DISK_ONLY)*/val f1 = spark.sql(s"""||select * from $hive_db.$table where dt='$dt'|""".stripMargin).persist(StorageLevel.MEMORY_ONLY)val r_ck: (DataFrame, String) = SparkUtils.persistDataFrame(spark, f1)val f2 = r_ck._1println("f2 show===>")f2.show(false)val type_ = TableUtils.getCompressType(spark, hive_db, table)if ("HiveFileFormat".equalsIgnoreCase(type_)) {println("sink HiveFileFormat table:" + table)SinkUtil.sink_to_hive_HiveFileFormat(spark, f2, hive_db, table, null)} else {//spark表SinkUtil.sink_to_hive(dt, spark, f2, hive_db, table, type_, MySaveMode.OverWriteByDt, 1)}spark.sql(s"drop table ${r_ck._2} ")}}.invoke(dt, dt1)} catch {case e: org.apache.spark.sql.AnalysisException => {println("exception1:" + e)}case e: Exception => println("exception:" + e)}}}private def compress_all_table(spark: SparkSession, hive_db: String): Unit = {spark.sql(s"use $hive_db")val frame_table = spark.sql(s"show tables")frame_table.show(100, false)frame_table.printSchema()frame_table.filter(r => {!r.getAs[Boolean]("isTemporary")}).select("tableName").collect().foreach(r => {//r:[ads_order_topn]val table = r.toString().replace("[", "").replace("]", "")println("compress table:" + hive_db + "." + table)if (TableUtils.tableExists(spark, hive_db, table)) {try {new IDate {override def onDate(dt: String): Unit = {val f1 = spark.sql(s"""||select * from $hive_db.$table where dt='$dt'|""".stripMargin)SinkUtil.sink_to_hive(dt, spark, f1, hive_db, table, "orc", MySaveMode.OverWriteByDt, 1)}}.invoke(dt, dt1)} catch {case e: org.apache.spark.sql.AnalysisException => {println("exception1:" + e)}case e: Exception => println("exception:" + e)}}})}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/158706.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搜维尔科技:Movella Xsens MVN LINK 实际应用,一镜到底!

搜维尔科技:Movella Xsens MVN LINK 实际应用,一镜到底!

项目经理面试经典问题大揭秘:聪明回答,轻松获得心仪职位!

作为一名申请了项目管理职位的求职者,要顺利入职必须过了面试这一关。然而,你可能会对面试官可能会问什么问题以及如何回答好感到迷茫。以下是我整理的一些关于项目经理面试问题及回答技巧,希望对你有所帮助! 招聘方(P…

与客户沟通过程中的30个实用技巧

1.使谈判对手做肯定答复的问题 —Is it important that …? 连续发问沟通对手给予肯定答复的问题,最后引导他对你的主要建议也作肯定的答复,是绝对需要花费一番心思的。通常沟通对手只对自己有利的问题,才会痛快地回答“Yes”。因此&#…

uniapp 富文本以及移动端富文本的展示问题

富文本展示有几种方式: 1.<view v-html"content"></view> 2. uniapp自带组件 rich-text rich-text | uni-app官网 <rich-text :nodes"content"></rich-text> 3.uView组件 u-parse Parse 富文本解析器 | uView 2.0 - 全面兼…

神经网络常用激活函数详解

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

如何从命令行运行3dMax脚本(MAXScript或Python)?

3dMax允许您直接在命令行上输入脚本命令。从DOS命令行启动3dMax时&#xff0c;可以让它运行指定的启动MAXScript或Python脚本。这对于无人参与的批处理渲染等任务非常有用。 此功能使用现有的-U命令行开关&#xff0c;该开关命名3dMax启动时要运行的实用程序。-U开关允许一个可…

【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷2

单选题 1、两袋中分别有同样多的硬糖和酥糖&#xff0c;现将第一袋中的20块酥糖放到第二袋中&#xff0c;第二袋中的硬糖和酥糖相同&#xff0c;接着又将第二袋中的20块硬糖放到第一袋中&#xff0c;则第一袋中的硬糖是酥糖的4倍&#xff0c;问原来一袋中有&#xff08;&#…

基于STM32的电子时钟(论文+源码)

1. 系统设计 电子时钟是一种广泛使用的工具&#xff0c;其可以帮助人们准确掌握时间&#xff0c;本课题基于STM32的电子时钟系统的设计&#xff0c;在功能上设计如下&#xff1a; 具有电子时钟的基本功能&#xff0c;显示年月日&#xff0c;时分秒等基本信息&#xff1b;可以…

电脑盘符错乱,C盘变成D盘怎么办?

在一些特殊情况下&#xff0c;磁盘盘符会出现错乱&#xff0c;C盘可能会变成D盘。那么&#xff0c;这该怎么办呢&#xff1f;下面我们就来了解一下。 通过磁盘管理更改盘符 磁盘管理是Windows自带的工具&#xff0c;它位于“计算机管理”的控制台中。管理硬盘及其所包含的卷或…

梨花声音研修院,严肃与刚毅是音色核心

在为军旅剧提供配音服务时&#xff0c;配音员需捕捉并展现军事场合的严肃气氛、军人的刚毅品质以及他们对职责的忠诚。军旅剧往往围绕着军人的日常生活、战场经历、战友之情以及对祖国的热爱等主题展开&#xff0c;所以配音需能传递这些情感和价值。以下是进行军旅剧配音的一些…

倍福控制器搭建IgH环境

最近收到了倍福CX5230控制器&#xff0c;控制器上自带EBUS总线扩展的IO&#xff0c;使用的是CCAT网卡&#xff0c;在控制器上安装preempt-rt Linux系统&#xff0c;再安装IgH。 IgH正常识别到了扩展的IO模块。 运行控制程序&#xff0c;可以正常控制IO输出。

Qt应用开发(进阶篇)——线程 QThread

一、前言 QThread类继承于QObject基类&#xff0c;是Qt经典基础工具类&#xff0c;QThread类提供了一种独立于平台的方式来管理线程&#xff0c;让开发者能够快速的完成多线程的创建和使用。 正常情况下&#xff0c;一个PC程序使用到多线程的概率是非常高的&#xff0c;在不同方…

bclinux aarch64 ceph 14.2.10 云主机 4节点 fio

ceph -s 由于是基于底层分布式存储的云主机&#xff0c;数据仅供参考 本地云盘性能 direct1 1M读取 IOPS134, BW134MiB/s [rootceph-client rbd]# cd / [rootceph-client /]# fio -filenamefio.bin -direct1 -iodepth 128 -thread -rwread -ioenginelibaio -bs1M -size10G -n…

XXL-job-oracle 版本

XXL很流行但是原来的是MYSQL版本 &#xff0c; 现在 工作需要做了一个定时任务的服务器&#xff0c; 发现XXL是很合适的&#xff0c;主要是修改了 ### freemarker spring.freemarker.templateLoaderPathclasspath:/templates/ spring.freemarker.suffix.ftl spring.freemarker.…

【重装系统SSH连不上】 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

问题 centos在重装系统后再连接&#xff0c;无法连接上 [rootaisa ~]# ssh root192.168.0.3 ssh root192.168.0.3无法连接上&#xff0c;输出是&#xff1a; WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! S…

Java继承和多态

文章目录 继承成员继承构造方法super和this的区别代码块构造顺序 限定修饰符final继承和组合 多态向上转型重写动态绑定重写注意事项 向下转型多态优点注意 继承 成员继承 class Animal{public String name;public int age;public int a10;public void doSomething(){System.…

KDE 项目发布了 KDE Gear 23.08.3

导读KDE 项目发布了 KDE Gear 23.08.3&#xff0c;作为最新的 KDE Gear 23.08 开源集合的第三次维护更新&#xff0c;该集合包含了用于 KDE Plasma 桌面环境和其他平台的 KDE 应用程序。 KDE Gear 23.08.3 是在 KDE Gear 23.08.2 大约一个月之后发布的&#xff0c;包含了更多对…

系列五、为什么不用线程id作为ThreadLocalMap的key

一、为什么不用线程id作为ThreadLocalMap的key 1.1、案例代码 /*** Author : 一叶浮萍归大海* Date: 2023/11/21 11:50* Description: 需求&#xff1a;* 如果当前线程是线程1&#xff0c;那么设置书名和作者分别为 三国演义 罗贯中* 如果…

“高校评分”走红网络,虎扑:若造谣抹黑,学校可联系平台处理

哎呀&#xff0c;最近虎扑APP的全国高校评分可是火遍了网络啊&#xff01;那些机智的评语&#xff0c;哦哟&#xff0c;都成了新的“网络爆款梗”&#xff01;有毕业生说嘛&#xff0c;这评分都是看学生自己的经历和感受&#xff0c;有好评当然就有差评啦。但关键是&#xff0c…

Flink Operator 使用指南 之 全局配置

背景 在上一个章节中已经介绍了基本的Flink-Operator安装,但是在实际的数据中台的项目中,用户可能希望看到Flink Operator的运行日志情况,当然这可以通过修改Flink-Operator POD的文件实现卷挂载的形势将日志输出到宿主机器的指定目录下,但是这种办法对数据中台的产品不是…