Freigeben über


Dieser Artikel wurde maschinell übersetzt.

Azure SDK 2.5

Leichterer Zugang zu Hadoop für Microsoft-Entwickler

Omid Afnan

In diesem Jahr Microsoft kündigte die Verfügbarkeit von HDInsight, seine Big Data cloud bietet. Mit diesem Service können Sie Hadoop, HBase und jetzt Sturm Cluster innerhalb Microsoft Azure zu erstellen. Verwenden Sie die Azure Management Portal, befolgen Sie einige einfache Schritte zum Erstellen eines Hadoop-Clusters, Azure Speicher zuordnen und wählen die Anzahl der Kerne, die Sie brauchen. Mit dem Klicken eines Knopfes innerhalb von Minuten haben Sie einen Cluster bereitgestellt mit den erforderlichen Berechnung-Ressourcen und eine 100-Prozent-Apache Hadoop-Verteilung auf und in der Cloud ausgeführt. Das war´s schon: Keine Hardware-Beschaffung, keine Sortierung durch Hadoop stacks, keine Notwendigkeit zu lernen, wie Hadoop zu installieren. Sie sind bereit für große Datenmengen Abfragen ausführen!

Sie können sagen: Das ist toll... was nun? Es gibt eine Reihe von Fällen, die Menschen zu großen Daten-Adresse versuchen. Sie oder Ihr Unternehmen möglicherweise einigen spezifischen Fällen im Auge, wie Internet der Dinge (IoT) Telemetrie Knirschen, soziale Gesinnung oder der Benutzer Präferenz Analyse. Ein Fall, der für viele unserer Kunden interessant ist ist die Analyse, Webservices oder Anwendungsprotokollen. Verwenden in diesem Artikel werde ich Ihnen zeigen, wie dieses Szenario Boot-geschnallt kann sein HDInsight und wie Sie die neu veröffentlichte Microsoft Azure HDInsight Tools for Visual Studio verwenden können, um Ihre Entwicklung zu vereinfachen.

Log-Analyse-Szenario

Die meisten apps und Dienstleistungen produzieren eine große Spur von Daten zur Nutzung verfolgen, Ausfälle zu verstehen oder verwalten die Ausführungsumgebung. Datenströme wie Fehlerprotokolle, Software Quality Management (qm) Ausgabe, Clickstream-Instrumentierung und Webserver-Logs können leicht mit einer Rate von Gigabyte oder Terabyte pro Woche ansammeln. Mit Ausnahme von Debuggen Anwendungsfehler oder Dienstausfälle, diese Protokolle verbleiben oft aufgrund ihrer schieren Größe und der semi-strukturierte Art ihres Inhalts unberührt.

Jedoch sind viele Unternehmen langsam zur Bewältigung dieses Problems um Qualitätsprobleme schneller entdecken, Kunden-Nutzung besser zu verstehen und letztlich treiben und Kundenbindung und Zufriedenheit. Eine gemeinsame Minimallösung ist die Analyse von Webserver-Logs, zwei Arten von Informationen abzuleiten:

  • Häufigkeit von bestimmten Fehlern passiert auf der Website
  • Traffic-Muster in oder aus der Website

Analyse und die Aggregation dieser Protokolldaten ist eine Aktivität, die einen hohen Grad an Parallelität ermöglicht. Das Ideal wäre, sind Teilmengen der Datensätze bewirtschaftet für einzelne Server, die analysieren, transformieren und diese Datensätze zusammenfassen können. Dann würde Sie zusammenführen, diese Teilergebnisse um die endgültigen aggregierten Daten zu erstellen. Dies, natürlich genau macht das MapReduce-Modul in Hadoop und der Hive-Abfragesprache (HiveQL) ermöglicht es Ihnen, Ihr Ziel-Aggregationen in eine SQL-ähnliche Abfrage-Syntax auszudrücken. Wenn Ihre Daten mit verstärkte Nutzung größer wächst, dieser Ansatz skaliert effektiv um insgesamt zu halten Bearbeitungszeit unter Kontrolle.

Programmieren mit Hadoop MapReduce ist mit Hochsprachen wie HiveQL erheblich erleichtert. Die HDInsight-Tools in Visual Studio bringen die Verwaltung dieser Art von Code in einen Standardrahmen allen Entwicklern vertraut. Das Tool stellt außerdem Informationen zu den Hadoop-Cluster und die Daten-Artefakte in der Weise, die einfach zu verstehen sind. Ich werde im Rest dieses Artikels Spaziergang durch ein einfaches Protokoll-Analyse-Fall und wie man die Sprache und das Tool verwenden, um eine funktionierende Lösung schnell zu markieren.

