Статьи

Распределенная установка Apache Flume с приемником HDFS

Недавно я потратил несколько дней, чтобы освоиться с Flume, распределенным журналом Cloudera. Если вы не видели этого и имели дело с большим количеством журналов, вы определенно пропускаете фантастический проект. Я не собираюсь тратить время на разговоры об этом, потому что вы можете прочитать об этом больше в руководстве пользователя или в теме Quora Flume , так как это лучше, чем я могу описать. Но я расскажу вам о моем опыте настройки Flume в распределенной среде для синхронизации журналов с приемником HDFS. контекст

У меня есть 3 вида серверов, все работают под управлением Ubuntu 10.04 локально:

hadoop -agent-1: это агент, который производит все журналы
hadoop-collector-1: это коллектор, который объединяет все журналы (из hadoop-agent-1, agent-2, agent-3 и т. д.)
hadoop-master-1: это главный узел потока, который отправляет все команды

Чтобы добавить репозиторий CDH3:

Создайте новый файл /etc/apt/sources.list.d/cloudera.list со следующим содержимым:

1
2
deb http://archive.cloudera.com/debian <RELEASE>-cdh3 contrib
deb-src http://archive.cloudera.com/debian <RELEASE>-cdh3 contrib

где:
это имя вашего дистрибутива, которое вы можете найти, запустив lsb_release -c. Например, чтобы установить CDH3 для Ubuntu Lucid, используйте lucid-cdh3 в приведенной выше команде.

(Чтобы установить другую версию CDH в системе Debian, укажите нужный номер версии в разделе -cdh3 команды deb. Например, чтобы установить обновление 0 CDH3 для Ubuntu Maverick, используйте команду maverick-cdh3u0 в приведенной выше команде. )

(Необязательно) добавьте ключ хранилища. Добавьте открытый ключ GPG Cloudera в свой репозиторий, выполнив следующую команду:

1
$ curl -s http://archive.cloudera.com/debian/archive.key | sudo apt-key add -

Этот ключ позволяет вам убедиться, что вы загружаете подлинные пакеты

Начальная настройка

И на hadoop-agent-1, и на hadoop-collector-1 вам необходимо установить flume-node (flume-node содержит файлы, необходимые для запуска агента или сборщика).

1
2
sudo apt-get update
sudo apt-get install flume-node

На hadoop-master-1:

1
2
sudo apt-get update
sudo apt-get install flume-master

Сначала давайте запрыгнем на агента и настроим это. Настройте переменные hadoop-master-1 и hadoop-collector-1 соответствующим образом, но измените ваш /etc/flume/conf/flume-site.xml так, чтобы он выглядел следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<configuration>
  <property>
    <name>flume.master.servers</name>
    <value>hadoop-master-1</value>
    <description>This is the address for the config servers status server (http)</description>
  </property>
 
  <property>
    <name>flume.collector.event.host</name>
    <value>hadoop-collector-1</value>
    <description>This is the host name of the default 'remote' collector.</description>
  </property>
 
  <property>
    <name>flume.collector.port</name>
    <value>35853</value>
    <description>This default tcp port that the collector listens to in order to receive events it is collecting.</description>
  </property>
 
  <property>
    <name>flume.agent.logdir</name>
    <value>/tmp/flume-${user.name}/agent</value>
    <description> This is the directory that write-ahead logging data
      or disk-failover data is collected from applications gets
      written to. The agent watches this directory.
    </description>
  </property>
</configuration>

Теперь к коллекционеру. Один и тот же файл, другой конфиг.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<configuration>
  <property>
    <name>flume.master.servers</name>
    <value>hadoop-master-1</value>
    <description>This is the address for the config servers status server (http)</description>
  </property>
 
  <property>
    <name>flume.collector.event.host</name>
    <value>hadoop-collector-1</value>
    <description>This is the host name of the default 'remote' collector.</description>
  </property>
 
  <property>
    <name>flume.collector.port</name>
    <value>35853</value>
    <description>This default tcp port that the collector listens to in order to receive events it is collecting.</description>
  </property>
 
  <property>
    <name>fs.default.name</name>
    <value>hdfs://hadoop-master-1:8020</value>
  </property>
 
  <property>
    <name>flume.agent.logdir</name>
    <value>/tmp/flume-${user.name}/agent</value>
    <description> This is the directory that write-ahead logging data
      or disk-failover data is collected from applications gets
      written to. The agent watches this directory.
    </description>
  </property>
 
  <property>
    <name>flume.collector.dfs.dir</name>
    <value>file:///tmp/flume-${user.name}/collected</value>
    <description>This is a dfs directory that is the the final resting
    place for logs to be stored in.  This defaults to a local dir in
    /tmp but can be hadoop URI path that such as hdfs://namenode/path/
    </description>
  </property> 
 
  <property>
    <name>flume.collector.dfs.compress.gzip</name>
    <value>true</value>
    <description>Writes compressed output in gzip format to dfs. value is
     boolean type, i.e. true/false</description>
  </property>
 
  <property>
    <name>flume.collector.roll.millis</name>
    <value>60000</value>
    <description>The time (in milliseconds)
    between when hdfs files are closed and a new file is opened
    (rolled).
    </description>
  </property>
