Apache Bigtop a dnešní volba distribuce Hadoop

Apache Bigtop a dnešní volba distribuce Hadoop

Asi není tajemstvím, že minulý rok byl pro Apache Hadoop rokem velkých změn. V loňském roce došlo ke spojení Cloudera a Hortonworks (v podstatě akvizice druhé jmenované) a Mapr byl kvůli vážným finančním problémům prodán společnosti Hewlett Packard. A pokud se o pár let dříve v případě on-premise instalací často muselo volit mezi Cloudera a Hortonworks, dnes bohužel tuto volbu nemáme. Dalším překvapením byl fakt, že Cloudera v únoru letošního roku oznámila, že přestane vydávat binární sestavení své distribuce do veřejného úložiště a ty jsou nyní dostupné pouze prostřednictvím placeného předplatného. Samozřejmě je stále možné stáhnout nejnovější verze CDH a HDP vydané před koncem roku 2019 a jejich podpora se očekává jeden až dva roky. Ale co dělat dál? Pro ty, kteří dříve platili předplatné, se nic nezměnilo. A pro ty, kteří nechtějí přecházet na placenou verzi distribuce, ale zároveň chtějí mít možnost dostávat nejnovější verze clusterových komponent, stejně jako záplaty a další aktualizace, jsme připravili tento článek. V něm zvážíme možné možnosti, jak se z této situace dostat.

Článek je spíše recenze. Nebude obsahovat srovnání distribucí a jejich detailní rozbor a nebudou chybět ani recepty na jejich instalaci a konfiguraci. Co se bude dít? Krátce si povíme o takové distribuci, jako je Arenadata Hadoop, která si právem zaslouží naši pozornost svou dnes již velmi vzácnou dostupností. A pak si povíme o Vanilla Hadoop, hlavně o tom, jak se dá „uvařit“ pomocí Apache Bigtop. Připraveni? Pak vítejte u kočky.

Arenadata Hadoop

Apache Bigtop a dnešní volba distribuce Hadoop

Jedná se o zcela nový a zatím málo známý distribuční kit tuzemského vývoje. Bohužel v tuto chvíli na Habré existuje pouze v tomto článku.

Více informací najdete na oficialitě webové stránky projekt. Nejnovější verze distribuce jsou založeny na Hadoop 3.1.2 pro verzi 3 a 2.8.5 pro verzi 2.

Informace o cestovní mapě naleznete zde.

Apache Bigtop a dnešní volba distribuce Hadoop
Rozhraní správce klastrů Arenadata

Hlavním produktem společnosti Arenadata je Arenadata Cluster Manager (ADCM), který slouží k instalaci, konfiguraci a sledování různých podnikových softwarových řešení. ADCM je distribuován zdarma a jeho funkčnost je rozšířena přidáním balíčků, které jsou sadou ansible-playbooků. Balíčky se dělí na dva typy: podnikové a komunitní. Ty jsou k dispozici zdarma ke stažení z webu Arenadata. Je také možné vyvinout vlastní balíček a připojit jej k ADCM.

Pro nasazení a správu Hadoop 3 je nabízena komunitní verze balíčku ve spojení s ADCM, ale pro Hadoop 2 existuje pouze Apache Ambari jako alternativa. Pokud jde o repozitáře s balíčky, jsou otevřeny veřejnému přístupu, lze je stáhnout a nainstalovat běžným způsobem pro všechny součásti clusteru. Celkově vypadá distribuce velmi zajímavě. Jsem si jistý, že se najdou tací, kteří jsou zvyklí na řešení jako Cloudera Manager a Ambari a kterým se bude líbit samotné ADCM. Pro někoho to bude také obrovské plus, že distribuce součástí softwarového registru pro náhradu importu.

Pokud se budeme bavit o nevýhodách, budou stejné jako u všech ostatních distribucí Hadoop. A to:

  • Takzvaný „vendor lock-in“. Na příkladech Cloudera a Hortonworks jsme si již uvědomili, že vždy existuje riziko změny firemní politiky.
  • Výrazné zpoždění za Apache proti proudu.

Vanilkový hadoop

Apache Bigtop a dnešní volba distribuce Hadoop

Jak víte, Hadoop není monolitický produkt, ale ve skutečnosti celá galaxie služeb kolem distribuovaného souborového systému HDFS. Málokomu bude stačit jeden souborový cluster. Někteří potřebují Hive, jiní Presto a pak jsou tu HBase a Phoenix, stále častěji se používá Spark. Pro orchestraci a načítání dat se někdy nacházejí Oozie, Sqoop a Flume. A pokud se objeví otázka bezpečnosti, pak se okamžitě vybaví Kerberos ve spojení s Rangerem.

