Apache Bigtop in izbira distribucije Hadoop danes

Apache Bigtop in izbira distribucije Hadoop danes

Verjetno ni skrivnost, da je bilo lansko leto za Apache Hadoop leto velikih sprememb. Lani sta se združili Cloudera in Hortonworks (v bistvu prevzem slednjega), Mapr pa je bil zaradi resnih finančnih težav prodan Hewlett Packardu. In če je bilo še nekaj let prej pri namestitvah na mestu pogosto treba izbirati med Cloudero in Hortonworks, danes te izbire, žal, nimamo. Drugo presenečenje je bilo dejstvo, da je Cloudera februarja letos objavila, da bo prenehala objavljati binarne sklope svoje distribucije v javnem repozitoriju in so zdaj na voljo le prek plačljive naročnine. Seveda je še vedno mogoče prenesti najnovejši različici CDH in HDP, ki sta izšli pred koncem leta 2019, podpora zanju pa je predvidena eno do dve leti. Toda kaj storiti naprej? Za tiste, ki so prej plačevali naročnino, se ni nič spremenilo. In za tiste, ki ne želijo preklopiti na plačljivo različico distribucije, hkrati pa želijo prejemati najnovejše različice komponent gruče, pa tudi popravke in druge posodobitve, smo pripravili ta članek. V njem bomo preučili možne možnosti za izhod iz te situacije.

Članek je bolj pregleden. Ne bo vsebovala primerjave distribucij in njihove podrobne analize, prav tako ne bo receptov za njihovo namestitev in konfiguracijo. Kaj se bo zgodilo? Na kratko bomo govorili o takšni distribuciji, kot je Arenadata Hadoop, ki si upravičeno zasluži našo pozornost zaradi svoje dostopnosti, ki je danes zelo redka. In potem bomo govorili o Vanilla Hadoop, predvsem o tem, kako ga je mogoče "skuhati" z uporabo Apache Bigtop. pripravljena Potem dobrodošli pri mački.

Arenadata Hadoop

Apache Bigtop in izbira distribucije Hadoop danes

To je popolnoma nov in še malo znan distribucijski komplet domačega razvoja. Na žalost je trenutno na Habréju samo ta članek.

Več informacij najdete na uradni strani Online projekt. Najnovejše različice distribucije temeljijo na Hadoop 3.1.2 za različico 3 in 2.8.5 za različico 2.

Informacije o načrtu lahko najdete tukaj.

Apache Bigtop in izbira distribucije Hadoop danes
Vmesnik upravitelja gruče Arenadata

Glavni izdelek Arenadata je Upravitelj gruče Arenadata (ADCM), ki se uporablja za namestitev, konfiguracijo in spremljanje različnih programskih rešitev podjetja. ADCM se distribuira brezplačno, njegova funkcionalnost pa je razširjena z dodajanjem svežnjev, ki so nabor ansible-playbooks. Paketi so razdeljeni na dve vrsti: podjetje in skupnost. Slednji so na voljo za brezplačen prenos s spletne strani Arenadata. Možno je tudi razviti lasten paket in ga povezati z ADCM.

Za uvajanje in upravljanje Hadoop 3 je na voljo skupnostna različica svežnja v povezavi z ADCM, za Hadoop 2 pa je na voljo samo Apache Ambari kot alternativa. Kar zadeva repozitorije s paketi, so odprti za javni dostop, jih je mogoče prenesti in namestiti na običajen način za vse komponente gruče. Na splošno je distribucija videti zelo zanimiva. Prepričan sem, da se bodo našli tisti, ki so navajeni rešitev, kot sta Cloudera Manager in Ambari, in jim bo všeč sam ADCM. Za nekatere bo velik plus tudi distribucija vključen v register programske opreme za nadomestitev uvoza.

Če govorimo o pomanjkljivostih, bodo enake kot pri vseh drugih distribucijah Hadoop. namreč:

  • Tako imenovano »vendor lock-in«. Na primerih Cloudera in Hortonworks smo že ugotovili, da vedno obstaja tveganje spremembe politike podjetja.
  • Občuten zaostanek za Apache gorvodno.

Vanilija Hadoop

