hive 查询经过压缩后有 100GB 的.gz 格式的文件数据,使用 select * from 能够查询出来,为何不能做计算?

问答 歌唱祖国 ⋅ 于 2018-10-07 13:22:38 ⋅ 最后回复由 gene 2019-05-27 17:57:38 ⋅ 6359 阅读

老师您好,我在生产上遇到一个这样一个情况,我们有46亿的数据,有1TB的大小,占用hdfs就是3个多TB了,我们采用gz格式将数据进行压缩,建立hive表,将数据load into到hive表了。表数据能够使用select * from table能查询出数据,但是在对表进行计算时(select count(1))出现1个小时了但是map=0%,这个表完全没用办法进行计算。集群性能为(4core/28GB)x9datanode.

请问老师,hive对压缩的数据进行计算不是在逻辑上将数据进行解压吗?我该如何设置才能计算这个表?

尝试过建立一张分区表将,想这个gz格式的hive数据查询出来再插入到建好的分区表中,但是也遇到相同的情况map任务跑了17小时还是0%?请问我该如何将数据插入到hive分区表?

insert into dist_tablename PARTITION(yearmonth) 
select *,substr(inventory_date,0,7) yearmonth
from src_tablename 
回复数量: 6
  • 青牛 海汼部落创始人,80后程序员一枚,曾就职于金山,喜欢倒腾技术做产品
    2018-10-08 09:30:45

    一般map不动都是数据不均衡导致的,分区表的本质就是不同的文件目录,所以我觉得你直接把原始数据搞到分区表就行了,不用压缩,
    CREATE TABLE AAA (

    nameSTRING,
    
    id STRING

    )

    PARTITIONED BY (month)

    ROW FORMAT DELIMITED FIELDS TERMINATED BY'\t';

    Insert overwritetable AAA(month=’2016-06’)

    Select ...

  • 歌唱祖国 不要跟过去的自己比,要期待未来的自己,珍爱现在的自己。
    2018-10-08 09:45:13

    @青牛 原始数据太大,有1TB,3个副本就有3个TB了,我们整个集群的磁盘才14TB,目前有两个这样大的表,如果不压缩磁盘资源很快就会用完,我的想法是1.压缩数据(.gz)再load进hive表,2.再将这个数据load到分区表并保存成parquet格式,3.最后删除源数据,这样就能减少资源的占用了。

    目前的问题是:2的步骤走不通,有什么可能导致map不动呢?我在集群上看到每台datanode的磁盘占用都比较均匀,应该数据也是比较均匀的。

  • 青牛 海汼部落创始人,80后程序员一枚,曾就职于金山,喜欢倒腾技术做产品
    2018-10-08 17:40:04

    @歌唱祖国 进度不走不代表map没运行,去看一下map的Log,看看有没有日志再打印就知道是不是正在运行

  • 歌唱祖国 不要跟过去的自己比,要期待未来的自己,珍爱现在的自己。
    2018-10-11 14:39:00

    @青牛

    走不动是这样的报错。请问我该如何去找原因?
    file

  • 青牛 海汼部落创始人,80后程序员一枚,曾就职于金山,喜欢倒腾技术做产品
    2018-10-12 17:47:10

    @歌唱祖国 去具体计算节点上看一下yarn的日志

  • gene
    2019-05-27 17:57:38

    请问这个问题最后怎么解决,我也遇到这样的问题

暂无评论~~
  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
Ctrl+Enter