Binární verze komponent Hadoop jsou k dispozici na webových stránkách každého z ekosystémových projektů ve formě tarballů. Můžete si je stáhnout a začít s instalací, ale s jednou podmínkou: kromě nezávislého sestavování balíčků z „surových“ binárních souborů, které s největší pravděpodobností chcete dělat, nebudete mít žádnou důvěru v kompatibilitu stažených verzí komponent s každým jiný. Preferovanou možností je sestavení pomocí Apache Bigtop. Bigtop vám umožní stavět z repozitářů Apache maven, spouštět testy a sestavovat balíčky. Co je ale pro nás velmi důležité, Bigtop sestaví ty verze komponent, které budou vzájemně kompatibilní. O tom si povíme podrobněji níže.

Apache Bigtop

Apache Bigtop a dnešní volba distribuce Hadoop

Apache Bigtop je nástroj pro vytváření, balení a testování řady
open source projekty, jako jsou Hadoop a Greenplum. Bigtop má spoustu
vydání. V době psaní tohoto článku byla nejnovější stabilní verze verze 1.4,
a v masteru bylo 1.5. Různé verze vydání používají různé verze
komponenty. Například pro 1.4 mají součásti jádra Hadoop verzi 2.8.5 a v masteru
2.10.0. Mění se i skladba podporovaných komponent. Něco zastaralého a
neobnovitelné odchází a na jeho místo přichází něco nového, více žádaného a
není to nutně něco ze samotné rodiny Apache.

Kromě toho jich má Bigtop mnoho vidličky.

Když jsme se s Bigtopem začali seznamovat, překvapila nás především jeho skromná, v porovnání s jinými projekty Apache, rozšířenost a oblíbenost a také velmi malá komunita. Z toho vyplývá, že o produktu je minimum informací a hledání řešení problémů, které se objevily na fórech a mailing listech, nemusí přinést vůbec nic. Nejprve se pro nás ukázalo jako obtížný úkol dokončit kompletní sestavení distribuce kvůli vlastnostem samotného nástroje, ale o tom budeme mluvit o něco později.

Jako upoutávku pro ty, kteří se kdysi zajímali o takové projekty linuxového univerza jako Gentoo a LFS, může být nostalgicky příjemné s touto věcí pracovat a vzpomínat na ty „epické“ časy, kdy jsme sami hledali (nebo dokonce psali) ebuilduje a pravidelně přestavuje Mozillu s novými záplatami.

Velkou výhodou Bigtopu je otevřenost a všestrannost nástrojů, na kterých je založen. Je založen na Gradle a Apache Maven. Gradle je docela dobře známý jako nástroj, který Google používá k sestavení Androidu. Je flexibilní a, jak se říká, „testováno v boji“. Maven je standardní nástroj pro budování projektů v samotném Apache a jelikož většina jeho produktů vychází právě přes Maven, neobešlo by se to bez něj ani zde. Za pozornost stojí POM (project object model) - „základní“ xml soubor popisující vše potřebné pro Maven pro práci s vaším projektem, kolem kterého je postavena veškerá práce. Přesně v
části Maven a existují některé překážky, se kterými se uživatelé Bigtopu poprvé setkávají.

Praxe

Kde byste tedy měli začít? Přejděte na stránku stahování a stáhněte si nejnovější stabilní verzi jako archiv. Můžete tam také najít binární artefakty shromážděné Bigtopem. Mimochodem, mezi běžnými správci balíčků jsou podporovány YUM a APT.

Případně si můžete stáhnout nejnovější stabilní verzi přímo z
github:

$ git clone --branch branch-1.4 https://github.com/apache/bigtop.git

Klonování v „bigtopu“…

remote: Enumerating objects: 46, done.
remote: Counting objects: 100% (46/46), done.
remote: Compressing objects: 100% (41/41), done.
remote: Total 40217 (delta 14), reused 10 (delta 1), pack-reused 40171
Получение объектов: 100% (40217/40217), 43.54 MiB | 1.05 MiB/s, готово.
Определение изменений: 100% (20503/20503), готово.
Updating files: 100% (1998/1998), готово.

Výsledný adresář ./bigtop vypadá asi takto:

