使用Livy
通过从EMR启动的POST
请求执行存储在S3
中的脚本。脚本运行,但超时非常快。我已经尝试过编辑livy.conf配置,但是没有一个改动能够持久。这是返回的错误:
java.lang.Exception: No YARN application is found with tag livy-batch-10-hg3po7kp in 120 seconds. Please check your cluster status, it is may be very busy.
org.apache.livy.utils.SparkYarnApp.org$apache$livy$utils$SparkYarnApp$$getAppIdFromTag(SparkYarnApp.scala:182) org.apache.livy.utils.SparkYarnApp$$anonfun$1$$anonfun$4.apply(SparkYarnApp.scala:239) org.apache.livy.utils.SparkYarnApp$$anonfun$1$$anonfun$4.apply(SparkYarnApp.scala:236) scala.Option.getOrElse(Option.scala:121) org.apache.livy.utils.SparkYarnApp$$anonfun$1.apply$mcV$sp(SparkYarnApp.scala:236) org.apache.livy.Utils$$anon$1.run(Utils.scala:94)
解决方案是您必须检查SparkUtil.scala中的代码。
GetOr创建的配置应该是活动的。如果没有,就不能检查和关闭纱线的连接。
例子是:
val spark = SparkSession.builder().appName(appName).getOrCreate()
在我的例子中,我也有一些评论,这就是问题所在。
这是一个需要解决的棘手问题,但我能够使用以下命令使其正常工作:
curl -X POST --data '{"proxyUser": "hadoop","file": "s3://MYBUCKETLOCATION/recurring_job_automation/sample-pyspark-app/hello.py", "jars": ["s3://MYBUCKETLOCATION/recurring_job_automation/sample-pyspark-app/NQjc.jar"], "pyFiles": ["s3://MYBUCKETLOCATION/recurring_job_automation/sample-pyspark-app/application.zip"], "archives": ["s3://MYBUCKETLOCATION/recurring_job_automation/sample-pyspark-app/venv.zip#venv"], "driverMemory": "10g", "executorMemory": "10g", "name": "Name of Import Job here", "conf":{
"spark.yarn.appMasterEnv.SPARK_HOME": "/usr/lib/spark",
"spark.yarn.appMasterEnv.PYSPARK_PYTHON": "./venv/bin/python",
"livy.spark.yarn.appMasterEnv.PYSPARK_PYTHON": "./venv/bin/python",
"spark.yarn.executorEnv.PYSPARK_PYTHON": "./venv/bin/python",
"spark.pyspark.virtualenv.enabled": "true",
"spark.pyspark.virtualenv.type": "native",
"spark.pyspark.virtualenv.requirements":"requirements.pip",
"spark.pyspark.virtualenv.bin.path": "virtualenv",
"spark.master": "yarn",
"spark.submit.deployMode": "cluster"}}' -H "Content-Type: application/json" http://MY-PATH--TO-MY--EMRCLUSTER:8998/batches
在我克隆包含应用程序文件的存储库后,在EMR集群的主节点上运行此脚本来设置我的依赖关系:
set -e
set -x
export HADOOP_CONF_DIR="/etc/hadoop/conf"
export PYTHON="/usr/bin/python3"
export SPARK_HOME="/usr/lib/spark"
export PATH="$SPARK_HOME/bin:$PATH"
# Set $PYTHON to the Python executable you want to create
# your virtual environment with. It could just be something
# like `python3`, if that's already on your $PATH, or it could
# be a /fully/qualified/path/to/python.
test -n "$PYTHON"
# Make sure $SPARK_HOME is on your $PATH so that `spark-submit`
# runs from the correct location.
test -n "$SPARK_HOME"
"$PYTHON" -m venv venv --copies
source venv/bin/activate
pip install -U pip
pip install -r requirements.pip
deactivate
# Here we package up an isolated environment that we'll ship to YARN.
# The awkward zip invocation for venv just creates nicer relative
# paths.
pushd venv/
zip -rq ../venv.zip *
popd
# Here it's important that application/ be zipped in this way so that
# Python knows how to load the module inside.
zip -rq application.zip application/
按照我在这里提供的说明:为PySpark绑定Python3包会导致缺少导入
如果您遇到任何问题,请在此处查看Livy日志:
/var/log/livy/livy-livy-server.out
以及Hadoop资源管理器UI中显示的日志,一旦您通过隧道进入EMR主节点并设置了web浏览器代理,您就可以从EMR控制台中的链接访问这些日志。
该解决方案的一个关键方面是,由于这里提到的问题,当通过文件、罐、pyFiles或档案参数提供时,Livy无法从本地主节点上传文件:https://issues.apache.org/jira/browse/LIVY-222
因此,我能够通过引用通过利用EMRFS上传到S3的文件来解决这个问题。此外,对于virtualenv(如果您使用的是PySpark),使用--copies参数非常重要,否则您将得到无法从HDFS使用的符号链接。
这里还报告了使用虚拟环境的问题:https://issues.apache.org/jira/browse/SPARK-13587与PySpark相关联(可能不适用于您),所以我需要通过添加额外的参数来解决它们。这里也提到其中的一些:https://community.hortonworks.com/articles/104947/using-virtualenv-with-pyspark.html
无论如何,由于Livy上传本地文件的问题,直到我通过EMRFS引用S3中的文件来解决这个问题,Livy才会失败,因为它无法将文件上传到暂存目录。此外,当我尝试在HDFS中提供绝对路径而不是使用S3时,因为HDFS资源属于hadoop用户,而不是livy用户,livy无法访问它们并将其复制到作业执行的暂存目录中。因此,通过EMRFS引用来自S3的文件是必要的。
代码: 上传jar时出现以下异常 上传E:\livy\u old。jar到Spark上下文。。。线程“main”java中出现异常。util。同时发生的ExecutionException:java。木卫一。IOException:请求错误:“请求失败:无法将本地路径/root/.livy sessions/61a5e39c-d199-4bb8-967b-960b4e3e9ee3/livy_old
我用EMR和livy一起,但是livy杀死了一些会话,有没有什么方法可以等待其他任务完成而不是杀死那些会话?谢谢, 纱线诊断应用程序应用程序_1556020828433_0008在172.18.29.18被用户livy杀死
我第一次接触JSF和JSF标记。xhtml不工作。我的网络。xml文件包含以下代码 我faces.config文件里的代码是 我已经尝试了很多选项,比如将URL映射更改为/faces/*和在Web INF/Lib中包含JAR,但没有用。。。正在寻求帮助。。。。谢谢
我对Spark非常陌生,我正在遵循此文档通过Livy提交Spark jobshttps://docs.microsoft.com/en-us/azure/hdinsight/spark/apache-spark-livy-rest-interface 这是我的命令: 文件test4sparkhaha.jar是一个超级简单的Java应用程序,它只包含一个类,只有一个打印“哈哈哈”的主方法,没有别的.
我有一个for循环,在这个循环中,我调用db来获取学生的一些值。现在for loop需要很多时间。所以我想用未来对象的执行器服务来代替它。在函数开始时,我使用executor调用db。submit()方法。我只是不确定如何找到未来返回的对象是针对那个特定的学生的,我可以使用这些对象进行进一步的步骤。请查找下面的代码 下面的函数是从for循环调用的,自每个学生调用该函数以来,总的来说需要花费大量时间
我是Livy的新手,正如官方所说,我建造了Livy。命令如下: 然后我得到如下错误: [错误]插件组织。阿帕奇。专家插件:maven enforcer插件:1.4.1或其依赖项之一无法解决:无法找到组织。阿帕奇。专家插件:maven enforcer插件:jar:1.4.1 inhttp://repo.maven.apache.org/maven2已缓存在本地存储库中,在经过central的更新间