心血来潮,又翻译了elasticsearch的一篇文章。 今才发现elasticsearch也有了任务管理api。这任务管理可以理解为mysql的show processlist; kill %task_id 。同样elasticsearch也有查询、取消任务的功能。 有了任务管理api,我们对于那种长时间的任务可以更好控制了。
该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新。http://xiaorui.cc/?p=3089
任务api会从一个节点或集群中所有节点获取任务列表及状态.
GET /_tasks GET /_tasks?nodes=nodeId1,nodeId2 GET /_tasks?nodes=nodeId1,nodeId2&actions=cluster:*
返回的结果是这么个样式:
{
"nodes" : {
"oTUltX4IQMOUUVeiohTt8A" : {
"name" : "Tamara Rahn",
"transport_address" : "127.0.0.1:9300",
"host" : "127.0.0.1",
"ip" : "127.0.0.1:9300",
"tasks" : {
"oTUltX4IQMOUUVeiohTt8A:124" : {
"node" : "oTUltX4IQMOUUVeiohTt8A",
"id" : 124,
"type" : "direct",
"action" : "cluster:monitor/tasks/lists[n]",
"start_time_in_millis" : 1458585884904,
"running_time_in_nanos" : 47402,
"parent_task_id" : "oTUltX4IQMOUUVeiohTt8A:123"
},
"oTUltX4IQMOUUVeiohTt8A:123" : {
"node" : "oTUltX4IQMOUUVeiohTt8A",
"id" : 123,
"type" : "transport",
"action" : "cluster:monitor/tasks/lists",
"start_time_in_millis" : 1458585884904,
"running_time_in_nanos" : 236042
}
}
}
}
}
当我们得知某个elasticsearch的任务id时候,可以直接调用下面的api查询.
GET /_tasks/taskId1 GET /_tasks?parent_task_id=parentTaskId1
你也可以指定某个任务的状态。你可以一直等待该任务完成,或者满足超时的条件.
GET /_tasks/tidxiaorui.cctid:12345?wait_for_completion=true&timeout=10s
如果一个任务长时间没有完成, 我们可以强制取消暂停某个任务.
POST /_tasks/taskId1/_cancel
任务取消命令支持同一任务选择参数作为列表任务的命令,因此多任务可以同时被取消。例如,下面的命令将取消所有重建任务的节点上nodeid1和nodeid2运行。
我们可以同时取消多个任务,例如,下面的命令可以取消在节点node1,node2 .
POST /_tasks/_cancel?node_id=nodeId1,nodeId2&actions=*reindex
虽然Elasticsearch在2.3中支持了任务管理,但elasticsearch python库还未加入该功能,当然你可以用requests自己实现.
END.