Immer einrichten

Ich werde beginnen mit der Erstellung eines HDInsight-Clusters für meine Abfragen ausführen. Der Cluster ist erforderlich, nur beim Ausführen von Abfragen und kann gelöscht werden, wenn nicht in Gebrauch oder es kann ausgeführt wird gelassen werden (in diesem Fall Sie weiterhin Gebühren anfallen). Ich setze meine persistenten Daten auf Azure Storage, das separat erstellt wird und im Laufe der Zeit mit vielen verschiedenen Clustern verwendet werden kann. Abbildung 1 zeigt, wo dies im Azure Management Portal geht.

Erstellen einer Hadoop-Cluster im Microsoft Azure Management Portal
Abbildung 1 Erstellen einer Hadoop-Cluster im Microsoft Azure Management Portal

Nachdem der Cluster erstellt wird zeigt im Verwaltungsportal, sie oben wo Sie anzeigen oder löschen Sie ihn. Beachten Sie, dass es auch eine Abfrage-Konsole, die Sie aus dem Management-Portal übermitteln einfache Abfragen direkt aus dem Browser öffnen können.

Zu diesem Zeitpunkt sollte bereits die Azure SDK 2.5 installiert ist umfasst die HDInsight-Werkzeuge für Visual Studio. Wenn Sie zu der Datei navigieren | Neu | Projekt-Bildschirm finden Sie eine neue Kategorie für HDInsight Projekte. Wie andere Visual Studio -Projekte der Projekttyp Hive ermöglicht die einfache Erstellung von verwandten für die Angabe einer Anwendung in einer bestimmten Sprache benötigten Dateien – in diesem Fall HiveQL. Sie werden auch ein Bienenkorb-Beispielprojekt bemerken, die das Codebeispiel in diesem Artikel vorgestellten enthält. Mithilfe der Hive-Projekt können Sie leicht gruppieren, speichern, ändern und freigeben Verwandte Abfragen.

Abrufen der Daten

Öffnen Sie nun in Visual StudioServer-Explorer zum Durchsuchen von Azure Services und Objekte im Rahmen Ihres Abonnements. Hiermit können Sie die Azure navigieren | HDInsight-Knoten, wo Sie Ihre vor kurzem erstellten Hadoop-Cluster finden (Weblog namens­Analytics in diesem Beispiel). Erweitern Sie diesen Knoten um zwei Kinder zu suchen: Hadoop-Datenbanken und die Standard-Blob-Speicher verknüpft Sie mit dem Konto zum Zeitpunkt der Erstellung. Der Blob-Speicher hat jetzt einen Standardcontainer mit dem gleichen Namen wie Ihre Cluster und Hadoop-Anwendungen können lesen und Schreiben in diesem Container und seine Unterordner mit den URIs zur Verfügung gestellt.

Sie können jetzt kopieren oder Ihre Daten in diesen Container zu laden und die Daten dann einfach durch Angabe des entsprechenden URIs zu verweisen. Wenn Ihre Web Site außerhalb der Azure befindet, verwenden Sie AzCopy, um die gewünschten Protokolle in diesem Behälter, zu verschieben, nach Bedarf. Wenn Sie vorhandene Daten in Azure haben, greifen Sie diese Daten ohne weiteres kopieren, die ist viel einfacher, wenn Sie Azure-Websites verwenden, um Ihre Anwendung zu hosten. Wählen Sie in diesem Fall zum Zeitpunkt der Erstellung der Cluster, die Speicherplatz-Account, Ihre Website-Daten enthält, als das Konto zugeordneten Speicher für Ihren Cluster. Sie haben noch mehr Flexibilität, fügen Sie mehrere Speichercontainer, die den HDInsight benutzerdefinierten Option erstellen. In diesen Fällen können Sie die erforderlichen Dateien mit einem Verweis wie leicht zugänglich:

wasb://container@storage.blob.core.windows.net/example/data/filename.ext

In diesem Artikel werde ich einige Log-Daten verwenden, die verfügbar ist als Teil des Beispielcodes in HDInsight. Sie können in den HDISamples Ordner in den Standardcontainer navigieren Sie eine Reihe von Ordnern mit Proben finden, einschließlich der Datei:

HDISamples/webloganalyticsstorage/webloganalytics/HdiSamples/
  WebsiteLogSampleData/SampleLog/909f2b.log

