精华内容
下载资源
问答
  • 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


    HDFS块的概念--http://www.cnblogs.com/zlslch/p/5081487.html


    关于 HDFS 的 file size 和 block size--http://blog.csdn.net/samhacker/article/details/23089157


    Hive小文件合并--http://blog.csdn.net/yycdaizi/article/details/43341239,http://blog.csdn.net/djd1234567/article/details/51581201


    hive中控制map和reduce数量的简单实现方法--http://blog.csdn.net/zhong_han_jun/article/details/50814246


    控制map和reduce数及压缩方式的写法:

    set hive.exec.reducers.bytes.per.reducer=1073741824;(控制reducer)

    set hive.exec.compress.output=true;(压缩)
    set mapred.output.compress=true; (压缩)
    set mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;  (压缩格式)
    set io.compression.codecs=org.apache.hadoop.io.compress.SnappyCodec;" (压缩)
    SET mapred.output.compression.type=BLOCK; (压缩)

    展开全文
  • Hive小文件合并

    千次阅读 2019-08-23 15:49:58
    Hive迁移数据时发现大量小文件,严重影响Hive执行效率,在这里记录下小文件合并的问题。 小文件产生的原因 执行MapReduce任务时,通过会作一些优化,比如增加Reduce并行度来提升计算效率。而Reduce的增多意味着...

    Hive迁移数据时发现大量小文件,严重影响Hive执行效率,在这里记录下小文件合并的问题。

    小文件产生的原因

    执行MapReduce任务时,通过会作一些优化,比如增加Reduce并行度来提升计算效率。而Reduce的增多意味着输出结果文件的增多,所以会产生小文件问题。

     

    小文件产生的问题

    NameNode存储元数据信息,包括HDFS的抽象目录树结构,存储数据和block分块对应关系、位置、大小等,启动时会加载到内存。每个存储对象大约150字节,所以当文件达到千万级时,内存中的元数据达到3G以上,NameNode的性能就会受影响。

    HDFS文件读写时,会先向NameNode获取元数据信息,再通过元数据找到block对应的DataNode进行文件读写,大量的小文件会导致HDFS的读写受到影响。

    执行Hive任务时,每个文件执行一个MapTask,小文件数据过多,会导致大量MapTask的不断启动和初始化,这样时间远远大于逻辑处理时间,导致Hive任务时间太长,造成资源浪费,甚至oom。执行Hive任务时,如果发现数据量不大但是任务数很多时,应该注意在Map的输入进行小文件合并。

     

    Hive优化方式

    1. 输入合并,也就是在Hive读取文件时进行小文件合并,减少Map数量,。

    2. 输出合并,在MapReduce输出结果时进行小文件合并。

    3. JVM重用,一个Container中运行多个MapTask,减少Container开启和注销时间。

     

    输入合并

    # 设置Hive输入,执行map前进行小文件合并
    # 设置后,DataNode上多个小文件会进行合并,合并文件数由mapred.max.split.size决定
    set hive.input.format=org.apache.hadoop.hive.al.io.CombineHiveInputFormat;
    
    # 每个MapTask最大文件大小
    set mapred.max.split.size=256000000;
    
    # 节点上最小分片大小
    # 如果输入文件在一个节点上多个block的总和,大于这个值则创建一个split,每个节点最多开启一个split
    # 小于则将块用于机架设置值进行计算
    set mapred.min.split.size.per.node=100000000;
    
    # 机架上最小分片大小,决定不同机架的DataNode上文件是都进行合并
    # 对同一机架上多个DataNode的小于节点设置值的块总和进行计算,大于这个值创建split
    # 小于则进行多个机架计算
    set mapred.min.split.size.per.rack=100000000;

    输出合并

    # map结束时合并小文件,默认开启
    set hive.merge.mapredfiles=true;
    
    # 输出结果时合并,默认关闭
    set hive.merge.mapfiles=true;
    
    # 小于这个值会开启一个独立的mapreduce任务进行小文件合并,默认16m
    set hive.merge.smallfiles.avgsize=16000000;
    
    ## 合并后的文件大小,默认256m,推荐128m,一个hdfs分块的大小
    set hive.merge.size.per.task=256000000;

    JVM重用

    set mapred.job.jvm.num.tasks

     

    CDH中Hive小文件合并设置

    输入时设置 Hive -> hive-site.xml 客户端

    输出时设置 Hive -> 搜索 merge

     

     

    展开全文
  • 通过创建临时表合并hive小文件
    #!/bin/bash
    #需要指定hive中的库名
    
    #set -x
    set -e
    
    DB=$1
    
    if [ -z $1 ];then
        echo “Usage:$0  DbName”
        exit 1
    fi
    
    #注释掉cron对应的计划任务
    row=$(sed -n '/sjob_exec.sh/=' /etc/crontab)
    sed -i "$row s/^/#/" /etc/crontab
    
    #获取hive表定义
    ret=$(sudo -u hdfs hive -e "use ${DB};show tables;"|grep -v _tmp|grep -v importinfo)
    
    for tem in $ret;
    do
        echo ${tem}
        sudo -u hdfs hive -e "use ${DB};drop table ${tem}_tmp"
        sudo -u hdfs hive -e "use ${DB};create table ${tem}_tmp_1 as select * from ${tem}"
        sudo -u hdfs hive -e "use ${DB};alter table ${tem} rename to ${tem}_tmp"
        sudo -u hdfs hive -e "use ${DB};alter table ${tem}_tmp_1 rename to ${tem}"
    done
    
    impala-shell -q 'invalidate metadata' -i hslave1
    
    #恢复对应的cron任务
    row=$(sed -n '/sjob_exec.sh/=' /etc/crontab)
    sed -i "$row s/#//" /etc/crontab
    展开全文
  • 问题一:Hive小文件如何产生的? 动态分区插入数据,产生大量的小文件,从而导致map数据剧增; Reduce数据量越多,小文件也就越多(Reduce的个数和输出文件是对应的); 数据源本身就包含大量的...
    问题一:Hive中小文件如何产生的?
    • 动态分区插入数据,产生大量的小文件,从而导致map数据剧增;
    • Reduce数据量越多,小文件也就越多(Reduce的个数和输出文件是对应的);
    • 数据源本身就包含大量的小文件;
     
    问题二:会产生哪些影响?
    • 从Hive角度来看,小文件会开很多map,一个map开一个JVM去执行,所以这些任务的初始化,启动,执行会浪费大量的资源,严重影响性能。
    • 在HDFS中,每个小文件对象约150byte,如果小文件过多会占用大量的内存。这样NameNode内存容量严重制约了集群的扩展。
     
    问题三:小文件过多的解决方案
    • 使用Sequencefile作为表存储格式,可以一定程度上减少TextFile格式的小文件;
    • 减少Reduce的数量(可以参考使用参数进行控制);
    • 减少动态分区,用时记得按Distribute by分区;
    • 使用
    展开全文
  • Hive 小文件问题的处理

    千次阅读 2017-08-24 06:40:28
    Hive的后端存储是HDFS,它对大文件的处理是非常高效的,如果合理配置文件系统的块大小,NameNode可以支持很大的数据量。但是在数据仓库中,越是上层的表其汇总程度就越高,数据量也就越。而且这些表通常会按日期...
  • Hive小文件合并调研

    万次阅读 2013-06-08 10:10:58
    Hive query将运算好的数据写回hdfs(比如insert into语句),有时候会产生大量的小文件,如果不采用CombineHiveInputFormat就对这些小文件进行操作的话会产生大量的map task,耗费大量集群资源,而且小文件过多会对...
  • Hive小文件问题的处理

    千次阅读 2016-03-19 17:33:32
    Hive的后端存储是HDFS,它对大文件的处理是非常高效的,如果合理配置文件系统的块大小,NameNode可以支持很大的数据量。但是在数据仓库中,越是上层的表其汇总程度就越高,数据量也就越。而且这些表通常会按日期...
  • spark sql hive小文件优化

    千次阅读 2018-03-22 13:17:46
    hive.merge.mapfiles","true") sparksession.sqlContext.setConf("mapred.max.split.size","256000000") sparksession.sqlContext.setConf("mapred.min.split.size.per....
  • 一、小文件是如何产生的 1.动态分区插入数据,产生大量的小文件,...1.从Hive的角度看,小文件会开很多map,一个map开一个JVM去执行,所以这些任务的初始化,启动,执行会浪费大量的资源,严重影响性能。 2.在HD...
  • hive 小文件的合并 hive.merge.mapredfiles

    千次阅读 2014-01-03 16:15:00
    起因: 最近仓库里面新建了一张分区表,数据量大约是12亿行,分区比较多,从...然后我在hdfs文件里面看到 这个表的每个分区里面都有20多个小文件,每个文件都不大 300KB--1MB 之前的hive的参数: hive.merge...
  • hive 配置文件

    2018-03-03 11:30:28
    hive 配置文件,包括hive-site.xml与hive-env.sh两个配置文件,可根据自己需要修改
  • Hive处理小文件

    千次阅读 2013-12-27 13:12:09
    Hive中处理小文件
  • Hive读取文件

    千次阅读 2018-06-04 20:47:57
    hive读取文件 教会hive怎么读文本数据 这样直接读数据就是将文本文件上传到该数据表所在的hdfs的文件夹中 hadoop fs -put studen.dat /user/hive/数据库名/表名 hive> create table student(id int,...
  • Hive小文件合并方法总结

    千次阅读 2020-10-17 21:52:44
    Hive小文件合并方法总结 Hive小文件产生原因
  • Hive 合并小文件

    千次阅读 2016-08-05 12:41:41
    Hive输入由很多个小文件组成,由于每个小文件都会启动一个map任务,如果文件,以至于map任务启动和初始化的时间大于逻辑处理的时间,会造成资源浪费,甚至OOM。 为此,当我们启动一个任务,发现输入数据量但...
  • hive merge小文件

    万次阅读 2013-02-19 11:57:06
    Hive输入由很多个小文件组成,由于每个小文件都会启动一个map任务,如果文件,以至于map任务启动和初始化的时间大于逻辑处理的时间,会造成资源浪费,甚至OOM。 为此,当我们启动一个任务,发现输入数据量...
  • 查看hive文件大小

    千次阅读 2019-09-03 23:20:31
    hadoop fs -du /user/hive/warehouse/risk_tmp.db/tablename|awk ' { SUM += $1 } END { print SUM/(1024*1024*1024) }'
  • hive合并小文件的配置项

    千次阅读 2018-07-19 17:09:33
    〇. 启动压缩 set hive.exec.compress.output=true; set mapreduce.output.... 输入合并:当有大量小文件时,启动合并,减少map数。 set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputF...
  • hive 查看文件系统命令

    千次阅读 2019-09-22 09:35:25
    hive查看文件系统命令 1.在hive client命令窗口中如何查看hdfs文件系统 hive(default)> dfs -ls /; 2.在hive client命令窗口中如何查看本地文件系统 hive(default)> ls /opt/modules; ...
  • hive 合并小文件处理方案 -转载

    千次阅读 2019-08-28 09:37:39
    hadoop使用lzo压缩,block块大小为512MB 环境:hadoop2.6+hive1.2.1 lzo压缩 启动压缩 set hive.exec.compress.output=true;...1、减少map数,(当有大量小文件时,启动合并) set hive.input....
  • hive大量小文件处理方法总结

    千次阅读 2019-06-03 23:05:13
    大量的小文件对namenode产生很大压力,加上最近平台要求清理小文件。下面总结一下工作中用到的小文件方法。 1.参数法(普遍方法,适用于大量map端小文件和reduce后数据量还比较大。比如:日志文件从text格式insert...
  • hive 合并小文件处理方案

    千次阅读 2019-06-03 10:28:04
    hadoop使用lzo压缩,block块大小为512MB 环境:hadoop2.6+hive1.2.1 lzo压缩 启动压缩 set hive.exec.compress.output=true;...1、减少map数,(当有大量小文件时,启动合并) set hive.input...
  • hive合并小文件

    千次阅读 2015-11-03 17:40:25
    环境:hadoop2.6+hive1.2.1 lzo压缩 启动压缩 set hive.exec.compress.output=true; set mapreduce.output.fileoutputformat.compress=true;  一.减少map数,(当有大量
  • HIVE配置文件

    千次阅读 2016-06-28 21:56:17
    编辑文件hive-site.xml,内容如下:(这是伪分布式模式)主要声明了以下几个内容: 数据仓库地址 数据库连接地址 数据库连接驱动 数据库连接用户名 数据库连接密码 是否使用本地的数据库 :这里是本地数据库模式 ...
  • hive任务 处理小文件合并的参数配置

    千次阅读 2019-11-29 09:14:05
    hive 输出端 小文件合并 参数配置 一. 小文件产生 使用hive过程中经常会遇到小文件问题:①,在执行插入数据操作过程中,可能会产生小文件;②,map-only作业,可能会产生小文件;③,map-reduce作业,每个reduce...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 111,603
精华内容 44,641
关键字:

hive小文件