Apache Bigtop in izbira distribucije Hadoop danes

Kot veste, Hadoop ni monoliten izdelek, ampak pravzaprav cela galaksija storitev okoli njegovega porazdeljenega datotečnega sistema HDFS. Le malokdo bo imel dovolj enega grozda datotek. Nekateri potrebujejo Hive, drugi Presto, potem pa sta tu še HBase in Phoenix; Spark se vse bolj uporablja. Za orkestracijo in nalaganje podatkov se včasih najdejo Oozie, Sqoop in Flume. In če se pojavi vprašanje varnosti, potem takoj pride na misel Kerberos v povezavi z Rangerjem.

Binarne različice komponent Hadoop so na voljo na spletnem mestu vsakega od projektov ekosistema v obliki arhivov. Lahko jih prenesete in začnete z namestitvijo, vendar z enim pogojem: poleg samostojnega sestavljanja paketov iz "surovih" binarnih datotek, kar najverjetneje želite storiti, ne boste imeli nobenega zaupanja v združljivost prenesenih različic komponent z vsako drugo. Najprimernejša možnost je gradnja z uporabo Apache Bigtop. Bigtop vam bo omogočil gradnjo iz repozitorijev Apache maven, izvajanje testov in gradnjo paketov. Ampak, kar je za nas zelo pomembno, Bigtop bo sestavljal tiste različice komponent, ki bodo med seboj kompatibilne. O tem bomo podrobneje govorili spodaj.

Apache Bigtop

Apache Bigtop in izbira distribucije Hadoop danes

Apache Bigtop je orodje za izdelavo, pakiranje in testiranje številnih
odprtokodnih projektov, kot sta Hadoop in Greenplum. Bigtop ima veliko
izdaje. V času pisanja je bila zadnja stabilna izdaja različica 1.4,
in v masterju je bil 1.5. Različne različice izdaj uporabljajo različne različice
komponente. Na primer, za 1.4 Hadoop osnovne komponente imajo različico 2.8.5 in v master
2.10.0. Spreminja se tudi sestava podprtih komponent. Nekaj ​​zastarelega in
neobnovljivo odide in na njegovo mesto pride nekaj novega, bolj iskanega in
ni nujno nekaj iz same družine Apache.

Poleg tega jih ima Bigtop veliko vilice.

Ko smo se začeli seznanjati z Bigtopom, smo bili najprej presenečeni nad njegovo skromno, v primerjavi z drugimi projekti Apache, razširjenostjo in priljubljenostjo ter zelo majhno skupnostjo. Iz tega sledi, da je informacij o izdelku minimalno, iskanje rešitev za težave, ki so se pojavile na forumih in mailing listah, pa morda ne prinese prav ničesar. Sprva se je izkazalo, da je težko dokončati celotno montažo distribucije zaradi lastnosti samega orodja, vendar bomo o tem govorili malo kasneje.

Kot dražljivka, tistim, ki so se nekoč zanimali za takšne projekte vesolja Linuxa, kot sta Gentoo in LFS, se bo morda zdelo nostalgično prijetno delati s to stvarjo in se spomniti tistih "epskih" časov, ko smo sami iskali (ali celo pisali) ebuilds in redno obnavljal Mozillo z novimi popravki.

Velika prednost Bigtopa je odprtost in vsestranskost orodij, na katerih temelji. Temelji na Gradle in Apache Maven. Gradle je precej znan kot orodje, ki ga Google uporablja za izdelavo Androida. Je prilagodljiv in, kot pravijo, "preizkušen v bitkah". Maven je standardno orodje za gradnjo projektov v samem Apacheju in ker je večina njegovih izdelkov izdanih prek Mavena, brez njega tudi tukaj ne bi šlo. Vredno je biti pozoren na POM (project object model) - "temeljno" xml datoteko, ki opisuje vse, kar je potrebno za Maven za delo z vašim projektom, okoli katerega je zgrajeno vse delo. Točno ob
deli Maven in obstajajo nekatere ovire, na katere običajno naletijo novi uporabniki Bigtopa.

Practice

Kje torej začeti? Pojdite na stran za prenos in prenesite najnovejšo stabilno različico kot arhiv. Tam lahko najdete tudi binarne artefakte, ki jih zbira Bigtop. Mimogrede, med običajnimi upravitelji paketov sta podprta YUM in APT.

