0,遇到的问题
1)日志显示跟flink的冲突,需要排除
<dependency>
<groupId>org.apache.iotdb</groupId>
<artifactId>flink-iotdb-connector</artifactId>
<version>0.11.0</version>
<exclusions>
<exclusion>
<artifactId>logback-classic</artifactId>
<groupId>ch.qos.logback</groupId>
</exclusion>
</exclusions>
</dependency>
2) 在flink任务重启的时候会报错:(这里是验证flink并行度 1跟大于1的时候)
存储组已经存在。
需要将 77行要给try-catch起来,修改源码再编译,不过官方已经解决发布了
3)源码问题
大家可以测试,会报错
错误地点在tablet类
目前官方已经修改。
1,安装iotdb
1)下载zip包
https://iotdb.apache.org/Download/
unzip 解压
启动:
2,Flink代码写入iotdb
import com.google.common.collect.Lists;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.source.SourceFunction;
import org.apache.iotdb.flink.DefaultIoTSerializationSchema;
import org.apache.iotdb.flink.IoTDBOptions;
import org.apache.iotdb.flink.IoTDBSink;
import org.apache.iotdb.flink.IoTSerializationSchema;
import java.util.*;
/**
* @program: flink-neiwang-dev
* @description: iotdb测试
* @author: Mr.Wang
* @create: 2020-12-01 15:38
**/
public class IoTDBSinkInsertTest {
public static void main(String[] args) throws Exception {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
IoTDBOptions options = new IoTDBOptions();
options.setHost("192.168.6.36");
options.setPort(6667);
options.setUser("root");
options.setPassword("root");
options.setStorageGroup("root.test1");
options.setTimeseriesOptionList(
Lists.newArrayList(
new IoTDBOptions.TimeseriesOption("root.test1.D01.aaa"),
new IoTDBOptions.TimeseriesOption("root.test1.D01.bbb"),
new IoTDBOptions.TimeseriesOption("root.test1.D01.ccc")
)
);
IoTSerializationSchema serializationSchema = new DefaultIoTSerializationSchema();
IoTDBSink ioTDBSink = new IoTDBSink(options, serializationSchema)
// enable batching
.withBatchSize(10) ;
env.addSource(new SensorSource())
.name("sensor-source")
.setParallelism(1)
.addSink(ioTDBSink)
.name("iotdb-sink")
.setParallelism(1);
env.execute("iotdb-flink-example");
}
private static class SensorSource implements SourceFunction< Map<String, Object>> {
private static final long serialVersionUID = 1L;
private volatile boolean isRunning = true;
private int counter = 0;
/**
* @Description:
* @Param:
* @return:
* @Author: intsmaze
* @Date: 2019/1/5
*/
@Override
public void run(SourceFunction.SourceContext< Map<String, Object>> ctx) throws Exception {
Random random = new Random();
String[] strArray={"aaa","bbb","ccc"};
while (true){
Thread.sleep(5000);
int index = random.nextInt(3);
Map<String, Object> tuple = new HashMap();
tuple.put("device", "root.test1.D01");
long timeMillis = System.currentTimeMillis();
tuple.put("timestamp", String.valueOf(timeMillis));
tuple.put("measurements", "aa,bb,cc");
tuple.put("types", "TEXT,TEXT,TEXT");
tuple.put("values", "1,2,