"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Kuring nyarankeun Anjeun maca transkrip tina ceramah "Hadoop. ZooKeeper "tina séri "Metode pikeun ngolah disebarkeun volume badag data dina Hadoop "

Naon ZooKeeper, tempatna dina ékosistem Hadoop. Untruths ngeunaan komputasi disebarkeun. Diagram sistem distribusi standar. Kasesahan dina koordinasi sistem disebarkeun. Masalah koordinasi has. Prinsip tukangeun desain ZooKeeper. Modél data ZooKeeper. bandéra znode. sési. API klien. Primitif (konfigurasi, kaanggotaan grup, konci basajan, pamilihan pamimpin, konci tanpa pangaruh gerombolan). Arsitéktur ZooKeeper. ZooKeeper DB. ZAB. Panangan pamundut.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Dinten ieu kami bakal ngobrol ngeunaan ZooKeeper. Hal ieu mangpaat pisan. Éta, sapertos produk Apache Hadoop, ngagaduhan logo. Ieu ngagambarkeun hiji lalaki.

Sateuacan ieu, urang utamina ngobrol ngeunaan kumaha data tiasa diolah di dinya, kumaha cara nyimpenna, nyaéta, kumaha cara ngagunakeunana sareng kumaha waé tiasa dianggo. Sareng ayeuna kuring hoyong ngobrol sakedik ngeunaan ngawangun aplikasi anu disebarkeun. Sareng ZooKeeper mangrupikeun salah sahiji hal anu ngamungkinkeun anjeun nyederhanakeun masalah ieu. Ieu mangrupikeun jinis jasa anu dimaksudkeun pikeun sababaraha jinis koordinasi interaksi prosés dina sistem anu disebarkeun, dina aplikasi anu disebarkeun.

Kabutuhan pikeun aplikasi sapertos kitu beuki seueur unggal dinten, éta naon waé kursus urang. Di hiji sisi, MapReduce sareng kerangka siap-siap ieu ngamungkinkeun anjeun pikeun ngabéréskeun pajeulitna ieu sareng ngabebaskeun programer tina nyerat primitif sapertos interaksi sareng koordinasi prosés. Tapi di sisi anu sanés, teu aya anu ngajamin yén ieu henteu kedah dilakukeun waé. MapReduce atanapi kerangka siap-siap sanés henteu salawasna ngagentos sababaraha kasus anu teu tiasa dilaksanakeun nganggo ieu. Kaasup MapReduce sorangan sareng sakumpulan proyék Apache anu sanés; aranjeunna, kanyataanna, ogé disebarkeun aplikasi. Sareng pikeun ngagampangkeun nyerat, aranjeunna nyerat ZooKeeper.

Sapertos sadaya aplikasi anu aya hubunganana sareng Hadoop, éta dikembangkeun ku Yahoo! Ayeuna ogé mangrupikeun aplikasi Apache resmi. Éta henteu aktip dikembangkeun sapertos HBase. Upami anjeun angkat ka JIRA HBase, teras unggal dinten aya seueur laporan bug, seueur usulan pikeun ngaoptimalkeun hiji hal, nyaéta kahirupan dina proyék terus-terusan. Sareng ZooKeeper, di hiji sisi, mangrupikeun produk anu saderhana, sareng di sisi sanésna, ieu ngajamin réliabilitasna. Sareng éta gampang dianggo, naha éta parantos janten standar dina aplikasi dina ékosistem Hadoop. Janten kuring panginten bakal mangpaat pikeun marios éta pikeun ngartos kumaha jalanna sareng kumaha ngagunakeunana.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Ieu gambar tina sababaraha ceramah urang tadi. Urang tiasa nyebatkeun yén éta ortogonal pikeun sadayana anu urang anggap ayeuna. Sareng sadaya anu dituduhkeun di dieu, dina hiji gelar atanapi anu sanés, tiasa dianggo sareng ZooKeeper, nyaéta, éta mangrupikeun jasa anu nganggo sadaya produk ieu. Sanes HDFS atanapi MapReduce nyerat jasa anu sami anu khusus bakal dianggo pikeun aranjeunna. Sasuai, ZooKeeper dipaké. Sarta ieu simplifies ngembangkeun sarta sababaraha hal nu patali jeung kasalahan.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Ti mana asalna sadaya ieu? Ieu bakal sigana nu urang dibuka dua aplikasi dina paralel dina komputer béda, disambungkeun aranjeunna kalayan string atawa bolong, sarta sagalana jalan. Tapi masalahna nyaeta Network nu teu bisa dipercaya, sarta lamun sniffed lalulintas atawa nempo naon anu lumangsung aya dina tingkat low, kumaha klien berinteraksi dina Network, Anjeun mindeng bisa nempo yén sababaraha pakét leungit atawa ulang dikirim. Henteu aya gunana yén protokol TCP diciptakeun, anu ngamungkinkeun anjeun ngadamel sési anu tangtu sareng ngajamin pangiriman pesen. Tapi dina sagala hal, sanajan TCP teu salawasna bisa nyalametkeun anjeun. Sagalana boga timeout. Jaringan tiasa ngan saukur ragrag sakedap. Bisa waé kedip-kedip. Sareng ieu sadayana nyababkeun kanyataan yén anjeun henteu tiasa ngandelkeun Jaringan anu tiasa dipercaya. Ieu bédana utama ti nulis aplikasi paralel anu dijalankeun dina hiji komputer atawa dina hiji superkomputer, dimana euweuh Network, dimana aya beus bursa data leuwih dipercaya dina mémori. Sareng ieu mangrupikeun bédana dasar.

