apache束流管道

kzmpq1sx  于 2021-05-18  发布在  Spark
关注(0)|答案(1)|浏览(465)

我在这里尝试了apachebeam(使用pythonsdk),所以我创建了一个简单的管道,并尝试将其部署到spark集群上。

from apache_beam.options.pipeline_options import PipelineOptions
import apache_beam as beam

op = PipelineOptions([
        "--runner=DirectRunner"
    ]
)

with beam.Pipeline(options=op) as p:
    p | beam.Create([1, 2, 3]) | beam.Map(lambda x: x+1) | beam.Map(print)

此管道与directrunner配合良好。因此,在spark上部署相同的代码(因为可移植性是beam中的一个关键概念)。。。
首先我编辑了 PipelineOptions 如前所述:

op = PipelineOptions([
        "--runner=PortableRunner",
        "--job_endpoint=localhost:8099",
        "--environment_type=LOOPBACK"
    ]
)
``` `job_endpoint` 是指向我使用以下命令运行的beam spark作业服务器的docker容器的url:

docker run --net=host apache/beam_spark_job_server:latest --spark-master-url=spark://SPARK_URL:SPARK_PORT

这应该可以很好地工作,但由于以下错误,spark上的作业失败:

20/10/31 14:35:58 ERROR TransportRequestHandler: Error while invoking RpcHandler#receive() for one-way message.

java.io.InvalidClassException: org.apache.spark.deploy.ApplicationDescription; local class incompatible: stream classdesc serialVersionUID = 6543101073799644159, local class serialVersionUID = 1574364215946805297

另外,我在 `beam_spark_job_server` 日志:

WARN org.apache.beam.runners.spark.translation.SparkContextFactory: Creating a new Spark Context.

你知道问题出在哪里吗?有没有其他方法可以在spark上运行python beam管道而不经过容器化服务?
j91ykkif

j91ykkif1#

这可能是由于作业服务器中包含的spark客户端版本与提交作业的spark版本之间的版本不匹配造成的。

相关问题