Flink问题从cassandra获取数据以用作数据集

时间:2017-05-11 17:15:35

标签: java cassandra apache-flink

我正在尝试从cassandra表中提取数据以用作数据集,但我遇到了两个问题。

第一个是cassandraInputFormat只返回一个元组,我宁愿没有一个元组12,只是使用一个pojo来定义它预期的内容。所以我不知道这是否只是我必须接受的东西,如果有一种方法可以使用pojo而不是使用cassandraConnector(https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/connectors/cassandra.html),或者如果使用cassandraInputFormat不是最好的方法去获取数据。

另一个问题是即使我从cassandraInputFormat获取的数据(无论是否为元组)我不知道将其设置为数据源的方式。对于文件,csv和HDFS,有很多方法(https://ci.apache.org/projects/flink/flink-docs-master/api/java/org/apache/flink/api/java/ExecutionEnvironment.html#ExecutionEnvironment--)但没有明确用于cassandra的方法。所以我的猜测是我需要使用cassandraInputFormat来提取数据并使用类似.fromElements()或.fromCollecton()的方法,以及正确的方法是什么。

提前感谢您的帮助!

更新:

这“有效”(感谢Chesnay Schepler的帮助):

DataSet<Tuple2<String, String>> testSet = 
exEnv.createInput(cassandraInputFormat, TypeInformation.of(newTypeHint<Tuple2<String, String>>(){})); 

但是这个错误现在正在发生......

Exception in thread "main" org.apache.flink.optimizer.CompilerException: 
Error translating node 'Data Source "at execute(CodeBatchProcessorImpl.java:85) 
(org.apache.flink.batch.connectors.cassandra.CassandraInputFormat)" : NONE 
[[ GlobalProperties [partitioning=RANDOM_PARTITIONED] ]] [[ LocalProperties [ordering=null, grouped=null, unique=null] ]]':
Could not write the user code wrapper class org.apache.flink.api.common.operators.util.UserCodeObjectWrapper :
java.io.NotSerializableException: flink.streaming.code.CodeBatchProcessorImpl

进一步下去包括:

Caused by: java.io.NotSerializableException: org.apache.flink.api.java.LocalEnvironment

更新2:

必须将环境设置为瞬态。现在修复了!

1 个答案:

答案 0 :(得分:2)

您可以通过调用ExecutionEnvironment#createInput(InputFormat)来使用CassandraInputFormat和所有InputFormats。

目前没有选项可以直接将元素作为POJO读取。最简单的解决方法是在接收器之后添加一个MapFunction,将元组转换为您想要的POJO。