2017-01-26 40 views
6

Hadoop'da oldukça yeniyim. Ancak, sunucularımdaki küme modunda, Java 7 ile Java 7'yi başarıyla ayarlayabildim. Her şey tamamen iyi çalışıyor. Hadoop işçiler üzerinde kullanıcı adımı kullanarak giriş mümkün olmayacaktır olur gibiHadoop IOException oturum açma yetkisiz

Exception in thread "main" java.io.IOException: failure to login 
    at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:824) 
    at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:761) 
    at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:634) 
    at org.apache.hadoop.hdfs.tools.GetConf.run(GetConf.java:315) 
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) 
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84) 
    at org.apache.hadoop.hdfs.tools.GetConf.main(GetConf.java:332) 
Caused by: javax.security.auth.login.LoginException: java.lang.NullPointerException: invalid null input: name 
    at com.sun.security.auth.UnixPrincipal.<init>(UnixPrincipal.java:71) 
    at com.sun.security.auth.module.UnixLoginModule.login(UnixLoginModule.java:133) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at javax.security.auth.login.LoginContext.invoke(LoginContext.java:755) 
    at javax.security.auth.login.LoginContext.access$000(LoginContext.java:195) 
    at javax.security.auth.login.LoginContext$4.run(LoginContext.java:682) 
    at javax.security.auth.login.LoginContext$4.run(LoginContext.java:680) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680) 
    at javax.security.auth.login.LoginContext.login(LoginContext.java:587) 
    at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:799) 
    at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:761) 
    at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:634) 
    at org.apache.hadoop.hdfs.tools.GetConf.run(GetConf.java:315) 
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) 
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84) 
    at org.apache.hadoop.hdfs.tools.GetConf.main(GetConf.java:332) 

    at javax.security.auth.login.LoginContext.invoke(LoginContext.java:856) 
    at javax.security.auth.login.LoginContext.access$000(LoginContext.java:195) 
    at javax.security.auth.login.LoginContext$4.run(LoginContext.java:682) 
    at javax.security.auth.login.LoginContext$4.run(LoginContext.java:680) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680) 
    at javax.security.auth.login.LoginContext.login(LoginContext.java:587) 
    at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:799) 
    ... 6 more 

görünüyor: Ben Java 8 geçmek ve DFS başlatmaya çalıştığınızda

Ama sonra, bir hata var. Diğer kaynaklardan bakmaya çalışıyorum ve çevre değişkenini HADOOP_USER_NAME ekleyerek, tüm datanode ve isimlerin tümünü silip silerek vb. Gibi rehberlerini takip ediyorum. Ancak, hiçbiri bu durumda benim için işe yaramıyor.

Bu sorunla ilgili garip olan şey, Java 7'ye geri dönmeyi denediğimde. Hadoop, benim için daha önce olduğu gibi iyi çalışıyor. Ancak, Hadoop'un her ikisi de belgelerine dayanarak uyumlu olduğundan, Java sürümleri arasındaki fark nedeniyle bir sorun olması gerektiğini düşünmüyorum. Ayrıca, güvenilir ssh zaten kümenin içinde ayarlanır. Anlaşılan sınıf com.sun.security kaynaklanır Java 8 ile bir liman işçisi kabından bir Hbase istemcisi çalıştırırken ben aynı sorunu yaşamıştır ettik

export JAVA_HOME="/scratch/dsat_server/jdk1.8.0_121" 
export HADOOP_PREFIX="/scratch/dsat_server/hadoop-2.7.3" 
export HADOOP_COMMON_LIB_NATIVE_DIR="$HADOOP_PREFIX/lib/native" 
export HADOOP_CONF_DIR="$HADOOP_PREFIX/conf" 
export HADOOP_OPTS="-Djava.net.preferIPv4Stack=truei-Djava.library.path=$HADOOP_PREFIX/lib" 
+0

Hangi işletim sistemini kullanıyorsunuz ve hangi sürüme sahipsiniz? Dürüst olmak gerekirse, yerel Java güvenlik lib'lerinde bazı problemler gibi Hadoop hatası gibi görünmüyor. – Serhiy

+0

@Serhiy Hadoop 2.7.3 ile CentOS 6.8 kullanıyorum. Java güvenlik lib'leri hakkında da bir düşüncem vardı, fakat kütüphanenin Java 8 ile uyumlu olduğuna inanıyorum. Bu nedenle, problemi nasıl çözeceğime dair hiçbir fikrim yok – Tim

+0

Sınıf yolunda '-DHADOOP_JAAS_DEBUG' değişkenini' true' olarak ayarlamayı deneyin (Hadoop başlatırken), kaynak kodundan, problemle ilgili bazı ek detaylar görebileceğiniz anlaşılıyor. Buna ek olarak, ne deneyebilirsiniz 'UserGroupInformation' başarısız olan bir yöntem yapar,' LoginContext 'oluşturmak ve' giriş 'oluşturmak için basit bir uygulama oluşturmak, kendi parçanızda sorun üzerinde daha fazla kontrol sahibi olabilirsiniz kodu. – Serhiy

cevap

3

: Aşağıda

Bilginize benim .bashrc yapılandırmaları olduğunu unix kullanıcı adını almak için bir yerel çağrı kullanan .auth.module.UnixLoginModule. Benim durumumda, docker'da haritalanmamış ve sınıf bir NullPointerException atar. Bu, başına bir dolandırıcılık hatası değildir. ,

Senin durumunda
UserGroupInformation.setLoginUser(UserGroupInformation.createRemoteUser("hduser")); 

, sunucuyu çalıştıran seçeneklerinizi böylece:

OS kullanıcı adının arama atlamak için Hadoop talimatını vermek i bütün başlatma önce aşağıdaki kod satırını ekleyin başardı Kodun enjekte edilmesi sınırlıdır.

  1. IBM JDK'yi işçiler ($ benkimim) üzerine OS kullanıcı kurulumu hata ayıklamak için yerine
  2. deneyin deneyin: Yerine iki seçenek vardır. bir şey gibi diyorsa o zaman ben aynı problem vardı ve benim jdk Currupt olduğunu öğrendim/etc/passwd kurulum
+0

Yarım gün bulamayan Spark'i hata ayıklamak için harcadım. Çok teşekkür ederim. – Azuaron

0

kontrol 'kullanıcı kimliği XXXX için isim bulamıyorum.' Bu yüzden yeni bir jdk indirdim ve yeni indirilen jdk'yi JAVA_HOME'a hadoop-env.sh dosyasında işaret ettim ve her şey şimdi sorunsuz çalışıyor.