Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何使用AirFlow提取使用ApacheLivy批量POST方法提交的Spark作业客户端日志_Apache Spark_Airflow_Livy - Fatal编程技术网

Apache spark 如何使用AirFlow提取使用ApacheLivy批量POST方法提交的Spark作业客户端日志

Apache spark 如何使用AirFlow提取使用ApacheLivy批量POST方法提交的Spark作业客户端日志,apache-spark,airflow,livy,Apache Spark,Airflow,Livy,我正在使用ApacheLivy批量POST方法提交Spark作业 此HTTP请求是使用气流发送的。提交作业后,我使用批次Id跟踪状态 我想在气流日志上显示驱动程序(客户端日志)日志,以避免访问AirFLow和ApacheLivy/ResourceManager的多个位置 使用ApacheLivyRESTAPI可以做到这一点吗?Livy有一个端点来获取日志/sessions/{sessionId}/log&/batches/{batchId}/log 文件: 您可以创建如下所示的pytho

我正在使用ApacheLivy批量POST方法提交Spark作业

此HTTP请求是使用气流发送的。提交作业后,我使用批次Id跟踪状态

我想在气流日志上显示驱动程序(客户端日志)日志,以避免访问AirFLow和ApacheLivy/ResourceManager的多个位置


使用ApacheLivyRESTAPI可以做到这一点吗?

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

文件:

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

http=HttpHook(“GET”,http\u conn\u id=http\u conn\u id)
def_http_rest_调用(self、method、endpoint、data=None、headers=None、extra_options=None):
如果不是额外选项:
额外_选项={}
self.http.method=method
response=http.run(端点,json.dumps(数据),头,额外的\u选项=额外的\u选项)
返回响应
def_get_batch_session_日志(self,batch_id):
方法=“获取”
endpoint=“batches/”+str(批处理id)+“/log”
response=self.\u http\u rest\u调用(method=method,endpoint=endpoint)
#返回response.json()
返回响应

Livy以两种方式公开restapi:会话和批处理。在您的情况下,因为我们假设您没有使用会话,所以您正在使用批提交。您可以使用curl命令发布批处理:

卷曲

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

curl{batchId}/log

您可以在以下位置找到文档:

如果要避免上述步骤,可以使用AWS Marketplace提供的现成AMI(即LightningFLow),该AMI通过自定义Livy操作符提供气流。Livy operator每30秒提交并跟踪一次作业状态(可配置),并且它还在UI日志中的spark作业结束时提供spark日志

注:LightningFlow预先集成了所有必需的库、Livy、自定义操作符和本地Spark cluster

AWS市场链接:


这将使您能够在一个位置查看合并日志,而不是在Airflow和EMR/Spark日志(Ambari/Resource Manager)之间来回移动。

请参阅跟踪声明进度部分谢谢。刚开始的时候我很有帮助。我从@kaxil-answer获得了更多我想要的细节。谢谢。@RamdevSharma-livy日志端点似乎是livy提交批处理的日志,而不是spark驱动程序日志本身。我错过什么了吗?我试图解决同样的问题,在气流中暴露火花日志,这样我就不必跳到EMR进行调试。Thanks@alexP_Keaton你能解决这个问题吗?Livy上的日志端点不是驱动程序日志,我不确定是否有办法(至少现在是这样)通过Livy轮询Spark驱动程序日志。谢谢@kaxil,这就是我一直在寻找的内容,我错过了一些。根据来自和大小的端点输入,我可以在每次状态检查时显示日志。看起来livy在jvm中存储了批处理日志,而没有在磁盘上持久化。。。我找不到任何日志文件。如果livy保存了日志,那么位置在哪里?@RamdevSharma您愿意分享您的代码吗?我被http\u conn\u id=http\u conn\u id卡住了,不知道这是从哪里来的。谢谢大家!@user1983682,很抱歉,我没有源代码,因为我已经离开了项目。你们可以寻找连接是空气流用户界面创建的http。我明白@kaxil你知道为什么我会收到一个错误“error-\u get\u batch\u session\u logs()得到一个意外的关键字参数'next\u execution\u date'”吗?