Sobald die unformatierten Daten verfügbar ist, können Sie es in eine Hive-Tabelle aktivieren, die in anderen Hive-Queries als Rowset verwiesen werden kann in denen Sie Zeilen auswählen können. Zu diesem Zweck erstellen Sie es als externe Tabelle, das ist eine Meta-Daten-Operation im Hadoop und ändert nicht die Daten auf der Festplatte. Der einzige Schritt, was Sie nehmen soll die Spaltentypen definieren und benennen Sie sie, damit Sie die Daten in die vertrauten SQL-Stil-Mode verweisen können. Dies ist ein wichtiger Aspekt des großen Datenmodells —, dass Sie eine späte Bindung zwischen dem Format der Daten und die Daten selbst tun können. Es gibt keine Notwendigkeit, Erstellen von Schemata nach vorne, oder auch Sorgen um Ihre Daten beim Laden der Reinigung. In der Tat gibt es keine Prüfung, die Zeilen in Ihren Daten die jeder Schema entsprechen, die Sie definieren. Stattdessen ist es Ihre Aufgabe, Ihre Abfragen zu erstellen, so dass verschiedene Versionen der Daten oder fehlende Daten wird behandelt, wie Ihr Business-Logik erfordert.

Wieder, können Sie das Visual Studio IDE verwenden, um diese Aufgabe zu vereinfachen. Abbildung 2 zeigt die Art des Tisch-Creation-Tool können Sie gesehen haben in SQL Server -Tools. Sie können einfach Tabellenspalten definieren indem Einträge zum Bereich Tabellenspalten bietet einen Namen, Datentyp und zusätzliche Kommentare. Darüber hinaus einen Namen ist nichts anderes erforderlich, eine Definition der grundlegenden, leere Tabelle erstellen. Jedoch möchte ich in diesem Fall gelten diese Definition auf eine vorhandene Datei, damit ich die externe Tabelle-Eigenschaft verwenden, um den zuvor erwähnten URI anzugeben.

Erstellen einer Struktur Tabelle Definition
Abbildung 2 Erstellen einer Struktur Tabelle Definition

Metadaten-Operationen werden durch Ausführen von DDL-Anweisungen in den Hadoop-Cluster erreicht. Tabelle Anlegedialog zeigt die DDL-Anweisungen generiert, was in diesem Fall an:

CREATE EXTERNAL TABLE IF NOT EXISTS weblogs (s_date date, s_time string,
  s_sitename string, cs_method string, cs_uristem string,
  cs_uriquery string, s_port int, cs_username string, c_ip string,
  cs_useragent string,
  cs_cookie string, cs_referer string, cs_host string, sc_status int,
  sc_substatus int,
  sc_win32status int, sc_bytes int, cs_bytes int, s_timetaken int)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
STORED AS TEXTFILE LOCATION 'wasb://webloganalytics@
  webloganalyticsstorage.blob.core.windows.net/HdiSamples/ 
  WebsiteLogSampleData/SampleLog/'
TBLPROPERTIES ('skip.header.line.count'='2');

Die DDL enthält ein paar zusätzliche Punkte. In diesem Beispiel ist die Beispieldatei Räume verwenden, um Spaltenwerte in jeder Zeile zu trennen, so dass ich das Feld-Trennzeichen um ein Raum mit der ZEILENFORMAT-Klausel angeben. Bienenkorb kann auch Sie einige bestimmte Metadaten-Werte, die im Zusammenhang mit einer Tabelle festlegen. In der letzten Zeile der DDL bin ich an, dass die Textdatei enthält zwei Reihen von Headerinformationen, die übersprungen werden können. Diese DDL geschnitten und in ein anderes HiveQL-Skript eingefügt werden kann, oder Sie können drücken Sie die Schaltfläche "Absenden" Kick-off der Tabellenerstellung. Daraus ergibt sich eine Aufgabe, die an den Hadoop-Cluster, der die Tabelle erstellt wird. Im Visual Studio sehen Sie eine Job-Status-Fenster, die Sie aktualisieren können, um die Aufgabe Abschlussstatus zu verfolgen. Sobald die Aufgabe erledigt ist, können Sie Server-Explorer verwenden, finden in der neuen Tabelle, seine Definition durchsuchen oder anzeigen die ersten 100 Zeilen (aus dem Kontextmenü der Datenbank).

Kochen von Daten zu Informationen

