MapReduce bir bir mimari model bir yazılım geliştirme icat, Google imal edildiği, paralel hesaplamalar sıklıkta ve dağıtılmış 1 tipik olarak boyut açısından daha büyük bir potansiyel olarak çok büyük veri için terabaytın .
" Harita " ve " azaltma " terimleri ve temeldeki kavramlar, yapıları için kullanılan işlevsel programlama dillerinden ödünç alınmıştır (harita ve işlevsel programlama ve dizi programlama dillerinin indirgenmesi ).
MapReduce, büyük miktarda veriyi işlemek üzere bir makine kümesine dağıtarak manipüle etmeyi mümkün kılar. Bu model, Amazon.com veya Facebook gibi büyük veri merkezlerine sahip şirketler arasında oldukça popülerdir . Bulut bilişim içinde de kullanılmaya başlandı . MapReduce'u uygulamak için birçok çerçeve ortaya çıkmıştır. En bilineni Apache Software Foundation tarafından geliştirilen Hadoop'tur . Ancak bu çerçevenin , özellikle heterojen ortamlarda performansını önemli ölçüde azaltan dezavantajları vardır. Of çerçeveler hem güç tüketimi daha işleme hızı bakımından Hadoop'un performansını veya MapReduce genel performansının artırılmasına yönelik, ortaya çıkmaya başlıyor.
MapReduce, Google tarafından popüler hale getirilen bir programlama modelidir . Esas olarak, bir düğüm kümesi içinde büyük miktarda verinin işlenmesi ve işlenmesi için kullanılır.
MapReduce, map () ve azaltma () olmak üzere iki işlevden oluşur.
Bir MapReduce kümesi, bir ana düğümün tüm bağımlı düğümleri yönettiği bir Master-Slave tipi mimari kullanır .
MapReduce'un birkaç özelliği vardır:
Bir düğüm bir görevi tamamladıktan sonra yeni bir veri bloğuna atanır. Bu sayede hızlı bir düğüm, daha yavaş bir düğümden çok daha fazla hesaplama yapacaktır. Harita işlerinin sayısı düğüm sayısına değil, girdi verisi bloklarının sayısına bağlıdır. Her bloğa tek bir Harita görevi atanır. Ayrıca, tüm Harita görevlerinin aynı anda paralel olarak yürütülmesi gerekmez, Azaltma görevleri aynı mantığı izler. Örneğin, girdi verileri 400 bloğa bölünmüşse ve kümede 40 düğüm varsa, Harita işlerinin sayısı 400 olacaktır. Ardından, veri eşlemeyi gerçekleştirmek için 10 Harita dalgasına ihtiyaç duyulacaktır.
MapReduce 2004'te ortaya çıktı. Teknoloji hala genç. Birkaç zayıf noktasından muzdarip:
MapReduce güvenilirliğini, veri kümesine uygulanacak işlemlerin ağın her düğümünde dağıtımından alır ; geliştirici, her düğümün, tamamlanan işi ve durum değişikliklerini periyodik olarak döndürmesini bekler . Bir düğüm bu aralık sırasında hiçbir şey döndürmezse, ana düğüm (Hadoop'ta NameNode olarak adlandırılır) ( Google Dosya Sistemi ana sunucusuna benzer ) düğümü ölü olarak kabul eder , Ve bu düğüme atanan verileri d ' diğer düğümlerine gönderir . Bireysel işlemler , çalışan bir iş parçacığıyla paralel bir çakışma olmadığından emin olmak için çift kontrol olarak çıktı dosyası adları için atomik işlemleri kullanır ; dosyalar yeniden adlandırıldığında, görev adına ek olarak başka bir adla da kopyalamak mümkündür ( yan etkilere izin verilir ) .
Büzülme işlemleri hemen hemen aynı şekilde çalışır, ancak eşzamanlı işlemlerle ilgili yetersiz özellikleri nedeniyle , ana düğüm, küçültme işlemlerini aynı düğümde veya onları tutan düğüme mümkün olduğunca yakın planlamaya çalışır. işlenmiş. Bu özellik, ek bant genişliği gerektirmediği için Google tarafından tercih edilmektedir. Bu bir avantajdır çünkü bant genişliği genellikle şirket içi ağlarda sınırlıdır .
Singapur Ulusal Üniversitesi tarafından 2010 yılında yapılan bir araştırmaya göre , MapReduce performansını etkileyen beş faktör vardır.
MapReduce programlama modeli, veri depolama sisteminden bağımsız olacak şekilde tasarlanmıştır. Bir okuyucu kullanarak <key, value> çiftlerini okur. Okuyucu, depolama sisteminden her kaydı alır, ardından onları MapReduce sırasında işlenebilmeleri için bir <anahtar, değer> çiftine yerleştirir. MapReduce, belirli bir depolama sistemine bağlı olmasa da, depolama sistemi bir veritabanı olduğunda zorluk yaşar. Ticari paralel veritabanı sistemleri, sorguları gerçekleştirmek için bir motor ve bir depolama motoru kullanır. Sorgu motoru, bir sorguyu çalıştırmak için verileri doğrudan depolama motorundan okur. MapReduce önce değeri okumalı ve ardından okuyucuyu kullanarak bir çift halinde saklamalıdır, bu nedenle MapReduce veritabanlarında daha az iyi performans gösterir. MapReduce ve paralel veritabanı sistemlerini karşılaştırırken, MapReduce performansını etkileyebilecek üç faktör vurgulandı:
MapReduce, veri bloklarını kümedeki kullanılabilir düğümlere tahsis etmek için bir zamanlama sistemi kullanır. Bu sistem yürütme maliyetlerine neden olur ve MapReduce'un yürütülmesini yavaşlatabilir. MapReduce performansını iki faktör etkileyebilir:
Bir depolama sisteminde depolanan verileri okumak için okuyucu tarafından iki okuma modu kullanılabilir.
Bu çalışmada yapılan testlere göre, bu iki mod arasındaki performans farkı küçüktür (yaklaşık %10).
Veri ayrıştırmaSürücü, depolama sisteminden veri aldığında, yürütmeye devam etmek için verileri bir <anahtar, değer> çiftine dönüştürmelidir (bu işleme veri analizi denir). Analiz, verileri bir programlama dili tarafından kullanılabilecek bir biçime dönüştürmek için yerel depolama biçiminden kodunun çözülmesinden oluşur. İki tür kod çözme vardır, değişmez kod çözme ve değişken kod çözme. Değişmez kod çözme, verileri değişmez nesnelere dönüştürmeyi içerir. İletmenin nesneler nesne yönelimli programlama , durumu değişken nesnelerin aksine, onların oluşturulmasından sonra değiştirilemez nesnelerdir.
Değişmez kod çözme kullanılırken, her veri daha sonra değişmez bir nesneye yerleştirilecektir. Bu nedenle, 4 milyon parça veriyi deşifre edersek, 4 milyon değişmez nesne oluşturulacaktır. Varsayılan olarak, Google'ın MapReduce özelliği değişmez nesneler kullanır.
Başka bir yöntem, değişken kod çözme kullanmaktır. Bu kod çözme ile, tüm verilerin kodunu çözmek için değiştirilebilir bir nesne yeniden kullanılır. Bu nedenle, yalnızca bir nesne oluşturulacağı için veri sayısı artık önemli değildir.
Çalışmalara göre, zayıf ayrıştırma performansı, değişmez kod çözmeden kaynaklanmaktadır. Değişmez kod çözme, kod çözme işlemi sırasında çok sayıda değişmez nesne ürettiği için değişken kod çözmeden daha yavaştır. Tüm bu değişmez nesnelerin oluşturulması, işlemcilerin üzerindeki iş yükünü artırır.
indekslemeMapReduce, depolama sisteminden bağımsız olduğundan, kullanılabilir bir dizine sahip olmak için tüm girdi verilerini hesaba katamaz. MapReduce dizinleri kullanamıyor gibi görünüyor. Bununla birlikte, veri işleme sürecinin hızını artırmak için indeksleri kullanmanın üç yöntemi bulunmuştur.
Planlama sürelerini azaltmak için, kümenin düğümlerine dağıtılacak veri bloklarının boyutunu değiştirmek mümkündür. Veri bloklarının boyutunu arttırırsak, planlama daha hızlı olacaktır çünkü daha az harita görevi gerektirecektir. Ancak blokların boyutu çok fazla artırılırsa, başarısızlık riski daha fazladır.
MapReduce, dağıtılmış grep, dağıtılmış sıralama, web bağlantı grafiği tersine çevirme , ana bilgisayara göre terim vektörü, web erişim istatistikleri, ters çevrilmiş dizin oluşturma, otomatik belge sınıflandırma , makine öğrenimi , istatistiksel makine çevirisi (dağıtılmış grep, dağıtılmış kader, web bağlantısı grafiği tersine çevirme, ana bilgisayar başına terim vektörü, web erişim günlüğü istatistikleri ters çevrilmiş dizin oluşturma, kağıt kümeleme , makine öğrenimi , istatistiksel makine çevirisi ). Daha da önemlisi, MapReduce bittiğinde, Google'ın İnternet dizinlerini tamamen yeniden oluşturmak için kullanıldı ve bu dizinleri güncellemek ve bu dizinlerin çeşitli taramaları için kullanılan eski geçici programların yerini aldı .
MapReduce genellikle yönetilir ve erişilir aracılar ve geçici dosyaları, çok sayıda üretir aracılığıyla Google File System iyi performans için.
Hadoop bir uygulamasıdır açık kaynak içinde Java Vakfı tarafından dağıtılan MapReduce Apache . Yahoo gibi büyük web oyuncuları tarafından ortaya atıldı ! ve Facebook . Hadoop'un iki ana özelliği, MapReduce çerçevesi ve Hadoop Dağıtılmış Dosya Sistemidir ( Google Dosya Sisteminden esinlenmiştir ). HDF'ler verileri dağıtmak ve MapReduce parallelize amacıyla birden fazla düğümler üzerinde bir işlem dağıtarak bu veriler üzerinde etkili tedaviler yapabilirsiniz.
Hadoop'ta ana düğüme JobTracker, bağımlı düğümlere TaskTracker adı verilir. Her bağımlı düğüm, veri bloklarını çoğaltarak içerecektir. Ana düğüm, farklı kopyaların konumlarını bilir. İkincil ana düğüm, bir sorun durumunda yeniden kullanılabilmesi için ana düğümün düzenli yedeklerini almak için kullanılır.
Hadoop, önce girdi verilerini aynı boyutta bir veri bloğuna bölerek MapReduce türünde bir görev gerçekleştirir. Daha sonra her blok bir TaskTracker tarafından yürütülmek üzere programlanır. Görev atama süreci, “kalp atışı” tipi bir protokol olarak uygulanır. Bu, TaskTracker'ın JobTracker'a görevinin bittiğini bildirdiği ve böylece JobTracker'ın yürütülecek yeni bir görev atadığı anlamına gelir. Harita işlevi tamamlandığında, sistem tüm ara çiftleri yeniden gruplandıracak ve nihai sonucu elde etmek için bir dizi indirgeme başlatacaktır.
Hadoop'un 2010 uygulaması, işlemenin bir dizi homojen makine üzerinde gerçekleştirildiğini (yani hepsinin aynı donanım özelliklerine sahip olduğunu) dikkate almaktadır. Verilerin yerelliğini de dikkate almaz, tüm verilerin yerel olduğunu düşünür. Ne yazık ki, bu iki faktör MapReduce'un performansını önemli ölçüde etkileyebilir.
Homojen bir ortamda, tüm düğümler aynı iş yüküne sahiptir, bu da bir düğümden diğerine hiçbir verinin aktarılmaması gerektiğini gösterir. Heterojen bir ortamda, yüksek performanslı bir düğüm, yerel işlemeyi daha düşük performanslı bir düğümden daha hızlı tamamlayabilir. Hızlı düğüm işlemeyi bitirdiğinde, bir veya daha fazla diğer yavaş düğümden işlenmemiş verileri alması gerekecektir. Yavaş bir düğümden hızlı bir düğüme veri aktarımının maliyeti yüksektir.
bulutta SunumMapReduce, farklı hesaplama düğümlerinde verimli iş dağılımı sayesinde büyük miktarda veri kullanan uygulamalar için önemli bir programlama modeli olarak 2004 yılında ortaya çıktı. Özellikle, saklanan ve işlenen veri sayısı artmaya devam ettiği için Bulut Bilişimde kullanılmaya başlandı . Bu nedenle, Bulutta veri işlemeyi iyileştirmenin bir yolunun olması gerekir.
Kaynaklar açısından, Bulut üç noktada karakterize edilebilir: büyük bir veri depolama kapasitesi, talep üzerine bilgi işlem gücü, az bant genişliği kullanır. Bulutta saklanan verilerin boyutu, özellikle simülasyonları gerçekleştirmek için görüntü, video, ses dosyaları veya bilimsel araçlar olmak üzere sürekli artmaktadır. Bu verilerin işlenmesi, Bulut Bilişimin ana zorluklarından biri haline geldi.
Bulut, uygulamaları çalıştırmak için öncelikle sanal makineleri (VM'ler) kullanır. VM'ler, sistem kaynaklarının tam kullanımına izin verir, sanal makinelerde bulunan işlevleri kullanarak sistem durumunu yedekleyerek sistem güvenilirliğini artırır ve görevleri tamamlamak için kullanılan düğüm sayısını azaltarak güç tüketimini azaltır.
VM'leri ve MapReduce'u kullanan Bulut Bilişimi birleştirmek ilginç olabilir. Temel olarak, çünkü sanallaştırma teknolojileri çağı geldi. Bunlar, bilgi işlem düğümlerinin ve HPC (Yüksek Performanslı bilgi işlem) uygulamalarının kaynaklarından tam olarak yararlanmak için bilgi işlem ızgaraları için zaten kullanılmıştır. Buna ek olarak, bir yandan (VM'leri kullanan) Bulut'un artan popülaritesi var, diğer yandan MapReduce, özellikle ölçeklenebilirliği ve hatalara toleransı olmak üzere birçok güçlü yönü sayesinde yaygın olarak kullanılmaya başlıyor. Bu nedenle, bu iki teknolojiyi birleştirmek, Bulutta büyük verileri işlemek için verimli bir yol yaratacaktır. Buna ek olarak, MapReduce'un spekülatif görevler kullanması gerçeğidir. Bunlar, çok yavaş oldukları tespit edilirse başka bir düğümde yeniden başlatılabilen görevlerdir. Sorun, bir görevi yeniden başlatmanın, görevin tüm işlemeyi sürdürmesi gerektiğinden yürütme süresini artırarak performansı azaltabilmesidir. Yedekleme ve geçiş gibi yeni VM teknolojileri sayesinde MapReduce'un performansı ve güvenilirliği iyileştirildi. Yedekleme işlevi, sistemin durumunu kaydetmekten oluşur, böylece düzgün çalışmasını engelleyen ciddi bir hatayla karşılaşırsa bu duruma geri dönebilir. Geçiş işlevi, bir VM'yi veya uygulamayı, uygulamayı durdurmadan birkaç fiziksel düğüme dağıtmaktan oluşur.
VerimMapReduce'u test etmek için Hadoop çerçevesinde çeşitli ölçümler yapılır. MapReduce'un yürütülmesinde büyük rol oynadığı için performans testleri HDFS üzerinde gerçekleştirilir. Aslında, görevlerin çeşitli düğümler üzerindeki dağılımıyla ilgilenen özellikle HDFS'dir, ayrıca düğüm tarafından işlenecek verilerin boyutuna da karar verir. Kaynak kullanımını artırarak (düğüm başına VM sayısını artırarak) MapReduce performansını iyileştirmek için VM'leri kullanmanın fizibilitesi üzerinde daha fazla testler yapılacaktır. Performans, bilinen iki karşılaştırma ölçütü, kelime sıralama ve sayma ölçütü kullanılarak ölçülür.
sıralama kriteri bu kıyaslama, girdi verilerini sıralamak için harita/azaltma çerçevesini kullanır. "Kelime sayma" kriteri bu kıyaslama, bir dosyadaki her kelimenin tekrarlanma sayısını sayar ve sonucu yerel diske yazar. HDFSHDFS performans değerlendirmesi, fiziksel bir kümede (PH-HDFS) ve bir sanal kümede (VM-HDFS) fiziksel bir küme ile bir küme sanal arasındaki performans farklarını göstermek için veri yazarken ve okurken yapılır.
Bu değerlendirmede farklı boyutlarda birkaç veri aktarımı gerçekleştirilir. PH-HDFS daha iyi zamanlar elde eder, veriler büyüdükçe boşluklar genişler.
Bu değerlendirmede aynı anda bir veya birden fazla istek başlatılır ve veri aktarımının tamamlanması için gereken süre ölçülür. PH-HDFS'nin performansı, VM-HDFS'den daha iyidir.
VM fizibilitesiÇok çekirdekli işlemcilerin ortaya çıkmasıyla birlikte, düğümün yeteneklerini tam olarak kullanmak için işlemci başına birden çok VM kurmak için kümede çok çekirdekli işlemcilerin kullanılması önemlidir. Testler için, düğüm başına VM sayısındaki artışın etkisini değerlendirmek için birkaç küme kuruldu:
Bu şekilde gösterildiği gibi, Ph-Cluster ile kıyaslama "kelime sayımı" V-Cluster'dan daha hızlıdır. Veri 1 Gb olduğunda, fark küçüktür. Ancak veriler çok daha büyük olduğunda (burada 8 Gb), önemli bir fark vardır. Bu, kaynakların verimsiz kullanımına neden olan spekülatif görevlerin artmasından kaynaklanmaktadır. Öte yandan, V2 ve V4 kümeleri Ph-Cluster'dan çok daha verimlidir çünkü döngü başına çok daha fazla hesaplama vardır.
Sıralama karşılaştırması başlatıldığında, aynı veri dağıtımı için çalışma zamanı, fiziksel bir düğümde dağıtılan VM'lerin sayısındaki artışla artar. Ayrıca, dağıtılan verinin boyutu arttıkça boşluklar genişler. Bunun nedeni 3 nedendir: okuma/yazma işlemleri sırasında VM'lerde HDFS'nin düşük performansı (daha önce görüldüğü gibi), spekülatif görevlerin sayısındaki artış (Şekil 6) ve ara aşamalarda aktarılan büyük miktarda veri.
Hadoop'un MapReduce programlama modeline dayalı bir çerçeve olduğunu hatırlayın. Çok büyük veri kütlelerinin hesaplanmasında yaygın olarak kullanılan bu çerçevede çeşitli iyileştirmeler ortaya çıkmıştır. Bu uzantılar çerçevelerdir: "BlobSeer" veri erişimini iyileştirmek için dosya sistemini değiştirir, "Phoenix" MapReduce kullanan işlemcilere görevler dağıtır ve "Mars" grafik işlemcilerinde veri hesaplamasını iyileştirir.
Daha önce de belirtildiği gibi, Hadoop'un heterojen ortamdaki performans sorunu, hızlı düğümler ve yavaş düğümler arasında veri aktarımından kaynaklanmaktadır. Büyük miktarda veri aktarıldığında, önemli ölçüde etkiler.
Hadoop'un performansını iyileştirmek için hızlı ve yavaş düğümler arasındaki veri transferini en aza indirmek gerekir. Bunun için bir veri yerleştirme mekanizması uygulanmış; Verileri, yeteneklerine göre birçok heterojen düğüm arasında dağıtır ve depolar. Bununla, her düğümün diskine yerleştirilen veri sayısı düğümlerin işlem hızıyla orantılıysa veri aktarımı azaltılabilir.
Veri çoğaltmanın birçok sınırlaması vardır. İlk olarak, çok sayıda düğüme sahip bir küme içindeki verilerin her bir kopyasını oluşturmak önemli bir maliyeti temsil eder. İkincisi, çok sayıda replika dağıtmak, kümenin bant genişliğini aşırı yükleyebilir. Üçüncüsü, replikaları depolamak, büyük miktarda depolama alanına sahip diskler gerektirir.
GelişmeAraştırmacılar bir veri yerleştirme mekanizması üretebilmek için bu soruna odaklanmışlardır. Sorunu düzeltmek için, dosyaların bölüneceği ve birden çok düğüme çoğaltılmadan dağıtılacağı verileri yerleştirmenin en iyi yolunu araştırdılar .
Bu mekanizma, Hadoop HDFS'ye dahil edilen 2 algoritmaya dayanmaktadır:
İlk algoritma şöyle çalışır:
MapReduce kullanan bir uygulamayı ve heterojen bir Hadoop kümesindeki bir girdi dosyasını ele alırsak. Hadoop, tüm düğümlerin çalışacağını ve görevlerini yaklaşık olarak aynı miktarda tamamlayacağını tahmin ettiğinden, ilk veri yerleştirme düğüm performansını hesaba katmaz. Deneyler, genel bir kural olarak, her bir düğümün yanıt süresinin, verilerin boyutuyla doğrusal olarak orantılı olması nedeniyle, her düğümün işlem süresinin sabit olduğunu göstermiştir. Bununla, heterojen bir ortamda her bir düğümün işlem hızı ölçülebilir. Her düğümün performansını tanımlayan terim "Oran Performansı"dır.
Her düğümün Oran Performansı, bu prosedür kullanılarak belirlenir:
Oran Performansının nasıl hesaplandığını göstermek için bir örnek alalım. Bir Hadoop kümesinde 3 heterojen düğüm A, B ve C düşünün. Uygulamayı her düğümde ayrı ayrı çalıştırdıktan sonra, her bir düğüm A, B ve C'nin yanıt süresini (sırasıyla 10 s, 20 s ve 30 s) alıyoruz. A düğümünün tepki süresi en kısadır, bu nedenle A'nın Performans Oranı 1'dir. B ve C'nin Performans Oranı sırasıyla 2 ve 3'tür. Bu, Düğüm A'nın giriş dosyasının 30 parçasını yönetebileceği ve Düğüm C'nin yalnızca 10 parçasını yöneteceği anlamına gelir.
İlk yerleşimi elde etmek için parça dağıtım algoritmasını çalıştırdıktan sonra, parçalar birkaç nedenden dolayı bozulabilir:
Bu sorunlardan kaçınmak için, düğümlerin Performans Oranına dayalı olarak dosyanın parçalarını yeniden düzenlemek için ikinci bir algoritma uygulandı.
Bu algoritma şöyle çalışır:
2 düğüm (biri aşırı yüklenmiş ve biri disk alanı olan) arasında veri taşıma sürecinde, sunucu, dosyanın parçalarını aşırı yüklenmiş düğümler listesinin kaynak düğümünden, az kullanılan düğümler listesinden hala alanı olan bir düğüme aktarır. . Bu işlem, her düğümdeki parça sayısı Performans Oranıyla eşleşene kadar tekrarlanır.
PerformanslarBu çalışmanın bu algoritmalarının sonuçlarını göstermek için Grep ve WordCount olmak üzere iki test gerçekleştirilmiştir . Bu 2 uygulama Hadoop kümelerinde çalışır. Grep , metinde bir normal ifade arama aracıdır. WordCount, metindeki kelimeleri saymak için kullanılan bir programdır.
Sonuçlar, bu algoritmaların Grep performansını ortalama %17 ve WordCount'u ortalama %7 iyileştirdiğini gösterdi.
Hadoop, Harita / Azaltma programlama modeline dayalı bir çerçevedir. Ve bunun için Hadoop'un "güçlü bir araca" güvenmesi gerekiyor: HDFS dosya sistemi. HDFS dosya sistemi (Hadoop Dağıtılmış Dosya Sistemi olarak adlandırılır), Hadoop'a özgü olduğu için Hadoop'un hesaplama performansının önemli bir parametresidir. Yani, veri erişimini en üst düzeye çıkarmak için tasarlanmıştır.
Birkaç işlem aynı dosyaya eriştiğinde yalnızca hatalar kalır. Bu soruna çözüm sunan Blobseer çerçevesidir. Aslında bu çerçeve, HDFS'yi kendi dosya sistemi BSFS (Blobseer Dosya Sistemi) ile değiştirmek için değiştirmeyi önermektedir.
Yeni bir dosya sistemiBu dosya sisteminin değiştirilmesinin nedenleri, aynı dosyaya eşzamanlı erişim sorunlarıyla ilgilidir. HDFS sistemi, Hadoop'un en iyi bilgi işlem performansını sağlamak üzere tasarlanmıştır, ancak bu uygulama yeterli değildir. HDFS dosya sistemi, aynı dosyaya eşzamanlı erişimlerde yüksek bir hızın korunmasına izin vermemekte, ayrıca mevcut dosya sistemi , aynı dosya üzerinde "sürüm oluşturma" veya farklı eşzamanlı güncellemeler gibi belirli işlevlere izin vermemektedir .
Hadoop'un güçlü yönlerinden biri, dosyaların birkaç yüz gigabayt boyutunda olması nedeniyle petabaytları yalnızca birkaç saat içinde taramasıdır. Sonuç olarak, aynı dosyanın küçük bölümlerine aynı anda erişmek mümkün hale gelir. Tek bir dosya yerine milyonlarca küçük dosyayla çalışmanın imkansız olduğunu ve dosya sistemi izin verse bile çok yüksek hızı korumanın mümkün olmadığını unutmayın.
Bu nedenle Blobseer, büyük bir dosyanın küçük bölümlerine erişime izin veren ve binlerce "istemcinin" aynı dosyayı çakışma sorunu olmadan değiştirmesine izin veren bir dosya sistemi sunar. Bu nedenle BSFS, istenmeyen değişikliklerin silinmesini ve hesaplama performansını düşürmemesi gereken bağımsız dalların oluşturulmasını ve binlerce küçük dosyadan kaynaklanacak depolama alanının aşırı yüklenmesini mümkün kılan "sürüm oluşturmaya" da izin verir .
PerformanslarÇerçevenin performansı grid5000 üzerinde test edilmiştir. Blobseer, Hadoop ile karşılaştırılmıştır. Bunun için çerçeveler mikro görevlerde kullanıldı:
Performans kayıtları, çıktının (veri erişimi) Hadoop'un iki katına kadar çıktığını gösterdi. Bu sonuçlar ayrıca BlobSeer çerçevesinin iki kata kadar daha fazla istemciyi (yani tek bir dosyadaki isabet sayısı) destekleyebileceğini ortaya koydu. BlobSeer ve Hadoop arasındaki performans oranı ikiden fazla değildir. Gerçekten de BlobSeer, dosya sisteminin değiştirilmiş olması dışında Hadoop ile aynı bilgi işlem kapasitelerini kullanır.
Phoenix, google tarafından sunulan MapReduce modeline dayalı bir API'dir. Aradaki fark, Phoenix'in çok çekirdekli bilgisayarlarda kullanılması ve bu nedenle MapReduce'u kullanabilmek için sunucuları değil iş parçacıklarını kullanmasıdır. Phoenix, paralelleştirmeyi kullanıcı için tamamen şeffaf hale getirmek için işlevsel bir dil üzerine kuruludur. Phoenix, C ve C++ dillerinde kullanılır.
YapıC/C++ kodu ile kullanılmak üzere geliştirilmiş bir API'dir ancak Java/C#'a kolayca aktarılabilir. API performansını artırmak için Pointer, Buffer, P-Threads kullanılır. Tamponlar, paylaşılan bellekteki verilere erişime izin verir. İki tür arabellek vardır: giriş/çıkış, giriş verilerinin yanı sıra çıkış verilerini içeren yani kullanıcının ihtiyaç duyduğu verileri içeren arabellekler ve diğer arabelleklerdir. Bunlar, MapReduce'u oluşturmak için kullanılanlardır, bu nedenle kullanıcı için "görünmez" arabelleklerdir. İşaretçiler , verilerin tekrarlanmamasını mümkün olduğunca önlemek için kullanılır , böylece veri hesaplama hızını önemli ölçüde artırır. P-Threads kullanmak, API'nin çalışmalarını MapReduce programlama modelini izleyerek birden çok işlemci arasında dağıtmasına olanak tanır.
PerformanslarPerformanslar, aşağıdakiler gibi temel görevlere göre hesaplandı:
bir kıyaslama olarak, MapReduce modeli olmadan p-thread'lerin performansı.
Phoenix'ten elde edilen sonuçlar, 4 çekirdekli bir işlemci ile hesaplamaları %40 oranında hızlandırabileceğinizi ve 8 çekirdek ile %50'ye kadar çıkabileceğinizi gösteriyor. Bununla birlikte, hesaplama hızı artırılsa da, basit makinelerde yine de p-dişlerinkine eşdeğer kalır. Gerçekten de, MapReduce modeli milyonlarca veri ölçeğindeki kümeler üzerinde çok verimli olmasına rağmen, modelin uygulanması tüm programları kapsayacak kadar genel değildir.
MapReduce programlama modelinin başarısından cesaret alan Mars çerçevesi doğdu ve MapReduce modelinin grafik işlemcilerinde uygulanmasını mümkün kıldı. Grafik işlemciler ( GPU'lar ), CPU'ların bellek bant genişliğinin on katına sahiptir ve ayrıca on kata kadar daha hızlıdır.
PerformanslarBu performansı değerlendirmek için Mars, aynı görevlerde Phoenix ile karşılaştırıldı. Mars'ın performansının Phoenix'inkinden 1,5 kat daha iyi olduğu ortaya çıktı.
OptimizasyonMars hala inceleniyor, ancak gelecekteki bir evrim için üç temel nokta not edildi:
PQL, Java'nın bir uzantısı olarak uygulanan bir dildir. Etkileyiciliğini ve modülerliğini artırmak için tasarlandı, uygulaması ile benzer paralel görevlerde Java uygulaması arasında bir karşılaştırma yapıldı. Paralelleştirme, bilgisayar bilimlerinde güncel bir sorundur, bu nedenle paralelleştirmeyi kolaylaştırmak için diller veya kitaplıklar oluşturmak önemlidir. Ancak sıralı programlama unutulmamalı, bu nedenle paralel ve sıralı programlamaya uygun bir dilin uygulanması elzemdir. PQL ile uygulanan tüm programlar bildirimsel programlama sayesinde paralelleştirilir .
Bildirimsel ProgramlamaPQL, bildirimsel programlamaya dayalı bir dildir ; bu, programcının gerçekte "nasıl" yapacağını belirtmeden ne yapmak istediğini belirleyebileceği anlamına gelir. Gerçekleştirilecek en hızlı yöntemi bulmak için PQL uygulanmıştır. Aslında, hangi kod parçasının paralelleştirileceğini veya edilmeyeceğini bilecektir. Kodunu nasıl optimize edeceğini bulmak geliştiricinin işi değildir. PQL, iş yükünü MapReduce kullanarak mevcut işlemcilere dağıtır. PQL paralel görevler için optimize edilmiştir, böylece kullanıcı tarafından yazılan paralel koda kıyasla kullanıcının en az manipülasyona sahip olması sağlanır.
dil illüstrasyonPQL, &&, ||, XAND, XOR booleanlarını ve ayrıca azaltma, forall, sorgulama gibi anahtar sözcükleri kullanır. Paralelleştirmeyi mümkün olduğunca iyileştirmek için PQL anahtar sözcüklerinin sayısı açıkça azaltılır.
Bir sorgu şunlarla uygulanabilir: Quantify Expression (bir miktar döndürür, forall kullanır, var ...), bir Java Expression (Java kodu), bir id (türlü veya tipsiz değişken), bir QExpr (önceki durumları birleştirir) ).
Misal:
int[] array = query(Array[x]==y):range(1,1000).contains(x) && y=x*x;Sorgu, 1 ile 1000 arasında x'in karelerini içeren bir tamsayı dizisi döndürür.
Bir niceleyici ifadesi şu biçimde yazılabilir: QUANT-EXPR :: = <QUANT> <ID> ':' <QUERY> sorgu '(' <MATCH> ')' ':' <QUERY> (Container sorguları) azaltma ' (' id ')' <ID> [<ID-SEQ> üzerinden]: <QUERY> (İndirgemeler)
Örnek: forall int x: x == x her zaman doğru (Ölçüm) (ID) (x == x sorgusu)
Kapsayıcı sorguları: sorgu (Map.get (x) == y): aralık (1, 10) .contains (x) && y == x * x sorgu '(' <MATCH> ')' ':' <QUERY> 1'den 10'a kadar olan kareleri içeren bir harita oluşturacak (0. öğeye erişebiliriz ancak boş değeri döndürür)
Azaltma işlemi:
reduce (sumInt) x : myset.contains(x) cette expression va additionner tous les x contenus dans myset reduce (sumDouble) x over y : set.contains(y) && x == 1.0 / y Additionne les inverses des éléments contenus dans la mapTürler örtük olarak (kullanıcının türü bildirmesi gerekmez) veya açıkça (kullanıcının değişkenin türünü bildirmesi gerekir) bildirilebilir. PQL istisnaları atar ancak siparişin garantisi yoktur. PQL eşitlik için == veya = kullanır (dizeler ve .equals () nesneleri hariç).
Kullanıcı kendi indirimlerini oluşturabilir. Birkaç özelliğe saygı göstermelidirler (statik, ilişkisel, değişmeli yöntem…). Bu özelliklere uyulmaması hatalara yol açacaktır.
PerformanslarPQL'yi değerlendirmek için farklı görevler uygulanmıştır (çok sayıda çalışan için ikramiyelerin hesaplanması, bir dizi karakter dizisinde bir alt dizi bulma, birbirine bağlanabilecek belgelerin bir listesi, amaç döngüleri bulmak, birkaç metindeki tüm kelimelerin oluşum sayısını hesaplayın).
Çözümlerin farklı şekillerde uygulanması:
Tek iş parçacıklı ve PQL ile uygularken, giriş değişkenleri kullanılır, ancak geçici değişkenler olmadan kullanılırken, diğer uygulamalarda iletişim veya optimizasyon için değişkenlerin ve ara dizilerin kullanılması gerekliydi. SQL uygulaması basittir ancak java ile karıştırırsanız hızlı bir şekilde karmaşık hale gelir.
PQL uygulamasının yazılması kolaydır çünkü birkaç satır içerir. Gerçekten de, minimum sayıda satır içeren çözüm her zaman PQL . İkincisi, tek iş parçacığıdır (ancak optimize edilmemiştir). Diğer yöntemler 5 ila 20 kat daha fazla satır içerir.
4 görevde, sonuçların birleştirme işlemlerini yapma süresi çok yüksek olduğu için sadece ilki iyi performans göstermiyor. Diğer görevler için PQL, diğer uygulamalardan 2 ila 6 kat daha hızlı gidebilir. Tüm bu testler, PQL'nin çok daha iyi performans gösterdiğini ve daha az kod satırı kullandığını gösteriyor. Ancak SQL ve Hadoop'un bir veri tablosu kullandığını ve dolayısıyla bu veritabanına erişim nedeniyle yürütme sürelerinin yavaşladığını unutmamak gerekir. Ayrıca, Hadoop çerçevesi, tek bir makinede değil, kümelerdeki hesaplamalar için optimize edilmiştir.
MapReduce, her şeyden önce esnekliği ve verimliliği nedeniyle ödüllendirildi. Bununla birlikte, ekolojinin yeni teknolojilerde daha önemli bir yer aldığı bir zamanda, MapReduce'un enerji tüketimini incelemek ve nasıl azaltılacağını bilmek önemlidir.
Hadoop gibi MapReduce uygulayan çoğu çerçeve, işlemin homojen bir ortamda yapıldığını düşünür. Aslında, bir kümenin aynı makineleri içermesi çok nadirdir. Makineler, enerji tüketimine bağlı olarak farklı kriterlere göre farklılık gösterir: termal macun miktarı, fan hızı, fan boyutu, bir soğutma ünitesine az veya çok yakın yerleşim, toz miktarı. Bu, bazı makinelerin aynı işlemi gerçekleştirmek için diğerlerinden daha fazla enerji tüketeceği anlamına gelir.
Bu nedenle, görevleri kümenin her bir düğümünün bireysel tüketimine göre dinamik olarak programlayabilmek için bir çerçeve tasarlanmıştır.
uygulamaDinamik olarak plan yapabilmek için öncelikle her bir düğümün tüketimini bilmenin bir yolunu geliştirmemiz gerekiyordu. Bu makalede, CPU sıcaklığı ve güç tüketimi arasında bir ilişki kurulmuştur, ancak bu ilişki yanlıştır. Bunun nedeni, bir makinenin bir soğutma ünitesinin yanına yerleştirilmesi durumunda düşük sıcaklığa sahipken büyük miktarda enerji tüketebilmesidir. Genel olarak, bu korelasyon doğru kalır.
HDFS Ana Düğümü verileri dağıttığında, her düğümün sıcaklığını ölçecek bir iş parçacığı başlatır. Bir düğümün işlenmesi bittiğinde, sıcaklığı kullanıcı tarafından ayarlanan maksimum sıcaklıktan düşükse, düğüme yeni bir görev atanır, aksi takdirde düğüm, sıcaklığı düşene veya işlem tamamlanana kadar beklemeye alınır. Ancak tüm görevler dağıtıldığında, hata tolerans modülü sıcaklığı hesaba katmadan çalışmaya başlayacaktır. Gerçekten de, tüm düğümler soğuyorsa, görev engellenecektir.
Tüketimi azaltmak için iki parametre uygulanacaktır: bir düğümün maksimum sıcaklığı ve bir tedaviyi gerçekleştirmek için görev sayısı. Bu çerçevenin sonraki geliştirmelerinde, bazı işlemciler operasyonları sırasında daha yüksek bir sıcaklığa sahip olduğundan, her düğüm kendi tanımlı sıcaklığına sahip olacaktır.
PerformanslarÖlçümler, heterojen bir ortamda WordCount algoritması (bir belgenin tüm kelimelerinin tüm yinelemelerini hesaplar) üzerinde gerçekleştirilmiştir.
Bir önceki bölümde bahsedilen iki parametreye göre performans değişimlerini inceleyeceğiz.
Maksimum sıcaklıkSıcaklık sınırı, bir düğümün işleme yapıp yapamayacağına karar verirken performansı sınırlayabilir. Testler üç farklı sıcaklıkta (80°, 110°, 120°) gerçekleştirilmiştir.
Şekilden, maksimum sıcaklık ne kadar düşük olursa, çalışma süresinin o kadar uzun olduğunu görebiliriz. Maksimum sıcaklık, boşta kalan CPU'ların sıcaklığına çok yakınsa, ilkini tamamladıktan sonra çok az sayıda düğüm yeni bir görev alacaktır. Sorun şu ki, bu, bir düğümün sıcaklığı sınırın altında olana kadar mevcut görevin askıda kalmasına neden olabilir. Çerçevenin konuşlandırıldığı kümeden bilgi alarak böyle bir riskten kaçınabiliriz. En önemli bilgilerden biri, hareketsiz durumdaki her bir CPU'nun sıcaklığı olacaktır.
Ayrıca, düğüm başına görev sayısı ne kadar fazlaysa ve maksimum sıcaklık ne kadar düşükse, yürütme süresinin de o kadar arttığını fark ettik. Bunun nedeni, düğümlerin soğuması için geçen sürenin sınırın altına düşmesidir.
Her düğümün güç tüketimi için aynı eğilimi görüyoruz. Bu çerçeve ile maksimum sıcaklığı doğru seçersek performans düşüşünü sınırlarken güç tüketiminde önemli tasarruflar yapmak mümkün.
Veri dağıtımıHer düğümdeki verilerin dağılımı, MapReduce'un performansını ve tüketimini de etkileyebilir. Ölçümler için 500 MB dosya ve 1 GB dosya içeren bir örneğimiz var.
2 grafikte 2 kesişim noktası görüyoruz, ilki görev/düğüm oranı 1 olduğunda ortaya çıkıyor (bu, düğüm sayısı kadar görev olduğu anlamına geliyor). İkincisi, oran 2 olduğunda gerçekleşir. Bu, en hızlı düğüm ile en yavaş düğüm arasındaki yürütme süresinin, görevin yürütme süresinden daha az olmasıyla açıklanabilir. Bu, her düğümün iki görev aldığı anlamına gelir. Ancak oran 3 olduğunda görevler çok daha kısadır, bu da en hızlı düğüm ile en yavaş düğüm arasındaki yürütme süresinin görevin yürütme süresinden daha uzun olduğu anlamına gelir. Bu çerçeve üzerindeki çalışmanın geri kalanında, görevlerin verimli bir şekilde nasıl dağıtılacağını bilmek için bir yöntem uygulanacaktır. Maksimum sıcaklığın, yürütme hızında hala çok önemli bir rol oynadığını görebiliriz.
Maksimum sıcaklık ve veri dağılımının enerji tüketimini etkilediğini kanıtlamak. Bir kümedeki bir düğümün güç tüketimi üzerinde ölçümler yapılmıştır.
Maksimum sıcaklık 80 °C olduğunda 2 GB dosya için iki tüketim zirvesi olduğunu görebiliriz. Bu, düğüm yeniden planlandığında olur. Düğüm yeniden planlanmadığında ve görevler kısaldığında, görev dağılımı artar ve güç tüketimi azalır.
Bu çerçeve sayesinde bir düğümün güç tüketimi %36 oranında azaldı. Bu çerçeve hala geliştirilme aşamasındadır ancak şimdiden çok ilginç sonuçlar vermektedir.
Google, MapReduce işlevi üzerinde bir patent almıştır, ancak bu patentin geçerliliği tartışmalıdır.
Dil | küme hız oranı | işlemci hız oranı | Enerji tasarrufu | Çevre | |
---|---|---|---|---|---|
Hadoop | Java | 1 | Kuzey Kore | Kuzey Kore | Küme |
blobgören | Java | 1.35 | Kuzey Kore | Kuzey Kore | Küme |
Mart | GPU Programlama | Kuzey Kore | 1.1 ~ 4 | Kuzey Kore | Grafik işlemcisi |
Anka kuşu | C / C++ | Kuzey Kore | 1 | Kuzey Kore | Çok çekirdekli işlemci |
Ekolojik Çerçeve | Java | Kuzey Kore | Kuzey Kore | %36 | Küme |