我知道Apache Livy是从任何地方与spark交互的休息界面.那么使用Apache Livy而不是spark-jobserver有什么好处呢.使用Livy作为替代方案的spark-jobserver有什么缺点.我在互联网上找不到这个.能否请你帮我澄清一下.
谢谢,
我正在Apache Spark上构建一个RESTful API.提供以下Python脚本spark-submit似乎工作正常:
import cherrypy
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('myApp').getOrCreate()
sc = spark.sparkContext
class doStuff(object):
@cherrypy.expose
def compute(self, user_input):
# do something spark-y with the user input
return user_output
cherrypy.quickstart(doStuff())
Run Code Online (Sandbox Code Playgroud)
但谷歌搜索我看到像Livy和spark-jobserver这样的东西.我阅读了这些项目的文档和一些教程,但我仍然不完全理解Livy或spark-jobserver优于使用CherryPy或Flask或任何其他Web框架的简单脚本的优点.它是关于可扩展性的吗?上下文管理?我在这里错过了什么?如果我想要的是一个用户不多的简单RESTful API,那么Livy或spark-jobserver值得吗?如果是这样,为什么?
我目前正在尝试从 Scala模拟一个 livy 服务器来运行单元测试。
基本上,我想测试将 jar 提交给 livy 客户端。我正在尝试修改我在此处找到的代码(livy)HttpClientSpec.scala,但在编译时出现错误。
更确切地说,我发现了一个错误,每当我试图重写方法createSession的的InteractiveSessionServlet类。这很奇怪,因为InteractiveSessionServlet它不是私人课程。
如果有人能帮我解决这个问题,我将不胜感激。
这是我的代码:
import java.util.concurrent.atomic.AtomicLong
import org.scalatra.servlet.ScalatraListener
import org.apache.livy.{LivyClient, LivyConf}
import org.apache.livy.client.common.Serializer
import org.apache.livy.server.WebServer
import org.apache.livy.server.interactive.InteractiveSession
import org.scalatest.{BeforeAndAfterAll, FlatSpec, Matchers}
private object LivyServerMock {
// Hack warning: keep the session object available so that individual tests can mock
// the desired behavior before making requests to the server.
var session: InteractiveSession = _
}
class LivyServerMock extends FlatSpec with …Run Code Online (Sandbox Code Playgroud) 我正在使用HTTP POST调用在Livy Server中执行语句localhost:8998/sessions/0/statements,具有以下正文
{
"code": "spark.sql(\"select * from test_table limit 10\")"
}
Run Code Online (Sandbox Code Playgroud)
我想以下列格式给出答案
(...)
"data": {
"application/json": "[
{"id": "123", "init_date": 1481649345, ...},
{"id": "133", "init_date": 1481649333, ...},
{"id": "155", "init_date": 1481642153, ...},
]"
}
(...)
Run Code Online (Sandbox Code Playgroud)
但我得到的是
(...)
"data": {
"text/plain": "res0: org.apache.spark.sql.DataFrame = [id: string, init_date: timestamp ... 64 more fields]"
}
(...)
Run Code Online (Sandbox Code Playgroud)
哪个是toString()数据帧的版本.
有没有办法使用Livy Server将数据帧作为JSON返回?
找到解决问题的JIRA问题:https://issues.cloudera.org/browse/LIVY-72
根据评论,可以说Livy不会也不会支持这样的功能?
根据标题,我想请求计算Spark集群(Azure中的local/HDInsight)并从C#应用程序返回结果.
我承认Livy的存在,我理解它是一个位于Spark之上的REST API应用程序来查询它,我还没有找到一个标准的C#API包.这是工作的正确工具吗?它只是缺少一个众所周知的C#API吗?
在星火集群需要访问Azure的宇宙DB,所以我需要能够以提交包括连接器的jar库(或其上的群集驱动器路径)的一个工作,星火从读取数据宇宙.
我们正在尝试使用 NiFi 运行一个 Spark 程序。这是我们尝试遵循的基本示例。
我们已经在127.0.0.1:8998.
ExecutiveSparkInteractive 处理器用于运行示例 Spark 代码。
val gdpDF = spark.read.json("gdp.json")
val gdpRDD = gdpDF.rdd
gdpRDD.count()
Run Code Online (Sandbox Code Playgroud)
LivyController为127.0.0.1端口8998和 配置Session Type : spark。
当我们运行处理器时,我们得到以下错误:
Spark Session返回错误,将输出的JSON对象作为流文件内容发送到失败(惩罚后)
我们只想输出 JSON 文件中的行数。如何将其重定向到流文件?
NiFi 用户日志:
2020-04-13 21:50:49,955 INFO [NiFi Web Server-85] org.apache.nifi.web.filter.RequestLogger Attempting request for (anonymous) GET http://localhost:9090/nifi-api/flow/控制器/公告(源IP:127.0.0.1)
NiFi 应用程序.log
ERROR [Timer-Driven Process Thread-3] oanplivy.ExecuteSparkInteractive ExecuteSparkInteractive[id=9a338053-0173-1000-fbe9-e613558ad33b] Spark Session 返回错误,将输出 JSON 对象作为流文件内容发送到失败(惩罚后)
我一直在尝试使用在 Ubuntu 18.04 上运行的 Livy 0.7 服务器创建一个新的 Spark 会话。在同一台机器上,我有一个正在运行的 Spark 集群,有 2 个工作人员,我可以创建一个正常的 Spark 会话。
我的问题是,在向 Livy 服务器运行以下请求后,会话停留在启动状态:
import json, pprint, requests, textwrap
host = 'http://localhost:8998'
data = {'kind': 'spark'}
headers = {'Content-Type': 'application/json'}
r = requests.post(host + '/sessions', data=json.dumps(data), headers=headers)
r.json()
Run Code Online (Sandbox Code Playgroud)
我可以看到会话正在启动并从会话日志中创建了 Spark 会话:
20/06/03 13:52:31 INFO SparkEntries: Spark context finished initialization in 5197ms
20/06/03 13:52:31 INFO SparkEntries: Created Spark session.
20/06/03 13:52:46 INFO CoarseGrainedSchedulerBackend$DriverEndpoint: Registered executor NettyRpcEndpointRef(spark-client://Executor) (xxx.xx.xx.xxx:1828) with ID 0
20/06/03 13:52:47 INFO BlockManagerMasterEndpoint: Registering block manager …Run Code Online (Sandbox Code Playgroud) 我可以通过 Livy 服务连接到非 Kerberized Spark集群,而不会出现来自远程Rstudio 桌面(Windows)的问题。
但是,如果启用了 Kerberos 安全性,连接将失败:
library(sparklyr)
sc <- spark_connect("http://host:8998", method = "livy")
Run Code Online (Sandbox Code Playgroud)
回来
Error in livy_validate_http_response("Failed to create livy session", :
Livy operation is unauthorized. Try spark_connect with config = livy_config()
Run Code Online (Sandbox Code Playgroud)
使用sparklyr_0.5.6-9002MIT Kerberos for Windows 进行身份验证。
在另一方面,从内群集(即,通过curl)连接成功。
我究竟做错了什么?这种连接需要哪些额外设置?
该livy_config(..., username, password)配置似乎只形成一个Authorization: Basic ...头,但这里笔者还是怀疑Negotiate或Kerberos(?)应该不是必需的。
我还缺少其他任何可能的配置吗?
注意:kinit在使用授权用户从 shell 运行后,从 RStudio Server (web) 返回相同的错误。
我正在尝试将 Python 文件提交给 REST API,但它总是给出错误。我正在使用本地模式,我正在运行的命令如下:
$curl -X POST --data '{"file":"/Users/neha/Desktop/spark_project/examples/spark_livy_ex3.py"}' -H "Content-Type: application/json" localhost:8998/batches
"requirement failed: Local path /Users/neha/Desktop/spark_project/examples/spark_livy_ex3.py cannot be added to user sessions."
Run Code Online (Sandbox Code Playgroud)
从这个链接https://groups.google.com/a/cloudera.org/forum/#!topic/livy-user/mm-XEhANDHU我发现我必须通过修改 livy.conf 来修改 livy.conf将 /Users/neha/Desktop/spark_project/examples/ 目录添加到 livy.file.local-dir-whitelist。我再次使用上面的 curl 命令运行代码,但现在我也遇到了同样的错误。
请注意,'spark_livy_ex3.py' 是我要运行的 python 文件。
我该如何解决这个问题?
我想在不同内核之间轻松切换我的笔记本。一个用例是在tensorflow 2、2.2、2.3中快速测试一段代码,类似的用例还有很多。但是,我现在更喜欢将我的环境定义为 docker,而不是不同的(conda)环境。
现在我知道您可以在容器中启动 jupyter,但这不是我想要的。我只想单击Kernel > use kernel > TF 2.2 (docker),让 jupyter 连接到在此容器中运行的内核。
周围有这样的东西吗?我曾经livy通过 ssh 连接到远程 Spark 内核,所以感觉这应该是可能的。
livy ×10
apache-spark ×8
python ×2
scala ×2
.net-spark ×1
apache-nifi ×1
c# ×1
cloudera ×1
docker ×1
hdinsight ×1
java ×1
json ×1
kerberos ×1
r ×1
sparklyr ×1
ubuntu ×1
unit-testing ×1