Я хочу сохранить некоторую информацию о файлах, обрабатываемых с HDFS. Каким будет наиболее подходящий способ прочитать местоположение файла и смещение байта в java-программе файла, хранящегося в HDFS?
Существует ли понятие уникального идентификатора файла, связанного с каждым файлом, хранящимся в Hadoop 1? Если да, то как его можно получить в программе MapReduce?
По моему пониманию,
Вы можете использовать класс org.apache.hadoop.fs.FileSystem
для всех ваших потребностей.
1.Вы можете получить каждый файл, однозначно идентифицированный с ним URI, или вы можете использовать getFileChecksum(Path path)
2. Вы можете получить все файлы со всеми getFileBlockLocations(FileStatus file,long start,long len)
блока с помощью getFileBlockLocations(FileStatus file,long start,long len)
TextInputFormat
дает смещение байта для начального местоположения ключа в файле, что не так, как смещение файла на HDFS.
Вы можете использовать класс org.apache.hadoop.fs.FileSystem
для удовлетворения всех ваших потребностей. Существует много других доступных методов. Пожалуйста, пройдите через это для лучшего понимания.
Надеюсь, поможет.
В соответствии с "Окончательным руководством к Hadoop" входной формат TextInputFormat дает ключу значение смещения байта.
Для имени файла вы можете посмотреть на них: