by: 鐵樂與貓
7版本以上的elasticsearch吧,預設只允許1000個分片,問題是因為集群分片數不足引起的。
1000 個shards的限制是怎麼來的?
根據官方解釋,從elasticsearch v7.0.0 開始,集群中的每個節點預設限制 1000 個shard,如果你的es集群有3個資料節點,那麼最多 3000 shards。這裡我是開發環境,只有一台es,所以只有1000。
在elasticsearch.yml中定義
> cluster.max_shards_per_node: 10000
在kibana的tools中改變臨時設定以便即時生效
put /_cluster/settings
}}
除此外,如果是開發環境,資料不那麼重要的話,可以清空所有index
delete /_all
官方文件:刪除索引
然後,重新設定預設值,降低number_of_shards
數量,同時提高max_shards_per_node
的數量。
vim elasticsearch.yml
# set the number of shards (splits) of an index (5 by default):
#index.number_of_shards: 2
# set the number of replicas (additional copies) of an index (1 by default):
#index.number_of_replicas: 1
cluster.max_shards_per_node: 3000
對於生產環境
vim elasticsearch.yml
# set the number of shards (splits) of an index (5 by default):
#index.number_of_shards: 5
# set the number of replicas (additional copies) of an index (1 by default):
#index.number_of_replicas: 2
cluster.max_shards_per_node: 3000
index 的配置引數在es配置檔案裡直接配置,會報錯。不過可以用kibana來設定。也就是最開始所說的使用kibana的開發工具put改變。
最重要的是,要定期刪除無用資料,可以每個月初刪除乙個月前的所有資料,即只保留最近1個月的index
資料。
每個index
多少個shard
合適?配置 elasticsearch 集群後,對於分片數,是比較難確定的。因為乙個索引分片數一旦確定,以後就無法修改,所以我們在建立索引前,要充分的考慮到,以後我們建立的索引所儲存的資料量,否則建立了不合適的分片數,會對我們的效能造成很大的影響。
如果以後發現有必要更改分片的數量,則需要重新索引所有源文件。(儘管重新編制索引是乙個漫長的過程,但可以在不停機的情況下完成)。
主分片配置與硬碟分割槽非常相似,在硬碟分割槽中,原始磁碟空間的重新分割槽要求使用者備份,配置新分割槽並將資料重寫到新分割槽上。
稍微過度分配是好的。但是如果你給每個 index 分配 1000 個shard 那就是不好的。
請記住,您分配的每個分片都需要支付額外費用:
我們的客戶期望他們的業務增長,並且其資料集會相應地擴充套件。因此,始終需要應急計畫。許多使用者說服自己,他們將遇到**性增長(儘管大多數使用者從未真正看到無法控制的增長)。此外,我們所有人都希望最大程度地減少停機時間並避免重新分片。
如果您擔心資料的快速增長,那麼我們建議您關注乙個簡單的約束:elasticsearch的最大jvm堆大小建議約為30-32gb。這是對絕對最大分片大小限制的可靠估計。例如,如果您確實認為可以達到200gb(但在不更改其他基礎架構的情況下無法達到更大容量),那麼我們建議分配7個分片,或最多8個分片。
絕對不要為從現在起三年後達到的太高的10 tb目標分配資源。
如果現在你的場景是分片數不合適了,但是又不知道如何調整,那麼有乙個好的解決方法就是按照時間建立索引,然後進行通配查詢。如果每天的資料量很大,則可以按天建立索引,如果是乙個月積累起來導致資料量很大,則可以乙個月建立乙個索引。如果要對現有索引進行重新分片,則需要重建索引.
修改預設的 elasticsearch 分片數
這是正確的改變配置檔案中的
index.number_of_shards
預設值將涉及更改所有節點上的設定,然後理想地按照rolling restarts的指導方針重新啟動例項。但是,如果這不是乙個選項,如果在建立新索引時在設定中明確指定
number_of_shards
並不理想,那麼解決方法將使用index templates可以建立
index_defaults
預設值,如下所示這會將put /_template/index_defaults
}
index_defaults
模板中指定的設定應用於所有新索引。重建索引
參考:教你如何在 elasticsearch 中重建索引
每個節點的
maximum shards open
設定為多大合適?對於分片數的大小,業界一致認為分片數的多少與記憶體掛鉤,認為 1gb 堆記憶體對應 20-25 個分片。因此,具有30gb堆的節點最多應有600個分片,但是越低於此限制,您可以使其越好。而乙個分片的大小不要超過50g,通常,這將有助於群集保持良好的執行狀況。
Hive預設分割符
1 hive預設的分隔符 hive的表資料,不管匯出到hdfs還是本地檔案系統,如果使用者在匯出時沒有指定分割符,那麼hive表的資料在寫入檔案時,會使用預設的分隔符作為列分隔符,該預設的分割是 ctr a ascii碼排第二位的字元,是不可見字元,二進位制表示 u0001 2 顯示hive預設的分...
更改csv預設分隔符
對於帶分隔符的文字檔案,可以在 文字匯入嚮導 的步驟 2 中將分隔符從製表符更改為其他字元。在步驟 2 中,還可以更改處理連續分隔符 如連續引號 的方式。有關使用 文字匯入嚮導 的詳細資訊,請參閱文字匯入嚮導。更改所有 csv 文字檔案中的分隔符 1 單擊 windows 開始 選單。2 單擊 控制...
圳鵬大資料 spark Rdd的預設分割槽
1.spark.default.parallelism 2.檔案塊的大小 spark.default.parallelism 預設的併發數 本地模式下spark.default.parallelism spark shell 和spark default.conf相關預設為4 spark shell...