目录: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模式才能看到控制台打印):

在Spark上运行apache beam_spark

如何定义存储级别

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已被改变

在Spark上运行apache beam_maven_02