./bigtop-bigpetstore — demo aplikace, syntetické příklady
./bigtop-ci - Nástroje CI, jenkinsi
./bigtop-data-generators — generování dat, syntetika, pro testy kouře atd.
./bigtop-deploy - nástroje pro nasazení
./bigtop-packages — konfigurace, skripty, záplaty pro sestavení, hlavní část nástroje
./bigtop-test-framework — testovací rámec
./bigtop-tests — samotné zkoušky, zatížení a kouř
./bigtop_toolchain — prostředí pro montáž, příprava prostředí pro práci nástroje
./build — vytvořit pracovní adresář
./dl — adresář pro stažené zdroje
./docker — vkládání obrázků dockerů, testování
./gradle - konfigurace gradle
./output – adresář, kam se ukládají artefakty sestavení
./provisioner — zajišťování

V této fázi je pro nás nejzajímavější hlavní konfigurace ./bigtop/bigtop.bom, ve kterém vidíme všechny podporované komponenty s verzemi. Zde můžeme zadat jinou verzi produktu (pokud se ho najednou chceme pokusit sestavit) nebo verzi sestavení (pokud jsme například přidali významnou opravu).

Velký zájem je také o podadresář ./bigtop/bigtop-packages, která přímo souvisí s procesem sestavování komponent a balíčků s nimi.

Takže jsme si stáhli archiv, rozbalili ho nebo vytvořili klon z githubu, můžeme začít stavět?

Ne, nejprve připravme prostředí.

Příprava prostředí

A tady potřebujeme malý ústup. K sestavení téměř jakéhokoli více či méně komplexního produktu potřebujete určité prostředí - v našem případě je to JDK, stejné sdílené knihovny, hlavičkové soubory atd., nástroje, například ant, ivy2 a mnoho dalšího. Jednou z možností, jak získat prostředí, které potřebujete pro Bigtop, je nainstalovat potřebné komponenty na hostitele sestavení. Mohu se mýlit v chronologii, ale zdá se, že s verzí 1.0 byla také možnost zabudovat předem nakonfigurované a přístupné obrázky Docker, které najdete zde.

Co se týče přípravy prostředí, na to je pomocník - Loutka.

Můžete použít následující příkazy spouštěné z kořenového adresáře
nástroj, ./bigtop:

./gradlew toolchain
./gradlew toolchain-devtools
./gradlew toolchain-puppetmodules

Nebo přímo přes loutku:

puppet apply --modulepath=<path_to_bigtop> -e "include bigtop_toolchain::installer"
puppet apply --modulepath=<path_to_bigtop> -e "include bigtop_toolchain::deployment-tools"
puppet apply --modulepath=<path_to_bigtop> -e "include bigtop_toolchain::development-tools"

Bohužel již v této fázi mohou nastat potíže. Obecnou radou je použít podporovanou distribuci, aktuální na hostiteli sestavení, nebo vyzkoušet cestu dockeru.

shromáždění

Co můžeme zkusit sbírat? Odpověď na tuto otázku bude dána výstupem příkazu

./gradlew tasks

V sekci Úkoly balíčku je řada produktů, které jsou finálními artefakty Bigtopu.
Lze je identifikovat podle přípony -rpm nebo -pkg-ind (v případě budovy
v dockeru). V našem případě je nejzajímavější Hadoop.

Zkusme stavět v prostředí našeho build serveru:

./gradlew hadoop-rpm

Bigtop si sám stáhne potřebné zdroje potřebné pro konkrétní součástku a zahájí montáž. Činnost nástroje je tedy závislá na úložištích Maven a dalších zdrojích, to znamená, že vyžaduje přístup k internetu.

Během provozu je generován standardní výstup. Někdy vám to a chybové zprávy mohou pomoci pochopit, co se pokazilo. A někdy potřebujete získat další informace. V tomto případě stojí za to přidat argumenty --info nebo --debuga může být také užitečné –stacktrace. Existuje pohodlný způsob, jak vygenerovat datovou sadu pro následný přístup k mailing listům, klíč --scan.

S jeho pomocí bigtop shromáždí všechny informace a vloží je do gradle, načež poskytne odkaz,
podle kterého bude kompetentní osoba schopna pochopit, proč shromáždění selhalo.
Uvědomte si prosím, že tato možnost může odhalit informace, které nechcete, jako jsou uživatelská jména, uzly, proměnné prostředí atd., takže buďte opatrní.

