我目前开始使用 HBase 和 HDFS 来存储我的数据。我的第一个实验是将 12GB txt 文件(无压缩)中的数据导入 HBase 'test' 表,该表的复制设置为 3(HDFS 服务器)。
但令我惊讶的是,导入后,NameNode 报告(50070)说“DFS Used: 390.93GB”!我刚刚导入了 12GB 数据,但 HBase 占用了我的 390GB 空间。这对我来说没有任何意义。那么任何人都可以阐明如何解决这个问题吗?
我目前开始使用 HBase 和 HDFS 来存储我的数据。我的第一个实验是将 12GB txt 文件(无压缩)中的数据导入 HBase 'test' 表,该表的复制设置为 3(HDFS 服务器)。
但令我惊讶的是,导入后,NameNode 报告(50070)说“DFS Used: 390.93GB”!我刚刚导入了 12GB 数据,但 HBase 占用了我的 390GB 空间。这对我来说没有任何意义。那么任何人都可以阐明如何解决这个问题吗?
首先想到的是如何将数据存储在列族中。具体来说,如果您从文件中读取一行数据,然后将其存储到长度为 M(i) 的 N 列的列族中,那么至少会产生 SUM(M(i)) 的开销对于每行 1 <= i <= N + ( headers + timestamps / etc )。如果您想节省一些空间,请用小名称命名您的列。
除此之外,还有 WAL 日志、中间拆分和未合并的数据文件(未完全压缩/合并)。例如,如果您多次导入数据(无论出于何种原因,假设您的导入失败,或者您在中间停止它以重新开始,因为您认为有更好/更快的方法来做某事),那么,该数据也存在于 H 文件中,直到压缩运行。
如果您认为列命名不是占用您空间的原因,请尝试在您的列族/表上运行主要压缩。等到所有任务都完成运行并再次检查您的足迹......
希望能提供一些见解?祝你好运!