赞
踩
不要去设置什么环境变量 。网上的答案大多数都是对官方文档的误解
只需要运行
export HADOOP_CLASSPATH=`hadoop classpath`
即可
其实hadoop classpath 命令就是把有关于hadoop的环境全部加载出来
连不上8032端口 flink on yarn 只能在 master 上运行 才能找到8032 这个配置项我在配置文件中没找到 大佬找到了可以解答一下
运行命令之后会在最后一行提示 暂时没有找到常驻和固定ip的方法
conf/flink-conf.yaml,大约在192行添加
classloader.check-leaked-classloader: false
因为yarn强制检查虚拟内存是否符合配置导致的,当我们的服务器或者虚拟机的内存达不到配置要求,可能就会报这个错误 。
修改检查虚拟内存的属性为false
- <property>
- <name>yarn.nodemanager.vmem-check-enabled</name>
- <value>false</value>
- </property>
经过排查之后发现错误原因是:
hadoop 的配置文件hdfs-xml(handoop目录下/conf当中) 在配置过程当中添加了目前不需要的变量,导致报错,这个变量的value 值就是"30s",在错误当前没有引用,而导致配置文件冲突异常。
在 hdfs-site.xml 中添加 dfs.client.datanode-restart.timeout 30
尽量搞个root权限吧。很多 操作都需要超级用户或者*.* 级别
类加载顺序问题,flink默认是child-first,在flink的flink-conf.yaml文件中添加classloader.resolve-order: parent-first 改成parent-first,重启集群即可
原因: 缺少jar包
flink cdc 依赖下载地址:
Welcome to Flink CDC — Flink CDC 2.0.0 documentation
[ERROR] Could not execute SQL statement. Reason: java.net.ConnectException: Connection refused
看日志 flink-root-sql-client-xxxx.log
Connection refused: localhost/127.0.0.1:8081
flink-conf.yaml里没有修改成真实的flink地址 修改一下
rest.address: xxxxxxx
rest.bind-port: 8173
具体端口需要自行确认 会输出在启动flink-session 之后屏幕输出里
应该是checkpoint的问题 ,但是无法确认,配置了一些参数之后成功。按理说这些参数不会影响。但是总得来说生效了
- //每120秒触发一次 checkpoint
- env.enableCheckpointing(120000);
- //Flink 框架内保证 EXACTLY_ONCE
- env.getCheckpointConfig().setCheckpointMode(CheckpointMode.EXACTLY_ONCE);
- //两个checkpoint之间最少有120s间隔
- env.getCheckpointConfig().setMinPauseBetweenCheckpoints(120000);
- //checkpoint 超时时间 600s
- env.getCheckpointConfig().setCheckpointTimeout(600000);
- //同时只有一个checkpoint运行
- env.getCheckpointConfig().setMaxConcurrentCheckpoints(1);
- //取消作业时保留checkpoint,因为有时候任务savepoint可能不可用,这时我们就可以直接从checkpoint重启任务
- env.getCheckpointConfig()。enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
- //checkpoint失败时task不失败,因为可能会有偶尔的HDFS写入失败。但是这并不会影响我们任务的运行
- //偶尔的由于网络抖动 checkpoint 失败是可以接受的,但是如果经常失败就需要定位具体的问题
- env.getCheckpointConfig().setFailOnCheckpointingErrors(false);
-
- DataStream<Row> userStream = env

引起心跳超时有可能是yarn压力比较大引起的。在conf/flink-conf.yaml将这个值调大一点,
#Timeout for requesting and receiving heartbeat for both sender and receiver sides. heartbeat.timeout: 180000
yarn 资源不足了
lib下缺少以上几个jar包 放进去即可
原因:无法绑定端口,可以将rest.bind-port配置为一个范围,比如10000-20000
比如:IF(5>3,'12321',NULL),这时会报错可以写成IF(5>3,'12321',cast(NULL as STRING))
解决:缺少flink-connector-jdbc_xxx.jar,下载放置到lib下
解决:大致意思是,lambda写法无法提供足够的类型信息,无法推断出正确的类型,建议要么改成匿名类写法,要么用type information提供明细的类型信息。我们可以在转换的算子之后调用returns(...)方法来显示指明要返回的数据类型信息。
比如:map((MapFunction<String, Tuple2<String, Integer>>) filterRecord -> {
return new Tuple2(filterRecord, 1);
}).returns(Types.TUPLE(Types.STRING, Types.INT))
解决:很可能是报错了,但是由于StreamExecutionEnvironment本身的重启策略是固定延迟但是不限重启次数的策略,所以错误才会一直无法报出来。可以先设置不重启策略来看下。env.setRestartStrategy(RestartStrategies.noRestart());
现象:No factory implements 'org.apache.flink.table.delegation.ExecutorFactory'
解决:除了引入:
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-table-api-java-bridge_2.11</artifactId>
<version>${flink.version}</version>
<scope>provided</scope>
</dependency>
以外,还需要引入:
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-table-planner_2.11</artifactId>
<version>${flink.version}</version>
<scope>provided</scope>
</dependency>
将Table转化为DataStream的时候,调用了api:toDataStream或toAppendStream,这是因为sql里些了比如 count(xxx) group by 这种形成的不是append stream,所以无法转化,需要使用toChangelogStream或toRetractStream
这是一个hadoop3和flink导致的一个bug,详见:
https://issues.apache.org/jira/browse/FLINK-19916
这并不影响当前功能,所以可以先不用关注。
将hbase-protocol-shaded-2.2.2.jar
包放进lib目录下。去hbase的家目录复制一个就行
cdh应该是hbase-protocol-shaded
-2.1.0-cdh6.3.2.jar
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。