微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Flink 日常问题总结

目录@H_502_2@

1、Hadoop相关

2、启动时出现missing parameter type错误

3、处理Protobuf对象

 5、static关键字导致加载config为空问题

6、序列化异常


1、Hadoop相关

javax.xml.parsers.FactoryConfigurationError: Provider for class javax.xml.parsers.DocumentBuilderFactory cannot be created
java.lang.RuntimeException: Provider for class javax.xml.parsers.DocumentBuilderFactory cannot be created

出现这个异常,原因在于xml-apis包与dom4j包冲突,排除项目中所有xml-apis

<dependency>
    <groupId>com.yidian.data.push.keep</groupId>
    <artifactId>planner-core</artifactId>
    <exclusions>
        <exclusion>
            <artifactId>xml-apis</artifactId>
            <groupId>xml-apis</groupId>
        </exclusion>
    </exclusions>
</dependency>

2、启动时出现missing parameter type错误

检查 StreamExecutionEnvironment import是否正确

// java 的头是
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment
// scala的头是:
import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment
import org.apache.flink.streaming.api.scala.createType@R_163_4045@ion  // scala需要引入

3、处理Protobuf对象

不同opeartor之间交换的数据包含Protobuf对象,需要注册,具体可参照Flink 官方文档 Data Types & Serialization
引入

<dependency>
    <groupId>com.twitter</groupId>
    <artifactId>chill-protobuf</artifactId>
    <version>0.7.6</version>
</dependency>

通过StreamExecutionEnvironment对象显式注册pb类

import com.twitter.chill.protobuf.ProtobufSerializer
 
 
env.registerTypeWithKryoSerializer(classOf[StrategyInterface], classOf[ProtobufSerializer])
env.registerTypeWithKryoSerializer(classOf[PoolElement], classOf[ProtobufSerializer])

4、Flink-kafka Producer问题

认Partitioner,如无特殊指定,认使用 FlinkFixedPartitioner。

 问题:在Flink并行度小于kafka topic分区数时,该Partitioner会引发“只能写入部分分区”的问题。

 5、static关键字导致加载config为空问题

在分布式程序中,对象比如配置文件Config,不要用static做修饰,因为static关键字在类没有创建完成就能获取到Config对象,导致在加载Config的时候为空,举例如下:

public class HBaseSink extends RichSinkFunction<Pair<String, Optional<XX>>> {
       private static final Logger logger = LoggerFactory.getLogger(HBaseSink.class);
       // static Config config; 如果在程序中设置HBaseSink的并行度>1,config如果用static修饰,能获取到config对象,但是内容为空;
       Config config;
 }

6、序列化异常

不要用类似 ImmutableList 这类不可改变的数据结构作为算子间的传输对象,会报序列化异常

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