Может кошка, но не может ls файл в Hadoop DFS - PullRequest
0 голосов
/ 15 июля 2010

Это самая странная вещь в истории. Таким образом я могу видеть эти файлы и катать их:

[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;
}

Я как бы в полной растерянности.

1 Ответ

0 голосов
/ 15 июля 2010

Согласно этой странице команда cat принимает URI, а команда ls - только пути.

Убедитесь, что путь, который вы вводите в команду ls, правильный.Как предполагает matt b, убедитесь, что все потенциально недопустимые символы экранированы, где это возможно.

Вы можете попробовать использовать поддержку hadoop для подстановочного знака следующим образом:

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

Я предполагаю, что команда cat, которую вы можете выполнить, позволяет вам проверитьданные записываются правильно, и поэтому writeStreamToFile в порядке?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...