Obliczenia intensywnie korzystające z danych

Przetwarzanie intensywnie przetwarzające dane to klasa aplikacji do obliczeń równoległych , które wykorzystują podejście równoległe do przetwarzania dużych ilości danych, zwykle o wielkości terabajtów lub petabajtów i zwykle określane jako duże zbiory danych . Aplikacje komputerowe, które poświęcają większość swojego czasu wykonania na wymagania obliczeniowe, są uważane za intensywnie obliczeniowe, podczas gdy aplikacje komputerowe, które wymagają dużych ilości danych i poświęcają większość czasu przetwarzania na operacje we/wy i manipulowanie danymi, są uważane za intensywnie przetwarzające dane.

Wstęp

Szybki rozwój Internetu i sieci World Wide Web doprowadził do powstania ogromnych ilości informacji dostępnych online. Ponadto organizacje biznesowe i rządowe tworzą duże ilości zarówno ustrukturyzowanych, jak i nieustrukturyzowanych informacji , które należy przetwarzać, analizować i łączyć. Vinton Cerf opisał to jako „lawinę informacyjną” i stwierdził, że „musimy ujarzmić energię Internetu, zanim informacje, które uwolnił, pogrzebią nas”. Biała IDC sponsorowana przez EMC Corporation oszacowała ilość informacji przechowywanych obecnie w formie cyfrowej w 2007 roku na 281 eksabajtów, a łączny wskaźnik wzrostu na 57%, przy jeszcze szybszym wzroście ilości informacji w organizacjach. W badaniu z 2003 r. dotyczącym tak zwanej eksplozji informacyjnej oszacowano, że 95% wszystkich aktualnych informacji istnieje w formie nieustrukturyzowanej, ze zwiększonymi wymaganiami dotyczącymi przetwarzania danych w porównaniu z informacjami ustrukturyzowanymi. Przechowywanie, zarządzanie, uzyskiwanie dostępu i przetwarzanie tej ogromnej ilości danych stanowi fundamentalną potrzebę i ogromne wyzwanie w celu zaspokojenia potrzeb wyszukiwania, analizowania, eksploracji i wizualizacji tych danych jako informacji. Obliczenia intensywnie korzystające z danych mają na celu zaspokojenie tej potrzeby.

do przetwarzania równoległego można ogólnie sklasyfikować jako wymagające dużej mocy obliczeniowej lub dużej ilości danych . Intensywne obliczenia są używane do opisywania aplikacji, które są związane z obliczeniami. Takie aplikacje poświęcają większość swojego czasu wykonania na wymagania obliczeniowe, w przeciwieństwie do operacji we/wy, i zwykle wymagają niewielkich ilości danych. Przetwarzanie równoległe aplikacji intensywnie korzystających z mocy obliczeniowej zwykle obejmuje zrównoleglanie poszczególnych algorytmów w ramach procesu aplikacji i dekompozycję całego procesu aplikacji na osobne zadania, które można następnie wykonywać równolegle na odpowiedniej platformie obliczeniowej, aby osiągnąć ogólnie wyższą wydajność niż przetwarzanie szeregowe. W aplikacjach intensywnie korzystających z obliczeń wiele operacji jest wykonywanych jednocześnie, a każda z nich dotyczy określonej części problemu. Jest to często określane jako równoległość zadań .

Data-intensive jest używany do opisywania aplikacji, które są związane z wejściami/wyjściami lub z potrzebą przetwarzania dużych ilości danych. Takie aplikacje poświęcają większość czasu przetwarzania na operacje we/wy oraz przenoszenie i manipulowanie danymi. Równoległe przetwarzanie aplikacji intensywnie korzystających z danych zwykle obejmuje partycjonowanie lub dzielenie danych na wiele segmentów, które mogą być przetwarzane niezależnie przy użyciu tego samego wykonywalnego programu aplikacyjnego równolegle na odpowiedniej platformie obliczeniowej, a następnie ponowne składanie wyników w celu uzyskania kompletnych danych wyjściowych. Im większy zagregowany rozkład danych, tym większe korzyści z równoległego przetwarzania danych. Wymagania dotyczące przetwarzania dużej ilości danych zwykle skalują się liniowo w zależności od rozmiaru danych i są bardzo podatne na prostą równoległość. Podstawowe wyzwania związane z przetwarzaniem intensywnie korzystającym z danych to zarządzanie i przetwarzanie wykładniczo rosnących wolumenów danych, znaczne skrócenie powiązanych cykli analizy danych w celu wspierania praktycznych, terminowych aplikacji oraz opracowywanie nowych algorytmów, które można skalować w celu wyszukiwania i przetwarzania ogromnych ilości danych. Naukowcy ukuli termin BORPS dla „miliardów rekordów na sekundę”, aby zmierzyć szybkość przetwarzania rekordów w sposób analogiczny do tego, w jaki sposób termin MIPS stosuje się do opisania szybkości przetwarzania komputerów.

Równoległość danych

Architektury systemów komputerowych, które mogą obsługiwać aplikacje równoległe do danych, były promowane na początku XXI wieku w celu spełnienia wymagań przetwarzania danych na dużą skalę w obliczeniach intensywnie wykorzystujących dane. Równoległość danych zastosowała obliczenia niezależnie do każdego elementu danych w zestawie danych, co umożliwia skalowanie stopnia równoległości wraz z ilością danych. Najważniejszym powodem tworzenia aplikacji do równoległego przesyłania danych jest potencjał skalowalnej wydajności, który może skutkować poprawą wydajności o kilka rzędów wielkości. Kluczowe kwestie związane z tworzeniem aplikacji wykorzystujących równoległość danych to wybór algorytmu, strategia dekompozycji danych, równoważenie obciążenia w węzłach przetwarzających, komunikacja między węzłami oraz ogólna dokładność wyników. Opracowanie aplikacji równoległej danych może wymagać znacznej złożoności programistycznej w celu zdefiniowania problemu w kontekście dostępnych narzędzi programistycznych i uwzględnienia ograniczeń architektury docelowej. Wyodrębnianie informacji z dokumentów sieciowych i indeksowanie ich jest typowe dla obliczeń intensywnie korzystających z danych, które mogą przynieść znaczne korzyści w zakresie wydajności z równoległych implementacji danych, ponieważ zbiory dokumentów sieciowych i innych typów mogą być zazwyczaj przetwarzane równolegle.

Amerykańska Narodowa Fundacja Nauki (NSF) sfinansowała program badawczy w latach 2009-2010. Obszary zainteresowania to:

  • Podejścia do programowania równoległego w celu rozwiązania problemu równoległego przetwarzania danych w systemach intensywnie korzystających z danych
  • Programistyczne abstrakcje, w tym modele, języki i algorytmy , które pozwalają w naturalny sposób wyrazić równoległe przetwarzanie danych
  • Projektowanie platform obliczeniowych intensywnie korzystających z danych w celu zapewnienia wysokiego poziomu niezawodności, wydajności, dostępności i skalowalności.
  • Identyfikacja aplikacji, które mogą wykorzystać ten paradygmat obliczeniowy i określenie, w jaki sposób powinien on ewoluować, aby wspierać pojawiające się aplikacje intensywnie korzystające z danych

Pacific Northwest National Labs zdefiniowało przetwarzanie intensywnie korzystające z danych jako „przechwytywanie, zarządzanie, analizowanie i rozumienie danych w ilościach i szybkościach, które przesuwają granice obecnych technologii”.

Zbliżać się

Platformy obliczeniowe intensywnie korzystające z danych zwykle wykorzystują podejście do obliczeń równoległych , łączące wiele procesorów i dysków w dużych klastrach obliczeniowych połączonych za pomocą szybkich przełączników komunikacyjnych i sieci, co umożliwia podział danych między dostępne zasoby obliczeniowe i niezależne przetwarzanie w celu osiągnięcia wydajności i skalowalności na podstawie ilości danych. Klaster można zdefiniować jako rodzaj systemu równoległego i rozproszonego , który składa się ze zbioru połączonych ze sobą autonomicznych komputerów pracujących razem jako pojedynczy zintegrowany zasób obliczeniowy. Takie podejście do przetwarzania równoległego jest często określane jako podejście „nic nie współdzielone”, ponieważ każdy węzeł składający się z procesora, pamięci lokalnej i zasobów dyskowych nie współdzieli niczego z innymi węzłami w klastrze. W przypadku obliczeń równoległych podejście to jest uważane za odpowiednie w przypadku obliczeń wymagających dużej ilości danych i problemów, które są „zawstydzająco równoległe”, tj. gdy stosunkowo łatwo jest rozdzielić problem na kilka równoległych zadań i nie jest wymagana żadna zależność ani komunikacja między zadaniami innymi niż ogólne zarządzanie zadaniami. Tego typu problemy z przetwarzaniem danych można z natury dostosować do różnych form przetwarzania rozproszonego, w tym klastrów, siatek danych i przetwarzania w chmurze .

Charakterystyka

Kilka wspólnych cech systemów komputerowych intensywnie korzystających z danych odróżnia je od innych form przetwarzania:

  1. Do wykonania obliczeń wykorzystywana jest zasada zbierania danych oraz programy lub algorytmy. Aby osiągnąć wysoką wydajność w obliczeniach intensywnie korzystających z danych, ważne jest, aby zminimalizować przepływ danych. Ta cecha umożliwia wykonywanie algorytmów przetwarzania w węzłach, w których znajdują się dane, zmniejszając obciążenie systemu i zwiększając wydajność. Nowsze technologie, takie jak InfiniBand , umożliwiają przechowywanie danych w oddzielnym repozytorium i zapewniają wydajność porównywalną z danymi kolokowanymi.
  2. Zastosowany model programowania. Systemy obliczeniowe intensywnie korzystające z danych wykorzystują podejście niezależne od maszyny, w którym aplikacje są wyrażane w kategoriach operacji na danych wysokiego poziomu, a system wykonawczy w przejrzysty sposób kontroluje planowanie, wykonywanie, równoważenie obciążenia, komunikację oraz przenoszenie programów i danych w całym rozproszony klaster obliczeniowy. Abstrakcja programistyczna i narzędzia językowe pozwalają wyrazić przetwarzanie w kategoriach przepływów danych i transformacji obejmujących nowe języki programowania przepływu danych i współdzielone biblioteki wspólnych algorytmów manipulacji danymi, takich jak sortowanie.
  3. Nacisk na niezawodność i dostępność. Wielkoskalowe systemy z setkami lub tysiącami węzłów przetwarzających są z natury bardziej podatne na awarie sprzętu, błędy komunikacji i błędy oprogramowania. Systemy obliczeniowe intensywnie korzystające z danych są zaprojektowane tak, aby były odporne na awarie. Zwykle obejmuje to redundantne kopie wszystkich plików danych na dysku, przechowywanie pośrednich wyników przetwarzania na dysku, automatyczne wykrywanie awarii węzłów lub przetwarzania oraz selektywne ponowne obliczanie wyników.
  4. Wrodzona skalowalność bazowej architektury sprzętu i oprogramowania . Systemy obliczeniowe intensywnie korzystające z danych można zwykle skalować w sposób liniowy, aby pomieścić praktycznie dowolną ilość danych lub spełnić krytyczne czasowo wymagania dotyczące wydajności, po prostu dodając dodatkowe węzły przetwarzające. Liczba węzłów i zadań przetwarzania przypisanych do określonej aplikacji może być zmienna lub stała w zależności od sprzętu, oprogramowania, komunikacji i architektury rozproszonego systemu plików .

Architektury systemów

różnorodne architektury systemowe do zastosowań obliczeniowych intensywnie korzystających z danych i aplikacji do analizy danych na dużą skalę, w tym równoległe i rozproszone systemy zarządzania relacyjnymi bazami danych, które od ponad dwudziestu lat są dostępne do uruchamiania na współużytkowanych klastrach węzłów przetwarzających. Jednak większość danych rośnie w przypadku danych w formie nieustrukturyzowanej i potrzebne były nowe paradygmaty przetwarzania z bardziej elastycznymi modelami danych. Pojawiło się kilka rozwiązań, w tym MapReduce , której pionierem była firma Google, a która jest obecnie dostępna w implementacji typu open source o nazwie Hadoop , używanej przez firmy Yahoo , Facebook i inne. Firma LexisNexis Risk Solutions opracowała również i wdrożyła skalowalną platformę do intensywnego przetwarzania danych, z której korzysta LexisNexis .