Diantara hal séjén, nalika nganggo Jaringan, sok aya latén anu tangtu. disk ogé boga eta, tapi Network boga leuwih ti eta. Latency mangrupikeun waktos reureuh, anu tiasa sakedik atanapi rada signifikan.

Topologi jaringan robah. Naon topologi - ieu mangrupikeun panempatan alat jaringan urang. Aya pusat data, aya raka anu nangtung, aya lilin. Sadaya ieu tiasa dihubungkeun deui, dipindahkeun, jsb. Ieu sadayana ogé kedah diperhatoskeun. Ngaran IP robah, routing ngaliwatan nu lalulintas urang ngumbara robah. Ieu ogé kedah dipertimbangkeun.

Jaringan ogé tiasa robih tina segi alat. Tina prakték, kuring tiasa nyebatkeun yén insinyur jaringan kami resep pisan ngapdet sababaraha waktos dina lilin. Ujug-ujug firmware anyar kaluar sareng aranjeunna henteu kabetot dina sababaraha klaster Hadoop. Aranjeunna boga pakasaban sorangan. Pikeun aranjeunna, hal utama nyaéta yén Jaringan jalan. Sasuai, maranéhna rék ulang unggah hiji hal aya, ngalakukeun kedip-kedip on hardware maranéhna, jeung hardware ogé robah périodik. Sadaya ieu kumaha waé kedah diperhatoskeun. Sadaya ieu mangaruhan aplikasi anu disebarkeun kami.

Biasana jalma anu ngamimitian damel sareng jumlah data anu ageung kusabab sababaraha alesan yakin yén Internét henteu aya watesna. Upami aya file sababaraha terabyte di dinya, teras anjeun tiasa nyandak kana server atanapi komputer anjeun sareng mukakeunana nganggo ucing jeung lalajo. Kasalahan sejen aya dina Vim tingali log. Entong ngalakukeun ieu kusabab éta goréng. Kusabab Vim nyoba panyangga sadayana, muatkeun sadayana kana mémori, khususna nalika urang ngamimitian ngaléngkah log ieu sareng milarian hiji hal. Ieu hal anu poho, tapi patut tempo.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Éta langkung gampang nyerat hiji program anu dijalankeun dina hiji komputer sareng hiji prosésor.

Nalika sistem kami tumuwuh, urang hoyong parallelize eta sadayana, sarta parallelize teu ukur dina komputer, tapi ogé dina klaster. Patarosan timbul: kumaha carana koordinat masalah ieu? Aplikasi urang tiasa waé henteu saling berinteraksi, tapi urang ngajalankeun sababaraha prosés paralel dina sababaraha server. Sareng kumaha carana ngawas yén sadayana berjalan lancar pikeun aranjeunna? Contona, aranjeunna ngirimkeun hiji hal ngaliwatan Internet. Aranjeunna kedah nyerat ngeunaan kaayaanana di mana waé, contona, dina sababaraha jinis pangkalan data atanapi log, teras agrégat log ieu teras analisa dimana waé. Tambih Deui, urang kedah tumut kana akun yén prosés ieu jalan jeung digawé, ujug-ujug aya sababaraha jenis kasalahan mucunghul di dinya atawa nabrak, lajeng kumaha gancang urang manggihan ngeunaan eta?

Ieu jelas yén sakabéh ieu bisa gancang diawaskeun. Ieu ogé alus, tapi ngawaskeun mangrupa hal kawates nu ngidinan Anjeun pikeun ngawas sababaraha hal dina tingkat nu pangluhurna.

Nalika urang hoyong prosés urang ngawitan interaksi saling, contona, pikeun ngirim silih sababaraha data, lajeng patarosan timbul - kumaha ieu bakal kajadian? Naha bakal aya sababaraha kaayaan balapan, naha aranjeunna bakal silih nimpa, naha datana bakal leres, naha aya anu leungit sapanjang jalan? Urang kedah ngembangkeun sababaraha jinis protokol, jsb.

Koordinasi sadaya prosés ieu sanés hal anu remeh. Sarta eta maksakeun pamekar ka turun ka tingkat malah handap, jeung nulis sistem boh ti scratch, atanapi henteu rada ti scratch, tapi ieu teu jadi basajan.

Lamun datang nepi ka algoritma cryptographic atawa malah nerapkeun eta, teras buang eta langsung, sabab paling dipikaresep eta moal jalan mun anjeun. Paling dipikaresep bakal ngandung sakumpulan kasalahan anu anjeun hilap nyayogikeun. Pernah nganggo éta pikeun naon waé anu serius sabab sigana bakal teu stabil. Kusabab sadaya algoritma anu aya parantos diuji ku waktos kanggo waktos anu lami pisan. Hal ieu diganggu ku masarakat. Ieu topik misah. Sareng di dieu sami. Lamun kasebut nyaéta dimungkinkeun pikeun henteu nerapkeun sababaraha jenis prosés sinkronisasi diri, mangka leuwih hade teu ngalakukeun ieu, sabab rada pajeulit jeung ngabalukarkeun anjeun ka handap jalur oyagna terus neangan kasalahan.

Dinten ieu kami ngobrol ngeunaan ZooKeeper. Di hiji sisi, éta kerangka, di sisi séjén, éta layanan nu ngajadikeun hirup leuwih gampang pikeun pamekar jeung simplifies palaksanaan logika jeung koordinasi prosés urang saloba mungkin.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Hayu urang émut kumaha sigana sistem distribusi standar. Ieu anu urang bahas - HDFS, HBase. Aya prosés Master anu ngatur pagawé sareng prosés budak. Anjeunna tanggung jawab pikeun koordinasi sareng nyebarkeun tugas, ngamimitian deui pagawé, ngaluncurkeun anu énggal, sareng ngadistribusikaeun beban.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Hal anu langkung maju nyaéta Layanan Koordinasi, nyaéta, mindahkeun tugas koordinasi sorangan kana prosés anu misah, tambah ngajalankeun sababaraha jinis cadangan atanapi stanby Master sacara paralel, sabab Master tiasa gagal. Sareng upami Master ragrag, maka sistem urang moal jalan. Urang ngajalankeun cadangan. Sababaraha nyatakeun yén Master kedah ditiron kana cadangan. Ieu ogé tiasa dipercayakeun ka Dinas Koordinasi. Tapi dina diagram ieu, Master sorangan tanggung jawab pikeun koordinasi pagawé; di dieu layanan ieu koordinasi kagiatan réplikasi data.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Pilihan anu langkung maju nyaéta nalika sadaya koordinasi diurus ku jasa kami, sapertos biasana dilakukeun. Anjeunna nyandak tanggung jawab pikeun mastikeun sagalana jalan. Sareng upami aya anu henteu hasil, urang terangkeun ngeunaan éta sareng nyobian ngabéréskeun kaayaan ieu. Dina sagala hal, urang ditinggalkeun ku Master anu kumaha bae berinteraksi sareng budak tur bisa ngirim data, informasi, pesen, jeung sajabana ngaliwatan sababaraha layanan.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Aya skéma anu langkung maju, nalika urang henteu gaduh Master, sadaya titik mangrupikeun budak master, béda dina paripolahna. Tapi aranjeunna tetep kedah saling berinteraksi, janten masih aya sababaraha jasa anu tinggaleun pikeun koordinat tindakan ieu. Sigana mah Cassandra, anu dianggo dina prinsip ieu, cocog skéma ieu.

Hese ngomong mana tina schemes ieu jalan hadé. Unggal boga pro jeung kontra sorangan.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Jeung teu kudu sieun sababaraha hal jeung Master, sabab, sakumaha prakték nempokeun, anjeunna teu jadi susceptible mun terus porsi. Hal utama di dieu nyaéta pikeun milih solusi anu pas pikeun ngalayanan jasa ieu dina titik anu kuat anu misah, supados gaduh sumber daya anu cukup, supados upami mungkin, pangguna henteu gaduh aksés ka dinya, supados aranjeunna henteu ngahaja maéhan prosés ieu. Tapi dina waktos anu sami, dina skéma sapertos kitu langkung gampang pikeun ngatur pagawé tina prosés Master, nyaéta skéma ieu langkung saderhana tina sudut pandang palaksanaan.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Jeung skéma ieu (di luhur) meureun leuwih kompleks, tapi leuwih dipercaya.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Masalah utama nyaéta gagal parsial. Salaku conto, nalika urang ngirim pesen dina jaringan, aya sababaraha kacilakaan, sareng anu ngirim pesen moal terang naha pesenna ditampi sareng naon anu kajantenan di sisi panarima, moal terang naha pesenna diolah leres. , i.e. anjeunna moal nampi konfirmasi nanaon.

Sasuai, urang kedah ngolah kaayaan ieu. Sareng anu pangbasajanna nyaéta ngirim deui pesen ieu sareng ngantosan dugi ka nampi réspon. Dina hal ieu, teu dianggap naha kaayaan panarima geus robah. Urang tiasa ngirim pesen sareng nambihan data anu sami dua kali.

ZooKeeper nawiskeun cara pikeun ngatasi panolakan sapertos kitu, anu ogé ngagampangkeun kahirupan urang.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Sakumaha didadarkeun saeutik saméméhna, ieu téh sarupa jeung nulis program multi-threaded, tapi bédana utama nyaéta yén dina aplikasi disebarkeun nu urang ngawangun dina mesin béda, hiji-hijina jalan pikeun komunikasi nyaéta Network. Intina, ieu mangrupikeun arsitéktur anu teu dibagi. Unggal prosés atawa jasa anu dijalankeun dina hiji mesin boga memori sorangan, disk sorangan, processor sorangan, nu teu babagi kalawan saha.

Upami urang nyerat program multi-threaded dina hiji komputer, teras urang tiasa nganggo mémori anu dibagikeun pikeun tukeur data. Urang boga switch konteks aya, prosés bisa pindah. Ieu mangaruhan kinerja. Di hiji sisi, euweuh hal saperti dina program dina klaster a, tapi aya masalah jeung Network.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Sasuai, masalah utama anu timbul nalika nyerat sistem anu disebarkeun nyaéta konfigurasi. Kami nyerat sababaraha jinis aplikasi. Lamun basajan, mangka urang hardcode sagala sorts angka dina kode, tapi ieu teu merenah, sabab lamun urang mutuskeun yén tinimbang hiji timeout satengah detik urang hoyong timeout sadetik, mangka urang kudu recompile aplikasi jeung gulung sagalana kaluar deui. Ieu hiji hal lamun éta dina hiji mesin, mun anjeun ngan bisa balikan deui, tapi lamun urang boga loba mesin, urang kudu terus nyalin sagalana. Urang kedah nyobian ngajantenkeun aplikasi tiasa dikonfigurasi.

Di dieu urang ngobrol ngeunaan konfigurasi statik pikeun prosés sistem. Ieu teu sagemblengna, meureun ti sudut pandang sistem operasi, bisa jadi konfigurasi statik pikeun prosés urang, nyaeta, ieu konfigurasi nu teu bisa saukur dicokot tur diropéa.

Aya ogé konfigurasi dinamis. Ieu mangrupikeun parameter anu urang hoyong robih dina laleur supados aranjeunna dijemput di dinya.

Naon masalahna di dieu? Urang ngamutahirkeun config, digulung kaluar, jadi naon? Masalahna bisa jadi éta dina hiji sisi urang digulung kaluar config, tapi poho ngeunaan hal anyar, config tetep aya. Bréh, bari kami rolling kaluar, konfigurasi ieu diropéa dina sababaraha tempat, tapi teu di batur. Sareng sababaraha prosés aplikasi kami anu dijalankeun dina hiji mesin di-restart ku konfigurasi énggal, sareng dimana waé sareng anu lami. Ieu tiasa nyababkeun aplikasi anu disebarkeun kami henteu konsisten tina sudut pandang konfigurasi. Masalah ieu umum. Pikeun konfigurasi dinamis, éta leuwih relevan sabab ngakibatkeun yen eta bisa dirobah dina laleur nu.

Masalah sanésna nyaéta kaanggotaan grup. Urang sok gaduh sababaraha set pagawé, urang sok hoyong terang mana anu hirup, mana anu maot. Upami aya Master, maka anjeunna kedah ngartos pagawé mana anu tiasa dialihkeun ka klien supados aranjeunna ngajalankeun itungan atanapi damel sareng data, sareng anu henteu tiasa. Masalah anu terus-terusan timbul nyaéta yén urang kedah terang saha anu damel di kluster urang.

Masalah has anu sanés nyaéta pamilihan pamimpin, nalika urang hoyong terang saha anu tanggung jawab. Salah sahiji conto nyaéta réplikasi, nalika urang gaduh sababaraha prosés anu nampi operasi nyerat teras ngulang deui diantara prosés anu sanés. Anjeunna bakal jadi pamingpin, dulur sejenna bakal nurut ka manéhna, bakal nuturkeun manéhna. Perlu milih prosés supados henteu ambigu pikeun sadayana, supados henteu janten dua pamimpin anu dipilih.

Aya ogé aksés saling ekslusif. Masalahna di dieu langkung kompleks. Aya hiji hal saperti mutex a, mun anjeun nulis program multi-threaded tur hoyong aksés ka sababaraha sumberdaya, Contona, sél memori, diwatesan sarta dilaksanakeun ku ngan hiji thread. Di dieu sumberna tiasa janten hal anu langkung abstrak. Sareng aplikasi anu béda tina titik anu béda tina Jaringan kami ngan ukur kedah nampi aksés éksklusif kana sumber daya anu dipasihkeun, sareng henteu supados sadayana tiasa ngarobih atanapi nyerat anu aya di dinya. Ieu nu disebut kuncén.

ZooKeeper ngamungkinkeun anjeun pikeun ngabéréskeun sadaya masalah ieu dina hiji gelar atanapi anu sanés. Sareng kuring bakal nunjukkeun conto kumaha éta ngamungkinkeun anjeun ngalakukeun ieu.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Henteu aya primitif anu ngahalangan. Nalika urang mimitian nganggo hiji hal, primitif ieu moal ngantosan kajadian naon waé. Paling dipikaresep, hal ieu bakal dianggo asynchronously, kukituna sahingga prosés teu ngagantung bari maranéhna nungguan hiji hal. Ieu mangrupikeun hal anu mangpaat pisan.

Sadaya pamundut klien diolah dina urutan antrian umum.

