Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hadoop DFS中可以使用cat但不能使用ls文件_Java_Hadoop - Fatal编程技术网

Java Hadoop DFS中可以使用cat但不能使用ls文件

Java Hadoop DFS中可以使用cat但不能使用ls文件,java,hadoop,Java,Hadoop,这是有史以来最奇怪的事情。因此,我可以查看这些文件并对其进行分类: [jchen@host 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 jch

这是有史以来最奇怪的事情。因此,我可以查看这些文件并对其进行分类:

[jchen@host 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

[jchen@q01-ba-sas01 hadoop-0.20.2]$ bin/hadoop fs -cat /users/jchen/20100714T192949^AS311.data | head
SOME DATA
当我对该文件进行特殊处理时:

[jchen@q01-ba-sas01 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
这里发生了什么事?我唯一能想到的是,我在org.apache.hadoop.fs.FileSystem中使用了一个自定义方法来发布这些文件:

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;
}
在这里我有点不知所措。

根据cat命令获取uri,ls命令只获取路径

确保在ls命令中输入的路径正确。按照matt b的建议,确保尽可能转义所有可能无效的字符

您可以尝试对通配符使用hadoop支持,如下所示:

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


我假设您能够执行的cat命令允许您验证数据是否正确写入,因此WriteStreamFile是否正常?

是否需要转义文件名中的
^
?Grrrr。。。是的,打得好。我现在绝对不应该靠近电脑。谁知道我还会造成什么伤害?你知道我怎样才能逃过这一劫吗?我试过了,但没有成功。如果你把它作为一个答案,我会站起来接受它。谢谢杰仁