Eines der wichtigsten Dinge, die Sie wissen wollen ist, wie gut Ihre Website funktioniert. Ausgangspunkt könnte sein Aussehen an wie oft Benutzer Clientfehler auf ihre HTTP-Anforderungen erhalten. Schauen Sie sich die verschiedenen Arten von Fehlern, die von unterschiedlichen Quellen verweisen empfangen können, gruppieren sie nach Art des Fehlers und listet sie von am meisten beeinflusst (höchste Fehleranzahl). Sie wollen behalten diese Ergebnisse, also steckte sie in eine neue Struktur-Tabelle, die Sie tun können, mit einer externen Tabelle erstellen-Anweisung. Diesmal werden Sie in der Tabelle füllen, indem berechneten Werte mithilfe einer select-Anweisung einfügen. Abbildung 3 zeigt, wie der Code aussieht.

Abbildung 3 berechneten Werte einfügen

DROP TABLE IF EXISTS ClientErrors;               
--create table ClientErrors for storing errors users experienced and their frequencies
CREATE EXTERNAL TABLE ClientErrors(sc_status int, cs_referer string, cs_page string, cnt int)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
--populate table ClientErrors with data from table weblogs
INSERT OVERWRITE TABLE ClientErrors
SELECT sc_status,
  cs_referer,
  concat(cs_uristem,'?', regexp_replace(cs_uriquery,
  'X-ARR-LOG-ID=[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}','')) cs_page,
  count(distinct c_ip) as cnt
FROM weblogs
WHERE sc_status >=400 and sc_status < 500
GROUP BY sc_status,
  cs_referer,
  concat(cs_uristem,'?', regexp_replace(cs_uriquery,
  'X-ARR-LOG-ID=[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}',''))
ORDER BY cnt;

Sie werden bemerken, dass ich mache einige Aufräumarbeiten in den Daten. Für das Feld Cs-Uri-Abfrage möchte ich einfach eine beliebige Abfragezeichenfolge angezeigt, die mit HTTP-Anforderung übergeben wurde aber nicht über die X-ARR-Protokoll-ID-Informationen in den Protokollen gespeichert. Also, ersetzen ich einfach den Teil der Zeichenfolge mit einem Leerschritt. Natürlich, da dies eine deklarative Anweisung und kein Verfahren ist, ist es nicht möglich, Wiederverwendung der Transformation angeben, die ich für das Cs-Uri-Query-Feld verwenden. Jedoch kann ich zählen, auf die Abfrage Ausführung Common Language Runtime um diese Situation zu optimieren.

Ich möchte weitere der Top Referrer für meine Website ansehen. Dazu kann ich einfach wählen Sie die IIS-Protokolle das Cs_referer-Feld und die Anzahl der Verweise von Tag und Referrer. Ich möchte noch einmal, diese Daten für die weitere Verwendung zu halten, damit ich einem anderen Bienenstock Tabelle mit dem Namen RefersPerDay erstellen und speichern die Ergebnisse der Abfrage. Abbildung 4 zeigt, wie die Tabelle erstellen und Daten-Aufnahme zu tun.

Abbildung 4 Erstellen der Tabelle und Einfügen von Daten

DROP TABLE IF EXISTS RefersPerDay;
--create table RefersPerDay for storing references from external Web sites
CREATE EXTERNAL TABLE IF NOT EXISTS RefersPerDay(year int, month int, day int,
  cs_referer string, cnt int)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
--populate table RefersPerDay with data from the weblogs table
INSERT OVERWRITE TABLE RefersPerDay
SELECT year(s_date), month(s_date), day(s_date),
  cs_referer, count(distinct c_ip) as cnt
FROM weblogs
WHERE sc_status >=200 and sc_status <300
GROUP BY s_date, cs_referer
ORDER BY cnt desc;

Alle den Code in Abbildung 3 und Abbildung 4 können in einer einzigen QL Hive-Datei gesetzt werden. Sie können jetzt ein neues Hive-Anwendung-Projekt erstellen, geben Sie diesen Code und führen Sie die Abfragen. Das Hive-Projekt können Sie die Abfrage für die spätere Verwendung zu speichern. Diese Beispiele sind ziemlich einfach, aber sie basieren auf dem tatsächlichen Format der IIS-Protokolle. Daher sollten sie gegen Ihren eigentlichen Server-Protokollen arbeiten und dienen als Grundlage für die Erstellung komplexer Analysen.

