如何使用AirFlow提取使用Apache Livy批处理POST方法提交的Spark作业客户端日志

时间:2019-01-20 02:16:55

标签: apache-spark airflow livy

我正在使用Apache Livy批处理POST方法提交Spark作业。

此HTTP请求是使用AirFlow发送的。提交工作后,我正在使用批次ID跟踪状态。

我想在Air Flow日志上显示驱动程序(客户端日志)日志,以避免前往AirFLow和Apache Livy / Resource Manager的多个位置。

使用Apache Livy REST API可以做到吗?

2 个答案:

答案 0 :(得分:2)

Livy有一个端点来获取日志/sessions/{sessionId}/log/batches/{batchId}/log

文档:

您可以创建如下所示的python函数来获取日志:

http = HttpHook("GET", http_conn_id=http_conn_id)

def _http_rest_call(self, method, endpoint, data=None, headers=None, extra_options=None):
    if not extra_options:
        extra_options = {}

    self.http.method = method
    response = http.run(endpoint, json.dumps(data), headers, extra_options=extra_options)

    return response


def _get_batch_session_logs(self, batch_id):
    method = "GET"
    endpoint = "batches/" + str(batch_id) + "/log"
    response = self._http_rest_call(method=method, endpoint=endpoint)
    # return response.json()
    return response

答案 1 :(得分:1)

Livy通过两种方式公开REST API:会话和批处理。对于您而言,由于我们假设您不使用会话,因此您将使用批处理提交。您可以使用curl命令发布批处理:

卷曲http://livy-server-IP:8998/batches

提交作业后,您将获得批次ID。然后,您可以使用以下命令卷曲:

卷曲http://livy-server-IP:8998/batches/ {batchId} / log

您可以在以下位置找到文档: https://livy.incubator.apache.org/docs/latest/rest-api.html

如果要避免上述步骤,可以使用AWS Marketplace中的现成AMI(即LightningFLow),该AMI为Airflow提供了自定义的Livy运算符。 Livy操作员每30秒提交一次并跟踪作业状态(可配置),并且在Airflow UI日志中火花作业结束时还提供火花日志。

注意:LightningFlow已与所有必需的库,Livy,自定义运算符和本地Spark集群预先集成。

AWS Marketplace的链接: https://aws.amazon.com/marketplace/pp/Lightning-Analytics-Inc-LightningFlow-Integrated-o/B084BSD66V

这将使您能够在一个位置查看合并日志,而不必在Airflow和EMR / Spark日志(Ambari / Resource Manager)之间进行混排。