莺时

东边日出西边雨,道是无晴却有晴

Open Source, Open Mind,
Open Sight, Open Future!
  menu
18 文章
3692 浏览
0 当前访客
ღゝ◡╹)ノ❤️

SparkHive任务运行模式从yarn-client到yarn-cluster模式的迁移

SparkHive任务运行模式从yarn-client到yarn-cluster模式的迁移

本来这东西吧,只不过是换了个运行模式而已,按理来说应该只是启动的时候修改一下模式而已,代码又不需要变。但是呢,并不是这么简单,里面的坑多的是,一个一个的,不带重样的。接下来一个个解决。

1. Lib包,File does not exist

1File does not exist: hdfs://cluster/user/hadoop/.sparkStaging/application_1559620621791_0002/__spark_libs_......

以cluster的模式启动的时候会将spark所使用到的自身的jar包上传到集群上,和spark-submit中的jars类似。按理来说这东西都是自动上传的,但是为啥提示不存在呢。sparkconf前面出现了其他的代码,sparkconf的创建应该在代码最前面(我不知道这是什么道理,但是觉得好像没啥影响)。我之前在sparkconf创建之前写了一段控制代码,控制程序是否可以启动。

2. 连接不上hive,或者提示hive表不存在。

spark的jar包和配置在集群上都有了,hadoop的配置文件本来yarn集群就知道,但是呢,hive的配置文件集群不知道呀。以Standalone模式和yarn-client模式启动的时候hive的配置文件在spark 的配置文件目录中做了软连接,所以能够找到。
解决方案:加入files配置,将文件上传到集群环境。

1spark-submit --class com.KafkaToHiveStreaming --files /data/bin/hive-2.3.4/conf/hive-site.xml jars/SparkTasks.jar

3. SQLException:Public Key Retrieval is not allowed

集群环境上,driver的运行节点就不确定了,所以会出现某些机器连接mysql8 的时候出现这个异常。

1jdbc://........&AllowPublicKeyRetrieval=True

4. Access denied for user 'hive'@'xxxx' (using password: YES)

也是因为driver运行节点不确定导致的连接数据库的权限问题,大概率是无权限连接数据。给集群机器赋权限。

5. FileSystem is close(是我瞎)

spark streaming(消费kafka)吧,这个停止是个问题,如何从外部发送信号给spark程序,如果强制中断可能会出现消费重复的问题,有点尴尬,得优雅的停止。
有两种方案比较流行:

  1. 一个是启动一个端口监听:接收到请求后调用stop(true,true)。(这有一个问题,如果streaming停止了,但是监听不会停止,这就很蛋疼了, 还得需要一个请求去关闭监听,SparkSubmit才会退出。)
  2. 定时读取hdfs文件,根据文件判断是否停止,调用stop(true,true)。

这里有个比较推荐git项目里面写清楚了如何调用

 1/**
 2
 3     * 判断文件是否存在
 4
 5     * @param master hdfs地址
 6     * @param pathStr 文件路径
 7     * @return
 8     * @throws Exception
 9     */
10    private static boolean isExistsMarkFile(String master,String pathStr) throws Exception {
11        Path path =new Path(pathStr);
12        FileSystem fs = FileSystem.get(new URI(master), new Configuration());
13        boolean flag = fs.exists(path);
14        return flag;
15    }

重点来了,不要在检查完文件的时候手贱的关闭FileSystem。不能够关闭fs,因为此时的fs和streaming中与hdfs交互的连接属于同一个连接,如果关闭的话,会导致streaming中关于hdfs的操作抛异常,FileSystem is close


标题:SparkHive任务运行模式从yarn-client到yarn-cluster模式的迁移
作者:ludengke95
地址:http://xvhi.ludengke95.xyz/articles/2019/06/13/1560394610006.html