2016-05-05 3 views
0

У меня есть некоторые интеграционные тесты, в которых используется HDFS с проверкой подлинности Kerberos. Когда я запускаю их, я получаю это исключение:Java - Не удалось указать имя основного сервера Kerberos

java.io.IOException: Failed on local exception: java.io.IOException: java.lang.IllegalArgumentException: Failed to specify server's Kerberos principal name; Host Details : local host is: "Serbans-MacBook-Pro.local/1.2.3.4"; destination host is: "10.0.3.33":8020; 
    at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:772) 
    at org.apache.hadoop.ipc.Client.call(Client.java:1472) 
    at org.apache.hadoop.ipc.Client.call(Client.java:1399) 
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:232) 
    at com.sun.proxy.$Proxy12.getFileInfo(Unknown Source) 

Я считаю, что все настроено правильно:

System.setProperty("java.security.krb5.realm", "..."); 
     System.setProperty("java.security.krb5.kdc", "..."); 

     Configuration conf = new Configuration(); 
     conf.set("fs.defaultFS", "hdfs://10.0.3.33:8020"); 
     conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem"); 
     conf.set("hadoop.security.authentication", "Kerberos"); 
     UserGroupInformation.setConfiguration(conf); 
     UserGroupInformation.loginUserFromKeytab("[email protected]", "/Users/user/user.keytab"); 

Как вы считаете, проблема? На моем хосте (10.0.3.33) у меня правильно настроены параметры core-site.xml и hdfs-site.xml. Но я не убегаю от этого хоста, как следует из исключения.

Любые идеи, что делать, чтобы иметь возможность запускать тесты с любого хоста?

Спасибо, Serban

+1

Kerberos - это уровень безопасности ... поэтому он немного параноик во многих вещах. Во-первых, для этого требуются имена хостов, а не IP-адреса. И он также выполняет обратную проверку DNS, чтобы вы указывали * имена канонических * хостов. В конце концов, если ваши хосты Hadoop не находятся в DNS или нет под каноническими именами DNS, вы должны заполнить пробелы в локальном '/ etc/hosts' (или, что бы то ни было, путь к iSOD) и обновить Hadoop' *** - site.xml' conf соответственно. –

ответ

0

Если вы используете старую версию Hadoop в менее чем 2.6.2, шаблон по умолчанию свойство не доступно в HDFS-site.xml файл, то вам необходимо указать шаблон свойство вручную.

config.set("dfs.namenode.kerberos.principal.pattern", "hdfs/*@BDBIZVIZ.COM");