3.1 BigData teriminin ortaya çıkış tarihi

Büyük Veri terimi nispeten yakın zamanda ortaya çıktı. Google Trendler, 2011'den bu yana ifadenin kullanımında aktif bir büyümenin başladığını gösteriyor :

Aynı zamanda sadece tembel olan artık terimini kullanmaz. Özellikle sık sık, terim pazarlamacılar tarafından uygunsuz bir şekilde kullanılmaktadır. Peki gerçekten Büyük Veri nedir? Konuyu sistematik olarak belirtmeye ve vurgulamaya karar verdiğim için kavramı tanımlamak gerekiyor.

Uygulamamda farklı tanımlarla karşılaştım:

  • Büyük Veri, 100 GB'tan fazla veri olduğu zamandır (500 GB, 1 TB, ne istersen).
  • Büyük Veri, Excel'de işlenemeyen verilerdir.
  • Büyük Veri, tek bir bilgisayarda işlenemeyen verilerdir.

Ve hatta bunlar:

  • Büyük Veri genellikle herhangi bir veridir.
  • Büyük Veri diye bir şey yoktur, pazarlamacılar tarafından icat edilmiştir.

Wikipedia'daki tanıma bağlı kalacağım:

Büyük veri , sürekli büyüme koşullarında etkili olan, insan tarafından algılanabilir sonuçlar elde etmek için büyük hacimli ve önemli çeşitlilikteki yapılandırılmış ve yapılandırılmamış verileri işlemek için bir dizi yaklaşım, araç ve yöntemdir. 2000'li yılların sonlarında, geleneksel veritabanı yönetim sistemlerine alternatif ve iş zekası sınıfı çözümler.

Bu nedenle, Büyük Veri derken, belirli bir miktarda veriyi ve hatta verilerin kendisini değil, bilgilerin dağıtılmış olarak işlenmesine izin veren bunları işleme yöntemlerini anlayacağım. Bu yöntemler, büyük veri kümelerine (internetteki tüm sayfaların içeriği gibi) ve küçük veri kümelerine (bu dersin içeriği gibi) uygulanabilir.

Büyük veri teknikleri gerektiren bir veri kaynağının ne olabileceğine dair bazı örnekler:

  • İnternetteki kullanıcı davranışı günlükleri
  • Bir nakliye şirketi için arabalardan GPS sinyalleri
  • Büyük Hadron Çarpıştırıcısındaki sensörlerden alınan veriler
  • Rusya Devlet Kütüphanesi'ndeki sayısallaştırılmış kitaplar
  • Tüm banka müşterilerinin işlemleri hakkında bilgi
  • Büyük bir perakende zincirindeki tüm satın alımlar hakkında bilgi vb.

Veri kaynaklarının sayısı hızla artıyor, bu da veri işleme teknolojilerinin giderek daha fazla talep gördüğü anlamına geliyor.

3.2 Büyük veri ilkeleri

Büyük Veri tanımına dayanarak, bu tür verilerle çalışmanın temel ilkelerini formüle edebiliriz:

1. Yatay ölçeklenebilirlik. İsteğe bağlı olarak büyük miktarda veri olabileceğinden, büyük verilerin işlenmesini içeren herhangi bir sistem genişletilebilir olmalıdır. Veri hacmi 2 kat arttı - kümedeki demir miktarı 2 kat arttı ve her şey çalışmaya devam etti.

2. Hata toleransı. Yatay ölçeklenebilirlik ilkesi, bir kümede birçok makinenin olabileceğini ima eder. Örneğin, Yahoo'nun Hadoop kümesinde 42.000'den fazla makine vardır (bu bağlantıda kuruluşlardaki küme boyutlarını görebilirsiniz). Bu, bu makinelerin bazılarının başarısız olacağının garanti edileceği anlamına gelir. Büyük veri uygulamalarının bu kesintilerin farkında olması ve önemli sonuçlara yol açmadan hayatta kalması gerekir.

3. Veri konumu. Büyük dağıtılmış sistemlerde, veriler çok sayıda makineye dağıtılır. Veriler fiziksel olarak bir sunucuda bulunuyorsa ve başka bir sunucuda işleniyorsa, veri aktarım maliyetleri, işlemenin kendi maliyetlerini aşabilir. Bu nedenle, BigData çözümlerini tasarlamanın en önemli ilkelerinden biri veri yerelliği ilkesidir - mümkünse verileri depoladığımız makinede işleriz.

Tüm modern büyük veri araçları şu ya da bu şekilde bu üç ilkeyi izler. Bunları takip edebilmek için veri geliştirme araçlarını geliştirmek için bazı yöntemler, yöntemler ve paradigmalar geliştirmek gerekmektedir. Bugünün dersinde inceleyeceğim en klasik yöntemlerden biri.

3.3 Harita Azaltma

MapReduce, bilgisayar kümelerinde büyük miktarda veriyi işlemek için Google tarafından önerilen dağıtılmış bir veri işleme modelidir. MapReduce, aşağıdaki resimde iyi bir şekilde gösterilmektedir:

MapReduce, verilerin bazı kayıtlar halinde düzenlendiğini varsayar. Veri işleme 3 aşamada gerçekleşir:

1. Harita aşaması . Bu aşamada veriler, kullanıcı tarafından tanımlanan map() işlevi kullanılarak önceden işlenir. Bu aşamadaki iş, verileri önceden işlemek ve filtrelemektir. İşlem, işlevsel programlama dillerindeki harita işlemine çok benzer - her giriş kaydına özel bir işlev uygulanır.

Tek bir giriş kaydına uygulanan map() işlevi, birçok anahtar/değer çifti üretir. Ayarla - yani yalnızca bir kayıt döndürebilir, hiçbir şey döndürmeyebilir veya birkaç anahtar/değer çifti döndürebilir. Anahtarda ve değerde ne olacağı kullanıcıya bağlıdır, ancak anahtar çok önemlidir, çünkü gelecekte bir anahtara sahip veriler, azaltma işlevinin bir örneğine düşecektir.

2. Aşama Karıştırma. Kullanıcı tarafından fark edilmeden gider. Bu aşamada, harita işlevinin çıktısı "kümelenir" - her bölme, harita aşamasının bir çıkış anahtarına karşılık gelir. Gelecekte, bu sepetler azalma için bir girdi görevi görecek.

3. Aşama Küçültme. Karıştırma aşamasında oluşturulan değerlere sahip her "sepet", reduce() işlevinin girişine gider.

Azaltma işlevi kullanıcı tarafından verilir ve tek bir "sepet" için nihai sonucu hesaplar . reduce() işlevi tarafından döndürülen tüm değerlerin kümesi, MapReduce görevinin nihai sonucudur.

MapReduce hakkında bazı ek gerçekler:

  1. Harita işlevinin tüm çalıştırmaları bağımsız olarak çalışır ve farklı küme makinelerinde dahil olmak üzere paralel olarak çalışabilir.
  2. Küçült işlevinin tüm çalıştırmaları bağımsız olarak çalışır ve farklı küme makinelerinde dahil olmak üzere paralel olarak çalışabilir.
  3. Shuffle dahili olarak paralel bir sıralamayı temsil eder, böylece farklı küme makinelerinde de çalışabilir. 1-3 arası noktalar, yatay ölçeklenebilirlik ilkesini uygulamanıza izin verir .
  4. Harita işlevi genellikle verilerin depolandığı aynı makinede kullanılır - bu, verilerin ağ üzerinden iletimini azaltır (veri konumu ilkesi).
  5. MapReduce her zaman tam bir veri taramasıdır, dizin yoktur. Bu, çok hızlı bir yanıt gerektiğinde MapReduce'un zayıf bir şekilde uygulanabileceği anlamına gelir.

3.4 MapReduce ile etkili bir şekilde çözülen görev örnekleri

Sözcük sayısı

Klasik görev olan Kelime Sayımı ile başlayalım. Görev şu şekilde formüle edilmiştir: geniş bir belge külliyatı vardır. Görev, derlemde en az bir kez geçen her kelime için derlemde toplam geçiş sayısını hesaplamaktır.

Çözüm:

Büyük bir belge külliyatımız olduğundan, bir belgenin MapRreduce görevi için bir girdi kaydı olmasına izin verin. MapReduce'ta, yalnızca yapacağımız kullanıcı tanımlı işlevleri tanımlayabiliriz (python benzeri sözde kod kullanacağız):

def map(doc): 
for word in doc: 
yield word, 1 
def reduce(word, values): 
yield word, sum(values) 

Harita işlevi, giriş belgesini bir çiftler kümesine dönüştürür (kelime, 1), bizim için şeffaf bir şekilde karıştır, onu çiftlere dönüştürür (kelime, [1,1,1,1,1,1]), bunların toplamlarını azaltır , geri döner kelime için son cevap.

Reklam sistemi günlüklerinin işlenmesi

İkinci örnek, Data-Centric Alliance'ın gerçek uygulamasından alınmıştır.

Görev: formun reklam sisteminin bir csv günlüğü var:

<user_id>,<country>,<city>,<campaign_id>,<creative_id>,<payment></p> 
 
11111,RU,Moscow,2,4,0.3 
22222,RU,Voronezh,2,3,0.2 
13413,UA,Kyiv,4,11,0.7 
… 

Rusya şehirlerinde reklam göstermenin ortalama maliyetini hesaplamak gerekiyor.

Çözüm:

def map(record): 
user_id, country, city, campaign_id, creative_id, payment = record.split(",") 
payment=float(payment) 
if country == "RU": 
yield city, payment 
def reduce(city, payments): 
yield city, sum(payments)/len(payments) 

Harita işlevi bu girişe ihtiyacımız olup olmadığını kontrol eder ve ihtiyacımız olursa sadece gerekli bilgileri (şehir ve ödeme tutarı) bırakır. Azaltma işlevi, o şehirdeki tüm ödemelerin bir listesi verilen bir şehir için nihai cevabı hesaplar.