MapaZredukuj

Architektura i model programowania MapReduce , zapoczątkowany przez Google , jest przykładem nowoczesnej architektury systemów zaprojektowanej do przetwarzania intensywnie korzystającego z danych. Architektura MapReduce pozwala programistom używać stylu programowania funkcyjnego do tworzenia funkcji mapy, która przetwarza parę klucz-wartość powiązaną z danymi wejściowymi w celu wygenerowania zestawu pośrednich par klucz-wartość oraz funkcji reduce, która łączy wszystkie pośrednie wartości powiązane z ten sam klucz pośredni. Ponieważ system automatycznie dba o szczegóły, takie jak partycjonowanie danych wejściowych, planowanie i wykonywanie zadań w klastrze przetwarzania oraz zarządzanie komunikacją między węzłami, programiści bez doświadczenia w programowaniu równoległym mogą z łatwością korzystać z dużego środowiska przetwarzania rozproszonego.

Model programowania dla architektury MapReduce jest prostą abstrakcją, w której obliczenia biorą zestaw wejściowych par klucz-wartość powiązanych z danymi wejściowymi i tworzą zestaw wyjściowych par klucz-wartość. W fazie Map dane wejściowe są dzielone na podziały wejściowe i przypisywane do zadań Map związanych z węzłami przetwarzania w klastrze. Zadanie Map zwykle jest wykonywane w tym samym węźle, który zawiera przypisaną mu partycję danych w klastrze. Te zadania Map wykonują obliczenia określone przez użytkownika na każdej wejściowej parze klucz-wartość z partycji danych wejściowych przypisanych do zadania i generują zestaw wyników pośrednich dla każdego klucza. Faza tasowania i sortowania bierze następnie dane pośrednie generowane przez każde zadanie Map, sortuje te dane z danymi pośrednimi z innych węzłów, dzieli te dane na regiony, które mają być przetwarzane przez zadania redukcji, i w razie potrzeby rozdziela te dane do węzłów, w których zadania będą wykonywane. Zadania Reduce wykonują dodatkowe operacje określone przez użytkownika na danych pośrednich, prawdopodobnie łącząc wartości skojarzone z kluczem do mniejszego zestawu wartości w celu wygenerowania danych wyjściowych. W przypadku bardziej złożonych procedur przetwarzania danych wiele wywołań MapReduce może być połączonych ze sobą w sekwencji.

Hadoop

Apache Hadoop to projekt oprogramowania typu open source sponsorowany przez The Apache Software Foundation , który implementuje architekturę MapReduce. Hadoop obejmuje teraz wiele podprojektów oprócz podstawowego rdzenia, MapReduce i rozproszonego systemu plików HDFS. Te dodatkowe podprojekty zapewniają ulepszone możliwości przetwarzania aplikacji w podstawowej implementacji Hadoop i obecnie obejmują Avro, Pig , HBase , ZooKeeper , Hive i Chukwa. Architektura Hadoop MapReduce jest funkcjonalnie podobna do implementacji Google, z wyjątkiem tego, że podstawowym językiem programowania Hadoop jest Java zamiast C++ . Implementacja jest przeznaczona do wykonywania na klastrach procesorów towarowych.

Hadoop implementuje środowisko i ramy do planowania i wykonywania rozproszonego przetwarzania danych dla zadań MapReduce. Hadoop zawiera rozproszony system plików o nazwie HDFS, który jest analogiczny do GFS w implementacji Google MapReduce. Środowisko wykonawcze Hadoop obsługuje dodatkowe możliwości rozproszonego przetwarzania danych, które zostały zaprojektowane do uruchamiania przy użyciu architektury Hadoop MapReduce. Należą do nich HBase , rozproszona baza danych zorientowana na kolumny, która zapewnia dostęp swobodny do odczytu/zapisu; Hive, który jest hurtowni danych zbudowanym na Hadoop, który zapewnia możliwości zapytań podobnych do SQL w celu podsumowania danych, zapytań ad hoc i analizy dużych zbiorów danych; oraz Pig — język programowania wysokiego poziomu do obsługi przepływu danych i framework wykonawczy do obliczeń wymagających dużej ilości danych.

