精华内容
下载资源
问答
  • hive小文件合并

    2021-05-07 10:07:20
    mr: set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; //执行Map前进行小文件合并 set mapred.max.split.size=256000000; tez:

    mr:

    set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

    //执行Map前进行小文件合并

    set mapred.max.split.size=256000000;

     

     

    tez:

    展开全文
  • Hive小文件合并

    2021-03-26 18:14:18
    为什么要合并小文件 1.每个文件在NameNode中的存储信息大约占150字节,会影响NameNode存储其他有用的文件信息,因为NameNode的容量是固定的 2.如果文件过小,每个文件的大小远低于128M,每个文件作为一个分片输入...

    为什么要合并小文件

    1.每个文件在NameNode中的存储信息大约占150字节,会影响NameNode存储其他有用的文件信息,因为NameNode的容量是固定的
    2.如果文件过小,每个文件的大小远低于128M,每个文件作为一个分片输入,就会对应相应数量的MapTask,浪费资源,效率低下,因为MapTask的开启也是耗时的

    如果输入是小文件,需要合并输入的话

    hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat

    如果是合并输出的大量小文件的话

    Map输出合并(默认就是true,可以不用设置):
    hive.merge.mapfiles=true
    Reduce输出合并:
    hive.merge.mapredfiles=true
    合并文件的大小:
    hive.merge.size.per.task=256000000

     

    展开全文
  • hive 小文件合并

    2021-03-30 17:02:32
    Hive输入由很多个小文件组成,由于每个小文件都会启动一个map任务,如果文件过小,以至于map任务启动和初始化的时间大于逻辑处理的时间,会造成资源浪费,甚至OOM。 为此,当我们启动一个任务,发现输入数据量小但...

    转自 http://blog.csdn.net/yfkiss/article/details/8590486

    当Hive输入由很多个小文件组成,由于每个小文件都会启动一个map任务,如果文件过小,以至于map任务启动和初始化的时间大于逻辑处理的时间,会造成资源浪费,甚至OOM。
    为此,当我们启动一个任务,发现输入数据量小但任务数量多时,需要注意在Map前端进行输入合并
    当然,在我们向一个表写数据时,也需要注意输出文件大小

    1. Map输入合并小文件
      对应参数:
      set mapred.max.split.size=256000000; #每个Map最大输入大小
      set mapred.min.split.size.per.node=100000000; #一个节点上split的至少的大小
      set mapred.min.split.size.per.rack=100000000; #一个交换机下split的至少的大小
      set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; #执行Map前进行小文件合并

    在开启了org.apache.hadoop.hive.ql.io.CombineHiveInputFormat后,一个data node节点上多个小文件会进行合并,合并文件数由mapred.max.split.size限制的大小决定。
    mapred.min.split.size.per.node决定了多个data node上的文件是否需要合并~
    mapred.min.split.size.per.rack决定了多个交换机上的文件是否需要合并~

    2.输出合并
    set hive.merge.mapfiles = true #在Map-only的任务结束时合并小文件
    set hive.merge.mapredfiles = true #在Map-Reduce的任务结束时合并小文件
    set hive.merge.size.per.task = 25610001000 #合并文件的大小
    set hive.merge.smallfiles.avgsize=16000000 #当输出文件的平均大小小于该值时,启动一个独立的map-reduce任务进行文件merge

    展开全文
  • 背景Hivequery将运算好的数据写回hdfs(比如insert into语句),有时候会产生大量的小文件,如果不采用...所以Hive在正常job执行完之后,会起一个conditional task,来判断是否需要合并小文件,如果满足要...

    背景

    Hivequery将运算好的数据写回hdfs(比如insert into语句),有时候会产生大量的小文件,如果不采用CombineHiveInputFormat就对这些小文件进行操作的话会产生大量的map task,耗费大量集群资源,而且小文件过多会对namenode造成很大压力。所以Hive在正常job执行完之后,会起一个conditional task,来判断是否需要合并小文件,如果满足要求就会另外启动一个map-only job 或者mapred job来完成合并

    参数解释

    hive.mergejob.maponly (默认为true)

    如果Hadoop版本支持CombineFileInputFormat,则启动Map-only job for merge,否则启动  MapReduce merge job,map端combine file是比较高效的做法

    hive.merge.mapfiles(默认为true)

    正常的map-only job后,是否启动merge job来合并map端输出的结果

    hive.merge.mapredfiles(默认为false)

    正常的map-reduce job后,是否启动merge job来合并reduce端输出的结果,建议开启

    hive.merge.smallfiles.avgsize(默认为16MB)

    如果不是partitioned table的话,输出table文件的平均大小小于这个值,启动merge job,如果是partitioned table,则分别计算每个partition下文件平均大小,只merge平均大小小于这个值的partition。这个值只有当hive.merge.mapfiles或hive.merge.mapredfiles设定为true时,才有效

    hive.exec.reducers.bytes.per.reducer(默认为1G)

    如果用户不主动设置mapred.reduce.tasks数,则会根据input directory计算出所有读入文件的input summary size,然后除以这个值算出reduce number

    reducers = (int) ((totalInputFileSize + bytesPerReducer - 1) / bytesPerReducer);

    reducers = Math.max(1, reducers);

    reducers = Math.min(maxReducers, reducers);

    hive.merge.size.per.task(默认是256MB)

    merge job后每个文件的目标大小(targetSize),用之前job输出文件的total size除以这个值,就可以决定merge job的reduce数目。merge job的map端相当于identity map,然后shuffle到reduce,每个reduce dump一个文件,通过这种方式控制文件的数量和大小

    MapredWork work = (MapredWork) mrTask.getWork();

    if (work.getNumReduceTasks() > 0) {

    int maxReducers = conf.getIntVar(HiveConf.ConfVars.MAXREDUCERS);

    int reducers = (int) ((totalSize +targetSize - 1) / targetSize);

    reducers = Math.max(1, reducers);

    reducers = Math.min(maxReducers, reducers);

    work.setNumReduceTasks(reducers);

    }

    mapred.max.split.size(默认256MB)

    mapred.min.split.size.per.node(默认1 byte)

    mapred.min.split.size.per.rack(默认1 byte)

    这三个参数CombineFileInputFormat中会使用,Hive默认的InputFormat是CombineHiveInputFormat,里面所有的调用(包括最重要的getSplits和getRecordReader)都会转换成CombineFileInputFormat的调用,所以可以看成是它的一个包装。CombineFileInputFormat 可以将许多小文件合并成一个map的输入,如果文件很大,也可以对大文件进行切分,分成多个map的输入。一个CombineFileSplit对应一个map的输入,包含一组path(hdfs路径list),startoffset, lengths, locations(文件所在hostname list)mapred.max.split.size是一个split 最大的大小,mapred.min.split.size.per.node是一个节点上(datanode)split至少的大小,mapred.min.split.size.per.rack是同一个交换机(rack locality)下split至少的大小通过这三个数的调节,组成了一串CombineFileSplit用户可以通过增大mapred.max.split.size的值来减少Map Task数量

    结论

    hive 通过上述几个值来控制是否启动merge file job,通常是建议大家都开启,如果是一堆顺序执行的作业链,只有最后一张表需要固化落地,中间表用好就删除的话,可以在最后一个insert into table之前再开启,防止之前的作业也会launch merge job使得作业变慢。

    上周还发现目前启动的针对RCFile的Block Merger在某种少见情况下,会生成duplicated files,Hive代码中本身已经考虑到这点,所以会在Merger Task RCFileMergeMapper的JobClose函数中调用Utilities.removeTempOrDuplicateFiles(fs, intermediatePath, dpCtx),  不过不知道为什么没有生效,还会存在重复文件,需要再研究下

    Hive是否起merge job是由conditional task在运行时决定的,如果hadoop job或者hive未如预期般执行合并作业,则可以利用github上的file crush工具完成合并,它的原理也是启动一个mapreduce job完成合并,不过目前只支持textfile 和 sequencefile

    链接地址:https://github.com/edwardcapriolo/filecrush

    展开全文
  • hive仓库表数据最终是存储在HDFS上,由于Hadoop的特性,对大文件的处理非常高效。而且大文件可以减少文件...一、小文件带来的问题HDFS的文件包好数据块和元信息,其中元信息包括位置、大小、分块等信息,都保存在Nam...
  • Hive的后端存储是HDFS,它对大文件的处理是非常高效的,如果合理配置文件系统的块大小...小文件带来的问题关于这个问题的阐述可以读一读Cloudera的这篇文章。简单来说,HDFS的文件元信息,包括位置、大小、分块信息...
  • 1 需求Hive数据库内有4张表,每张表有1TB左右数据,按天分区,需要将这4张表的数据迁移到另一个...不过有一个问题,因为Hive库表中有大量的小文件,若直接下载上传这些小文件,速度特别的慢,所以得先进行一步小文...
  • 对于hdfs来说,系统的压力主要集中在namenode如果在整个hadoop集群中存在大量的小文件,会消耗namenode的大量内存(大概146B...定期对小文件进行清理就会变得很必要,比如我会每天有报表来获取hive中表的信息,比如文...
  • hive小文件问题及hive小文件合并

    千次阅读 2017-09-05 17:27:09
    HDFS块的概念--http://www.cnblogs.com/zlslch/p/5081487.html 关于 HDFS 的 file size 和 block size--... ...Hive小文件合并--http://blog.csdn.net/yycdaizi/ar
  • Hive的后端存储是HDFS,它对大文件的处理是非常高效的,如果合理配置文件系统的块大小...小文件带来的问题关于这个问题的阐述可以读一读Cloudera的这篇文章。简单来说,HDFS的文件元信息,包括位置、大小、分块信息...
  • 8种Nosql数据库系统对比导读:Kristóf Kovács 是一位软件架构师和咨询顾问,他最近发布了一片对比各种类型NoSQL数据库的文章. 虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破....
  • 对于hdfs来说,系统的压力主要集中在namenode如果在整个hadoop集群中存在大量的小文件,会消耗namenode的大量内存(大概146B...定期对小文件进行清理就会变得很必要,比如我会每天有报表来获取hive中表的信息,比如文...
  • Map输入合并小文件对应参数:set hive.input.format=org.apache.hadoop.... #执行Map前进行小文件合并set mapred.max.split.size=256000000; #每个Map最大输入大小set mapred.min.split.size.per.node=100000000;...
  • 今天的大数据开发分享,我们就主要来讲讲,Hive小文件合并。 本身来说,由于Hadoop的特性,对大文件的处理非常高效。大文件可以减少文件元数据信息,减轻NameNode的存储压力。相对于上层的数据表汇总程度高,底层...
  • 小文件的弊端1、HDFS中每个文件的元数据信息,包括位置大小分块信息等,都保存在NN内存中,在小文件数较多的情况下,会造成占用大量内存空间,导致NN性能下降;2、在读取小文件多的目录时,MR会产生更多map数,造成...
  • 今天的大数据开发分享,我们就主要来讲讲,Hive小文件合并。本身来说,由于Hadoop的特性,对大文件的处理非常高效。大文件可以减少文件元数据信息,减轻NameNode的存储压力。相对于上层的数据表汇总程度...
  • 本教程授课老师徐培成老师先后在软件公司人软件工程师、系统分析师、项目经理、软件架构师,主持开发了大产权交易系统,异构数据库协同系统、电信资源管理系统、互联网综合性调查等系统,对java技术...Hive是基于Ha...
  • Hive仓库表数据最终是...小文件合并与数据压缩一、小文件带来的问题二、Hive小文件产生的原因三、配置Map输入合并四、配置hive结果合并五、压缩文件的处理六、使用HAR归档文件七、文件格式和压缩TextFileSequenceFil.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 489
精华内容 195
关键字:

hive小文件合并