Chyby jsou často důsledkem neschopnosti získat jakékoli součásti potřebné pro montáž. Obvykle můžete problém vyřešit vytvořením opravy, která opraví něco ve zdrojích, například adresy v pom.xml v kořenovém adresáři zdrojů. To se provádí vytvořením a umístěním do příslušného adresáře ./bigtop/bigtop-packages/src/common/oozie/ náplast například ve formě patch2-fix.diff.

--- a/pom.xml
+++ b/pom.xml
@@ -136,7 +136,7 @@
<repositories>
<repository>
<id>central</id>
- <url>http://repo1.maven.org/maven2</url>
+ <url>https://repo1.maven.org/maven2</url>
<snapshots>
<enabled>false</enabled>
</snapshots>

S největší pravděpodobností v době čtení tohoto článku nebudete muset provést výše uvedenou opravu sami.

Při zavádění jakýchkoli záplat a změn do mechanismu sestavení může být nutné sestavu „resetovat“ pomocí příkazu cleanup:

./gradlew hadoop-clean
> Task :hadoop_vardefines
> Task :hadoop-clean
BUILD SUCCESSFUL in 5s
2 actionable tasks: 2 executed

Tato operace vrátí zpět všechny změny v sestavě této součásti, po které bude sestava provedena znovu. Tentokrát se pokusíme vytvořit projekt v dockeru:

./gradlew -POS=centos-7 -Pprefix=1.2.1 hadoop-pkg-ind
> Task :hadoop-pkg-ind
Building 1.2.1 hadoop-pkg on centos-7 in Docker...
+++ dirname ./bigtop-ci/build.sh
++ cd ./bigtop-ci/..
++ pwd
+ BIGTOP_HOME=/tmp/bigtop
+ '[' 6 -eq 0 ']'
+ [[ 6 -gt 0 ]]
+ key=--prefix
+ case $key in
+ PREFIX=1.2.1
+ shift
+ shift
+ [[ 4 -gt 0 ]]
+ key=--os
+ case $key in
+ OS=centos-7
+ shift
+ shift
+ [[ 2 -gt 0 ]]
+ key=--target
+ case $key in
+ TARGET=hadoop-pkg
+ shift
+ shift
+ [[ 0 -gt 0 ]]
+ '[' -z x ']'
+ '[' -z x ']'
+ '[' '' == true ']'
+ IMAGE_NAME=bigtop/slaves:1.2.1-centos-7
++ uname -m
+ ARCH=x86_64
+ '[' x86_64 '!=' x86_64 ']'
++ docker run -d bigtop/slaves:1.2.1-centos-7 /sbin/init
+
CONTAINER_ID=0ce5ac5ca955b822a3e6c5eb3f477f0a152cd27d5487680f77e33fbe66b5bed8
+ trap 'docker rm -f
0ce5ac5ca955b822a3e6c5eb3f477f0a152cd27d5487680f77e33fbe66b5bed8' EXIT
....
много вывода
....
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-hdfs-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-yarn-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-mapreduce-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-hdfs-namenode-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-hdfs-secondarynamenode-2.8.5-
1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-hdfs-zkfc-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-hdfs-journalnode-2.8.5-
1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-hdfs-datanode-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-httpfs-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-yarn-resourcemanager-2.8.5-
1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-yarn-nodemanager-2.8.5-
1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-yarn-proxyserver-2.8.5-
1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-yarn-timelineserver-2.8.5-
1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-mapreduce-historyserver-2.8.5-
1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-client-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-conf-pseudo-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-doc-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-libhdfs-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-libhdfs-devel-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-hdfs-fuse-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-debuginfo-2.8.5-1.el7.x86_64.rpm
+ umask 022
+ cd /bigtop/build/hadoop/rpm//BUILD
+ cd hadoop-2.8.5-src
+ /usr/bin/rm -rf /bigtop/build/hadoop/rpm/BUILDROOT/hadoop-2.8.5-1.el7.x86_64
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.uQ2FCn
+ exit 0
+ umask 022
Executing(--clean): /bin/sh -e /var/tmp/rpm-tmp.CwDb22
+ cd /bigtop/build/hadoop/rpm//BUILD
+ rm -rf hadoop-2.8.5-src
+ exit 0
[ant:touch] Creating /bigtop/build/hadoop/.rpm
:hadoop-rpm (Thread[Task worker for ':',5,main]) completed. Took 38 mins 1.151 secs.
:hadoop-pkg (Thread[Task worker for ':',5,main]) started.
> Task :hadoop-pkg
Task ':hadoop-pkg' is not up-to-date because:
Task has not declared any outputs despite executing actions.
:hadoop-pkg (Thread[Task worker for ':',5,main]) completed. Took 0.0 secs.
BUILD SUCCESSFUL in 40m 37s
6 actionable tasks: 6 executed
+ RESULT=0
+ mkdir -p output
+ docker cp
ac46014fd9501bdc86b6c67d08789fbdc6ee46a2645550ff6b6712f7d02ffebb:/bigtop/build .
+ docker cp
ac46014fd9501bdc86b6c67d08789fbdc6ee46a2645550ff6b6712f7d02ffebb:/bigtop/output .
+ docker rm -f ac46014fd9501bdc86b6c67d08789fbdc6ee46a2645550ff6b6712f7d02ffebb
ac46014fd9501bdc86b6c67d08789fbdc6ee46a2645550ff6b6712f7d02ffebb
+ '[' 0 -ne 0 ']'
+ docker rm -f ac46014fd9501bdc86b6c67d08789fbdc6ee46a2645550ff6b6712f7d02ffebb
Error: No such container:
ac46014fd9501bdc86b6c67d08789fbdc6ee46a2645550ff6b6712f7d02ffebb
BUILD SUCCESSFUL in 41m 24s
1 actionable task: 1 executed

