现在我有一些Spark应用程序将输出存储到HDFS.
由于我们的hadoop集群由namenode H/A组成,而spark集群在hadoop集群之外(我知道它不好)我需要为应用程序指定HDFS URI,以便它可以访问HDFS.
但它无法识别名称服务,因此我只能给出namenode的URI之一,如果失败,请修改配置文件并重试.
访问Zookeeper以显示活动似乎非常烦人,所以我想避免.
你能建议任何替代方案吗?
我的代码无法使用JDK 7编译,但成功使用JDK 8进行编译.
要抽象实际代码:
interface A {
...
}
class B implements A {
...
}
public void AAA(List<A> list) {...}
AAA(Collections.singletonList(new B()));
Run Code Online (Sandbox Code Playgroud)
Collections.singletonList定义为
public static <T> List<T> singletonList(T o) {
return new SingletonList<>(o);
}
Run Code Online (Sandbox Code Playgroud)
因此,据我所知,基于泛型,T将被推断为B,因此Collections.singletonList(new B())将是List,由于Java泛型是不变的,因此无法将其分配给List.
但是使用JDK 8,T被推断为A并且编译成功.
我想知道T是如何推断到A的,因为T型有两个变量:A和B.
有优先顺序吗?或者编译器是否找到共同的祖先类?
附上官方文件更感谢!
提前致谢!
PS1.JDK 7的版本是Oracle 1.7.0_79,JDK 8的版本是Oracle 1.8.0_66.
PS2.这是实际代码的链接: