hdfs中已经存在的未压缩数据如何压缩它们

曹宇 2014-10-30 11:58:12
如题,目前主要是针对hbase的数据
目前没有太好的解决办法
有一下思路:
1,将数据拿出来用java代码加上压缩算法重新写入hdfs
但是这样的话,会破坏hdfs中的文件命名,也就是说无法控制block的命名 这样与hbase的meta信息不符合 会导致数据无法被hbase读取的问题
2,在hbase中query出这些数据,然后通过压缩算法重新入库.
这样的话虽然可以但是如果数据量比较大的话,十分影响效率以及占用时间


目前最理想的是 hadoop有什么命令可以直接对hdfs上的某个目录文件进行压缩 如类似: hadoop fs -compression {compressionType} {path}
不过这也只是想象中的,目前没找到合适的方法
还请大家想想方法.
...全文
754 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
曹宇 2014-10-30
  • 打赏
  • 举报
回复
目前集群已经安装好了 GZ LZO SNAPPY
曹宇 2014-10-30
  • 打赏
  • 举报
回复
引用 9 楼 sky_walker85 的回复:
[quote=引用 7 楼 ProgrammingPower 的回复:] [quote=引用 5 楼 sky_walker85 的回复:] 如果不是hbase中的数据,可以写MapReduce作业,设置参数mapred.output.compress为true。这样会将作业的输出进行压缩
额 额外再问一下您. 有没有办法 不破坏原有block命名结构 就是原样输出呢? 多谢了!!![/quote] 其实我不太懂你为什么这么不想破坏原有的block命名结构,毕竟对用户来说记录这些block还是不现实的。我觉得只要不破坏数据就行了,除非是有其他系统需要这些原有的block,否则我觉得可以直接写作业完成压缩,然后删除掉原有数据[/quote] 恩 其实我刚刚去用hadoop fs -ls 命令仔细查看了一下 其实是我陷入误区了 hbase在hdfs中是一个region一个文件 meta中记录的是region的文件名 而非block 对于文件来说 其物理实体block是透明的 我一直去纠结万一block名字改了meta就会读取不到 后来我想错了. meta知道region文件的名字路径就可以了 至于不是hbase的文件 不想破坏命名结构 也是受上面的误区 就像您说的 只要保证文件名一致就可以了 多谢啦.
曹宇 2014-10-30
  • 打赏
  • 举报
回复
引用 8 楼 sky_walker85 的回复:
如果仅是不破坏原有的block名称,可以通过先重命名该文件,然后将输出保存为原有block的文件名
恩 就是麻烦些 思路可以这样 多谢您啦..
skyWalker_ONLY 2014-10-30
  • 打赏
  • 举报
回复
引用 7 楼 ProgrammingPower 的回复:
[quote=引用 5 楼 sky_walker85 的回复:] 如果不是hbase中的数据,可以写MapReduce作业,设置参数mapred.output.compress为true。这样会将作业的输出进行压缩
额 额外再问一下您. 有没有办法 不破坏原有block命名结构 就是原样输出呢? 多谢了!!![/quote] 其实我不太懂你为什么这么不想破坏原有的block命名结构,毕竟对用户来说记录这些block还是不现实的。我觉得只要不破坏数据就行了,除非是有其他系统需要这些原有的block,否则我觉得可以直接写作业完成压缩,然后删除掉原有数据
skyWalker_ONLY 2014-10-30
  • 打赏
  • 举报
回复
如果仅是不破坏原有的block名称,可以通过先重命名该文件,然后将输出保存为原有block的文件名
曹宇 2014-10-30
  • 打赏
  • 举报
回复
引用 5 楼 sky_walker85 的回复:
如果不是hbase中的数据,可以写MapReduce作业,设置参数mapred.output.compress为true。这样会将作业的输出进行压缩
额 额外再问一下您. 有没有办法 不破坏原有block命名结构 就是原样输出呢? 多谢了!!!
曹宇 2014-10-30
  • 打赏
  • 举报
回复
引用 5 楼 sky_walker85 的回复:
如果不是hbase中的数据,可以写MapReduce作业,设置参数mapred.output.compress为true。这样会将作业的输出进行压缩
恩也对 不是hbase的数据 破坏了数据命名也没关系 毕竟没有meta了 多谢了 思维绕进去了.
skyWalker_ONLY 2014-10-30
  • 打赏
  • 举报
回复
如果不是hbase中的数据,可以写MapReduce作业,设置参数mapred.output.compress为true。这样会将作业的输出进行压缩
曹宇 2014-10-30
  • 打赏
  • 举报
回复
引用 2 楼 sky_walker85 的回复:
可以直接对hbase中的数据压缩,参考http://www.cnblogs.com/shitouer/p/hbase-table-alter-compression-type-and-snappy-compression-compare.html
多谢,经过测试确实可以. 另外问您一下,如果不是hbase的数据,那么如何修改呢?
曹宇 2014-10-30
  • 打赏
  • 举报
回复
引用 2 楼 sky_walker85 的回复:
可以直接对hbase中的数据压缩,参考http://www.cnblogs.com/shitouer/p/hbase-table-alter-compression-type-and-snappy-compression-compare.html
多谢,我试一试..
skyWalker_ONLY 2014-10-30
  • 打赏
  • 举报
回复

20,808

社区成员

发帖
与我相关
我的任务
社区描述
Hadoop生态大数据交流社区,致力于有Hadoop,hive,Spark,Hbase,Flink,ClickHouse,Kafka,数据仓库,大数据集群运维技术分享和交流等。致力于收集优质的博客
社区管理员
  • 分布式计算/Hadoop社区
  • 涤生大数据
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