Elasticsearch 使用太多磁盘空间

mac*_*mac 13 disk-space-utilization lucene elasticsearch

我有一台安装了Elasticsearch 1.3.2CentOS 6.5服务器。

我的elasticsearch.yml配置文件是对默认使用 elasticsearch 的配置文件的最小修改。删除所有注释行后,它看起来像:

cluster.name: xxx-kibana

node:
    name: "xxx"
    master: true
    data: true

index.number_of_shards: 5

index.number_of_replicas: 1

path:
    logs: /log/elasticsearch/log
    data: /log/elasticsearch/data


transport.tcp.port: 9300

http.port: 9200

discovery.zen.ping.multicast.enabled: false
Run Code Online (Sandbox Code Playgroud)

默认情况下,Elasticsearch 应该启用压缩,我阅读了各种基准测试,压缩率从低至 50% 到高达 95%。不幸的是,在我的情况下,压缩率是 -400%,或者换句话说:用 ES 存储的数据比具有相同内容的文本文件占用的磁盘空间多 4 倍。看:

12K     logstash-2014.10.07/2/translog
16K     logstash-2014.10.07/2/_state
116M    logstash-2014.10.07/2/index
116M    logstash-2014.10.07/2
12K     logstash-2014.10.07/4/translog
16K     logstash-2014.10.07/4/_state
127M    logstash-2014.10.07/4/index
127M    logstash-2014.10.07/4
12K     logstash-2014.10.07/0/translog
16K     logstash-2014.10.07/0/_state
109M    logstash-2014.10.07/0/index
109M    logstash-2014.10.07/0
16K     logstash-2014.10.07/_state
12K     logstash-2014.10.07/1/translog
16K     logstash-2014.10.07/1/_state
153M    logstash-2014.10.07/1/index
153M    logstash-2014.10.07/1
12K     logstash-2014.10.07/3/translog
16K     logstash-2014.10.07/3/_state
119M    logstash-2014.10.07/3/index
119M    logstash-2014.10.07/3
622M    logstash-2014.10.07/  # <-- This is the total!
Run Code Online (Sandbox Code Playgroud)

相对:

6,3M    /var/log/td-agent/legacy_api.20141007_0.log
8,0M    /var/log/td-agent/legacy_api.20141007_10.log
7,6M    /var/log/td-agent/legacy_api.20141007_11.log
6,7M    /var/log/td-agent/legacy_api.20141007_12.log
8,0M    /var/log/td-agent/legacy_api.20141007_13.log
7,6M    /var/log/td-agent/legacy_api.20141007_14.log
7,6M    /var/log/td-agent/legacy_api.20141007_15.log
7,7M    /var/log/td-agent/legacy_api.20141007_16.log
5,6M    /var/log/td-agent/legacy_api.20141007_17.log
7,9M    /var/log/td-agent/legacy_api.20141007_18.log
6,3M    /var/log/td-agent/legacy_api.20141007_19.log
7,8M    /var/log/td-agent/legacy_api.20141007_1.log
7,1M    /var/log/td-agent/legacy_api.20141007_20.log
8,0M    /var/log/td-agent/legacy_api.20141007_21.log
7,2M    /var/log/td-agent/legacy_api.20141007_22.log
3,8M    /var/log/td-agent/legacy_api.20141007_23.log
7,5M    /var/log/td-agent/legacy_api.20141007_2.log
7,3M    /var/log/td-agent/legacy_api.20141007_3.log
8,0M    /var/log/td-agent/legacy_api.20141007_4.log
7,5M    /var/log/td-agent/legacy_api.20141007_5.log
7,5M    /var/log/td-agent/legacy_api.20141007_6.log
7,8M    /var/log/td-agent/legacy_api.20141007_7.log
7,8M    /var/log/td-agent/legacy_api.20141007_8.log
7,2M    /var/log/td-agent/legacy_api.20141007_9.log
173M    total
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?为什么数据没有被压缩?

我已经临时添加index.store.compress.stored: 1到我的配置文件中,因为我在elasticsearch 0.19.5发行说明中发现了这一点(那是store压缩首先出现的时候),但我还不能判断它是否有所作为,无论如何压缩应该通过默认,现在...

mai*_*ilq 18

Elasticsearch 不会自动缩小您的数据。对于任何数据库都是如此。除了存储原始数据外,每个数据库还必须存储元数据。普通数据库仅存储 db-admin 预先选择的列的索引(用于更快的搜索)。ElasticSearch 是不同的,因为它默认索引每一列。因此使索引非常大,但另一方面在检索数据时提供了完美的性能。

在正常配置中,您会看到索引后原始数据增加了 4 到 6 倍。尽管它在很大程度上取决于实际数据。但这实际上是预期的行为。

因此,要减小数据库大小,您必须像在 RDBM 中所做的那样:从不需要索引的列中排除被索引或存储的列。

此外,您可以打开压缩,但这只会在您的“文档”很大时有所改善,这对于日志文件条目可能并非如此。

这里有一些比较和有用的提示:https : //github.com/jordansissel/experiments/tree/master/elasticsearch/disk

但请记住:搜索是有代价的。支付的成本是磁盘空间。但是你获得了灵活性。如果您的存储大小超过,则水平增长!这是 ElasticSearch 获胜的地方。