Pravdepodobne nie je žiadnym tajomstvom, že minulý rok bol pre Apache Hadoop rokom veľkých zmien. Minulý rok došlo k fúzii Cloudera a Hortonworks (v podstate akvizícii druhej menovanej) a Mapr bol pre vážne finančné problémy predaný spoločnosti Hewlett Packard. A ak o niekoľko rokov skôr, v prípade on-premise inštalácií, bolo treba často vyberať medzi Cloudera a Hortonworks, dnes, žiaľ, túto voľbu nemáme. Ďalším prekvapením bol fakt, že Cloudera vo februári tohto roku oznámila, že prestane vydávať binárne zostavy svojej distribúcie do verejného úložiska a tie sú už dostupné len cez platené predplatné. Samozrejme, stále je možné stiahnuť si najnovšie verzie CDH a HDP vydané pred koncom roka 2019 a ich podpora sa očakáva jeden až dva roky. Ale čo robiť ďalej? Pre tých, ktorí si predtým platili predplatné, sa nič nezmenilo. A pre tých, ktorí nechcú prejsť na platenú verziu distribúcie, no zároveň chcú mať možnosť dostávať najnovšie verzie klastrových komponentov, ako aj záplaty a ďalšie aktualizácie, sme pripravili tento článok. V ňom zvážime možné možnosti, ako sa dostať z tejto situácie.
Článok je skôr recenzia. Nebude obsahovať porovnanie distribúcií a ich podrobný rozbor a nebudú chýbať ani recepty na ich inštaláciu a konfiguráciu. Čo sa bude diať? V krátkosti si povieme o takej distribúcii, akou je Arenadata Hadoop, ktorá si právom zaslúži našu pozornosť vďaka svojej dnes už veľmi vzácnej dostupnosti. A potom si povieme niečo o Vanilla Hadoop, hlavne o tom, ako sa dá „uvariť“ pomocou Apache Bigtop. pripravený? Potom vitajte v mačke.
Arenadata Hadoop
Ide o úplne nový a zatiaľ málo známy distribučný kit domáceho vývoja. Žiaľ, momentálne je na Habré len
Bližšie informácie nájdete na oficiálnom
Informácie o cestovnej mape nájdete
Rozhranie správcu klastrov Arenadata
Hlavným produktom spoločnosti Arenadata je
Na nasadenie a správu Hadoop 3 sa ponúka komunitná verzia balíka v spojení s ADCM, ale pre Hadoop 2 je k dispozícii iba
Ak hovoríme o nevýhodách, budú rovnaké ako u všetkých ostatných distribúcií Hadoop. menovite:
- Takzvaný „vendor lock-in“. Na príkladoch Cloudera a Hortonworks sme si už uvedomili, že vždy existuje riziko zmeny firemnej politiky.
- Výrazné zaostávanie za Apache proti prúdu.
Vanilkový hadoop
Ako viete, Hadoop nie je monolitický produkt, ale v skutočnosti celá galaxia služieb okolo distribuovaného súborového systému HDFS. Málokomu bude stačiť jeden klaster súborov. Niektorí potrebujú Hive, iní Presto a potom sú tu HBase a Phoenix; Spark sa čoraz viac používa. Na orchestráciu a načítanie údajov sa niekedy nachádzajú Oozie, Sqoop a Flume. A ak sa objaví otázka bezpečnosti, okamžite príde na myseľ Kerberos v spojení s Rangerom.
Binárne verzie komponentov Hadoop sú dostupné na webovej stránke každého z ekosystémových projektov vo forme tarballov. Môžete si ich stiahnuť a začať s inštaláciou, ale s jednou podmienkou: okrem nezávislého zostavovania balíkov zo „surových“ binárnych súborov, ktoré s najväčšou pravdepodobnosťou chcete urobiť, nebudete mať žiadnu dôveru v kompatibilitu stiahnutých verzií komponentov s každým iné. Preferovanou možnosťou je zostaviť pomocou Apache Bigtop. Bigtop vám umožní stavať z repozitárov Apache maven, spúšťať testy a zostavovať balíčky. Čo je však pre nás veľmi dôležité, Bigtop zostaví tie verzie komponentov, ktoré budú navzájom kompatibilné. Nižšie si o tom povieme podrobnejšie.
Apache Bigtop
Apache Bigtop je nástroj na zostavovanie, balenie a testovanie množstva
open source projekty, ako sú Hadoop a Greenplum. Bigtop má veľa
vydania. V čase písania tohto článku bola posledná stabilná verzia verzia 1.4,
a v master bolo 1.5. Rôzne verzie vydaní používajú rôzne verzie
komponentov. Napríklad pre 1.4 majú komponenty jadra Hadoop verziu 2.8.5 a v hlavnej verzii
2.10.0. Mení sa aj zloženie podporovaných komponentov. Niečo zastarané a
neobnoviteľné odíde a na jeho miesto príde niečo nové, žiadanejšie a
nie je to nevyhnutne niečo zo samotnej rodiny Apačov.
Okrem toho má Bigtop veľa
Keď sme sa začali zoznamovať s Bigtopom, v prvom rade nás prekvapila jeho skromná, v porovnaní s inými projektmi Apache, rozšírenosť a obľúbenosť, ako aj veľmi malá komunita. Z toho vyplýva, že o produkte je minimum informácií a hľadanie riešení problémov, ktoré sa vyskytli na fórach a mailing listoch, nemusí priniesť vôbec nič. Najprv sa pre nás ukázalo ako náročná úloha dokončiť kompletnú montáž distribúcie kvôli vlastnostiam samotného nástroja, ale o tom budeme hovoriť o niečo neskôr.
Ako ukážku, pre tých, ktorí sa kedysi zaujímali o také projekty linuxového vesmíru ako Gentoo a LFS, môže byť nostalgicky príjemné pracovať s touto vecou a zaspomínať si na tie „epické“ časy, keď sme sami hľadali (alebo dokonca písali) ebuilduje a pravidelne prestavuje Mozillu s novými záplatami.
Veľkou výhodou Bigtopu je otvorenosť a univerzálnosť nástrojov, na ktorých je založený. Je založený na Gradle a Apache Maven. Gradle je celkom dobre známy ako nástroj, ktorý Google používa na zostavovanie Androidu. Je flexibilný a, ako sa hovorí, „testovaný v boji“. Maven je štandardný nástroj na budovanie projektov v samotnom Apache a keďže väčšina jeho produktov vychádza cez Maven, nezaobišlo sa to bez neho ani tu. Za pozornosť stojí POM (project object model) - „základný“ xml súbor popisujúci všetko, čo Maven potrebuje na prácu s vaším projektom, okolo ktorého je postavená všetka práca. Presne o
časti Maven a existuje niekoľko prekážok, s ktorými sa zvyčajne stretávajú prví používatelia Bigtopu.
Prax
Kde by ste teda mali začať? Prejdite na stránku sťahovania a stiahnite si najnovšiu stabilnú verziu ako archív. Môžete tam nájsť aj binárne artefakty, ktoré zozbieral Bigtop. Mimochodom, medzi bežnými správcami balíkov sú podporované YUM a APT.
Prípadne si môžete stiahnuť najnovšiu stabilnú verziu priamo z
github:
$ git clone --branch branch-1.4 https://github.com/apache/bigtop.git
Klonovanie v „bigtope“…
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ár ./bigtop vyzerá asi takto:
./bigtop-bigpetstore
— demo aplikácie, syntetické príklady
./bigtop-ci
- Nástroje CI, Jenkins
./bigtop-data-generators
— generovanie údajov, syntetika, pre skúšky dymu atď.
./bigtop-deploy
- nástroje na nasadenie
./bigtop-packages
— konfigurácie, skripty, záplaty na zostavenie, hlavná časť nástroja
./bigtop-test-framework
— testovací rámec
./bigtop-tests
— samotné testy, zaťaženie a dym
./bigtop_toolchain
— prostredie na montáž, príprava prostredia na prácu nástroja
./build
- vytvoriť pracovný adresár
./dl
— adresár pre stiahnuté zdroje
./docker
— zabudovanie obrázkov dokovacích staníc, testovanie
./gradle
- konfigurácia gradle
./output
– adresár, kam idú artefakty zostáv
./provisioner
— dotovanie
Najzaujímavejšia vec pre nás v tejto fáze je hlavná konfigurácia ./bigtop/bigtop.bom
, v ktorom vidíme všetky podporované komponenty s verziami. Tu môžeme určiť inú verziu produktu (ak sa ho zrazu chceme pokúsiť zostaviť) alebo verziu zostavy (ak sme napríklad pridali významnú záplatu).
Veľký záujem je aj o podadresár ./bigtop/bigtop-packages
, ktorá priamo súvisí s procesom montáže komponentov a balíkov s nimi.
Takže, stiahli sme archív, rozbalili ho alebo vytvorili klon z githubu, môžeme začať stavať?
Nie, najskôr pripravme prostredie.
Príprava prostredia
A tu potrebujeme malý ústup. Na zostavenie takmer akéhokoľvek viac či menej zložitého produktu potrebujete určité prostredie - v našom prípade je to JDK, rovnaké zdieľané knižnice, hlavičkové súbory atď., Nástroje, napríklad ant, Ivy2 a oveľa viac. Jednou z možností, ako získať prostredie, ktoré potrebujete pre Bigtop, je nainštalovať potrebné komponenty na hostiteľa zostavy. Mohol by som sa mýliť v chronológii, ale zdá sa, že s verziou 1.0 bola k dispozícii aj možnosť zabudovania predkonfigurovaných a prístupných obrázkov Docker, ktoré nájdete tu.
Čo sa týka prípravy prostredia, na to je tu pomocník – Bábka.
Môžete použiť nasledujúce príkazy spúšťané z koreňového adresára
nástroj, ./bigtop:
./gradlew toolchain
./gradlew toolchain-devtools
./gradlew toolchain-puppetmodules
Alebo priamo cez bábku:
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žiaľ, už v tejto fáze môžu nastať ťažkosti. Všeobecnou radou je použiť podporovanú distribúciu, ktorá je aktuálna na hostiteľovi zostavy, alebo vyskúšať cestu dokovacích staníc.
zhromaždenia
Čo môžeme skúsiť zbierať? Odpoveď na túto otázku bude daná výstupom príkazu
./gradlew tasks
V sekcii Úlohy balíka je množstvo produktov, ktoré sú konečnými artefaktmi Bigtopu.
Možno ich identifikovať podľa prípony -rpm alebo -pkg-ind (v prípade budovy
v dockeri). V našom prípade je najzaujímavejší Hadoop.
Skúsme stavať v prostredí nášho build servera:
./gradlew hadoop-rpm
Bigtop si sám stiahne potrebné zdroje potrebné pre konkrétny komponent a začne s montážou. Prevádzka nástroja je teda závislá od repozitárov Maven a iných zdrojov, to znamená, že vyžaduje prístup na internet.
Počas prevádzky sa generuje štandardný výstup. Niekedy vám to a chybové hlásenia môžu pomôcť pochopiť, čo sa pokazilo. A niekedy potrebujete získať ďalšie informácie. V tomto prípade stojí za to pridať argumenty --info
alebo --debug
a môžu byť tiež užitočné –stacktrace
. Existuje pohodlný spôsob, ako vygenerovať súbor údajov pre následný prístup k zoznamom adries, kľúč --scan
.
S jeho pomocou bigtop zhromaždí všetky informácie a vloží ich do gradle, potom poskytne odkaz,
podľa ktorého bude kompetentná osoba schopná pochopiť, prečo zhromaždenie zlyhalo.
Upozorňujeme, že táto možnosť môže odhaliť informácie, ktoré nechcete, ako sú používateľské mená, uzly, premenné prostredia atď., takže buďte opatrní.
Chyby sú často dôsledkom neschopnosti získať akékoľvek komponenty potrebné na montáž. Zvyčajne môžete problém vyriešiť vytvorením opravy na opravu niečoho v zdrojoch, napríklad adresy v pom.xml v koreňovom adresári zdrojov. To sa dosiahne vytvorením a umiestnením do príslušného adresára ./bigtop/bigtop-packages/src/common/oozie/
náplasť napríklad vo forme 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 najväčšou pravdepodobnosťou v čase čítania tohto článku nebudete musieť vykonať vyššie uvedenú opravu sami.
Pri zavádzaní akýchkoľvek záplat a zmien do mechanizmu zostavy možno budete musieť zostavu „resetovať“ pomocou príkazu cleanup:
./gradlew hadoop-clean
> Task :hadoop_vardefines
> Task :hadoop-clean
BUILD SUCCESSFUL in 5s
2 actionable tasks: 2 executed
Táto operácia vráti späť všetky zmeny v zostave tohto komponentu, po ktorej sa zostava vykoná znova. Tentoraz sa pokúsime vytvoriť projekt v dockerovom obrázku:
./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
Zostavenie bolo vykonané pod CentOS, ale dá sa vykonať aj pod Ubuntu:
./gradlew -POS=ubuntu-16.04 -Pprefix=1.2.1 hadoop-pkg-ind
Okrem vytvárania balíkov pre rôzne distribúcie Linuxu môže tento nástroj vytvoriť úložisko so zostavenými balíkmi, napríklad:
./gradlew yum
Môžete si tiež spomenúť na dymové testy a nasadenie v Dockeri.
Vytvorte zhluk troch uzlov:
./gradlew -Pnum_instances=3 docker-provisioner
Spustite testy dymu v skupine troch uzlov:
./gradlew -Pnum_instances=3 -Prun_smoke_tests docker-provisioner
Odstránenie klastra:
./gradlew docker-provisioner-destroy
Získajte príkazy na pripojenie vnútri kontajnerov dokovacích staníc:
./gradlew docker-provisioner-ssh
Zobraziť stav:
./gradlew docker-provisioner-status
Viac o úlohách nasadenia si môžete prečítať v dokumentácii.
Ak hovoríme o testoch, je ich pomerne veľké množstvo, hlavne dymové a integračné. Ich analýza presahuje rámec tohto článku. Poviem len, že zostaviť rozvodnú súpravu nie je taká náročná úloha, ako by sa na prvý pohľad mohlo zdať. Podarilo sa nám zostaviť a prejsť testami na všetkých komponentoch, ktoré používame vo výrobe a taktiež sme nemali problémy s ich nasadením a vykonaním základných operácií v testovacom prostredí.
Okrem existujúcich komponentov v Bigtop je možné pridať čokoľvek iné, dokonca aj vlastný vývoj softvéru. To všetko je dokonale automatizované a zapadá do konceptu CI/CD.
Záver
Je zrejmé, že takto zostavená distribúcia by sa nemala ihneď posielať do výroby. Musíte pochopiť, že ak existuje skutočná potreba vybudovať a podporovať vašu distribúciu, musíte do toho investovať peniaze a čas.
V kombinácii so správnym prístupom a profesionálnym tímom sa však celkom dá zaobísť aj bez komerčných riešení.
Je dôležité poznamenať, že samotný projekt Bigtop potrebuje vývoj a nezdá sa, že by sa dnes aktívne rozvíjal. Nejasná je aj perspektíva, že sa v ňom objaví Hadoop 3. Mimochodom, ak máte skutočnú potrebu postaviť Hadoop 3, môžete sa pozrieť na
Existuje množstvo doplnkových komponentov (Ranger, Knox, NiFi).
Čo sa týka Rostelecomu, pre nás je Bigtop jednou z možností, o ktorých sa dnes uvažuje. Či si to vyberieme alebo nie, ukáže čas.
Dodatok
Ak chcete do zostavy zahrnúť nový komponent, musíte pridať jeho popis do bigtop.bom a ./bigtop-packages. Môžete to skúsiť urobiť analogicky s existujúcimi komponentmi. Skúste na to prísť. Nie je to také ťažké, ako sa na prvý pohľad zdá.
Co si myslis? Budeme radi, ak si v komentároch pozriete váš názor a ďakujeme za pozornosť!
Článok pripravil tím správy údajov Rostelecom
Zdroj: hab.com