2013-05-27 20 views
9

निर्दिष्ट मैं खुशी से HDFS से कनेक्ट कर रहा हूँ और मेरे घर निर्देशिका लिस्टिंग:HDFS - उपयोगकर्ता

Configuration conf = new Configuration(); 
conf.set("fs.defaultFS", "hdfs://hadoop:8020"); 
conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem"); 
FileSystem fs = FileSystem.get(conf); 
RemoteIterator<LocatedFileStatus> ri = fs.listFiles(fs.getHomeDirectory(), false); 
while (ri.hasNext()) { 
    LocatedFileStatus lfs = ri.next(); 
    log.debug(lfs.getPath().toString()); 
} 
fs.close(); 

क्या मैं हालांकि किसी विशिष्ट उपयोगकर्ता (नहीं whois उपयोगकर्ता के रूप में कनेक्ट कर रहा है अब करना चाहते कर रहा हूँ)। क्या कोई जानता है कि आप किस उपयोगकर्ता को कनेक्ट करते हैं उसे निर्दिष्ट करते हैं?

+0

हाय मैं एक दूरस्थ HDFS उदाहरण से कनेक्ट करने के लिए इस कोड की कोशिश की, लेकिन मैं सूत्र में अपवाद मिल "मुख्य" java.lang.UnsupportedOperationException: DistributedFileSystem FileSystem कार्यान्वयन – AbtPst

+0

द्वारा कार्यान्वित नहीं तुम ऐसा कैसे हल करने के लिए पता है? – AbtPst

+0

मैंने 2 साल पहले इस प्रश्न से पूछा था। तब से हाडोप एक लंबा सफर तय कर चुका है। जहां तक ​​सटीक कार्यान्वयन होते हैं, चीजें काफी अलग तरीके से संभवतः पूरी तरह से की जाती हैं। – Kong

उत्तर

22

जैसे ही मुझे लगता है कि यह UserGroupInformation कक्षा और PrivilegedAction या PrivilegedExceptionAction के माध्यम से किया जाता है। रिमोट एचडीएफएस 'जैसे' अलग उपयोगकर्ता ('इस मामले में' hbase ') से कनेक्ट करने के लिए नमूना कोड यहां दिया गया है। उम्मीद है कि यह आपके काम को हल करेगा। यदि आपको प्रमाणीकरण के साथ पूर्ण योजना की आवश्यकता है तो आपको उपयोगकर्ता हैंडलिंग में सुधार करने की आवश्यकता है। लेकिन सरल प्रमाणीकरण योजना (वास्तव में कोई प्रमाणीकरण नहीं) के लिए यह ठीक काम करता है।

package org.myorg; 

import java.security.PrivilegedExceptionAction; 

import org.apache.hadoop.conf.*; 
import org.apache.hadoop.security.UserGroupInformation; 
import org.apache.hadoop.fs.Path; 
import org.apache.hadoop.fs.FileSystem; 
import org.apache.hadoop.fs.FileStatus; 

public class HdfsTest { 

    public static void main(String args[]) { 

     try { 
      UserGroupInformation ugi 
       = UserGroupInformation.createRemoteUser("hbase"); 

      ugi.doAs(new PrivilegedExceptionAction<Void>() { 

       public Void run() throws Exception { 

        Configuration conf = new Configuration(); 
        conf.set("fs.defaultFS", "hdfs://1.2.3.4:8020/user/hbase"); 
        conf.set("hadoop.job.ugi", "hbase"); 

        FileSystem fs = FileSystem.get(conf); 

        fs.createNewFile(new Path("/user/hbase/test")); 

        FileStatus[] status = fs.listStatus(new Path("/user/hbase")); 
        for(int i=0;i<status.length;i++){ 
         System.out.println(status[i].getPath()); 
        } 
        return null; 
       } 
      }); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

मैंने हडूप कॉन्फ़िगरेशन पैरामीटर सेटिंग्स की खोज की और मुझे कोई उपयोगी स्पष्टीकरण नहीं मिला। क्या hbase का मतलब conf.set में उपयोगकर्ता है। मैं सभी हडूप कक्षा स्पष्टीकरण कहां प्राप्त कर सकता हूं न केवल कक्षाओं का लाभ उठा सकता हूं। कृपया कोई लिंक? –

+1

'org.apache.hadoop.security.UserGroupInformation' यहां कुंजी वर्ग है और यह 'createRemoteUser()' के माध्यम से' दूरस्थ उपयोगकर्ता 'निर्दिष्ट करने की अनुमति देता है। तो हैडोप क्लस्टर आपको उपयोगकर्ता के रूप में देखता है जिसे आपने अपने स्थानीय उपयोगकर्ता के निडरपेन्डेंट निर्दिष्ट किया है। बेशक यह केवल तभी काम करता है जब आपका हैडोप क्लस्टर आपको भरोसा करता है (सरल प्रमाणीकरण, वास्तव में कोई नहीं)। केर्बेरस के साथ आपको अतिरिक्त रूप से सबूत प्रदान करने की आवश्यकता होगी। –

+0

मैंने कोशिश की लेकिन मुझे java.lang.UnsupportedOperationException: वितरित फ़ाइल सिस्टम सिस्टम सिस्टम कार्यान्वयन – AbtPst

0

यदि मैं आपको सही समझता हूं, तो आप जो चाहते हैं उसे उपयोगकर्ता की होम निर्देशिका प्राप्त करना है और जोइस उपयोगकर्ता नहीं है।

आपके कॉन्फ़िगरेशन फ़ाइल में, अपनी होमडिर संपत्ति को उपयोगकर्ता/$ {user.name} पर सेट करें। सुनिश्चित करें कि आपके पास user.name

नामक सिस्टम सिस्टम है, यह मेरे मामले में काम करता है।

मुझे उम्मीद है कि आप यही करना चाहते हैं, अगर कोई टिप्पणी न जोड़ें।

+0

मैं वास्तव में पूरे एचडीएफएस फाइल सिस्टम को ब्राउज़ करना चाहता हूं, जैसे ह्यू करता है। यानी hdfs उपयोगकर्ता बनें। – Kong

संबंधित मुद्दे