От предишната статия видяхме няколко програмни рамки и как те позволяват на разработчиците на приложения да разгръщат своите персонализирани приложения в облака. Сега ще видим как може да се направи физическо внедряване на тези приложения с помощта на MapReduce, като вземем за пример Microsoft Azure.

Първата стъпка ще бъде да създадете акаунт в Azure. При безплатна употреба ни се предоставят $200 и използването на всяка услуга на Azure ще струва пари. Не забравяйте да прекратите услугите, след като бъдат създадени, тъй като активните услуги продължават да таксуват пари на час.

И така, следвайте стъпките, за да настроите стартирането на първото ни приложение.

Стъпка 1: Основи

Има много начини за стартиране на приложения с помощта на MapReduce, но ние ще се съсредоточим върху създаването на базирани на Linux клъстери в HDInsight. Можем да изберем всеки тип клъстер въз основа на изисквания като:

  • Hadoop:Групова заявка и анализ на съхранени данни
  • Kafka: разпределена платформа за поточно предаване, която може да се използва за изграждане на канали и приложения за поточно предаване на данни в реално време
  • Spark: обработка в паметта, интерактивни заявки, обработка на микропакетни потоци
  • Интерактивна заявка: кеширане в паметта за интерактивни като по-бързи Hive заявки
  • HBase: обработка за големи количества безсхемни NoSQL данни
  • Буря: обработка на събития в реално време

Тук ще използваме стандартно ниво Hadoop клъстер заедно със Secure Shell (SSH) за свързване към клъстера. Този SSH клиент може да бъде свързан към всеки възел, но винаги е за предпочитане да се свързва към крайния възел, като използва посочения адрес и номер на портове. Ще разгледаме повече за крайните възли по-нататък в тази статия.

Какво точно представляват Apache Hadoop и Azure HDInsight?

Apache Hadoop е рамка с отворен код за разпределена обработка и анализ на големи набори от данни в клъстери. Azure HDInsight е напълно управлявана услуга за анализ с отворен код в облака. И така, създаването на Apache Hadoop клъстер в Azure HDInsight ни позволява да използваме програмната рамка MapReduce, за да обработваме и анализираме пакетни данни паралелно. Също така ни позволява да използваме услугата за управление на ресурси, наречена Apache Hadoop YARN, както и Apache Hadoop Distributed File System (HDFS) като хранилище

Стъпка 2: Съхранение

Сега, след като създадохме нашия Hadoop клъстер, следва да настроим хранилище за клъстера, така че данните да могат да се качват. Въпреки че локалната инсталация на Hadoop използва разпределената файлова система Hadoop (HDFS), по-добре е да използвате външни крайни точки за съхранение в облак, свързани към клъстера, което помага за запазване на изчислителните данни дори след като клъстерите бъдат изтрити. Hadoop клъстерите в HDInsight са съвместими с няколко външни облачни хранилища като:

  • Azure Data Lake Storage Gen2
  • Azure Data Lake Storage Gen1
  • Azure Storage с общо предназначение v2
  • Azure Storage с общо предназначение v1
  • Azure Storage Block blob

Тук ще използваме Azure Blob Storage. И така, ние задаваме крайната точка за съхранение по подразбиране по време на конфигурирането на посочения blob контейнер, който създадохме. Сега клъстерът има достъп до това хранилище на петна за качване на данни, които могат да се използват като вход към приложението MapReduce. Това хранилище по подразбиране също съдържа регистрационни файлове на приложения и системи.

Стъпка 3: Сигурност + работа в мрежа

След като настроим хранилището, можем да посочим нашите изисквания за сигурност и работа в мрежа.

Сигурност:

За сигурност можем да изберем корпоративния пакет за сигурност за Hadoop или да настроим TLS (сигурност на транспортния слой) протокол. Този TLS се прилага върху възлите на шлюза на клъстера, които действат като прокси, когато се свързват към клъстера HDInsight чрез крайната точка на публичния клъстер. Така че трябва да посочим минималната версия на TLS, която е съвместима с клъстера. Колкото по-висока е версията, толкова по-добра е сигурността. TLS 1.2 обаче е зададен по подразбиране в клъстерите на Azure HDInsight за връзки на публични HTTPS крайни точки.

Освен това данните на управлявани дискове като дискове с данни, дискове с ОС и временни дискове могат да бъдат шифровани в тези клъстери на Azure HDInsight. Поддържа множество видове криптиране:

  • Шифроване от страна на сървъра (SSE), извършено от услугата за съхранение. Тази услуга за шифроване на ниво 1 е активирана по подразбиране и се използва за шифроване на операционна система и дискове с данни в HDInsight.
  • Шифроване на хосте друго подобно криптиране на ниво 1, което може да се извърши с помощта на управляван от платформата ключ, но само за временни дискове и не е активирано по подразбиране.
  • Шифроване в покой е услуга за шифроване на слой 2, която изисква клиентът да предостави свой собствен ключ през хранилището за ключове на Azure. Използва се за данни и временни дискове и не е активиран по подразбиране. Това е едноетапен процес, управляван по време на създаването на клъстер.

Сега, за да активираме това криптиране за HDInsight клъстер, трябва да:

  • Създайте присвоени от потребителя управлявани самоличности за удостоверяване в хранилището за ключове
  • Създайте Azure Key Vault
  • Създайте ключ от определен тип (RSA/EC) и размер (2048/3072/4096)
  • Създайте правила за достъп

