В Scala я пытаюсь подсчитать файлы из каталога Hdfs. Я попытался получить список файлов с помощью val files = fs.listFiles(path, false)
и подсчитать его или получить его размер, но он не работает, поскольку files
типRemoteIterator[LocatedFileStatus]
Любая идея о том, как я должен обрабатывать?
Спасибо за помощь
Решение проблемы
Это было сделано раньше, но обычно люди используют FSImage. (Копия файла узла имени.)
Затем они помещают это в таблицу кустов, а затем вы можете запросить информацию о вашей файловой системе hdfs.
Вот действительно хороший учебник, который объясняет, как экспортировать fsimage и добавить его в таблицу кустов.
Вот еще один , который я думаю, что я предпочитаю:
Получите и скопируйте файл fsimage в HDFS #подключитесь к любому узлу кластера hadoop как пользователь hdfs
#downloads the fsimage file from namenode
hdfs dfsadmin -fetchImage /tmp
#converts the fsimage file into tab delimited file
hdfs oiv -i /tmp/fsimage_0000000000450297390 -o /tmp/fsimage.csv -p Delimited
#remove the header and copy to HDFS
sed -i -e "1d" fsimage.csv
hdfs dfs -mkdir /tmp/fsimage
hdfs dfs -copyFromLocal /tmp/fsimage.csv /tmp/fsimage
#create the intermediate external table in impala
CREATE EXTERNAL TABLE HDFS_META_D (
PATH STRING,
REPL INT,
MODIFICATION_TIME STRING,
ACCESSTIME STRING,
PREFERREDBLOCKSIZE INT,
BLOCKCOUNT DOUBLE,
FILESIZE DOUBLE,
NSQUOTA INT,
DSQUOTA INT,
PERMISSION STRING,
USERNAME STRING,
GROUPNAME STRING)
row format delimited
fields terminated by '\t'
LOCATION '/tmp/fsimage';
Как только он окажется в таблице, вы действительно сможете сделать все остальное в scala/spark.
Комментариев нет:
Отправить комментарий