public static void main(String[] args) throws Exception { 
        final ParameterTool parameterTool = ParameterTool 
                
.fromPropertiesFile(BizlogStreamWithEventTimeCleaner.class.getResourceAsStream(PROPERTIES_FILE_NAME))
 
                .mergeWith(ParameterTool.fromArgs(args)); 
        String resultTable = parameterTool.get(BIZLOG_RESULT_TABLENAME); 
        //设置窗口大小 
        Time windowSize = 
Time.milliseconds(parameterTool.getLong(BIZLOG_WINDOW_SIZE)); 
        //设置数据最大乱序时间 
        Time maxOutOfOrder = 
Time.milliseconds(parameterTool.getLong(BIZLOG_WINDOW_MAXOUTOFORDE)); 
        hdfsAuthenticate(parameterTool); 
        ... 
    } 
    private static void hdfsAuthenticate(ParameterTool parameterTool) throws 
IOException { 
        String kerberosConfFile = 
BizlogStreamWithEventTimeCleaner.class.getClassLoader().getResource("krb5.conf").getPath();
 
        System.setProperty("java.security.krb5.conf", kerberosConfFile); 
        Configuration conf = new Configuration(); 
        conf.set(HADOOP_SECURITY_AUTHENTICATION, "kerberos"); 
        //加载hadoop配置文件 
        String principal = parameterTool.get("kerberos.princpal"); 
        String keytabName = parameterTool.get("keytab.name"); 
        String keytabPath = 
BizlogStreamWithEventTimeCleaner.class.getClassLoader().getResource(keytabName).getPath();
 
        UserGroupInformation.setConfiguration(conf); 
        UserGroupInformation.loginUserFromKeytab(principal, keytabPath); 
    } 


代码如上,在idea中直接运行可以认证通过,但是打成jar包提交到集群后报错如下: 
Caused by: java.io.IOException: Login failure for 
biuri/[email protected] from keytab 
file:/data/realtime-flink.jar!/kerberos.keytab: 
javax.security.auth.login.LoginException: Unable to obtain password from user 
这个是什么原因?或者应该如何进行正确的集群认证? 



回复