3.1 Sejarah Munculnya Istilah BigData

Istilah Big Data muncul relatif baru. Google Trends menunjukkan awal pertumbuhan aktif dalam penggunaan frasa sejak 2011:

Pada saat yang sama, hanya pemalas yang tidak menggunakan istilah tersebut sekarang. Terutama sering, istilah tersebut digunakan secara tidak tepat oleh pemasar. Jadi apa sebenarnya Big Data itu? Karena saya memutuskan untuk menyatakan dan menyoroti masalah secara sistematis, maka perlu untuk mendefinisikan konsep tersebut.

Dalam praktik saya, saya bertemu dengan definisi yang berbeda:

  • Big Data adalah ketika ada lebih dari 100GB data (500GB, 1TB, apa pun yang Anda suka).
  • Big Data adalah data yang tidak dapat diproses di Excel.
  • Big Data adalah data yang tidak dapat diproses pada satu komputer.

Dan bahkan ini:

  • Big Data umumnya adalah data apa pun.
  • Big Data tidak ada, itu ditemukan oleh pemasar.

Saya akan tetap berpegang pada definisi dari wikipedia:

Data besar adalah serangkaian pendekatan, alat, dan metode untuk memproses data terstruktur dan tidak terstruktur dengan volume besar dan keragaman yang signifikan untuk mendapatkan hasil yang dapat dilihat manusia yang efektif dalam kondisi pertumbuhan berkelanjutan, distribusi ke banyak node jaringan komputer, terbentuk pada akhir tahun 2000-an, alternatif untuk sistem manajemen basis data tradisional dan solusi kelas intelijen bisnis.

Jadi, dengan Big Data saya tidak akan memahami sejumlah data tertentu dan bahkan data itu sendiri, tetapi metode pemrosesannya, yang memungkinkan pemrosesan informasi terdistribusi. Metode ini dapat diterapkan pada kumpulan data besar (seperti isi semua halaman di Internet) maupun kumpulan data kecil (seperti isi kuliah ini).

Berikut adalah beberapa contoh dari apa yang mungkin menjadi sumber data yang memerlukan teknik data besar:

  • Log perilaku pengguna di Internet
  • Sinyal GPS dari mobil untuk perusahaan transportasi
  • Data diambil dari sensor di Large Hadron Collider
  • Buku digital di Perpustakaan Negara Rusia
  • Informasi tentang transaksi semua nasabah bank
  • Informasi tentang semua pembelian dalam rantai ritel besar, dll.

Jumlah sumber data berkembang pesat, yang berarti bahwa teknologi pemrosesan data semakin diminati.

3.2 Prinsip data besar

Berdasarkan definisi Big Data, kami dapat merumuskan prinsip dasar bekerja dengan data tersebut:

1. Skalabilitas horizontal. Karena bisa ada sejumlah besar data yang sewenang-wenang, sistem apa pun yang melibatkan pemrosesan data besar harus dapat diperluas. Volume data meningkat 2 kali lipat - jumlah besi di kluster meningkat 2 kali lipat dan semuanya terus berfungsi.

2. Toleransi kesalahan. Prinsip skalabilitas horizontal menyiratkan bahwa mungkin ada banyak mesin dalam satu cluster. Misalnya, klaster Hadoop Yahoo memiliki lebih dari 42.000 mesin (Anda dapat melihat ukuran klaster di seluruh organisasi di tautan ini). Artinya, beberapa dari mesin ini dijamin akan gagal. Praktik data besar perlu menyadari gangguan ini dan bertahan tanpa konsekuensi yang signifikan.

3. Lokalitas data. Dalam sistem terdistribusi besar, data didistribusikan ke sejumlah besar mesin. Jika data secara fisik terletak di satu server dan diproses di server lain, biaya transfer data dapat melebihi biaya pemrosesan itu sendiri. Oleh karena itu, salah satu prinsip terpenting untuk merancang solusi BigData adalah prinsip lokalitas data - jika memungkinkan, kami memproses data pada mesin yang sama tempat kami menyimpannya.

Semua alat data besar modern mengikuti ketiga prinsip ini dengan satu atau lain cara. Untuk mengikutinya, diperlukan beberapa metode, metode, dan paradigma untuk mengembangkan alat pengembangan data. Salah satu metode paling klasik yang akan saya analisis dalam kuliah hari ini.

3.3 Pengurangan Peta

MapReduce adalah model pemrosesan data terdistribusi yang diusulkan oleh Google untuk memproses data dalam jumlah besar pada cluster komputer. MapReduce diilustrasikan dengan baik oleh gambar berikut:

MapReduce mengasumsikan bahwa data diatur ke dalam beberapa record. Pemrosesan data terjadi dalam 3 tahap:

1. Tahap peta . Pada tahap ini, data diproses terlebih dahulu menggunakan fungsi map(), yang ditentukan oleh pengguna. Pekerjaan tahap ini adalah melakukan preprocess dan memfilter data. Operasi ini sangat mirip dengan operasi peta dalam bahasa pemrograman fungsional - fungsi kustom diterapkan ke setiap catatan masukan.

Fungsi map() yang diterapkan pada rekaman masukan tunggal menghasilkan banyak pasangan kunci-nilai. Set - yaitu, hanya dapat mengembalikan satu rekaman, mungkin tidak mengembalikan apa pun, atau mungkin mengembalikan beberapa pasangan nilai kunci. Apa yang akan ada di kunci dan nilainya terserah pengguna, tetapi kunci adalah hal yang sangat penting, karena data dengan satu kunci di masa mendatang akan masuk ke dalam satu contoh fungsi pengurangan.

2. Tahap Shuffle. Itu tidak diperhatikan oleh pengguna. Pada tahap ini, keluaran dari fungsi map adalah "binned" - setiap bin terkait dengan satu kunci keluaran dari tahapan peta. Kedepannya, keranjang-keranjang ini akan menjadi masukan untuk pengurangan.

3. Tahap Kurangi. Setiap "keranjang" dengan nilai yang dihasilkan pada tahap pengacakan masuk ke input fungsi pengurangan().

Fungsi pengurangan diberikan oleh pengguna dan menghitung hasil akhir untuk satu "keranjang" . Himpunan semua nilai yang dikembalikan oleh fungsi reduce() adalah hasil akhir dari tugas MapReduce.

Beberapa fakta tambahan tentang MapReduce:

  1. Semua menjalankan fungsi peta bekerja secara independen dan dapat berjalan secara paralel, termasuk pada mesin cluster yang berbeda.
  2. Semua menjalankan fungsi pengurangan bekerja secara independen dan dapat berjalan secara paralel, termasuk pada mesin cluster yang berbeda.
  3. Shuffle secara internal mewakili pengurutan paralel, sehingga dapat juga bekerja pada mesin cluster yang berbeda. Poin 1-3 memungkinkan Anda menerapkan prinsip skalabilitas horizontal .
  4. Fungsi peta biasanya digunakan pada mesin yang sama tempat data disimpan - ini mengurangi transmisi data melalui jaringan (prinsip lokalitas data).
  5. MapReduce selalu merupakan pemindaian data lengkap, tidak ada indeks. Ini berarti MapReduce tidak dapat diterapkan dengan baik ketika respons diperlukan dengan sangat cepat.

3.4 Contoh tugas yang diselesaikan secara efektif dengan MapReduce

Jumlah kata

Mari kita mulai dengan tugas klasik - Jumlah Kata. Tugas tersebut dirumuskan sebagai berikut: ada kumpulan dokumen yang besar. Tugasnya adalah menghitung berapa kali kata itu muncul di korpus untuk setiap kata yang muncul setidaknya sekali di korpus.

Larutan:

Karena kita memiliki korpus dokumen yang besar, biarkan satu dokumen menjadi satu input record untuk tugas MapRreduce. Di MapReduce, kami hanya dapat mendefinisikan fungsi yang ditentukan pengguna, yang akan kami lakukan (kami akan menggunakan pseudocode seperti python):

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

Fungsi peta mengubah dokumen input menjadi satu set pasangan (kata, 1), mengocok secara transparan untuk kami mengubahnya menjadi pasangan (kata, [1,1,1,1,1,1]), kurangi jumlah yang ini, kembali jawaban akhir untuk kata tersebut.

Memproses log sistem iklan

Contoh kedua diambil dari praktik nyata Data-Centric Alliance.

Tugas: ada csv-log dari sistem periklanan dalam bentuk:

<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 
… 

Anda perlu menghitung biaya rata-rata untuk menampilkan iklan di kota-kota Rusia.

Larutan:

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) 

Fungsi peta memeriksa apakah kita membutuhkan entri ini - dan jika kita melakukannya, hanya menyisakan informasi yang diperlukan (kota dan jumlah pembayaran). Fungsi pengurangan menghitung jawaban akhir untuk kota yang diberikan daftar semua pembayaran di kota itu.