Natürlich bedeutet die Abfragen ausführen deren Übermittlung an den Hadoop-Cluster in Azure. Hierzu müssen Sie Cluster wählen, in dem Sie den Auftrag senden möchten. Die HDInsight-Symbolleiste können Sie den Cluster aus einer Liste von Clustern zur Verfügung über Ihre Abonnements auswählen. Wie Sie, in sehen können Abbildung 5, wählte ich das Weblog­Analytics-Cluster. Auswahl senden sendet die Abfrage zu diesem Cluster. Hier bin ich zeigen eine erweiterte senden, wo können Sie einen Anzeigenamen für den resultierenden Job, der erscheinen im Cluster hinzufügen. Dies erleichtert die ausgeführte Abfragen zu verfolgen. Sie können auch weitere Argumente für den Hive-Prozessor hinzufügen.

anfragende
Abbildung 5 anfragende

Sobald die Abfrage gesendet wird, sehen Sie ein Fenster "Zusammenfassung Stelle", wie in Abbildung 6, den aktuellen Status Ihrer Anfrage angibt, als es initialisiert ist, beginnt zu laufen, und schließlich abgeschlossen wird oder fehlschlägt. Die Hive-Abfragen werden in MapReduce Aufgaben umgewandelt, die über eine große Anzahl von Knoten für die Ausführung aufgefächert werden können. Dies ist, wo die innewohnende Kraft des Hadoop-Verarbeitungsmodell anspringt Skalieren in großem Maßstab ermöglichen. In der Zusammenfassungsansicht Stelle sehen Sie den Job durchlaufen unterschiedliche Prozentsätze der Karte und reduzieren Phase Abschluss alle Abfragen, die gemeinsam übermittelt wurden.

die Fenster Zusammenfassung im Job Bienenkorb
Abbildung 6 die Fenster "Zusammenfassung" im Job Bienenkorb

Wenn der Auftrag abgeschlossen ist, können Sie überprüfen Sie die zugeordnete Abfrage und schauen Auftragsausgabe und Ausnahmen oder Störungen durch die Links unter Job-Details. Natürlich, die Abfrage setzen zusammengefasste Daten in neue Tabellen und Sie gehen wieder zum Server-Explorer zu betrachten, die Tabellen und deren Inhalt. Sie können auch neue Abfragen ausführen – solche, die die Daten in diesen neuen Tabellen für weitere zusammenfassen oder Aggregation zu verwenden.

Zusammenfassung

Mit HDInsight können Sie schnell und einfach große Datenmengen zugreifen, die Sie erzeugt oder in der Cloud übertragen haben. Sie können Hochfahren Hadoop-Cluster zum Verarbeiten der Daten, den Zugriff auf die Daten von jedem beliebigen Ort in Azure. Bienenkorb können Sie die Struktur Ihrer Daten angeben und sich mit den Änderungen, die in Ihr Datenformat im Laufe der Zeit auftreten. HDInsight-Tools für Visual Studio weiter können Sie Ihre Hadoop-Cluster und die Daten auf intuitive Art und Weise zu erkunden. Noch wichtiger ist, es erlaubt Ihnen, Bienenkorb-Abfrage-Projekte erstellen und verwalten sie wie jeden anderen Code, helfen Sie aus einfachen, arbeiten Abfragen in komplexe Informationsverarbeitung im Laufe der Zeit zu verschieben. Aggregieren von Daten mithilfe von HDInsight werden am besten durch Instrumente wie Power BI, visualisiert die direkte Verbindung zu den HDInsight Quellen anbieten. Andere Funktionen wie Maschinelles Lernen, können auch in Verbindung mit diesen Tools verwendet werden, um die analytischen Möglichkeiten zu erweitern. Passen Sie diesen Raum für mehr Big Data Probleme mit Azure Services zu lösen.


Omid Afnan ist principal Programmmanager in der Azure Big Data-Team arbeitet auf Implementierungen von verteilte Berechnung Systeme und verwandte Entwickler Werkzeugketten. Er lebt und arbeitet in China. Sie erreichen ihn am omafnan@microsoft.com.

Unser Dank gilt den folgenden technischen Experten für die Durchsicht dieses Artikels: Le Duc und Tony Murphy
Duc Le (MIcrosoft). Le Duc ist ein Software-Entwickler im Microsoft HDInsight Big Data-Team. Bevor er zu Microsoft kam, war er ein Student, der Forschung auf Programmiersprachen und Software-Tests. Er mag lesen und vor allem genießt Sir Arthur Conan Doyle.

Tony Murphy (Microsoft). Tony Murphy ist mit Microsoft, seit 2007 arbeitet zunächst auf der SQL Server -Engine wechselte an das SQL Azure-Team. Er ist Gründungsmitglied des HDInsight-Teams bei Microsoft.