Pig został opracowany w Yahoo! w celu zapewnienia określonej notacji językowej dla aplikacji do analizy danych oraz poprawy produktywności programistów i skrócenia cykli programowania podczas korzystania ze środowiska Hadoop MapReduce. Programy świni są automatycznie tłumaczone na sekwencje programów MapReduce, jeśli jest to potrzebne w środowisku wykonawczym. Pig zapewnia możliwości w języku do ładowania, przechowywania, filtrowania, grupowania, deduplikacji, porządkowania, sortowania, agregacji i łączenia operacji na danych.

HPCC

HPCC (High-Performance Computing Cluster) został opracowany i wdrożony przez LexisNexis Risk Solutions. Rozwój tej platformy obliczeniowej rozpoczął się w 1999 r., a aplikacje były w produkcji pod koniec 2000 r. Podejście HPCC wykorzystuje również klastry towarowe sprzętu z systemem Linux . Niestandardowe oprogramowanie systemowe i komponenty oprogramowania pośredniego zostały opracowane i ułożone warstwami w podstawowym systemie operacyjnym Linux, aby zapewnić środowisko wykonawcze i obsługę rozproszonego systemu plików wymagane do obliczeń wymagających dużej ilości danych. LexisNexis wdrożył również nowy język wysokiego poziomu do obliczeń wymagających dużej ilości danych.

Język programowania ECL jest wysokopoziomowym, deklaratywnym, skoncentrowanym na danych, niejawnie równoległym językiem, który pozwala programiście zdefiniować, jaki powinien być wynik przetwarzania danych oraz jakie przepływy danych i transformacje są niezbędne do osiągnięcia wyniku. Język ECL obejmuje szerokie możliwości definiowania danych, filtrowania, zarządzania danymi i przekształcania danych oraz zapewnia obszerny zestaw wbudowanych funkcji do obsługi rekordów w zbiorach danych, które mogą obejmować funkcje przekształcania zdefiniowane przez użytkownika. Programy ECL są kompilowane do zoptymalizowanego C++ , który jest następnie kompilowany do kodu wykonywalnego i dystrybuowany do węzłów klastra przetwarzającego.

Aby sprostać aplikacjom obliczeniowym intensywnie przetwarzającym dane zarówno w trybie wsadowym, jak i online, HPCC obejmuje dwa odrębne środowiska klastrowe, z których każde można niezależnie optymalizować pod kątem celu równoległego przetwarzania danych. Platforma Thor to klaster, którego celem jest rafineria danych do przetwarzania ogromnych ilości nieprzetworzonych danych do zastosowań takich jak czyszczenie i higiena danych, ekstrakcja, transformacja, ładowanie (ETL), łączenie rekordów i rozpoznawanie jednostek, reklama na dużą skalę analiza hoc danych oraz tworzenie danych z kluczami i indeksów w celu obsługi wysokowydajnych zapytań strukturalnych i aplikacji hurtowni danych. System Thor jest podobny pod względem konfiguracji sprzętowej, funkcji, środowiska wykonawczego, systemu plików i możliwości do platformy Hadoop MapReduce, ale zapewnia wyższą wydajność w równoważnych konfiguracjach. Platforma Roxie zapewnia wysokowydajny, ustrukturyzowany system zapytań i analiz online lub hurtownię danych, spełniający wymagania przetwarzania równoległego dostępu do danych aplikacji online za pośrednictwem interfejsów usług sieciowych, obsługujących tysiące jednoczesnych zapytań i użytkowników z czasami odpowiedzi poniżej sekundy. System Roxie jest podobny pod względem funkcji i możliwości do Hadoop z dodanymi możliwościami HBase i Hive , ale zapewnia zoptymalizowane środowisko wykonawcze i system plików do wysokowydajnego przetwarzania online. Zarówno systemy Thor, jak i Roxie wykorzystują ten sam język programowania ECL do implementacji aplikacji, zwiększając produktywność programistów.

Zobacz też