Мне нужно записать данные в Hadoop (HDFS) из внешних источников, таких как окно. Прямо сейчас я копировал данные в namenode и с помощью команды HDFS put запустил ее в кластер. В моем просмотре кода я не видел API для этого. Я надеюсь, кто-то может показать мне, что я ошибаюсь, и есть простой способ закодировать внешние клиенты против HDFS.
Запись данных в Hadoop
Ответ 1
Установите Cygwin, установите Hadoop локально (вам просто нужны двоичные файлы и конфиги, указывающие на ваш NN - нет необходимости фактически запускать службы), запустите hadoop fs -copyFromLocal /path/to/localfile /hdfs/path/
Вы также можете использовать новый рабочий стол Cloudera для загрузки файла через веб-интерфейс, хотя это не может быть хорошим вариантом для гигантских файлов.
Там также наложение WebDAV для HDFS, но я не знаю, насколько это стабильно/надежно.
Ответ 2
В Java есть API. Вы можете использовать его, включив в проект проект Hadoop. JavaDoc весьма полезен в целом, но, конечно, вы должны знать, что вы ищете * g * http://hadoop.apache.org/common/docs/
Для вашей конкретной проблемы взгляните на: http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/fs/FileSystem.html (это относится к последней версии, обратитесь к другим JavaDocs для разных версий!)
Типичным вызовом будет:
Filesystem.get(new JobConf()).create(new Path("however.file"));
Который возвращает вам поток, с которым вы можете обращаться с помощью обычного JavaIO.
Ответ 3
Для проблемы загрузки данных, которые мне нужно было поместить в HDFS, я решил обойти эту проблему.
Вместо того, чтобы загружать файлы в HDFS с сервера, на котором они проживали, я написал задание Java Map/Reduce, в котором картограф читал файл с файлового сервера (в этом случае через https), а затем записывал его непосредственно в HDFS ( через Java API).
Список файлов считывается с ввода. Затем у меня есть внешний script, который заполняет файл списком файлов для извлечения, загружает файл в HDFS (используя hasoop dfs -put), а затем запускает работу с картой/уменьшением с приличным количеством карт.
Это дает мне отличную производительность передачи, так как несколько файлов читаются/записываются одновременно.
Возможно, не тот ответ, который вы искали, но, надеюсь, полезен в любом случае: -).
Ответ 4
Примерно через 2 года после моего последнего ответа есть две новые альтернативы - Hoop/HttpFS и WebHDFS.
Что касается Hoop, он был впервые анонсирован в блоге Cloudera и может быть загружен с github. Мне удалось получить эту версию, чтобы успешно поговорить, по крайней мере, с Hadoop 0.20.1, возможно, она может поговорить и с более старыми версиями.
Если вы используете Hadoop 0.23.1, который на момент написания еще не освобожден, Hoop вместо этого является частью Hadoop в качестве своего собственного компонента, HttpFS. Эта работа была выполнена как часть HDFS-2178. Hoop/HttpFS может быть прокси не только для HDFS, но и для других совместимых с Hadoop файловых систем, таких как Amazon S3.
Hoop/HttpFS работает как самостоятельная служба.
Там также WebHDFS, который выполняется как часть служб NameNode и DataNode. Он также предоставляет REST API, который, если я правильно понимаю, совместим с API HttpFS. WebHDFS является частью Hadoop 1.0, и одна из его основных функций заключается в том, что он обеспечивает локальность данных - когда вы делаете запрос на чтение, вы будете перенаправлены на компонент WebHDFS в datanode, где находятся данные.
Какой компонент выбрать, зависит от вашей текущей настройки и того, что вам нужно. Если теперь вам нужен интерфейс HTTP REST для HDFS, и вы используете версию, которая не включает WebHDFS, то, начиная с Hoop из репозитория github, это самый простой вариант. Если вы используете версию, которая включает в себя WebHDFS, я бы пошел на это, если вам не нужны некоторые из функций, которые Hoop не имеет для WebHDFS (доступ к другим файловым системам, ограничение полосы пропускания и т.д.).
Ответ 5
Кажется, для этой страницы выделена специальная страница http://wiki.apache.org/hadoop/MountableHDFS:
Эти проекты (перечисленные ниже) позволяют монтировать HDFS (на большинстве вкусов Unix) в качестве стандартной файловой системы с использованием команды mount. После установки пользователь может работать с экземпляром hdfs, используя стандартные утилиты Unix, такие как "ls", "cd", "cp", "mkdir", "find", 'grep', или использовать стандартные библиотеки Posix, такие как open, write, read, close от C, С++, Python, Ruby, Perl, Java, bash и т.д.
Позже он описывает эти проекты
- contrib/fuse-dfs построен на плавких предохранителях, некоторые C-клеи, libhdfs и hadoop-dev.jar
- fuse-j-hdfs построен на плавких предохранителях, предохранителях для java и hasoop-dev.jar
- hdfs-fuse - проект кода google очень похож на contrib/fuse-dfs
- webdav - hdfs, отображаемый как ресурс webdav resourceR - содержит закрытую файловую систему, совместимую с hdfs, которая поддерживает чтение/запись Доступ к NFS
- HDFS NFS Proxy - экспортирует HDFS как NFS без использования плавкого предохранителя. Поддерживает Kerberos и перезаписывает записи, поэтому они записываются в hdfs последовательно.
Я не пробовал ни одного из них, но я скоро обновлю ответ, поскольку у меня есть такая же потребность, как OP
Ответ 6
Теперь вы также можете использовать Talend, который включает компоненты для интеграции Hadoop.
Ответ 7
вы можете попробовать установить HDFS на свой компьютер (назовите его machine_X), где вы выполняете свой код, а machine_X должен иметь бесконечно возможное соединение с HDFS. Проверьте это, https://wiki.apache.org/hadoop/MountableHDFS
Ответ 8
Вы также можете использовать HadoopDrive (http://hadoopdrive.effisoft.eu). Это расширение оболочки Windows.