在Spark上运行apache beam

目录:apache beam 个人使用经验总结目录和入门指导(Java)

为了方便,以下面这个名字替换的程序做简单例子:

/**
 * The ReplaceMyName
 * 把Create数组里的myName替换成xxx
 * @since 2019/12/17
 */
public class OutpuMyName {
    public static void main(String[] args) {
        MyTestOption myTestOption = PipelineOptionsFactory
                // 读入args数组
                .fromArgs(args)
                // withValidation指需要对args里的所有参数做校验,如果有不存在Option里的参数键值就会抛异常
                .withValidation()
                // 通过as进行最后的生成操作
                .as(MyTestOption.class);

        Pipeline pipeline = Pipeline.create(myTestOption);
        pipeline.apply(Create.of("lsx ah", "lsx sf", "lsx is me"))
                .apply(ParDo.of(new ReplaceMyNameFn()))
                .apply(ParDo.of(new PrintStrFn()));

        pipeline.run().waitUntilFinish();
    }

    /**
     * 替换名字的转换过程
     */
    static class ReplaceMyNameFn extends DoFn<String, String> {
        @ProcessElement
        public void processElement(ProcessContext context) {
            String inputElement = context.element();

            // 从MytestOption中获取需要的元素
            MyTestOption myTestOption = context.getPipelineOptions().as(MyTestOption.class);
            String myName = myTestOption.getMyName();

            // 替换字符串
            String outputElement = inputElement.replace(myName, "xxx");
            context.output(outputElement);
        }
    }

该例子会将Create.of输入的字符串里 进行替换, 把输入参数里的名字替换成xxx。

打包

在spark上提交时需要打成jar包, 打包的话pom文件可以参考如下,注意spark-runner包必须添加:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>lsx.beam</groupId>
    <artifactId>beam-demo</artifactId>
    <version>0.0.1</version>

    <properties>
        <beam.version>2.13.0</beam.version>
    </properties>

    <packaging>jar</packaging>

    <dependencies>

        <dependency>
            <groupId>org.apache.beam</groupId>
            <artifactId>beam-runners-direct-java</artifactId>
            <version>${beam.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.beam</groupId>
            <artifactId>beam-runners-spark</artifactId>
            <version>${beam.version}</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.1</version>
                <configuration>
                    <transformers>
                        <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                        <!--<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"/>-->
                    </transformers>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

打成jar包后, 就可以用spark-launcher或者spark-submit客户端进行提交了。

提交

这里我用spark-submit客户部脚本进行提交,命令行如下:

/opt/All_Client/Spark2x/spark/bin/spark-submit --class lsx.beam.demo.OutpuMyName --master local  /opt/application_test/beam-demo-0.0.1.jar --runner=SparkRunner --myName=lsx

–class 后面跟的是你需要执行的main主类
master我这里选择local模式, 否则无法在控制台看到system.out的输出(如果不用local模式,system.out可能输出在任何节点,以至于无法在client端看到)。
在jar包路径之后, 跟的就是beam的args输入参数了。 注意如果args要提供给option进行初始化,必须为–key=value的形式。

执行后可看到 如下结果(只有local模式才能看到控制台打印):
在这里插入图片描述

如何定义存储级别

beam-sparkRunner中, 默认存储级别为MEMORY_ONLY(即始终用内存存数据), 如果需要修改存储级别,需要让你的pipelineOption继承自SparkContextOptions

public interface MyTestOption extends SparkContextOptions

接着就可以通过setStorageLevel进行存储级别设置

myTestOption.setStorageLevel("MEMORY_AND_DISK_SER");

如何设置提交应用名

以yarn模式提交,并且当执行pipeline.run()时, 就会往yarn上提交任务。
如果希望修改提交时的应用名,则可以让option继承SparkContextOptions或者ApplicationNameOptions
然后执行

myTestOption.setAppName("beam_test_application");

可看到yarnUI或者sparkUI上看到的appName已被改变
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Apache Beam 是一个分布式数据处理框架,可以在多个执行引擎上运行,例如 Apache Flink、Apache Spark 和 Google Cloud Dataflow。在Linux上编译安装Apache Beam,可以按照以下步骤进行操作: 1. 安装Java JDK 和 Maven。 在Linux上安装Java JDK 和 Maven,可以使用以下命令: ``` sudo apt-get update sudo apt-get install default-jdk maven ``` 2. 下载并解压Apache Beam源代码。 可以从Apache Beam的官方网站下载源代码,也可以使用以下命令下载并解压: ``` wget https://archive.apache.org/dist/beam/2.29.0/apache-beam-2.29.0-src.tar.gz tar xvzf apache-beam-2.29.0-src.tar.gz ``` 3. 编译和打包Apache Beam。 进入Apache Beam源代码的根目录,执行以下命令: ``` cd apache-beam-2.29.0-src mvn clean install -DskipTests ``` 这个过程可能需要一些时间,取决于您的机器配置和网络速度。完成后,将在`./sdks/java/core/target`目录中生成一个名为`beam-sdks-java-core-2.29.0.jar`的JAR文件。 4. 验证Apache Beam的安装。 您可以编写一个简单的Apache Beam程序并运行它来验证安装是否成功。例如,以下程序创建一个简单的Pipeline,在本地运行并输出"Hello, Beam!": ```java import org.apache.beam.sdk.Pipeline; import org.apache.beam.sdk.io.TextIO; import org.apache.beam.sdk.values.PCollection; public class HelloWorld { public static void main(String[] args) { Pipeline p = Pipeline.create(); PCollection<String> lines = p.apply(TextIO.read().from("/path/to/input.txt")); lines.apply(TextIO.write().to("/path/to/output.txt").withSuffix(".txt")); p.run().waitUntilFinish(); System.out.println("Hello, Beam!"); } } ``` 将代码保存为`HelloWorld.java`文件,使用以下命令编译和运行: ``` javac -cp ./sdks/java/core/target/beam-sdks-java-core-2.29.0.jar HelloWorld.java java -cp .:./sdks/java/core/target/beam-sdks-java-core-2.29.0.jar HelloWorld ``` 如果一切正常,您应该看到输出"Hello, Beam!"。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值