Я изучаю варианты запуска приложения hadoop в локальной системе.
Как и во многих приложениях, первые несколько выпусков должны работать на одном узле, если мы можем использовать все доступные ядра ЦП (да, это связано с этим вопросом ). Текущее ограничение заключается в том, что в наших производственных системах используется Java 1.5, и поэтому мы привязаны к Hadoop 0.18.3 как к последнему выпуску (см. этот вопрос ). К сожалению, мы пока не можем использовать эту новую функцию .
Первый вариант - просто запустить hadoop в псевдораспределенном режиме. По сути: создать полный кластер hadoop, в котором все работает ровно на 1 узле.
Обратной стороной этой формы является то, что она также использует полноценную HDFS. Это означает, что для обработки входных данных они должны быть сначала «загружены» в DFS ... который хранится локально. Таким образом, это требует дополнительного времени передачи как входных, так и выходных данных и требует дополнительного дискового пространства. Я бы хотел избежать того и другого, пока мы остаемся на конфигурации с одним узлом.
Итак, я подумал: можно ли переопределить параметр «fs.hdfs.impl» и изменить его с «org.apache.hadoop.dfs.DistributedFileSystem» на (например) «org.apache.hadoop.fs» .LocalFileSystem "?
Если это работает," локальный "кластер hadoop (который может состоять ТОЛЬКО из ОДНОГО узла) может использовать существующие файлы без каких-либо дополнительных требований к хранилищу и может запускаться быстрее, поскольку нет необходимости загружать файлы. Я бы ожидал, что у меня все еще будет трекер заданий и задач, а также, возможно, именной узел для управления всем этим.
Кто-нибудь пробовал это раньше? Может ли это сработать, или эта идея слишком далека от предполагаемого использования?
Или есть лучший способ получить тот же эффект: псевдораспределенная операция без HDFS ?
Спасибо за понимание.
РЕДАКТИРОВАТЬ 2:
Это конфигурация, которую я создал для hadoop 0.18.3 conf / hadoop-site.xml, используя ответ, предоставленный bajafresh4life.
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.default.name</name>
<value>file:///</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>localhost:33301</value>
</property>
<property>
<name>mapred.job.tracker.http.address</name>
<value>localhost:33302</value>
<description>
The job tracker http server address and port the server will listen on.
If the port is 0 then the server will start on a free port.
</description>
</property>
<property>
<name>mapred.task.tracker.http.address</name>
<value>localhost:33303</value>
<description>
The task tracker http server address and port.
If the port is 0 then the server will start on a free port.
</description>
</property>
</configuration>
Да, это возможно, хотя я использую 0.19.2. Я не слишком хорошо знаком с 0.18.3, но я уверен, что это не должно иметь значения.
Просто убедитесь, что fs.default.name
установлен по умолчанию (это file:///
), а mapred.job.tracker
указывает на место, где размещен ваш jobtracker. Затем запустите демоны с помощью bin/start-mapred.sh . Вам не нужно запускать namenode или datanodes. На этом этапе вы должны иметь возможность запускать задания map/reduce с помощью bin/hadoop jar ...
Мы использовали эту конфигурацию для запуска Hadoop на небольшом кластере машин с помощью устройства Netapp, установленного по NFS.