</configuration>

Настройка через Интернет

Я выбрал индивидуальную настройку машины через главный веб-интерфейс. Вы можете перейти к этому указанию вашего веб-браузера по адресу http: // hadoop-master-1: 35871 / (замените hadoop-master-1 на публичный / частный IP-адрес DNS вашего flume master или настройте / etc / hosts для имени хоста). Убедитесь, что порт доступен снаружи через настройки безопасности. В этот момент мне было проще всего убедиться, что все хосты, на которых запущен Flume, могут общаться со всеми портами на всех других хостах, на которых работает Flume. Конечно, вы можете заблокировать это для отдельных портов для обеспечения безопасности, когда все будет готово.

На этом этапе вам нужно перейти к hadoop-agent-1 и hadoop-collector-1, запустив /etc/init.d/flume-node start. Если все идет хорошо, мастер (чей IP указан в их конфигах) должен быть уведомлен об их существовании. Теперь вы можете настроить их из Интернета. Нажмите на ссылку конфигурации и затем заполните текстовые строки следующим образом (используйте то, что выделено жирным шрифтом):

Узел агента: hadoop-agent-1
Источник: tailDir («/ var / logs / apache2 / реализов., Реализован. *. Log»)
Sink: agentBESink («hadoop-collector-1», 35853)
Примечание: я решил использовать tailDir, так как сам буду управлять вращением логов. Я также использую agentBESink, потому что я в порядке с потерей строк журнала, если возникает случай.

Теперь нажмите Submit Query и вернитесь на страницу конфигурации, чтобы настроить сборщик:

Узел агента: hadoop-collector-1
Источник: collectorSource (35853)
Sink: collectorSink («hdfs: // hadoop-master-1: 8020 / flume / logs /% Y /% m /% d /% H00 ?,« сервер »)
Это скажет сборщику, что мы погружаемся в HDFS с начальной папкой «flume». Затем он войдет в подпапки с «flume / logs / YYYY / MM / DD / HH00? (или 2011/02/03/1300 / server-.log). Теперь нажмите Submit Query и перейдите на главную страницу, и вы увидите 2 команды, перечисленные как «SUCCEEDED» в истории команд. Если им это не удалось, убедитесь, что сделано несколько вещей (возможно, есть и другие, но это удобный старт:

Всегда используйте двойные кавычки («), так как одинарные кавычки (‘) интерпретируются неправильно. ОБНОВЛЕНИЕ: одинарные кавычки интерпретируются правильно, они просто не принимаются намеренно (спасибо, jmhsieh)
В своем регулярном выражении используйте что-то вроде «. * \\. Log», поскольку «.» является частью регулярного выражения.
В своем регулярном выражении убедитесь, что ваши черные слэши правильно экранированы: «foo \\ bar» является верной версией попытки совпадения с «foo \ bar».

Кроме того, есть также таблицы состояния узлов и конфигурации узлов. Они должны соответствовать тому, что вы думаете, что вы настроили

На данный момент все должно работать. По общему признанию, у меня было много проблем, чтобы добраться до этой точки. Но с помощью ребят из Cloudera и пользователей irc.freenode.net в #flume я смог добиться успеха. Журналы, к сожалению, не слишком полезны здесь в большинстве случаев (но посмотрите в любом случае, потому что они могут предоставить вам больше информации, чем они предоставили мне). Если я что-то пропустил в этом посте или есть что-то еще, о чем я не знаю, то дайте мне знать.

Ссылка: Распределенная установка Apache Flume с помощью HDFS Sink от нашего партнера JCG Эвана Конкла в блоге Эвана Конкла .