Основные компоненты Cloudera Hadoop
-
Map Reduce (YARN) - модель распределеных вычислений, предназначенная для параллельных вычислений над большими объемами данных. MapReduce работа состоит из двух фаз: map - выполняется параллельно и (по возможности) локально над каждым блоком данных. Вместо того, чтобы доставлять терабайты данных к программе, небольшая, определённая пользователем программа копируется на сервера с данными и делает с ними всё, что не требует перемешивания и перемещения данных (shuffle); reduce - дополняет map агрегирующими операциями.
-
Spark - инструмент, предназначенный для обработки данных. Он позволяет выполнять различные операции над распределенными коллекциями данных, но не обеспечивает их распределенного хранения. Spark работает быстрее, поскольку данные обрабатываются здесь по-другому. Если MapReduce осуществляет обработку в пошаговом режиме, то Spark оперирует всем набором данных как единым целым. MapReduce действует следующим образом: данные считываются из кластера, выполняется требуемая операция, результаты записываются в кластер, обновленные данные считываются из кластера, выполняется следующая операция, ее результаты записываются в кластер и т.д. А Spark выполняет все аналитические операции в памяти практически в реальном времени: данные считываются из кластера, выполняются необходимые операции, затем полученные результаты записываются в кластер, после чего процесс завершен. Производительности MapReduce, как правило, вполне достаточно, если вы оперируете статическими данными и можете подождать завершения обработки. Но если нужно анализировать потоковые данные тогда имеет смысл обратиться к Spark.
-
HDFS - распределенная файловая система, работающая на больших кластерах машин. Обычная ФС, по большому счёту, состоит из таблицы файловых дескрипторов и области данных. В HDFS вместо таблицы используется специальный сервер - сервер имён NameNode, а данные разбросаны по серверам данных DataNode. В остальном отличий не так много: данные разбиты на блоки, обычно по 64Мб или 128Мб, для каждого файла сервер имён хранит его путь, список блоков и их реплик.
-
Pig - язык управления потоком данных и исполнительная среда для анализа больших объемов данных.
-
Hive - распределенное хранилище данных; оно управляет данными, хранимыми в HDFS, и предоставляет язык запросов на базе SQL для работы с этими данными. Hive может быть использован теми, кто знает язык SQL. Hive создает задания MapReduce, которые исполняются на кластере Hadoop.
-
Impala - продукт компании Cloudera и основной конкурент Hive. В отличие от последнего, Impala никогда не использовала классический MapReduce, а изначально исполняла запросы на своём собственном движке (написанном, кстати, на нестандартном для Hadoop-а C++). Кроме того, в последнее время Impala активно использует кеширование часто используемых блоков данных и колоночные форматы хранения, что очень хорошо сказывается на производительности аналитических запросов. Так же, как и для Hive, Cloudera предлагает к своему детищу вполне эффективный ODBC-драйвер.
-
HBase - нереляционная распределенная база данных.
-
ZooKeeper - распределенный координационный сервис; предоставляет примитивы для построения распределенных приложений.
-
Sqoop - инструмент для пересылки данных между структурированными хранилищами и HDFS.
-
Oozie - сервис для записи и планировки заданий Hadoop.
-
ZooKeeper - главный инструмент координации для всех элементов инфраструктуры Hadoop. Чаще всего используется как сервис конфигурации, хотя его возможности гораздо шире.
Cloudera Hadoop состоит из:
-
Cloudera Hadoop (CDH) - собственно дистрибутив Hadoop;
-
Cloudera Manager - инструмент для развертывания, мониторинга и управления кластером Hadoop.
Компоненты Cloudera Hadoop распространяются в виде бинарных пакетов, называемых парселами. По сравнению со стандартными пакетами и пакетными менеджерами парселы имеют следующие преимущества:
-
простота загрузки: каждый парсел представляет собой один файл, в котором объединены все нужные компоненты;
-
внутренняя согласованность: все компоненты внутри парсела тщательно протестированы, отлажены и согласованы между собой, поэтому вероятность возникновения проблем с несовместимостью компонентов очень мала;
-
разграничение распространения и активации: можно сначала установить парселы на все управляемые узлы, а затем активировать их одним действием; благодаря этому обновление системы осуществляется быстро и с минимальным простоем;
-
обновления “на ходу”: при обновлении минорной версии все новые процессы (задачи) будут автоматически запускаться под этой версией, уже запущенные задачи продолжат исполняться в старом окружении до своего завершения. Однако обновление до более новой мажорной версии возможно только посредством полного перезапуска всех сервисов кластера, и соответственно всех текущих задач;
-
простой откат изменений: при возникновении каких-либо проблем в работе с новой версией CDH ее можно легко откатить до предыдущей.
Установка Cloudera Manager
Перед установкой нужно обязательно убедиться в том, что:
-
все входящие в кластер серверы доступны по ssh, и у них установлен один и тот же пароль root (или добавлен публичный ssh ключ);
-
на всех серверах установлен ntp и настроена синхронизация времени, в противном случае хосты будут теряться и моргать красным в мониторинге;
-
у всех узлов в составе кластера и сервера CM настроены DNS и PTR записи (либо все хосты должны быть прописаны в /etc/hosts всех серверов).
Официальная документация по установке и настройке Cloudera Hadoop - http://www.cloudera.com/documentation/enterprise/5-3-x/topics/cm_ig_install_path_b.html
ВАЖНО! Cloudera не рекомендует использовать в рабочей инсталляции встроенную БД, поэтому лучше сразу настраивать внешнюю базу.
Установка и настройка БД postgresql:
1.
# yum install postgresql-server
# systemctl start postgresql
# service postgresql initdb
Hint: the preferred way to do this is now "postgresql-setup initdb"
Initializing database ... OK
2.
Правим файл /var/lib/pgsql/data/pg_hba.conf:
local all all peer
host all all 0.0.0.0/0 md5
host all all 127.0.0.1/32 trust
и файл /var/lib/pgsql/data/postgresql.conf:
listen_addresses = '*'
+ рекомендуемые параметры от клаудеры:
shared_buffers=256MB
wal_buffers=8MB
checkpoint_segments=16
checkpoint_completion_target=0.9
Cloudera в своей документации пишет:
Small to mid-sized clusters - Consider the following settings as starting points. If resources are limited, consider reducing the buffer sizes and checkpoint segments further. Ongoing tuning may be required based on each host's resource utilization. For example, if the Cloudera Manager Server is running on the same host as other roles, the following values may be acceptable:
shared_buffers - 256MB
wal_buffers - 8MB
checkpoint_segments - 16
checkpoint_completion_target - 0.9
Large clusters - Can contain up to 1000 hosts. Consider the following settings as starting points.
max_connection - For large clusters, each database is typically hosted on a different host. In general, allow each database on a host 100 maximum connections and then add 50 extra connections. You may have to increase the system resources available to PostgreSQL, as described at Connection Settings.
shared_buffers - 1024 MB. This requires that the operating system can allocate sufficient shared memory. See PostgreSQL information on Managing Kernel Resources for more information on setting kernel resources.
wal_buffers - 16 MB. This value is derived from the shared_buffers value. Setting wal_buffers to be approximately 3% of shared_buffers up to a maximum of approximately 16 MB is sufficient in most cases.
checkpoint_segments - 128. The PostgreSQL Tuning Guide recommends values between 32 and 256 for write-intensive systems, such as this one.
checkpoint_completion_target - 0.9. This setting is only available in PostgreSQL versions 8.3 and higher, which are highly recommended.
3.
# systemctl enable postgresql
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql.service to /usr/lib/systemd/system/postgresql.service.
# systemctl restart postgresql
4. Создание баз и ролей:
#sudo -u postgres psql
CREATE ROLE scm LOGIN PASSWORD 'scm_Eiroo4d';
CREATE DATABASE scm OWNER scm ENCODING 'UTF8';
HIVE:
create user hive with password 'hive_Uav6aeW';
CREATE DATABASE metastore OWNER hive ENCODING 'UTF8';
Теперь можно приступить к установке менеджера клаудеры.
Установка Cloudera Manager
1. Репозиторий клаудеры http://archive.cloudera.com/cm5/redhat/7/x86_64/cm/cloudera-manager.repo
Тащим его в /etc/yum.repos.d/
2. Установка Oracle JDK
# yum install oracle-j2sdk1.7
3. Установка Cloudera Manager Server Packages
# yum install cloudera-manager-daemons cloudera-manager-server
Правим конфиг сервера в файле /etc/cloudera-scm-server/db.properties:
com.cloudera.cmf.db.type=postgresql
com.cloudera.cmf.db.host=master1.hadoop.int.nic.ru
com.cloudera.cmf.db.name=scm
com.cloudera.cmf.db.user=scm
com.cloudera.cmf.db.password=scm_Eiroo4d
com.cloudera.cmf.db.setupType=EXTERNAL
Стартуем:
# /etc/init.d/cloudera-scm-server start
Готовим ssh.
Все входящие в кластер серверы должны быть доступны по ssh, и у них должен быть установлен один и тот же пароль root или добавлен публичный ssh ключ. Пользователь ssh должен иметь права sudo.
Затем идем по урлу http://master1.hadoop.local:7180/ и несколько скринов разворачивания кластера:
Готово.
Теперь нужно добавить сервис мониторинга. Для этого жмем Add cloudera management service в главном окне.
А теперь закидываем остальные хосты в кластер: