Pole ilmselt saladus, et eelmine aasta oli Apache Hadoopi jaoks suurte muutuste aasta. Eelmisel aastal ühinesid Cloudera ja Hortonworks (sisuliselt viimase omandamine) ning Mapr müüdi tõsiste finantsprobleemide tõttu Hewlett Packardile. Ja kui mõni aasta varem tuli kohapealsete installatsioonide puhul sageli valida Cloudera ja Hortonworksi vahel, siis täna meil seda valikut paraku ei ole. Teine üllatus oli asjaolu, et Cloudera teatas selle aasta veebruaris, et lõpetab oma levitamise binaarkoostude avalikus hoidlas väljastamise ja need on nüüd saadaval ainult tasulise tellimuse kaudu. Loomulikult on endiselt võimalik alla laadida uusimad CDH ja HDP versioonid, mis on välja antud enne 2019. aasta lõppu ning nende tuge on oodata üks kuni kaks aastat. Aga mida edasi teha? Nende jaoks, kes varem abonemendi eest maksid, pole midagi muutunud. Ja neile, kes ei soovi lülituda levitamise tasulisele versioonile, kuid soovivad samal ajal saada klastri komponentide uusimaid versioone, samuti plaastreid ja muid värskendusi, oleme selle artikli ette valmistanud. Selles kaalume võimalikke võimalusi sellest olukorrast väljumiseks.
Artikkel on pigem ülevaade. See ei sisalda distributsioonide võrdlust ja nende üksikasjalikku analüüsi ning nende installimise ja konfigureerimise retsepte pole. Mis juhtub? Räägime lühidalt sellisest distributsioonist nagu Arenada Hadoop, mis väärib õigustatult meie tähelepanu oma kättesaadavuse tõttu, mis on tänapäeval väga haruldane. Ja siis räägime Vanilla Hadoopist, peamiselt sellest, kuidas seda Apache Bigtopi abil "küpsetada". Valmis? Siis tere tulemast kassi.
Arenadata Hadoop
See on täiesti uus ja seni vähetuntud kodumaise arenduse levikomplekt. Kahjuks on hetkel Habrel ainult
Lisateavet leiate ametnikust
Infot teekaardi kohta leiate
Arenada klastrihalduri liides
Arenadata põhitoode on
Hadoop 3 juurutamiseks ja haldamiseks pakutakse komplekti kogukonna versiooni koos ADCM-iga, kuid Hadoop 2 jaoks on olemas ainult
Kui räägime puudustest, on need samad, mis kõigi teiste Hadoopi distributsioonide puhul. Nimelt:
- Niinimetatud "müüja lukustus". Cloudera ja Hortonworksi näiteid kasutades oleme juba aru saanud, et alati on oht ettevõtte poliitikat muuta.
- Märkimisväärne mahajäämus Apache'ist ülesvoolu.
Vanilje Hadoop
Nagu teate, pole Hadoop monoliitne toode, vaid tegelikult terve teenuste galaktika selle hajutatud failisüsteemi HDFS ümber. Vähestel inimestel piisab ühest failiklastrist. Mõned vajavad Hive'i, teised Prestot ja siis on HBase ja Phoenix; Sparki kasutatakse üha enam. Orkestreerimiseks ja andmete laadimiseks leitakse mõnikord Oozie, Sqoop ja Flume. Ja kui turvalisuse teema kerkib, siis tuleb kohe meelde Kerberos koos Rangeriga.
Hadoopi komponentide binaarversioonid on tarballide kujul saadaval iga ökosüsteemiprojekti veebisaidil. Saate need alla laadida ja installimist alustada, kuid ühe tingimusega: lisaks pakettide iseseisvale kokkupanemisele "tooretest" binaarfailidest, mida tõenäoliselt soovite teha, ei usalda te allalaaditud komponentide versioonide ühilduvust kõigiga. muud. Eelistatud valik on ehitada Apache Bigtopi abil. Bigtop võimaldab teil ehitada Apache maveni hoidlatest, käivitada teste ja koostada pakette. Kuid meie jaoks on väga oluline, et Bigtop paneb kokku need komponentide versioonid, mis omavahel ühilduvad. Allpool räägime sellest üksikasjalikumalt.
Apache Bigtop
Apache Bigtop on tööriist paljude toodete ehitamiseks, pakkimiseks ja testimiseks
avatud lähtekoodiga projektid, nagu Hadoop ja Greenplum. Bigtopil on palju
vabastab. Selle artikli kirjutamise ajal oli uusim stabiilne väljalase versioon 1.4,
ja masteris oli 1.5. Väljaannete erinevad versioonid kasutavad erinevaid versioone
komponendid. Näiteks versiooni 1.4 jaoks on Hadoopi põhikomponentidel versioon 2.8.5 ja põhiversioon
2.10.0. Samuti muutub toetatavate komponentide koostis. Midagi aegunud ja
taastumatu kaob ja selle asemele tuleb midagi uut, rohkem nõutavat ja
see ei pruugi olla midagi Apache perekonnast endast.
Lisaks on Bigtopil palju
Bigtopiga tutvuma hakates üllatas meid ennekõike selle tagasihoidlikkus võrreldes teiste Apache projektidega, levimus ja populaarsus ning väga väike kogukond. Sellest järeldub, et infot toote kohta on minimaalselt ning foorumitest ja meililistidest tekkinud probleemidele lahenduste otsimine ei pruugi üldse midagi anda. Alguses osutus meie jaoks tööriista enda omaduste tõttu distributsiooni täielik kokkupanek keeruliseks ülesandeks, kuid sellest räägime veidi hiljem.
Teaserina võib öelda, et neil, kes omal ajal olid huvitatud sellistest Linuxi universumi projektidest nagu Gentoo ja LFS, võib selle asjaga töötada nostalgiliselt mõnus ja meenutada neid “eepilisi” aegu, mil me ise otsisime (või isegi kirjutasime) ehitab ja ehitab Mozillat regulaarselt uute paikadega ümber.
Bigtopi suureks eeliseks on selle aluseks olevate tööriistade avatus ja mitmekülgsus. See põhineb Gradle ja Apache Mavenil. Gradle on üsna tuntud kui tööriist, mida Google Androidi loomiseks kasutab. See on paindlik ja, nagu öeldakse, "lahingus testitud". Maven on Apache’i enda projektide ehitamise standardtööriist ja kuna enamus selle tooteid lastakse välja Maveni kaudu, siis ei saaks ka siin ilma selleta hakkama. Tähelepanu tasub pöörata POM-ile (projektiobjekti mudel) - “fundamentaalne” xml-fail, mis kirjeldab kõike Maveni jaoks teie projektiga töötamiseks vajalikku, mille ümber kogu töö on üles ehitatud. Täpselt kell
Maveni osad ja mõned takistused, millega esmakordsed Bigtopi kasutajad tavaliselt kokku puutuvad.
Tava
Niisiis, kust peaksite alustama? Minge allalaadimislehele ja laadige arhiivina alla uusim stabiilne versioon. Sealt leiate ka Bigtopi kogutud binaarseid artefakte. Muide, tavaliste paketihaldurite hulgas on toetatud YUM ja APT.
Teise võimalusena saate uusima stabiilse versiooni alla laadida otse saidilt
github:
$ git clone --branch branch-1.4 https://github.com/apache/bigtop.git
Kloonimine "suures tipus"…
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), готово.
Saadud kataloog ./bigtop näeb välja umbes selline:
./bigtop-bigpetstore
— demorakendused, sünteetilised näited
./bigtop-ci
- CI tööriistad, jenkinid
./bigtop-data-generators
— andmete genereerimine, sünteetika, suitsutestide jms jaoks.
./bigtop-deploy
- juurutamise tööriistad
./bigtop-packages
— konfiguratsioonid, skriptid, paigad kokkupanekuks, tööriista põhiosa
./bigtop-test-framework
— testimise raamistik
./bigtop-tests
— testid ise, koormus ja suits
./bigtop_toolchain
— kokkupanekukeskkond, tööriista töökeskkonna ettevalmistamine
./build
- koostage töökataloog
./dl
— allalaaditud allikate kataloog
./docker
— dokkipiltide sisseehitamine, testimine
./gradle
- astme konfiguratsioon
./output
– kataloog, kuhu ehitusartefaktid lähevad
./provisioner
— varustamine
Meie jaoks on selles etapis kõige huvitavam põhikonfiguratsioon ./bigtop/bigtop.bom
, milles näeme kõiki toetatud komponente koos versioonidega. Siin saame määrata toote erineva versiooni (kui tahame äkki proovida seda ehitada) või järguversiooni (kui lisasime näiteks olulise paiga).
Suurt huvi pakub ka alamkataloog ./bigtop/bigtop-packages
, mis on otseselt seotud komponentide ja nendega koos pakkide kokkupanemise protsessiga.
Niisiis, laadisime arhiivi alla, pakkisime selle lahti või tegime githubist klooni, kas saame hakata ehitama?
Ei, valmistame kõigepealt keskkonna ette.
Keskkonna ettevalmistamine
Ja siin vajame väikest taganemist. Peaaegu iga enam-vähem keeruka toote ehitamiseks vajate teatud keskkonda - meie puhul on selleks JDK, samad jagatud teegid, päisefailid jne, tööriistad, näiteks ant, ivy2 ja palju muud. Üks Bigtopi jaoks vajaliku keskkonna hankimise võimalustest on vajalike komponentide installimine ehitushostile. Ma võin kronoloogias eksida, aga tundub, et versiooniga 1.0 oli ka võimalus sisse ehitada eelkonfigureeritud ja ligipääsetavad Dockeri pildid, mille leiab siit.
Mis puutub keskkonna ettevalmistamisse, siis selleks on abiline - Nukk.
Saate kasutada järgmisi juurkataloogist käivitatavaid käske
tööriist, ./bigtop:
./gradlew toolchain
./gradlew toolchain-devtools
./gradlew toolchain-puppetmodules
Või otse nuku kaudu:
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"
Kahjuks võivad raskused tekkida juba selles etapis. Üldine nõuanne on siin kasutada toetatud distributsiooni, mis on ehitushostis ajakohane, või proovida dokkimismarsruuti.
Assamblee
Mida saame proovida koguda? Vastuse sellele küsimusele annab käsu väljund
./gradlew tasks
Jaotises Paketi ülesanded on mitu toodet, mis on Bigtopi lõplikud artefaktid.
Neid saab tuvastada järelliide -rpm või -pkg-ind järgi (hoone puhul
dokis). Meie puhul on kõige huvitavam Hadoop.
Proovime ehitada oma ehitusserveri keskkonda:
./gradlew hadoop-rpm
Bigtop ise laadib alla konkreetse komponendi jaoks vajalikud allikad ja alustab kokkupanekut. Seega sõltub tööriista töö Maveni hoidlatest ja muudest allikatest, see tähendab, et see nõuab Interneti-juurdepääsu.
Töö ajal genereeritakse standardväljund. Mõnikord võivad see ja veateated aidata teil mõista, mis valesti läks. Ja mõnikord peate hankima täiendavat teavet. Sel juhul tasub lisada argumente --info
või --debug
ja võib olla ka kasulik –stacktrace
. On olemas mugav viis andmestiku genereerimiseks hilisemaks meililistidele juurdepääsuks, võti --scan
.
Selle abiga kogub bigtop kogu teabe ja paneb selle gradle'i, misjärel annab lingi,
mida järgides saab pädev isik aru, miks kokkupanek ebaõnnestus.
Pidage meeles, et see valik võib avaldada teavet, mida te ei soovi, nagu kasutajanimed, sõlmed, keskkonnamuutujad jne, seega olge ettevaatlik.
Sageli on vead tingitud suutmatusest hankida kokkupanekuks vajalikke komponente. Tavaliselt saate probleemi lahendada, luues paiga, mis parandab midagi allikates, näiteks aadressid failis pom.xml allikate juurkataloogis. Seda tehakse, luues ja paigutades selle vastavasse kataloogi ./bigtop/bigtop-packages/src/common/oozie/
plaaster näiteks vormis 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>
Tõenäoliselt ei pea te selle artikli lugemise ajal ülaltoodud parandusi ise tegema.
Koostemehhanismi plaastrite ja muudatuste sisseviimisel peate võib-olla koostu "lähtestama", kasutades puhastuskäsku:
./gradlew hadoop-clean
> Task :hadoop_vardefines
> Task :hadoop-clean
BUILD SUCCESSFUL in 5s
2 actionable tasks: 2 executed
See toiming tühistab kõik selle komponendi koostu muudatused, misjärel tehakse koost uuesti. Seekord proovime projekti üles ehitada dockeri pildis:
./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
Ehitamine viidi läbi CentOS-i all, kuid seda saab teha ka Ubuntu all:
./gradlew -POS=ubuntu-16.04 -Pprefix=1.2.1 hadoop-pkg-ind
Lisaks erinevatele Linuxi distributsioonidele mõeldud pakettide loomisele saab tööriist luua hoidla koos kompileeritud pakettidega, näiteks:
./gradlew yum
Samuti võite meeles pidada suitsuteste ja Dockeri juurutamist.
Looge kolmest sõlmest koosnev klaster:
./gradlew -Pnum_instances=3 docker-provisioner
Käivitage suitsutestid kolmest sõlmest koosnevas klastris:
./gradlew -Pnum_instances=3 -Prun_smoke_tests docker-provisioner
Klastri kustutamine:
./gradlew docker-provisioner-destroy
Hankige käsud dokkimiskonteinerite ühendamiseks:
./gradlew docker-provisioner-ssh
Kuva olek:
./gradlew docker-provisioner-status
Lisateavet juurutusülesannete kohta leiate dokumentatsioonist.
Kui rääkida testidest, siis neid on päris palju, peamiselt suits ja integratsioon. Nende analüüs ei kuulu käesoleva artikli ulatusse. Lubage mul lihtsalt öelda, et jaotuskomplekti kokkupanek pole nii keeruline ülesanne, kui esmapilgul võib tunduda. Meil õnnestus kokku panna ja testida kõiki oma tootmises kasutatavaid komponente ning meil ei olnud probleeme ka nende juurutamisel ja testkeskkonnas põhitoimingute tegemisel.
Lisaks Bigtopis olemasolevatele komponentidele on võimalik lisada kõike muud, isegi oma tarkvaraarendust. Kõik see on täiuslikult automatiseeritud ja sobib CI/CD kontseptsiooniga.
Järeldus
Ilmselgelt ei tohiks selliselt koostatud distributsiooni kohe tootmisse saata. Peate mõistma, et kui on tõeline vajadus oma levitamist üles ehitada ja toetada, peate sellesse investeerima raha ja aega.
Koos õige lähenemise ja professionaalse meeskonnaga on aga täiesti võimalik ilma kommertslahendusteta hakkama saada.
Oluline on märkida, et Bigtopi projekt ise vajab arendamist ja seda ei paista praegu aktiivselt arendavat. Ebaselge on ka Hadoop 3 ilmumise väljavaade. Muide, kui teil on tõeline vajadus Hadoop 3 ehitada, võite vaadata
Lisakomponente on mitmeid (Ranger, Knox, NiFi).
Mis puudutab Rostelecomi, siis meie jaoks on Bigtop üks täna kaalutavatest võimalustest. Kas me valime selle või mitte, seda näitab aeg.
Lisa
Uue komponendi komplekti lisamiseks peate lisama selle kirjelduse failidele bigtop.bom ja ./bigtop-packages. Võite proovida seda teha analoogselt olemasolevate komponentidega. Proovige see välja mõelda. See pole nii raske, kui esmapilgul tundub.
Mida sa arvad? Meil on hea meel näha teie arvamust kommentaarides ja täname tähelepanu eest!
Artikli koostas Rostelecomi andmehaldusmeeskond
Allikas: www.habr.com