Sarta klien boga kasempetan pikeun nampa bewara ngeunaan parobahan dina sababaraha kaayaan, ngeunaan parobahan data, saméméh klien nu nilik data robah sorangan.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

ZooKeeper tiasa dianggo dina dua modeu. Kahiji nyaeta mandiri, dina hiji titik. Ieu merenah pikeun nguji. Éta ogé tiasa beroperasi dina modeu klaster dina sajumlah server. Upami urang gaduh klaster 100 mesin, maka henteu kedah dianggo dina 100 mesin. Cukup pikeun milih sababaraha mesin dimana anjeun tiasa ngajalankeun ZooKeeper. Sarta eta professes prinsip kasadiaan tinggi. Dina unggal conto jalan, ZooKeeper nyimpen hiji sakabéh salinan data. Engké kuring bakal ngabejaan ka maneh kumaha anjeunna ngalakukeun eta. Éta henteu ngabagi data atanapi ngabagi. Di hiji sisi, éta mangrupikeun minus yén urang henteu tiasa nyimpen seueur, di sisi sanésna, henteu kedah ngalakukeun ieu. Éta sanés naon anu dirarancang, sanés pangkalan data.

Data tiasa disimpen dina sisi klien. Ieu mangrupikeun prinsip standar supados urang henteu ngaganggu jasa sareng henteu ngamuat kana pamundut anu sami. A klien pinter biasana weruh ngeunaan ieu sareng caches eta.

Salaku conto, aya anu robih di dieu. Aya sababaraha jenis aplikasi. Pamimpin anyar kapilih, anu tanggung jawab, contona, pikeun ngolah operasi nulis. Sarta kami rék ngayakeun réplikasi data. Hiji leyuran nyaeta nempatkeun eta dina loop a. Sareng kami teras-terasan naroskeun jasa kami - naha aya anu robih? Pilihan kadua leuwih optimal. Ieu mékanisme jam tangan anu ngamungkinkeun anjeun ngabéjaan ka klien yén aya anu robih. Ieu mangrupikeun metode anu langkung mirah dina hal sumberdaya sareng langkung merenah pikeun klien.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Klién nyaéta pangguna anu ngagunakeun ZooKeeper.

Server nyaéta prosés ZooKeeper sorangan.

Znode mangrupikeun hal konci dina ZooKeeper. Sadaya znodes disimpen dina mémori ku ZooKeeper sareng dikelompokeun dina bentuk diagram hirarki, dina bentuk tangkal.

Aya dua jenis operasi. Kahiji nyaeta update / nulis, nalika sababaraha operasi robah kaayaan tangkal urang. Tangkalna biasa.

Jeung kamungkinan yén klien nu teu ngalengkepan hiji pamundut na dipegatkeun, tapi bisa ngadegkeun sési ngaliwatan nu berinteraksi sareng ZooKeeper.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Modél data ZooKeeper nyarupaan sistem file. Aya akar baku lajeng urang indit saolah-olah ngaliwatan directories nu balik ti akar. Terus katalog tingkat kahiji, tingkat kadua. Ieu kabeh znodes.

Unggal znode tiasa nyimpen sababaraha data, biasana henteu ageung pisan, contona, 10 kilobyte. Sarta unggal znode bisa boga jumlah nu tangtu barudak.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Znodes datangna dina sababaraha jenis. Éta bisa dijieun. Jeung nalika nyieun znode a, urang tangtukeun jenis nu sakuduna milik.

Aya dua jenis. Anu kahiji nyaéta bandéra ephemeral. Znode hirup dina sési. Contona, klien geus ngadegkeun sési. Sareng salami sési ieu hirup, éta bakal aya. Ieu diperlukeun guna teu ngahasilkeun hal teu perlu. Ieu ogé cocog pikeun moments nalika hal anu penting pikeun urang nyimpen primitif data dina sési.

Jenis kadua nyaéta bandéra sequential. Ieu increments counter dina jalan ka znode nu. Salaku conto, urang ngagaduhan diréktori sareng aplikasi 1_5. Sareng nalika urang nyiptakeun titik kahiji, éta nampi p_1, anu kadua - p_2. Sarta lamun urang nelepon metoda ieu unggal waktu, urang lulus jalur pinuh, nunjukkeun ukur bagian tina jalur, sarta jumlah ieu otomatis incremented sabab urang nunjukkeun tipe titik - sequential.

Znode biasa. Anjeunna bakal salawasna hirup sareng gaduh nami anu urang nyarioskeun ka anjeunna.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Hal mangpaat séjén nyaéta bandéra jam tangan. Upami urang pasang, teras klien tiasa ngalanggan sababaraha acara pikeun titik khusus. Kuring bakal nunjukkeun anjeun engké kalayan conto kumaha ieu dilakukeun. ZooKeeper sorangan ngabéjaan ka klien yén data dina titik parantos robih. Nanging, béwara henteu ngajamin yén sababaraha data énggal parantos sumping. Éta ngan saukur nyarios yén aya anu robih, janten anjeun masih kedah ngabandingkeun data engké sareng telepon anu misah.

Sareng sakumaha anu kuring parantos nyarios, urutan data ditangtukeun ku kilobytes. Aya teu kudu nyimpen data téks badag aya, sabab teu database a, éta mangrupa server koordinasi Peta.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Kuring gé ngabejaan Anjeun saeutik ngeunaan sesi. Upami urang gaduh sababaraha server, maka urang tiasa transparan mindahkeun tina server ka server nganggo identifier sési. Ieu rada merenah.

Unggal sési ngagaduhan sababaraha jinis waktos waktos. A sési dihartikeun ku naha klien ngirimkeun nanaon ka server salila sési éta. Upami anjeunna henteu ngirimkeun naon waé salami waktosna, sési dileungitkeun, atanapi klien tiasa nutup nyalira.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Éta henteu gaduh seueur fitur, tapi anjeun tiasa ngalakukeun hal anu béda sareng API ieu. Telepon anu urang tingali nyiptakeun nyiptakeun znode sareng nyandak tilu parameter. Ieu jalur ka znode, sarta eta kudu dieusian pinuh tina akar. Sareng ogé ieu mangrupikeun sababaraha data anu badé ditransfer ka dinya. Jeung jenis bandéra. Sarta sanggeus kreasi eta mulih jalur ka znode nu.

Kadua, anjeun tiasa ngahapus. Trik di dieu nyaeta yén parameter kadua, sajaba jalur ka znode, bisa nangtukeun versi. Sasuai, éta znode bakal dihapus lamun versi na nu urang dipindahkeun sarua jeung hiji nu sabenerna aya.

Upami urang henteu hoyong pariksa versi ieu, maka urang ngan saukur lulus argumen "-1".

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Katilu, éta pariksa ayana znode a. Mulih leres upami titik aya, palsu upami henteu.

Teras jam tangan bendera muncul, anu ngamungkinkeun anjeun ngawas titik ieu.

Anjeun tiasa nyetél bandéra ieu sanajan dina titik anu henteu aya sareng nampi béwara nalika muncul. Ieu ogé tiasa mangpaat.

Sababaraha tantangan deui getData. Ieu jelas yén urang tiasa nampi data via znode. Anjeun oge bisa make jam bandéra. Dina hal ieu, éta moal dipasang upami teu aya titik. Kituna, anjeun kudu ngarti yén éta aya, lajeng nampi data.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Aya ogé SetData. Di dieu urang lulus versi. Tur upami urang lulus ieu, data dina znode tina versi tangtu bakal diropéa.

Anjeun oge bisa nangtukeun "-1" pikeun ngaluarkeun cék ieu.

Métode mangpaat séjén nyaéta meunangBarudak. Urang ogé bisa meunangkeun daptar sadaya znodes nu milik eta. Urang tiasa ngawas ieu ku netepkeun jam tangan bendera.

Jeung métode nyingkronkeun ngamungkinkeun sakabéh parobahanana dikirim sakaligus, kukituna mastikeun yén maranéhna disimpen sarta sakabeh data geus sagemblengna robah.

Upami urang ngagambar analogi sareng program biasa, teras nalika anjeun nganggo metode sapertos nyerat, anu nyerat hal kana disk, sareng saatos éta ngaréspon ka anjeun, henteu aya jaminan yén anjeun parantos nyerat data kana disk. Komo lamun sistem operasi yakin yén sagalana geus ditulis, aya mékanisme dina piringan sorangan mana prosés ngaliwatan lapisan buffers, sarta ngan sanggeus éta data disimpen dina disk.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Sabagéan ageung telepon asynchronous dianggo. Hal ieu ngamungkinkeun klien pikeun dianggo dina paralel kalawan requests béda. Anjeun tiasa nganggo pendekatan sinkron, tapi kurang produktif.

Dua operasi anu urang bahas nyaéta update / nyerat, anu ngarobih data. Ieu nyiptakeun, setData, singkronisasi, ngahapus. Jeung maca téh aya, getData, getChildren.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Ayeuna sababaraha conto kumaha anjeun tiasa ngadamel primitif pikeun digawé dina sistem anu disebarkeun. Contona, patali jeung konfigurasi tina hal. Hiji pagawe anyar geus mucunghul. Kami nambihan mesin sareng ngamimitian prosésna. Sareng aya tilu patarosan di handap ieu. Kumaha carana naroskeun ZooKeeper pikeun konfigurasi? Sareng upami urang hoyong ngarobih konfigurasi, kumaha urang ngarobih? Sareng saatos urang ngarobih éta, kumaha para pagawé anu urang parantos nampi éta?

ZooKeeper ngajadikeun ieu kawilang gampang. Contona, aya tangkal znode urang. Aya titik pikeun aplikasi kami di dieu, kami nyiptakeun titik tambahan di jerona, anu ngandung data tina konfigurasi. Ieu tiasa atanapi henteu janten parameter anu misah. Kusabab ukuranana leutik, ukuran konfigurasi biasana ogé leutik, ku kituna cukup mungkin pikeun nyimpen di dieu.

Anjeun nganggo metodeu getData pikeun meunangkeun konfigurasi pikeun worker ti titik. Setel ka leres. Lamun pikeun sababaraha alesan titik ieu teu aya, urang bakal informed ngeunaan eta lamun nembongan, atawa lamun robah. Upami urang hoyong terang yén aya anu parantos robih, maka urang nyetél éta leres. Sareng upami data dina titik ieu robih, urang bakal terang ngeunaan éta.

SetData. Urang nyetél data, set "-1", i.e. kami henteu pariksa versi, urang nganggap yen urang salawasna mibanda hiji konfigurasi, urang teu kedah nyimpen loba konfigurasi. Upami anjeun kedah nyimpen seueur, anjeun kedah nambihan tingkat anu sanés. Di dieu urang yakin yén ngan aya hiji, jadi urang ngamutahirkeun ngan hiji panganyarna, jadi urang teu pariksa versi. Dina waktos ayeuna, sadaya klien anu saacanna ngalanggan nampi béwara yén aya anu robih dina titik ieu. Sareng saatos nampi éta, aranjeunna ogé kedah nyuhunkeun data deui. Bewara nyaeta aranjeunna henteu nampi data sorangan, tapi ngan bewara parobahan. Sanggeus ieu maranéhanana kudu ménta data anyar.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Pilihan kadua pikeun ngagunakeun primitif nyaéta kaanggotaan grup. Kami gaduh aplikasi anu disebarkeun, aya sakumpulan pagawé sareng kami hoyong ngartos yén aranjeunna sadayana aya dina tempatna. Ku sabab éta, aranjeunna kedah ngadaptarkeun diri yén aranjeunna damel di aplikasi urang. Sareng urang ogé hoyong terang, boh tina prosés Master atanapi dimana waé, ngeunaan sadaya pagawé aktif anu ayeuna urang gaduh.

Kumaha urang ngalakukeun ieu? Pikeun aplikasina, urang nyiptakeun titik pagawé sareng nambihan sublevel di dinya nganggo metode nyiptakeun. Kuring boga kasalahan dina slide. Di dieu anjeun peryogi ngaruntuy tangtukeun, tuluy kabéh pagawé bakal dijieun hiji-hiji. Sareng aplikasi, nyuhunkeun sadaya data ngeunaan murangkalih titik ieu, nampi sadaya pagawé aktip anu aya.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Ieu sapertos palaksanaan dahsyat kumaha ieu bisa dilakukeun dina kode Java. Hayu urang mimitian ti tungtungna, kalawan metoda utama. Ieu kelas urang, hayu urang nyieun metoda na. Salaku argumen munggaran kami nganggo host, dimana kami nyambungkeun, nyaéta kami nyetél éta salaku argumen. Jeung argumen kadua nyaéta ngaran grup.

Kumaha sambungan lumangsung? Ieu mangrupikeun conto saderhana tina API anu dianggo. Sagalana kawilang basajan di dieu. Aya ZooKeeper kelas standar. Urang lulus sarwa ka dinya. Sareng setel waktosna, contona, ka 5 detik. Sarta kami boga anggota disebut connectedSignal. Intina, urang nyiptakeun grup sapanjang jalur anu dikirimkeun. Urang teu nulis data aya, sanajan hal bisa geus ditulis. Sareng titik di dieu mangrupikeun jinis pengkuh. Intina, ieu mangrupikeun titik biasa biasa anu bakal aya unggal waktos. Ieu dimana sési dijieun. Ieu palaksanaan klien sorangan. Klién kami bakal ngirim pesen périodik anu nunjukkeun yén sési éta hirup. Sareng nalika urang mungkas sési, urang nyauran caket sareng éta, sési ragrag. Ieu bisi aya hal ragrag kaluar pikeun urang, ku kituna ZooKeeper manggihan ngeunaan eta sarta motong off sési.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Kumaha carana ngonci sumberdaya? Di dieu sagalana geus saeutik leuwih pajeulit. Kami ngagaduhan sakumpulan pagawé, aya sababaraha sumber anu kami hoyong konci. Jang ngalampahkeun ieu, urang nyieun hiji titik misah, contona, disebut lock1. Upami urang tiasa nyiptakeunana, maka urang ngagaduhan konci di dieu. Sareng upami urang henteu tiasa nyiptakeunana, maka pagawé nyobian kéngingkeun getData ti dieu, sareng kumargi simpulna parantos didamel, maka urang nempatkeun pangawas di dieu sareng nalika kaayaan titik ieu robih, urang bakal terang ngeunaan éta. Sareng urang tiasa nyobian gaduh waktos pikeun nyiptakeun deui. Upami urang nyandak titik ieu, nyandak konci ieu, teras saatos urang henteu peryogi deui konci, urang bakal ngantunkeun éta, sabab titik éta ngan ukur aya dina sési. Sasuai, éta bakal ngaleungit. Sareng klien anu sanés, dina kerangka sési anu sanés, bakal tiasa nyandak konci dina titik ieu, atanapi langkungna, anjeunna bakal nampi béwara yén aya anu robih sareng anjeunna tiasa nyobian ngalakukeunana dina waktosna.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

conto sejen kumaha anjeun tiasa milih pamimpin utama. Ieu saeutik leuwih pajeulit, tapi ogé kawilang basajan. Aya naon di dieu? Aya titik utama anu aggregates sakabeh pagawe. Kami nyobian nyandak data ngeunaan pamimpin. Upami ieu kajantenan suksés, nyaéta kami nampi sababaraha data, maka pagawé urang mimiti nuturkeun pamimpin ieu. Manéhna yakin yén geus aya pamingpin.

Upami pamimpin maot kusabab sababaraha alesan, contona, murag, teras urang nyobian nyiptakeun pamimpin énggal. Sareng upami urang suksés, maka pagawé urang janten pamimpin. Sareng upami aya anu dina waktos ieu tiasa nyiptakeun pamimpin énggal, maka urang nyobian ngartos saha éta teras nuturkeun anjeunna.

Di dieu timbul anu disebut herd effect, nyaeta herd effect, sabab lamun saurang pamingpin maot, anu mimiti waktuna bakal jadi pamingpin.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Nalika nyandak sumber daya, anjeun tiasa nyobian nganggo pendekatan anu rada béda, nyaéta kieu. Contona, urang hayang meunang konci, tapi tanpa pangaruh hert. Éta bakal diwangun ku kanyataan yén aplikasi kami naroskeun daptar sadaya id titik pikeun titik anu parantos aya sareng konci. Sareng upami sateuacanna titik anu kami damel konci mangrupikeun set pangleutikna anu kami tampi, maka ieu hartosna kami parantos nangkep konci éta. Kami pariksa yén kami parantos nampi konci. Salaku cek, bakal aya syarat yén id anu kami tampi nalika nyiptakeun konci énggal minimal. Sareng upami urang nampi éta, maka urang damel salajengna.

Upami aya id anu langkung alit tibatan kuncén kami, maka kami nempatkeun pangawas dina acara ieu sareng ngantosan béwara dugi ka aya anu robih. Nyaéta, kami nampi konci ieu. Sareng dugi ka ragrag, urang moal janten id minimum sareng moal nampi konci minimum, sahingga urang tiasa lebet. Sareng upami kaayaan ieu henteu kapendak, maka urang langsung angkat ka dieu sareng cobian kéngingkeun konci ieu deui, sabab aya anu tiasa robih salami ieu.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Naon ZooKeeper diwangun? Aya 4 hal utama. Ieu prosés ngolah - Request. Sareng ogé ZooKeeper Atomic Broadcast. Aya Commit Log dimana sadaya operasi dirékam. Jeung In-memori Replicated DB sorangan, nyaéta database sorangan dimana sakabeh tangkal ieu disimpen.

Eta sia noting yén sakabéh operasi nulis ngaliwatan Request Processor. Jeung operasi maca buka langsung ka database Dina-memori.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

Database sorangan pinuh replicated. Sadaya instansi ZooKeeper nyimpen salinan lengkep data.

Pikeun mulangkeun pangkalan data saatos kacilakaan, aya log Komit. Prakték standar nyaéta sateuacan data asup kana mémori, éta ditulis di dinya supados upami nabrak, log ieu tiasa dicoo deui sareng kaayaan sistem tiasa dibalikeun. Sareng snapshot périodik tina pangkalan data ogé dianggo.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

ZooKeeper Atomic Broadcast mangrupikeun hal anu dianggo pikeun ngajaga data réplikasi.

ZAB internal milih pamimpin ti sudut pandang tina ZooKeeper titik. Titik anu sanés janten pengikutna sareng ngarepkeun sababaraha tindakan ti anjeunna. Upami aranjeunna nampi éntri, aranjeunna teraskeun sadayana ka pamimpin. Anjeunna mimiti ngalakukeun operasi nulis teras ngirim pesen ngeunaan naon anu parantos robih ka pengikutna. Ieu, kanyataanna, kedah dilakukeun sacara atom, nyaéta, operasi ngarékam sareng siaran sadayana kedah dilakukeun sacara atom, ku kituna ngajamin konsistensi data.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop" Ieu ukur ngolah requests nulis. Tugas utami nyaéta ngarobih operasi kana pembaruan transaksional. Ieu mangrupikeun pamundut anu didamel khusus.

Sarta di dieu eta sia noting yén idempotency apdet pikeun operasi anu sarua dijamin. Naon éta? Hal ieu, upami dieksekusi dua kali, bakal ngagaduhan kaayaan anu sami, nyaéta pamundut nyalira moal robih. Sareng ieu kedah dilakukeun supados upami aya kacilakaan, anjeun tiasa ngabalikan deui operasi, ku kituna gulung deui parobihan anu parantos turun ayeuna. Dina hal ieu, kaayaan sistem bakal sarua, i.e. teu kudu jadi kasus nu runtuyan sarua, contona, prosés update, ngarah ka kaayaan ahir sistem béda.

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

"Hadeuh. ZooKeeper" tina séri Mail.Ru Group Technostream "Metode pikeun ngolah distribusi data anu ageung dina Hadoop"

sumber: www.habr.com

Tambahkeun komentar