【问题标题】:Read file created in HDFS with Livy使用 Livy 读取在 HDFS 中创建的文件
【发布时间】:2018-07-13 23:11:41
【问题描述】:
我正在使用 Livy 通过创建运行良好的 jar 文件并在 HDFS 中写入输出来运行 wordcount 示例。现在我想将结果返回到我的 HTML 页面。我正在使用 Spark scala、sbt、HDFS 和 Livy。
GET/batches REST API 仅显示日志和状态。
如何获得输出结果?
或者我如何在 Livy 中使用 REST API 读取 HDFS 中的文件?请帮我解决这个问题。
提前致谢。
【问题讨论】:
标签:
scala
apache-spark
sbt
livy
【解决方案1】:
如果您使用 curl 检查批处理的状态,您将获得 Livy 批处理作业的状态,该状态将显示为已完成(如果 spark 驱动程序已成功启动)。
读取输出:
1. 您可以使用 paramiko 对运行 hdfs 的机器进行 SSH,然后运行 hdfs dfs -ls / 来检查输出并执行您想要的任务。
- 使用 Livy REST API,您需要编写一个执行步骤 1 的脚本,并且可以通过 curl 命令调用该脚本以从 HDFS 获取输出,但在这种情况下,Livy 将启动单独的 spark 驱动程序,输出将进入驱动程序日志的 STDOUT。
curl -vvv -u : :/batches -X POST --data '{"file": "http://"}' -H "Content-Type: application/json"
第一种方法是获得输出的可靠方法,尽管我不能 100% 确定第二种方法的行为方式。
【解决方案2】:
您可以在 REST 调用中使用 WebHDFS。请先由您的管理员启用 WebHDFS。
- 使用 webHDFS URL
- 创建 HttpURLConnection 对象
- 将请求方法设置为 GET
然后使用缓冲区读取器获取输入流。