Здравствуйте.
В интернете много сервисов, предоставляющих возможности облачных сервисов. С их помощью можно осваивать технологии BigData.
В данной статье мы в домашних условиях произведем установку на платформу EC2 AWS (Amazon Web Services) Apache Kafka, Apache Spark, Zookeeper, Spark-shell и научимся всем этим пользоваться.
По ссылке aws.amazon.com/console вам предстоит зарегистрироваться. Введите имя и запомните пароль.
Настраиваем экземпляры узлов для сервисов Zookeeper и Kafka.
Для удобства работы переименуйте узлы кластера в нотации Node01-04. Для подключения к узлам кластера с локального компьютера через SSH необходимо определить IP адрес узла и его public/private DNS имя, выберите поочередно каждый из узлов кластера и для выбранного экземпляра (instance) запишите его public/private DNS имя для подключения через SSH и для установки ПО в текстовый файл HadoopAdm01.txt.
Пример: ec2-35-162-169-76.us-west-2.compute.amazonaws.com
Для установки ПО выбираем нашу ноду (копируем его Public DNS) для подключения через SSH. Настраиваем подключение через SSH. Используем сохраненное имя первого узла для настройки подключения через SSH с использованием пары ключей Private/Public «HadoopUser01.ppk” созданных в пункте 1.3. Переходим в раздел Connection/Auth через кнопку Browse ищем папку, где мы предварительно сохранили файл „HadoopUserХХ.ppk“.
Сохраняем конфигурацию подключения в настройках.
Подключаемся к узлу и используем login: ubuntu.
Создаем свой первый топик на собранном сервере kafka.
Мы подготовили экземпляр узла с установленным сервисом Zookeeper и Kafka на AWS, теперь необходимо установить Apache Spark, для этого:
Скачиваем последнюю версию дистрибутива Apache Spark.
Скачиваем редактор Scala-IDE (По ссылке scala-ide.org). Запускаем и начинаем писать код. Здесь я повторяться уже не буду, так как есть хорошая статья на Хабре.
В помощь полезная литература и курсы:
courses.hadoopinrealworld.com/courses/enrolled/319237
data-flair.training/blogs/kafka-consumer
www.udemy.com/apache-spark-with-scala-hands-on-with-big-data
В интернете много сервисов, предоставляющих возможности облачных сервисов. С их помощью можно осваивать технологии BigData.
В данной статье мы в домашних условиях произведем установку на платформу EC2 AWS (Amazon Web Services) Apache Kafka, Apache Spark, Zookeeper, Spark-shell и научимся всем этим пользоваться.
Знакомство с платформой Amazon Web Services
По ссылке aws.amazon.com/console вам предстоит зарегистрироваться. Введите имя и запомните пароль.
Настраиваем экземпляры узлов для сервисов Zookeeper и Kafka.
- Выберите в меню «Services->EC2». Далее необходимо выбрать версию операционной системы имиджа виртуальной машины, выбираем Ubuntu Server 16.04 LTS (HVM), SSD volume type, жмем ”Select". Переходим к настройке экземпляра сервера: тип «t3.medium» с параметрами 2vCPU, 4 GB памяти, General Purpose. Жмем «Next: Configuring Instance Details».
- Добавляем количество экземпляров 1, жмем «Next: Add Storage»
- Принимаем значение по умолчанию для размера диска 8 GB и меняем тип на Magnetic (в Production настройки исходя из обЪема данных и High Performance SSD)
- В разделе «Tag Instances» для «Name» вводим имя экземпляра узла «Home1» (где 1 просто порядковый номер) и нажимаем на «Next:...»
- В разделе " Configure Security Groups " выберите опцию «Use existing security group», выбрав имя группы безопасности («Spark_Kafka_Zoo_Project») и установите правила входящего трафика. Нажмите на «Next:...»
- Просмотрите экран «Review» для проверки введенных значений и и запустите «Launch».
- Для подключения к узлам кластера необходимо создать(в нашем случае использовать существующую) пару открытых ключей для идентификации и авторизации. Для этого выберите в списке тип операции «Use existing pair».
Создание ключей
- Скачиваем Putty (https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html) для клиента или используем подключение по SSH из терминала.
- Файл ключа .pem использует старый формат для удобства конвертируем его в формат ppk используемый Putty. Для этого запускаем утилиту PuTTYgen, загружаем ключ в старом формате .pem в утилиту. Конвертируем ключ и сохраняем (Save Private Key) для последующего использования в домашнюю папку с расширением .ppk.
Запуск кластера
Для удобства работы переименуйте узлы кластера в нотации Node01-04. Для подключения к узлам кластера с локального компьютера через SSH необходимо определить IP адрес узла и его public/private DNS имя, выберите поочередно каждый из узлов кластера и для выбранного экземпляра (instance) запишите его public/private DNS имя для подключения через SSH и для установки ПО в текстовый файл HadoopAdm01.txt.
Пример: ec2-35-162-169-76.us-west-2.compute.amazonaws.com
Установка Apache Kafka в режиме SingleNode на узел кластера AWS
Для установки ПО выбираем нашу ноду (копируем его Public DNS) для подключения через SSH. Настраиваем подключение через SSH. Используем сохраненное имя первого узла для настройки подключения через SSH с использованием пары ключей Private/Public «HadoopUser01.ppk” созданных в пункте 1.3. Переходим в раздел Connection/Auth через кнопку Browse ищем папку, где мы предварительно сохранили файл „HadoopUserХХ.ppk“.
Сохраняем конфигурацию подключения в настройках.
Подключаемся к узлу и используем login: ubuntu.
- Используя привилегии root обновляем packages и устанавливаем дополнительные пакеты, требующиеся для дальнейшей установки и настройки кластера.
sudo apt-get update sudo apt-get -y install wget net-tools netcat tar
- Устанавливаем Java 8 jdk и проверяем версию Java.
sudo apt-get -y install openjdk-8-jdk
- Для нормальной производительности узла кластера необходимо подкорректировать настройки свопирования памяти. VM swappines по умолчанию установлен в 60% что значит при утилизации памяти в 60 % система начнет активно свопить данные с RAM на диск. В зависимости от версии Linux параметр VM swappines может быть установлен в 0 или 1:
sudo sysctl vm.swappiness=1
- Для сохранения настроек при перезагрузке добавим строчку в файл конфигурации.
echo 'vm.swappiness=1' | sudo tee --append /etc/sysctl.conf
- Редактируем записи в файле /etc/hosts для удобного разрешения имен узлов кластера kafka и
zookeeper по private IP адресам назначенным узлам кластера.
echo "172.31.26.162 host01" | sudo tee --append /etc/hosts
Проверяем правильность распознавания имен с помощью ping любой из записей.
- Загружаем последние актуальные версии (http://kafka.apache.org/downloads) дистрибутивов kafka и scala и подготавливаем директорию с установочными файлами.
wget http://mirror.linux-ia64.org/apache/kafka/2.1.0/kafka_2.12-2.1.0.tgz tar -xvzf kafka_2.12-2.1.0.tgz ln -s kafka_2.12-2.1.0 kafka
- Удаляем файл архива tgz, он нам больше не понадобится
- Попробуем запустить сервис Zookeeper, для этого:
~/kafka/bin/zookeeper-server-start.sh -daemon ~/kafka/config/zookeeper.properties
Zookeeper стартует с параметрами запуска по умолчанию. Можно проверить по логу:
tail -n 5 ~/kafka/logs/zookeeper.out
Для обеспечения запуска демона Zookeeper, после перезагрузки, нам необходимо стартовать Zookeper, как фоновый сервис:
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
Для проверки запуска Zookepper проверяем
netcat -vz localhost 2181
Настраиваем сервис Zookeeper и Kafka для работы. Первоначально отредактируем/создадим файл /etc/systemd/system/zookeeper.service (содержимое файла ниже).
[Unit] Description=Apache Zookeeper server Documentation=http://zookeeper.apache.org Requires=network.target remote-fs.target After=network.target remote-fs.target [Service] Type=simple ExecStart=/home/ubuntu/kafka/bin/zookeeper-server-start.sh /home/ubuntu/kafka/config/zookeeper.properties ExecStop=/home/ubuntu/kafka/bin/zookeeper-server-stop.sh [Install] WantedBy=multi-user.target
Далее для Kafka отредактируем/создадим файл /etc/systemd/system/kafka.service (содержимое файла ниже).
[Unit] Description=Apache Kafka server (broker) Documentation=http://kafka.apache.org/documentation.html Requires=zookeeper.service [Service] Type=simple ExecStart=/home/ubuntu/kafka/bin/kafka-server-start.sh /home/ubuntu/kafka/config/server.properties ExecStop=/home/ubuntu/kafka/bin/kafka-server-stop.sh [Install] WantedBy=multi-user.target
- Активируем скрипты systemd для сервисов Kafka и Zookeeper.
sudo systemctl enable zookeeper sudo systemctl enable kafka
- Проверим работу скриптов systemd.
sudo systemctl start zookeeper sudo systemctl start kafka sudo systemctl status zookeeper sudo systemctl status kafka sudo systemctl stop zookeeper sudo systemctl stop kafka
- Проверим работоспособность сервисов Kafka и Zookeeper.
netcat -vz localhost 2181 netcat -vz localhost 9092
- Проверяем лог файл zookeeper.
cat logs/zookeeper.out
Первая радость
Создаем свой первый топик на собранном сервере kafka.
- Важно использовать подключение к «host01:2181» как вы указывали в конфигурационном файле server.properties.
- Запишем некоторые данные в топик.
kafka-console-producer.sh --broker-list host01:9092 --topic first_topic Привет Как прошли выходные
Ctrl-C — выход из консоли топика.
- Теперь попробуем прочитать данные из топика.
kafka-console-consumer.sh --bootstrap-server host01:9092 --topic last_topic --from-beginning
- Просмотрим список топиков kafka.
bin/kafka-topics.sh --zookeeper spark01:2181 --list
- Редактируем параметры сервера kafka для подстройки под single cluster setup
#необходимо изменить параметр ISR в 1.
bin/kafka-topics.sh --zookeeper spark01:2181 --config min.insync.replicas=1 --topic __consumer_offsets --alter
- Перезапускаем сервер Kafka и пытаемся снова подключиться consumer ом
- Посмотрим лист топиков.
bin/kafka-topics.sh --zookeeper host01:2181 --list
Настройка Apache Spark на одноузловом кластере
Мы подготовили экземпляр узла с установленным сервисом Zookeeper и Kafka на AWS, теперь необходимо установить Apache Spark, для этого:
Скачиваем последнюю версию дистрибутива Apache Spark.
wget https://archive.apache.org/dist/spark/spark-2.4.0/spark-2.4.0-bin-hadoop2.6.tgz
- Разархивируем дистрибутив и создадим символьный линк для spark и удалим ненужные файлы архивов.
tar -xvf spark-2.4.0-bin-hadoop2.6.tgz ln -s spark-2.4.0-bin-hadoop2.6 spark rm spark*.tgz
- Переходим в каталог sbin и запускаем spark мастера.
./start-master.sh
- Подключаемся с помощью веб браузера к серверу Spark на порт 8080.
- Запускаем spark-slaves на том же самом узле
./start-slave.sh spark://host01:7077
- Запускаем spark оболочку с мастером на узле host01.
./spark-shell --master spark://host01:7077
- Если запуск не работает, добавляем путь к Spark в bash.
vi ~/.bashrc # добавляем строчки в конец файла SPARK_HOME=/home/ubuntu/spark export PATH=$SPARK_HOME/bin:$PATH
source ~/.bashrc
- Запускаем spark оболочку повторно с мастером на узле host01.
./spark-shell --master spark://host01:7077
Одноузловой кластер с Kafka, Zookeeper и Spark работает. Ура!
Немного творчества
Скачиваем редактор Scala-IDE (По ссылке scala-ide.org). Запускаем и начинаем писать код. Здесь я повторяться уже не буду, так как есть хорошая статья на Хабре.
В помощь полезная литература и курсы:
courses.hadoopinrealworld.com/courses/enrolled/319237
data-flair.training/blogs/kafka-consumer
www.udemy.com/apache-spark-with-scala-hands-on-with-big-data