2017-02-14 1 views
0

Je rencontre des problèmes lors de la lecture d'un fichier à partir de HDFS (Hortonworks Sandbox) à l'aide de l'API Java. À la suite de mon code -Exception lors de la lecture d'un fichier à partir de HDFS (Hortonworks Sandbox) à l'aide de l'API Java

System.setProperty ("hadoop.home.dir", "/"); 
    URI uri = URI.create ("hdfs://localhost:8020/user/maria_dev/test.txt"); 

    Path path = new Path (uri); 

    Configuration conf = new Configuration(); 
    conf.set ("fs.defaultFS", "hdfs://localhost:8020"); 
    conf.set ("dfs.client.use.datanode.hostname","true"); 
    conf.set("dfs.datanode.use.datanode.hostname","true"); 
    conf.set("dfs.client.use.legacy.blockreader", "true"); 

    byte[] btbuffer = new byte[5]; 
    String s; 
    try (FileSystem fs = FileSystem.get (uri, conf)) { 
     try { 
      FSDataInputStream fileIn = fs.open (path); 
      //s = fileIn.readUTF(); 
      fileIn.read (btbuffer, 0, 20); 
      s = new String (btbuffer, Charset.forName ("UTF-8")); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
    catch (Exception err){ 
     err.printStackTrace(); 
    } 

Voici les exceptions que je reçois -

10:39:51.803 [main] WARN org.apache.hadoop.hdfs.BlockReaderFactory - I/O error constructing remote block reader. java.net.ConnectException: Connection refused . 
10:39:51.803 [main] WARN org.apache.hadoop.hdfs.DFSClient - Failed to connect to sandbox.hortonworks.com/172.17.0.2:50010 for block, add to deadNodes and continue. java.net.ConnectException: Connection refused . 
10:39:51.804 [main] INFO org.apache.hadoop.hdfs.DFSClient - Could not obtain BP-1464254149-172.17.0.2-1477381671113:blk_1073742576_1752 from any node: java.io.IOException: No live nodes contain block BP-1464254149-172.17.0.2-1477381671113:blk_1073742576_1752 after checking nodes = [172.17.0.2:50010], ignoredNodes = null No live nodes contain current block Block locations: 172.17.0.2:50010 Dead nodes: 172.17.0.2:50010. 

n'a pu trouver aucune solution de travail. Toute aide est appréciée.

Modifié: Voici les entrées du (d'où j'appelle le travail)/etc/hosts de mon système hôte -

127.0.0.1  localhost  
255.255.255.255 broadcasthost  
::1    localhost  
172.17.0.2 sandbox.hortonworks.com localhost  
+0

chèque 'hostname' et faire correspondre les fs.defaultFS avec cette. Le nom d'hôte – rbyndoor

+0

est sandbox.hortonworks.com. Changer le fichier fs.defaultFS en sandbox.hortonworks.com ne semble rien changer. – MK22

+0

Où exécutez-vous ce code? Le bac à sable n'a pas d'interface utilisateur, alors écrivez-vous cela dans le terminal? La modification des paramètres de configuration ** dans ** le sandbox ne doit pas être effectuée. Ce sont bien. –

Répondre

0

Ceci est vous avez mentionné URI URI uri = URI.create ("hdfs://localhost:8020/user/maria_dev/test.txt");

mais il tente d'atteindre sandbox.hortonworks.com

Essayez en changeant l'URI

+0

a changé l'URI en sandbox.hortonworks.com, mais a reçu cette exception - java.lang.IllegalArgumentException: java.net.UnknownHostException: sandbox.hortonworks.com – MK22

+0

Pouvez-vous publier vos entrées/etc/hosts – BruceWayne

+0

Le fichier à l'URI donné est en cours d'ouverture mais la lecture ne se passe pas. Donc je suppose que le problème pourrait ne pas être avec l'URI. – MK22