心血来潮,又翻译了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.