Google cloud platform 如何使用带有DataFlowRunner的Apache Beam将数据写入Google MemoryStore(Redis)

Google cloud platform 如何使用带有DataFlowRunner的Apache Beam将数据写入Google MemoryStore(Redis),google-cloud-platform,google-cloud-dataflow,google-cloud-memorystore,Google Cloud Platform,Google Cloud Dataflow,Google Cloud Memorystore,我正在尝试从Google MemoryStore读取数据,并使用RedisIO API转换数据并写回MemoryStore。 我能够读取数据,但无法写回MemoryStore。 当我使用Dataflow DirectRunner尝试本地Redis服务器时,它正在工作。 当我使用DirectRunner尝试Google MemoryStore时,它正在工作。 但对于DataFlowRunner和MemoryStore,它不工作。(程序以0状态退出)。 MemoryStore和DataFlow作业在

我正在尝试从Google MemoryStore读取数据,并使用RedisIO API转换数据并写回MemoryStore。 我能够读取数据,但无法写回MemoryStore。 当我使用Dataflow DirectRunner尝试本地Redis服务器时,它正在工作。 当我使用DirectRunner尝试Google MemoryStore时,它正在工作。 但对于DataFlowRunner和MemoryStore,它不工作。(程序以0状态退出)。 MemoryStore和DataFlow作业在同一区域内运行(us-central1-a)

以下是我正在使用的代码:

package com.example;
import org.apache.beam.sdk.Pipeline;
import org.apache.beam.sdk.io.redis.RedisIO;
import org.apache.beam.sdk.options.PipelineOptions;
import org.apache.beam.sdk.options.PipelineOptionsFactory;
import org.apache.beam.sdk.transforms.MapElements;
import org.apache.beam.sdk.transforms.SimpleFunction;
import org.apache.beam.sdk.values.KV;




public class RedisReadRedisWrite {

/** A SimpleFunction that converts a Word and Count into a printable string. */
public static class FormatAsTextFn extends SimpleFunction<KV<String, String>, KV<String, String>> {

    private static final long serialVersionUID = 1L;

    @Override
    public KV<String, String> apply(KV<String, String> input) {
        System.out.println("Original: " + input.getKey() + " " + input.getValue());
        System.out.println("Modified: " + "X_" + input.getKey() + "X_" + input.getValue());
        return KV.of("X_" + input.getKey(), "X_" + input.getValue().substring(3));
    }
}

public interface WordCountOptions extends PipelineOptions {

}

static void runWordCount(WordCountOptions options) {
    Pipeline p = Pipeline.create(options);

    p.apply(RedisIO.read().withEndpoint("10.0.0.12", 6379).withKeyPattern("FOO*"))
            .apply(MapElements.via(new FormatAsTextFn())).apply(RedisIO.write().withEndpoint("10.0.0.12", 6379));

    p.run().waitUntilFinish();
}

public static void main(String[] args) {
    WordCountOptions options = PipelineOptionsFactory.fromArgs(args).withValidation().as(WordCountOptions.class);

    runWordCount(options);
}
}
package.com.example;
导入org.apache.beam.sdk.Pipeline;
导入org.apache.beam.sdk.io.redis.RedisIO;
导入org.apache.beam.sdk.options.PipelineOptions;
导入org.apache.beam.sdk.options.pipelineoptions工厂;
导入org.apache.beam.sdk.transforms.MapElements;
导入org.apache.beam.sdk.transforms.SimpleFunction;
导入org.apache.beam.sdk.values.KV;
公共类重新读写{
/**将字和计数转换为可打印字符串的SimpleFunction*/
公共静态类格式ASTEXTFN扩展了SimpleFunction{
私有静态最终长serialVersionUID=1L;
@凌驾
公共KV应用(KV输入){
System.out.println(“原始:”+input.getKey()+“”+input.getValue());
System.out.println(“修改:“+”X_“+input.getKey()+”X_“+input.getValue());
返回KV.of(“X_u”+输入.getKey(),“X_u”+输入.getValue().子字符串(3));
}
}
公共接口WordCountOptions扩展了PipelineOptions{
}
静态无效runWordCount(WordCountOptions选项){
Pipeline p=Pipeline.create(选项);
p、 应用(RedisIO.read().withEndpoint(“10.0.0.12”,6379)。withKeyPattern(“FOO*”)
.apply(maplements.via(新格式astextfn()).apply(RedisIO.write().withEndpoint(“10.0.0.12”,6379));
p、 run().waitUntilFinish();
}
公共静态void main(字符串[]args){
WordCountOptions=PipelineOptionFactory.fromArgs(args).withValidation().as(WordCountOptions.class);
runWordCount(选项);
}
}

您能为您的问题添加更多信息吗?例如,代码片段、完整日志或其他内容。乍一看,我唯一能想到的是一些权限没有被添加,但如果没有更多的信息,我无法得出任何结论。