如何加速ElasticSearch索引?

3

我是一个elasticsearch的初学者,需要用Python脚本将一百万个随机事件写入托管在云端的Elasticsearch集群中...

es = Elasticsearch(
    [host_name],
    port=9243,
    http_auth=("*****","*******"),
    use_ssl=True,
    verify_certs=True,
    ca_certs=certifi.where(),
    sniff_on_start=True
)

这是我的索引代码:

for i in range(1000000):

src_centers=['data center a','data center b','data center c','data center d','data center e']
transfer_src = np.random.choice(src_centers, p=[0.3, 0.175, 0.175, 0.175, 0.175])

dst_centers = [x for x in src_centers if x != transfer_src]
transfer_dst = np.random.choice(dst_centers)

final_transfer_status = ['transfer-success','transfer-failure']

transfer_starttime = generate_timestamp()
file_size=random.choice(range(1024,10000000000))
ftp={
    'event_type': 'transfer-queued',
    'uuid': uuid.uuid4(),
    'src_site' : transfer_src,
    'dst_site' : transfer_dst,
    'timestamp': transfer_starttime,
    'bytes' : file_size
}
print(i)
es.index(index='ft_initial', id=(i+1), doc_type='initial_transfer_details', body= ftp)

transfer_status = ['transfer-success', 'transfer-failure']
final_status = np.random.choice(transfer_status, p=[0.95,0.05])
ftp['event_type'] = final_status

if (final_status=='transfer-failure'):
    time_delay = 10
else :
    time_delay = int(transfer_time(file_size))   # ranges roughly from 0-10000 s 

ftp['timestamp'] = transfer_starttime + timedelta(seconds=time_delay)
es.index(index='ft_final', id=(i+1), doc_type='final_transfer_details', body=ftp)

有没有其他方法可以加快这个过程呢?

非常感谢您的帮助和指点。谢谢。


你想加速什么?索引吗?程序本身吗?请澄清您的请求。 - Adonis
你能与我们分享一下你的集群拓扑结构吗?包括分片数量、节点类型(主节点/数据节点)、集群机器的硬件规格,最好还要附上你的elasticsearch.yml文件。 - user3775217
Topology::{event_type: "transfer-queued", uuid: 471a885a-9d8a-4212-8ebc-d1bc96c91b3b, bytes: 5411345, timestamp: 2017-03-04T05:40:40 src_site: "数据中心A", dst_site: "数据中心C" } - Vyom Sharma
1个回答

3

谢谢,我通过这种方式解决了它...使用了helpers.bulk()函数。 - Vyom Sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接