具有spark-submit的Bluemix Apache Spark服务。将数据上传到对象存储

时间:2016-04-13 13:18:42

标签: apache-spark ibm-cloud

我一直在使用spark-submit在Bluemix spark服务(Word Count,SparkPi)上运行一些简单的工作。两者都运行良好。我使用一个小文本文件通过spark-submit.sh测试Word Count(使用--file上传文件)。但是,当我使用大文件时,作业没有运行。我查看了日志,看到了消息" 413请求实体太大"。

我认为这意味着该文件太大而无法提交。所以我有3个问题。

  1. 我是否可以通过spark-submit增加允许上传文件大小的限制?

  2. 我可以将我的应用程序链接到现有的swift对象存储,只需将我的大文件上传到那里吗?

  3. 在问题2中,我做了一些初步研究,似乎我需要在访问对象存储的请求中添加凭据。还有一个问题。

    1. 有没有办法在不改变应用程序源代码的情况下合并这些凭据? (比如将凭证添加到像vcap.json这样的spark-submit中)?
    2. 我感谢你的时间。我不会问我是否不需要。

1 个答案:

答案 0 :(得分:1)

re:" 413请求实体太大"

Bluemix Apache Spark服务只是一种计算服务,这意味着您的数据应该驻留在存储服务中,例如Bluemix Object Storage服务,Cloudant,S3,无论什么都有意义。然后,您的spark-submit程序将连接到该存储服务,然后您创建RDD并转到城镇。在您的情况下,您尝试通过--files spark-submit参数传递要运行分析的数据,并且该服务抱怨您做错了; - )spark-submit将允许您传递您的程序需要运行的spark程序,库和一些小文件,但它会拒绝任何不可接受的大文件;目前最大尺寸约为200MB,但这可能会改变; - )

您当然可以在spark程序中编写访问对象商店帐户所需的配置;通过hadoop连接器配置设置的creds和端点配置属性,如下面的python示例所示:

def set_hadoop_config(creds):
    prefix = "fs.swift.service." + creds['name']
    hconf = sc._jsc.hadoopConfiguration()
    hconf.set(prefix + ".auth.url", creds['auth_url'] + '/v2.0/tokens')
    hconf.set(prefix + ".auth.endpoint.prefix", "endpoints")
    hconf.set(prefix + ".tenant", creds['project_id'])
    hconf.set(prefix + ".username", creds['user_id'])
    hconf.set(prefix + ".password", creds['password'])
    hconf.setInt(prefix + ".http.port", 8080)
    hconf.set(prefix + ".region", creds['region'])
    hconf.setBoolean(prefix + ".public", True)

目前,只有Analytic Notebooks通过在将对象存储服务绑定到笔记本服务实例时自动为您设置配置来帮助您。我希望将来也可以使用spark-submit; - )