如何从命令行运行zeppelin notebook(自动)

时间:2016-03-28 05:38:35

标签: apache-zeppelin

  1. 我们如何从命令行运行笔记本?

  2. 继续1,我如何将命令行参数传递到笔记本中?即从笔记本代码中访问命令行args?

2 个答案:

答案 0 :(得分:5)

所以我遇到了同样的问题并设法解决了如何使用API​​来运行使用curl的笔记本。至于传入命令行参数,认为根本没有办法做到这一点 - 你必须在服务器上使用某种共享状态(例如,从文件中读取笔记本,并修改文件)。

无论如何,这是我设法运行笔记本的方式,它假设安装了jq。非常参与:(

curl -XGET http://${ip}:8080/api/interpreter/setting | jq '.body[] | .id'

interpreter_settings_ids=`curl -XGET http://${ip}:8080/api/interpreter/setting | jq '.body[] | .id'`

id_array="["`echo ${interpreter_settings_ids} | tr ' ' ','`"]"

curl -XPUT -d $id_array http://${ip}:8080/api/notebook/interpreter/bind/${notebook_id}

curl -XPOST http://${ip}:8080/api/notebook/job/${notebook_id}

如果有人手动点击了"保存"解释器绑定按钮只需要最后一个命令。

更新:

好的我认为您可以循环探测正在运行的笔记本的状态以确定笔记本是否失败,请参阅:https://github.com/eBay/Zeppelin/blob/master/docs/rest-api/rest-notebook.md

例如

function job_success {
    num_cells=`curl -XGET http://${ip}:8080/api/notebook/job/${notebook_id} 2>/dev/null | jq '.body[] | .status' | wc -l`
    num_successes=`curl -XGET http://${ip}:8080/api/notebook/job/${notebook_id} 2>/dev/null | jq '.body[] | .status' | grep FINISHED | wc -l`
    test ${num_cells} = ${num_successes}
}

function job_fail {
    curl -XGET http://${ip}:8080/api/notebook/job/${notebook_id} 2>/dev/null | jq '.body[] | .status' | grep ERROR
}

until job_success || job_fail
do
    sleep 10
done

答案 1 :(得分:0)

从0.7.3版或更早的版本开始,Zeppelin拥有一个REST API,可让您运行笔记本。您的Shell脚本可以使用curl来访问API。

API包括删除段落并在特定索引处插入段落的方法。这使您可以将所有“参数”表示为段落0中的变量,然后在以后的段落中使用它们。按此顺序对REST API进行3次调用:

  1. 删除笔记本的当前段落0。
  2. 在索引0处插入一个包含变量分配的新段落。
  3. 运行笔记本。