Druga možnost je, da prenesete najnovejšo stabilno izdajo neposredno iz
github:

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

Kloniranje v "bigtop" ...

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), готово.

Nastali imenik ./bigtop je videti nekako takole:

./bigtop-bigpetstore — demo aplikacije, sintetični primeri
./bigtop-ci — Komplet orodij CI, jenkins
./bigtop-data-generators — pridobivanje podatkov, sintetika, za dimne teste itd.
./bigtop-deploy - orodja za uvajanje
./bigtop-packages — konfiguracije, skripte, popravki za sestavljanje, glavni del orodja
./bigtop-test-framework — okvir testiranja
./bigtop-tests — sami testi, obremenitev in dim
./bigtop_toolchain — okolje za montažo, priprava okolja za delovanje orodja
./build — sestavite delovni imenik
./dl — imenik za prenesene vire
./docker — vgradnja v docker slike, testiranje
./gradle - gradle config
./output – imenik, kamor gredo artefakti gradnje
./provisioner — zagotavljanje

Na tej stopnji je za nas najbolj zanimiva glavna konfiguracija ./bigtop/bigtop.bom, v katerem vidimo vse podprte komponente z različicami. Tu lahko določimo drugo različico izdelka (če ga nenadoma želimo poskusiti zgraditi) ali gradbeno različico (če smo na primer dodali pomemben popravek).

Zelo zanimiv je tudi podimenik ./bigtop/bigtop-packages, ki je neposredno povezan s procesom sestavljanja komponent in paketov z njimi.

Torej, prenesli smo arhiv, ga razpakirali ali naredili klon iz githuba, lahko začnemo graditi?

Ne, najprej pripravimo okolje.

Priprava okolja

In tukaj potrebujemo majhen umik. Za izdelavo skoraj katerega koli bolj ali manj zapletenega izdelka je potrebno določeno okolje - v našem primeru je to JDK, iste skupne knjižnice, datoteke glave itd., Orodja, na primer ant, ivy2 in še veliko več. Ena od možnosti za pridobitev okolja, ki ga potrebujete za Bigtop, je namestitev potrebnih komponent na gostitelja gradnje. Morda se motim v kronologiji, vendar se zdi, da je bila z različico 1.0 na voljo tudi možnost vgradnje vnaprej konfiguriranih in dostopnih slik Docker, ki jih najdete tukaj.

Kar zadeva pripravo okolja, je za to pomočnik - Lutka.

Uporabite lahko naslednje ukaze, ki jih zaženete iz korenskega imenika
orodje, ./bigtop:

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

Ali neposredno preko lutke:

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"

Na žalost lahko že na tej stopnji nastanejo težave. Splošni nasvet tukaj je, da uporabite podprto distribucijo, posodobljeno na gostitelju gradnje, ali poskusite pot dockerja.

Skupščina

Kaj lahko poskusimo zbrati? Odgovor na to vprašanje bo dal rezultat ukaza

./gradlew tasks

V razdelku Paketna opravila je več izdelkov, ki so zadnji artefakti Bigtopa.
Prepoznamo jih po priponi -rpm ali -pkg-ind (v primeru stavbe
v dokerju). V našem primeru je najbolj zanimiv Hadoop.

Poskusimo graditi v okolju našega gradbenega strežnika:

./gradlew hadoop-rpm

Bigtop bo sam prenesel potrebne vire, potrebne za določeno komponento, in začel z montažo. Tako je delovanje orodja odvisno od repozitorijev Maven in drugih virov, torej zahteva dostop do interneta.

Med delovanjem se ustvari standardni izhod. Včasih vam lahko to in sporočila o napakah pomagajo razumeti, kaj je šlo narobe. In včasih morate dobiti dodatne informacije. V tem primeru je vredno dodati argumente --info ali --debug, in je lahko tudi koristno –stacktrace. Obstaja priročen način za ustvarjanje nabora podatkov za poznejši dostop do poštnih seznamov, ključ --scan.

