2016-06-23 5 views

ответ

3

Вы можете использовать глагол LISTSTATUS. Документы находятся в List a Directory, и следующий код можно найти на WebHDFS REST API документах:

С curl, это то, что он выглядит следующим образом:

curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=LISTSTATUS" 

Ответ является FileStatuses JSON объектом:

{ 
    "name"  : "FileStatuses", 
    "properties": 
    { 
    "FileStatuses": 
    { 
     "type"  : "object", 
     "properties": 
     { 
     "FileStatus": 
     { 
      "description": "An array of FileStatus", 
      "type"  : "array", 
      "items"  : fileStatusProperties 
     } 
     } 
    } 
    } 
} 

fileStatusProperties (для items поля) имеет эту схему в формате JSON:

var fileStatusProperties = 
{ 
    "type"  : "object", 
    "properties": 
    { 
    "accessTime": 
    { 
     "description": "The access time.", 
     "type"  : "integer", 
     "required" : true 
    }, 
    "blockSize": 
    { 
     "description": "The block size of a file.", 
     "type"  : "integer", 
     "required" : true 
    }, 
    "group": 
    { 
     "description": "The group owner.", 
     "type"  : "string", 
     "required" : true 
    }, 
    "length": 
    { 
     "description": "The number of bytes in a file.", 
     "type"  : "integer", 
     "required" : true 
    }, 
    "modificationTime": 
    { 
     "description": "The modification time.", 
     "type"  : "integer", 
     "required" : true 
    }, 
    "owner": 
    { 
     "description": "The user who is the owner.", 
     "type"  : "string", 
     "required" : true 
    }, 
    "pathSuffix": 
    { 
     "description": "The path suffix.", 
     "type"  : "string", 
     "required" : true 
    }, 
    "permission": 
    { 
     "description": "The permission represented as a octal string.", 
     "type"  : "string", 
     "required" : true 
    }, 
    "replication": 
    { 
     "description": "The number of replication of a file.", 
     "type"  : "integer", 
     "required" : true 
    }, 
    "type": 
    { 
     "description": "The type of the path object.", 
     "enum"  : ["FILE", "DIRECTORY"], 
     "required" : true 
    } 
    } 
}; 

Вы можете обрабатывать имена файлов в Python с использованием pywebhdfs, как это:

import json 
from pprint import pprint 
from pywebhdfs.webhdfs import PyWebHdfsClient 

hdfs = PyWebHdfsClient(host='host',port='50070', user_name='hdfs') # Use your own host/port/user_name config 

data = hdfs.list_dir("dir/dir") # Use your preferred directory, without the leading "/" 

file_statuses = data["FileStatuses"] 
pprint file_statuses # Display the dict 

for item in file_statuses["FileStatus"]: 
    print item["pathSuffix"] # Display the item filename 

Вместо print ИНГ каждого объекта, вы можете работать с деталями, как вам нужно. Результат от file_statuses - это просто Python dict, поэтому его можно использовать как любой другой dict при условии, что вы используете правильные клавиши.

+0

Можно ли использовать для извлечения имен файлов внутри каталога? – DPEZ

+0

Это полностью и полностью * зависит от того, какой язык вы пытаетесь использовать для этого. Поскольку вы не включили это в исходный вопрос, я предположил, что это было несущественно для вас, и что вы сможете его обработать, как только вы узнаете, что глагол используется. Если вы обновите вопрос с подробной информацией о том, какой язык (C++, Python, Ruby, PHP, Fortran и т. Д.) Вы используете, это позволит ответить на этот вопрос. Пожалуйста, будьте как можно более подробными (например, Python 2.7 отличается от Python 3.0, Ruby 1.8.7 отличается от Ruby 2.3.1, C отличается от C++ и т. Д.). –

+0

Конечно, язык, который мы используем на данный момент, это python – DPEZ