Я постараюсь предоставить две возможности. Я не пробовал ни одного из них, поэтому они в основном являются предложениями. Но может привести вас к правильному пути.
Во-первых, если вы хотите использовать HDFS и для этого требуется доступ к устройству на хосте, было бы запустить демоны HDFS в привилегированном контейнере, имеющем доступ к требуемым хост-устройствам (непосредственно на дисках). См. https://docs.docker.com/reference/run/#runtime-privilege-linux-capabilities-and-lxc-configuration для информации о флагах --privileged
и --device
.
Теоретически вы можете передавать устройства в контейнер, который обрабатывает доступ к дискам. Тогда вы можете использовать что-то вроде --link
, чтобы разговаривать друг с другом. NameNode будет хранить метаданные на хосте с использованием тома (передается с -v
). Хотя, учитывая небольшое чтение, которое я сделал о NameNode, похоже, что пока не будет хорошего решения для высокой доступности, и это единственная точка отказа.
Второй вариант поиска, если вы ищете кластерную файловую систему, а не HDFS, в частности, должен был проверить недавнюю поддержку поддержки Ceph FS в ядре в CoreOS 471.1.0: https://coreos.com/releases/#471.1.0. Затем вы можете использовать один и тот же подход привилегированного контейнера для доступа к хост-дискам для создания кластера Ceph FS. Тогда у вас может быть контейнер «только данных», в котором были установлены инструменты Ceph для монтирования каталога в кластере Ceph FS и выставлены это как тома для других используемых контейнеров.
Хотя все это только идеи, и я лично не использовал HDFS или Ceph (хотя я слежу за Ceph и хотел бы попробовать что-то подобное в качестве доказательства концепции).
Я не думаю, что Docker подходит для запуска демонов. HDFS построена с демонами DataNode и DataNode в распределенной системе, вариант 2 кажется неприемлемым. –
Это хороший момент. В теории вы могли бы объединить их. Но на самом деле план заключался бы в том, чтобы запускать каждый в виде отдельных контейнеров и общаться с ними через интерфейс 'docker0' при работе в качестве локального кластера или vOpenSwitch и связывать их вместе. – NightWolf