2010-07-15 7 views
0

C'est la chose la plus étrange de tous les temps. Je peux donc voir ces fichiers et chat euxPeut chat mais ne peut pas ls fichier dans Hadoop DFS

[[email protected] hadoop-0.20.2]$ bin/hadoop fs -ls /users/jchen/       
Found 3 items 
-rw-r--r-- 1 jchen supergroup 26553445 2010-07-14 21:10 /users/jchen/20100714T192827^AS17.data 
-rw-r--r-- 1 jchen supergroup 461957962 2010-07-14 21:10 /users/jchen/20100714T192857^AS1.data 
-rw-r--r-- 1 jchen supergroup 14026972 2010-07-14 21:10 /users/jchen/20100714T192949^AS311.data 

[[email protected] hadoop-0.20.2]$ bin/hadoop fs -cat /users/jchen/20100714T192949^AS311.data | head 
SOME DATA 

Quand je Ls le fichier spécifique:

[[email protected] hadoop-0.20.2]$ bin/hadoop fs -ls /users/jchen/20100714T192949^AS311.data | head 
ls: Cannot access /users/jchen/20100714T192949^AS311.data: No such file or directory 

Ce que le Frack se passe ici? La seule chose que je peux penser est que j'ai utilisé une méthode personnalisée dans org.apache.hadoop.fs.FileSystem pour poster ces fichiers:

public boolean writeStreamToFile(boolean overwrite, 
        InputStream src, Path dst) 
    throws IOException { 
    Configuration conf = getConf(); 
    return FileUtil.writeStream(src, this, dst, overwrite, conf); 
} 
//which calls this static method in org.apache.hadoop.fs.FileUtil: 
public static boolean writeStream(InputStream src, 
         FileSystem dstFS, Path dst, 
         boolean overwrite, 
         Configuration conf) throws IOException { 

    dst = checkDest(dst.getName(), dstFS, dst, overwrite); 

    OutputStream out=null; 
    try{ 
     System.out.println("Started file creation"); 
     out = dstFS.create(dst, overwrite); 
     System.out.println("completed file creation. starting stream copy"); 
     IOUtils.copyBytes(src, out, conf, true); 
     System.out.println("completed stream copy."); 
    } catch (IOException e) { 
     IOUtils.closeStream(out); 
     IOUtils.closeStream(src); 
     throw e; 
    } 

    return true; 
} 

Je suis un peu à une perte totale ici.

+2

avez-vous besoin d'échapper le '^' dans le nom de fichier? –

+0

Grrrr ... ouais bon appel. Je ne devrais certainement pas être près d'un ordinateur en ce moment. Qui sait ce que je pourrais faire de plus? Savez-vous comment je peux échapper à la ^? J'ai essayé \ et ça n'a pas marché. Si vous postez comme une réponse, je vais et l'accepter. Merci! Jieren – Jieren

Répondre

0

Selon la commande this page, la commande cat prend les URI et la commande ls prend simplement les chemins.

Assurez-vous que le chemin que vous entrez dans la commande ls est correct. Comme suggéré par matt b, assurez-vous que tous les caractères potentiellement invalides sont échappés lorsque cela est possible.

Vous pouvez essayer d'utiliser le support de Hadoop pour le caractère générique comme ceci:

/bin/hadoop rs -ls '/users/jchen/*AS311.data'

Je suppose que la commande de chat que vous êtes en mesure d'exécuter est ce qui vous permet de vérifier les données sont correctement écrites et donc writeStreamToFile est OK?

Questions connexes