Bigtop bo z njegovo pomočjo zbral vse informacije in jih dal v gradle, nakar bo posredoval povezavo,
po katerem bo pristojna oseba lahko razumela, zakaj montaža ni uspela.
Zavedajte se, da lahko ta možnost razkrije informacije, ki jih ne želite, kot so uporabniška imena, vozlišča, spremenljivke okolja itd., zato bodite previdni.

Pogosto so napake posledica nezmožnosti pridobitve potrebnih komponent za montažo. Običajno lahko težavo odpravite tako, da ustvarite popravek, da popravite nekaj v virih, na primer naslove v pom.xml v korenskem imeniku virov. To storite tako, da ga ustvarite in postavite v ustrezen imenik ./bigtop/bigtop-packages/src/common/oozie/ obliž, na primer v obliki 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>

Najverjetneje vam v času branja tega članka zgornjega popravka ne bo treba opraviti sami.

Ko uvajate kakršne koli popravke in spremembe mehanizma sestavljanja, boste morda morali »ponastaviti« sestav z ukazom za čiščenje:

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

Ta operacija bo povrnila vse spremembe sestava te komponente, nato pa bo sestavljanje znova izvedeno. Tokrat bomo poskusili zgraditi projekt v sliki dockerja:

./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

Gradnja je bila izvedena pod CentOS, lahko pa tudi pod Ubuntu:

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

Poleg gradnje paketov za različne distribucije Linuxa lahko orodje ustvari repozitorij s prevedenimi paketi, na primer:

./gradlew yum

Spomnite se lahko tudi testov dima in uvajanja v Dockerju.

Ustvarite gručo treh vozlišč:

./gradlew -Pnum_instances=3 docker-provisioner

Izvedite preizkuse dima v gruči treh vozlišč:

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

Izbrišite gručo:

./gradlew docker-provisioner-destroy

Pridobite ukaze za povezovanje znotraj docker vsebnikov:

./gradlew docker-provisioner-ssh

Prikaži stanje:

./gradlew docker-provisioner-status

Več o nalogah razmestitve lahko preberete v dokumentaciji.

Če govorimo o testih, jih je precej veliko, predvsem dim in integracija. Njihova analiza presega obseg tega članka. Naj povem, da sestavljanje distribucije ni tako težka naloga, kot se morda zdi na prvi pogled. Uspelo nam je sestaviti in opraviti teste vseh komponent, ki jih uporabljamo v naši proizvodnji, prav tako pa nismo imeli težav pri njihovi postavitvi in ​​izvajanju osnovnih operacij v testnem okolju.

Poleg obstoječih komponent v Bigtopu je možno dodati še kaj, tudi lasten razvoj programske opreme. Vse to je popolnoma avtomatizirano in se ujema s konceptom CI/CD.

Zaključek

Očitno tako sestavljene distribucije ne bi smeli takoj poslati v produkcijo. Razumeti morate, da če obstaja resnična potreba po izgradnji in podpori vaše distribucije, potem morate v to vložiti denar in čas.

Vendar pa je v kombinaciji s pravim pristopom in strokovno ekipo povsem mogoče brez komercialnih rešitev.

Pomembno je omeniti, da sam projekt Bigtop potrebuje razvoj in se zdi, da se danes ne razvija aktivno. Nejasna je tudi možnost, da bi se v njem pojavil Hadoop 3. Mimogrede, če res potrebujete zgraditi Hadoop 3, si lahko ogledate vilice iz Arenadata, v katerem poleg standardnih
Obstajajo številne dodatne komponente (Ranger, Knox, NiFi).

Kar zadeva Rostelecom, je za nas Bigtop ena od možnosti, ki se danes obravnava. Ali se bomo odločili ali ne, bo pokazal čas.

Dodatek

Če želite v sestav vključiti novo komponento, morate njen opis dodati v bigtop.bom in ./bigtop-packages. To lahko poskusite narediti po analogiji z obstoječimi komponentami. Poskusi ugotoviti. Ni tako težko, kot se zdi na prvi pogled.

Kaj misliš? Veseli bomo vašega mnenja v komentarjih in hvala za vašo pozornost!

Članek je pripravila ekipa za upravljanje podatkov Rostelecom

Vir: www.habr.com

Dodaj komentar