Сега този управляван от клиента ключ може да бъде добавен към нов HDInsight клъстер. Имайте предвид, че този ключ може да се използва само за нови клъстери по време на създаването на клъстер и не може да се добавя към съществуващи клъстери. По същия начин криптирането не може да бъде премахнато от клъстери, след като бъде добавено.

Работа в мрежа:
Не е нужно да се ограничаваме само до нашия локален тип клъстер, всъщност различни типове клъстери могат да бъдат свързани заедно чрез виртуалната мрежа на Azure. Така че това ни позволява да свързваме технологични стекове от различни типове клъстери на HDInsight, осигурявайки по-добра гъвкавост. Такива виртуални мрежи също са полезни при филтриране и маршрутизиране на мрежов трафик, заедно със свързване на услуги на Azure към интернет и локални ресурси.

Можем също така да контролираме мрежовия трафик чрез филтриране между подмрежи, използвайки или групи за мрежова сигурност, или мрежови виртуални устройства.

  • Групи за мрежова сигурност (NSG):те съдържат множество входящи и изходящи правила за сигурност, които ни позволяват да филтрираме трафика, който влиза или излиза, като използваме IP адреси, портове и протоколи. Тези NSG трябва да бъдат модифицирани за подмрежата, която се състои от клъстера HDInsight.
  • Мрежово виртуално устройство: те са основно виртуални машини, които възпроизвеждат задачи чрез софтуер, който по-рано се извършваше от хардуерни устройства като защитни стени, WAN оптимизатори и т.н. Те обаче могат да се използват само за изходящ трафик. Ще разгледаме виртуализацията на мрежовите функции заедно с действителни примери за код за това как да го направите с помощта на докер.

Можем също така ефективно да манипулираме маршрутизирането на мрежовия трафик, като променяме тези маршрути между подмрежи, интернет, локални мрежи и дори други виртуални мрежи. Това маршрутизиране може да се извърши чрез създаване на персонализирани таблици за маршрутизиране, за да се манипулира дестинацията за тези подмрежи. Можем също така да разпространяваме маршрути на локалния протокол за граничен шлюз (BGP) към нашата виртуална мрежа, когато тя е свързана чрез VPN към локалната мрежа. И така, тези виртуални мрежи осигуряват ефективен монопол върху трафика на мрежата.

Стъпка-4: Конфигурация + ценообразуване

Тук трябва да изберем необходимата конфигурация по отношение на броя на възлите от всеки тип (главни и работни възли) заедно с техния капацитет. Всеки от тези типове варира в цената в зависимост от характерната производителност, която проявява. Тази конфигурация на възел зависи от типа клъстер, който възнамеряваме да използваме. За нашата ситуация Hadoop изисква 2 главни възела и повече от един работен възел. Въпреки това, клъстерът на Hadoop по подразбиране е зададен на 2 главни възела и 4 работни възела. Колкото по-голям е броят на работниците, толкова по-тежки стават главните възли по отношение на възможностите за обработка. Размерът на клъстера, който искаме да изберем, също зависи от размера на VM.

Сега можем също така да инсталираме приложения на нашия базиран на Linux клъстер HDInsight, който може да бъде предоставен от Microsoft, трети страни или дори може да бъде самостоятелно разработен. Тези приложения са инсталирани на Linux VM, конфигуриран подобно на главния възел. Това се нарича краен възел, който може да се използва за:

  • Достъп до клъстера HDInsight
  • Хостинг на клиентски приложения
  • Тестване на тези клиентски приложения

Тази конфигурационна страница също така ни позволява да персонализираме нашия Hadoop клъстер от обикновеното състояние по подразбиране, като инсталираме допълнителни компоненти, които ни помагат при разработването на приложения със специфични нужди. Това става с помощта на скриптове при извикване.

Изпълнение на MapReduce приложения на нашия клъстер
Следвайки всички тези стъпки, ние конфигурирахме нашия клъстер напълно специфично за нашите нужди. Следващата стъпка е да стартираме тези MapReduce приложения на нашия клъстер. Това изисква SSH клиент, конфигуриран с Hadoop клъстера, който вече разгледахме преди. След като тази връзка бъде направена, стартираме .jar файловете за приложението MapReduce, използвайки YARN. Ако се изисква от приложението, трябва да посочим пътища за входните и изходните файлове, които съществуват в хранилището по подразбиране на клъстера, а не в локалната файлова система. Можем също да посочим множество входни файлове.

Отворете този сайт, за да проверите стъпка по стъпка командите, необходими за изпълнение на някои предварително инсталирани MapReduce приложения.

Как да внедрите персонализирани приложения MapReduce:

Можем да използваме python, за да внедрим програми за стрийминг MapReduce, като използваме API за стрийминг, предоставен от Hadoop. Това ни позволява да пишем тези Map и Reduce приложения в Python. Всичко, от което се нуждаем е:

  • Базиран на Linux Hadoop на HDInsight клъстер
  • Подходящ текстов редактор

Разгледайте това хранилище на GitHub за пълно внедряване на код в python за тези функции за карта и намаляване заедно с подробно обяснение стъпка по стъпка.

Друг полезен ресурс за подпомагане при писането на програми MapReduce в Python за Hadoop е тук.

ПРЕПРАТКИ:

[1] Дийн, Дж. и Гемават, С. (2008). MapReduce. Съобщения на ACM, 51 (1), 107. doi:10.1145/1327452.1327492

[2] Документация на Azure HDInsight. Достъпно тук: https://docs.microsoft.com/en-us/azure/hdinsight/