Sestavení bylo provedeno pod CentOS, ale lze jej provést také pod Ubuntu:

./gradlew -POS=ubuntu-16.04 -Pprefix=1.2.1 hadoop-pkg-ind

Kromě vytváření balíčků pro různé linuxové distribuce může tento nástroj vytvořit úložiště se zkompilovanými balíčky, například:

./gradlew yum

Můžete si také vzpomenout na kouřové testy a nasazení v Dockeru.

Vytvořte shluk tří uzlů:

./gradlew -Pnum_instances=3 docker-provisioner

Spusťte kouřové testy ve skupině tří uzlů:

./gradlew -Pnum_instances=3 -Prun_smoke_tests docker-provisioner

Smazat cluster:

./gradlew docker-provisioner-destroy

Získejte příkazy pro připojení uvnitř kontejnerů dockeru:

./gradlew docker-provisioner-ssh

Zobrazit stav:

./gradlew docker-provisioner-status

Více o úlohách nasazení si můžete přečíst v dokumentaci.

Pokud se budeme bavit o testech, tak těch je poměrně velké množství, hlavně kouřové a integrační. Jejich analýza přesahuje rámec tohoto článku. Řeknu jen, že sestavit rozvodnou sadu není tak náročný úkol, jak by se na první pohled mohlo zdát. Podařilo se nám sestavit a projít testy na všech komponentách, které používáme ve výrobě, a také jsme bez problémů nasadili a provedli základní operace v testovacím prostředí.

Ke stávajícím komponentám v Bigtopu je možné přidat cokoli dalšího, dokonce i vlastní vývoj softwaru. To vše je dokonale automatizované a zapadá do konceptu CI/CD.

Závěr

Je zřejmé, že takto sestavená distribuce by neměla být ihned odeslána do výroby. Musíte pochopit, že pokud existuje skutečná potřeba vybudovat a podporovat vaši distribuci, musíte do toho investovat peníze a čas.

V kombinaci se správným přístupem a profesionálním týmem se však docela dobře obejdete i bez komerčních řešení.

Je důležité poznamenat, že samotný projekt Bigtop potřebuje vývoj a nezdá se, že by se dnes aktivně rozvíjel. Nejasná je také vyhlídka, že se v něm objeví Hadoop 3. Mimochodem, pokud máte skutečnou potřebu postavit Hadoop 3, můžete se podívat na Vidlička od Arenadata, ve kterém se kromě standard
K dispozici je řada doplňkových komponent (Ranger, Knox, NiFi).

Co se týče Rostelecomu, pro nás je Bigtop jednou z možností, o kterých se dnes uvažuje. Jestli si to vybereme nebo ne, ukáže čas.

Příloha

Chcete-li do sestavy zahrnout nový komponent, musíte přidat jeho popis do bigtop.bom a ./bigtop-packages. Můžete to zkusit udělat analogicky s existujícími komponenty. Zkuste na to přijít. Není to tak těžké, jak se na první pohled zdá.

Co myslíš? Budeme rádi, když v komentářích uvidíte váš názor a děkujeme za pozornost!

Článek připravil tým správy dat Rostelecom

Zdroj: www.habr.com

Přidat komentář