Dies ist ein Tutorial zum Aufbau der Big Data Twitter Demo. Die große Übersicht wurde bereits im Artikel Big Data Twitter Demo – The Big Picture erläutert.

01 Big Picture

Dieser Artikel ist folgendermaßen aufgebaut:

  1. Voraussetzungen
  2. Speicherkonto und Virtuelle Maschine in Windows Azure
  3. SQL Azure Datenbank in Windows Azure
  4. HDInsight
    1. HDInsight Cluster erstellen
    2. Hive
  5. Virtuelle Maschine
    1. Websockets
    2. StreamInsight
    3. Port/Firewall-Einstellungen
    4. Internet Information Services (IIS)
    5. Visual Studio Solution TwitterCEP
    6. Twitter Streaming
    7. Letzte Sachen…
  6. Demo-Maschine
    1. CloudXPlorer
    2. ODBC Driver

    1. Voraussetzungen

    Die gesamte Demo ist auf Windows Azure basiert. Dafür braucht man ein Windows Azure Konto. Falls noch nicht vorhanden (z.B. über die MSDN Subscription), kann man sich auf http://aka.ms/azurenow für eine kostenlose Testversion anmelden.

    Darüber hinaus hat man idealerweise die 64-Bit Version von Microsoft Excel installiert. In Excel nutzen wir Power Pivot und Power View.

    Der Source Code der Big Data Twitter Demo der Microsoft-Kollegen ist ESSENTIELL: http://twitterbigdata.codeplex.com/ Ohne deren großartige Arbeit wäre diese Demo erst gar nicht möglich.

    01 Voraussetzungen src-code

    Großen, großen Dank an die Verantwortlichen für das Projekt: Vu Le und Andrew Moll, wie auch Cindy Gross!

    Vom Vorteil ist auch der Order Big Data Twitter Demo meiner einer, der Text-Dateien zum Setup (den es auszufüllen gilt!) wie auch zu den Hive-Abfragen enthält.

    2. Speicherkonto und Virtuelle Maschine in Windows Azure

    Zunächst richten wir ein Blob-Speicher-Konto ein. Auf dem Windows Azure Management Portal klickt man dabei auf neu.

    Windows Azure Management Portal

    Mit “Quick Create” oder “Schnell erfassen” erstellen wir ein Speicherkonto, z.B. twitterstor. Nennen wir es <storage-account>. Hierbei ist wichtig, das Speicherkonto in East US oder North Europe zu erstellen, auf denen der HDInsight Service läuft. Geo-Replikation kann man deaktivieren, um weitere Kosten zu sparen. Das Speicherkonto ist der Ort des Windows Azure Blob Storage, auf das wir noch später eingehen werden.

    Storage Account

    Daraufhin erstellen wir eine virtuelle Maschine mit dem neuesten Image von Windows Server, hier Windows Server 2012 R2.

    02 vm 01

    02 vm 02

    Die virtuelle Maschine nutzt 4 Kerne, und könnte twittervm genannt werden, allgemein <virtual_machine> mit Benutzernamen <virtual_machine_user> und Passwort <virtual_machine_password>.

    02 vm 03

    Diese virtuelle Maschine basiert auf das zuvor erstellte Speicherkonto, z.B. twitterstor, allgemein <storage_account>.

    02 vm 04

    Zum Schluss auf fertig klicken, und so hat man ein Speicherkonto mit assozierter virtueller Maschine.

    Zusammenfassend:

    Speicherkonto <storage_account>
    Virtuelle Maschine <virtual_maschine>
    Benutzername auf der VM <virtual_machine_user>
    Passwort auf der VM <virtual_machine_password>

    3. SQL Azure Datenbank

    Nun erstellen wir eine SQL Azure Datenbank, indem wir wie zuvor links unten auf Neu klicken. Um sicherzugehen, dass die SQL Azure Datenbank im gleichen Azure Datencenter wie das zuvor eingerichtete Speicherkonto erstellt wird, erstellen wir eine benutzerdefinierte SQL Datenbank:

    03 sql 01a

    Am besten den Namen der Datenbank in der Setup-Textdatei notieren.

    03 sql 01b

    Hier kann man sicherstellen, die Datenbank in der gleichen Region wie das Speicherkonto erstellen.

    03 sql 01c

    So wurde automatisch ein SQL Server erstellt:

    03 sql 02

    03 sql 03

    Um eine Verbindung zwischen der virtuellen Maschine und der SQL Datenbank zu erstellen, werden die erlaubten IP Adressen in der SQL Azure Datenbank in dessen Dashboard verwaltet:

    03 sql 05

    Da erstellen wir eine weitere Regel, mit der alle IP Adressen erlaubt sind, namens allowall. Hier ist auch zu merken, dass automatisch auf die Konfigurationsseite des SQL Servers gewechselt wird.

    03 sql 06

    Daraufhin auf Verwalten oder Manage unten klicken, wo man auf der Login-Seite und daraufhin der Übersicht der SQL Datenbank landet:

    03 sql 0803 sql 09

    Sobald auf der Übersicht, wähle die zuvor erstellte Datenbank aus, also <sql_database>.

    03 sql 10

    Erstelle eine neue Abfrage und dann ausführen:

    create login <virtual_machine_user> with password=<virtual_machine_password>;

    03 sql 11

    Diesen Login machen wir mit einer weiteren Abfrage zu einem Benutzer:

    create user <virtual_machine_user> from login <virtual_machine_user>;
    go
    exec sp_addrolemember ‘db_owner’, ‘<virtual_machine_user>’;
    go

    03 sql 13

    In dem Source Code von http://www.twitterbigdata.codeplex.com im Ordner “Other Resources” finden wir die SQL Datei Create Azure DB Objects.sql, die wir öffnen und ausführen. So wird eine Template Tabelle in der SQL Azure Datenbank erstellt.

    03 sql 1403 sql 15

    Zusammenfassend:

    Name der SQL Azure Datenbank <SQL_database>
    Name des SQL Azure Servers <SQL_server>
    URL des SQL Azure Servers <SQL_server>.database.windows.net,1433 | https://<sql_server>.database.windows.net/#$database=<sql_database_name>
    SQL Admin Login <SQL_admin>
    SQL Admin Passwort <SQL_password>
    SQL Azure Datencenter <azure_datacenter> (z.B. Nordeuropa)

    4. HDInsight

    4.1. HDInsight Cluster erstellen

    Nun geht es an den HDInsight Service, der nun auch GA ist!

    04 hdinsight 01

    Per benutzerdefinierten Erstellung wird ein HDInsight Cluster wie folgt erstellt:

    Cluster Name <HDInsight_name>
    Region so wie <azure_datacenter> (siehe oben)
    HDInsight Administrator <HDInsight_admin_name>
    HDInsight Administrator Passwort <HDInsight_admin_password>
    RDP Adresse <HDInsight_name>.azurehdinsight.net
                       

    04 hdinsight 02

    04 hdinsight 03

    Der HDInsight Cluster wird ebenfalls mit dem oben erstellten Speicherkonto (also <storage_account>) assoziert.

    04 hdinsight 04

    Es wird einige Minuten dauern, bis der HDInsight Cluster erstellt ist. Ergebnis sollte dann so aussehen:

    04 hdinsight 05

    Um Hadoop und Hive später laufen zu lassen, aktivieren wir Remote Access auf der Konfigurationsseite des HDInsight-Clusters:

    04 hdinsight 0604 hdinsight 07

    Der Benutzername für die Remote-Verbindung ist aus Sicherheitsgründen nicht identisch mit Administrator des HDInsight-Clusters.

    RDP Benutzername <HDInsight_rdp_user>
    RDP Passwort <HDInsight_rdp_password>

    04 hdinsight 08

    4.2. Hive

    Sobald eingeloggt, kopieren wir die Text-Dateien im Ordner Hive unter Big Data Twitter Demo in einen neu erstellten Ordner C:\hivescripts im HDInsight-Cluster, die alle möglichen Hive-Abfragen enthält:

    04 hdinsight hive 01

    10 demo 07

    Diese Abfragen werden erst während der Demo relevant.

    5. Virtuelle Maschine

    Nun müssen einige Sachen in unserer Virtuellen Maschine <virtual_machine> ingerichtet werden, um das Extrahieren der Tweets in Echtzeit zu ermöglichen. Per RDP verbinden wir uns mit der eingerichteten Instanz der virtuellen Maschine:

    05 vm 01

    5.1. WebSockets

    In der virtuellen Maschine werden wir nun WebSockets aktivieren. Das WebSocket-Protokoll ist ein Netzwerkprotokoll basierend auf TCP für die Herstellung einer bidirektionalen Verbindung zwischen einer Anwendung und einem Web-Server. Da das Extrahieren der Tweets über diese VM geschieht, fügen wir WebSockets als Rolle in der VM hinzu.

    Nachdem wir uns per RDP in der virtuellen Maschine per <virtual_machine_user> und <virtual_machine_password> eingeloggt haben, öffnet sich automatisch der Server Manager (wie es sich für Windows Server 2012 R2 gehört). Im Server Manager rufen wir den Assistenten auf, um Rollen und Features hinzuzufügen:

    05 vm - websockets 01

    Daraufhin öffnet sich der Assistent dazu. Wir wollen die Web Server Rollen wie auch die Features .NET Framework 4.5 und HTTP Activation hinzufügen:

    VM: Web Server Rolle hinzufügen

    VM: .NET und HTTP Activation

    VM: HTTP Activation

    Im Bereich der Anwendungsentwicklung wollen wir insbesondere das WebSocket Protokoll hinzufügen:

    05 vm - websockets 05

    Um das Browsen im Internet Explorer innerhalb der VM zu erleichtern, schalten wir die erweiterten IE Sicherheitseinstellungen aus, in dem wir auf den Lokalen Server im Server Manager gehen:

    05 vm - websockets 06

    Im Windows Azure Management Portal fügen wir mit Hinblick auf die HTTP Aktivierung noch einen HTTP Endpoint zur VM hinzu:

    05 vm - websockets 07

    Kurzes Recap: Wir haben WebSockets als Server-Rolle mitsamt HTTP-Endpoint zur VM hinzugefügt.

    5.2. StreamInsight

    Die Visual Studio Solution zur selektiven Extrahierung aller weltweiten Tweets ist StreamInsight nötig. In der VM laden wir StreamInsight 2.1 vom Microsoft Download Center herunter:

    05 vm - si 08

    StreamInsight kann man als kostenfreie Testversion für 30 Tage nutzen, wenn man keinen Produktschlüssel parat haben sollte. Bei der Installation installieren wir sogleich eine Instanz, sei es <stream_insight_instance> oder hier im Diagramm oldktwDemo. Am besten den ausgewählten Name der <stream_insight_instance> in der Setup-Textdatei notieren.

    StreamInsight Instanz Installation

    Sobald die Installation fertig gestellt ist, werden noch die x86-Version und daraufhin die x64-Version der SQL Compact Edition 3.5 SP2 + CU4 (oder höher) installiert. Diese sind üblicherweise unter C:\Program Files\Microsoft StreamInsight 2.1\Redist\ zu finden:

    SQL Compact Edition 3.5 SP2

    Kurzes Recap: Wir haben StreamInsight installiert, genauer gesagt: eine StreamInsight-Instanz <stream_insight_instance>.

    5.3. Port/Firewall-Einstellungen

    Nun wollen wir sichergehen, dass der TCP Port 1433 auch erlaubt wird.

    Dafür suchen wir im Startmenü in der VM nach der Firewall Applikation und öffnen die Ansicht der Outbound Rules (ausgehende Regeln). Da erstellen wir eine neue Regel namens SQLDefaultPort:

    05 vm - firewall 11

    Was wir in allen Netzwerken (Heim-, Domänen- und öffentliches Netz) erlauben wollen ist der TCP Port 1433, wie man in den folgenden Graphiken sehen kann:

    Allow TCP Port 1433 (1)

    Allow TCP Port 1433 (2)

    Allow TCP Port 1433 (3)

    Allow TCP Port 1433 (4)

    Allow TCP Port 1433 (5)

    Das Resultat ist eine weitere Outbound Regel namens SQLDefaultPort:

    05 vm - firewall 17

    5.4. Internet Information Services (IIS)

    Nun wollen wir Directory Browsing im IIS Manager aktivieren. Dafür tippt man einfach im Startmenü drauf los mit IIS, und schon erscheint der IIS Manager als Option.

    IIS Directory Browsing aktivieren

    IIS Directory Browsing aktivieren 2

    5.5. Visual Studio Solution TwitterCEP

    Nun installieren wir Visual Studio auf der VM, sei es über die MSDN Subscription oder der Visual Studio Download Seite.

    Auch den Source Code der Twitter Big Data Codeplex Seite auf die VM herunterladen (siehe Schritt 1 – Voraussetzungen). Sobald Visual Studio installiert ist, können wir die Visual Studio Lösung TwitterCepSolution.sln unter TwitterCEP in Visual Studio öffnen.

    05 vm - vs 25

    Beim Öffnen der Visual Studio Solution können wir die Source-Control Meldungen ignorieren:

    05 vm - vs 26

    05 vm - vs 27

    Sobald geöffnet, öffne die JavaScript-Datei default.js, die im Ordner StreamInsight.Demos.Twitter.RealTimeDashboard zu finden ist. Hier wollen wir sichergehen, dass die Variabel wsHost auf localhost oder die IP Adresse der VM gesetzt ist:

    05 vm - vs 28

    Dann können wir uns daran setzen, die App Einstellungen in der Visual Studio Solution zu setzen. Die findet man in der Konfigurationsdatei app.config unter StreamInsight.Demos.Twitter.Client:

    05 vm - vs 29

    Ergänze hierbei folgende Werte laut der Setup-Textdatei (die wir im Laufe dieses Tutorials weiter ausgefüllt haben):

    instance_name <stream_insight_instance>
    twitter_username <twitter_name>
    twitter_password <twitter_password>
    twitter_keywords <twitter_keyword1, twitter_keyword2,…>
    blob_container_name <hdinsight_container>
    db_server_name tcp:<sql_server>.database.windows.net,1433
    db_name <sql_database>
    db_user <SQL_admin>
    db_user_pwd <SQL_password>
    ws_url localhost

    Um die nötigen Informationen zum Azure Blob Storage anzugeben, müssen wir nochmal zum Azure Management Portal auf das Speicherkonto gehen. Beim Anklicken des Speicherkontos sieht man unten zentral einen Knopf, um dessen Zugangsschlüssel zu verwalten. So erhalten wir einen weiteren Wert für unsere Setup-Textdatei: <storage_account_key>.

    05 vm - vs 30

    Zurück in der Konfigurationsdatei der Visual Studio Solution ergänzen wir folgenden Wert:

    blob_storage_account DefaultEndpointsProtocol=https;AccountName=<storage_account>;
    AccountKey=<storage_account_key>

    Dann ergänze mtcaustin mit dem Namen deiner virtuellen Maschine, also <virtual_machine>.

    05 vm - vs 32

    5.6. Twitter-Streaming Einstellungen

    Möglicherweise ist schon aufgefallen, dass noch vier weitere Einstellungen in der app.config-Datei ausstehen. Richtig – irgendwas mit Twitter! Weil dürfen wir echt einfach so alle – also wirklich ALLE – Twitter-Daten kriegen?! Nur mit einer bestimmten Authentifizierung.

    Dafür gehen wir auf die Seite für Twitter Developers, um eine Applikation zu erstellen/registrieren: https://dev.twitter.com/apps. Beim Erstellen einer neuen Applikation gibst Du folgende Sachen ein:

    Name: TwitterBigDataDemo
    Description: SQL Server StreamInsight for a real time Dashboard oder ähnliches
    Website: http://<virtual_machine>.cloudapp.net/RTDashboard/

    05 vm - twitter 21

    So erhalten wir einen Consumer Key wie auch Consumer Secret. Beim Runterscrollen kann man noch Access Tokens erstellen:

    05 vm - twitter 22

    Beim Klicken dieses Buttons erhält man diese auch sogleich:

    05 vm - twitter 23

    Diese Werte ergänzen wir sowohl in unserer Setup-Textdatei als auch in app.config:

    oauth_consumer_key <twitter_consumer_key>
    oauth_consumer_secret <twitter_consumer_secret>
    oauth_token <twitter_access_token>
    oauth_token_secret <twitter_access_token_secret>

    5.7. Letzte Sachen…

    Um alle eingehenden Tweets vollständig im Blob Storage zu speichern, kann man in BlobHelper.cs unter StreamInsight.Demos.Twitter.Common folgende Veränderung vornehmen:

    05 vm - vs 33

    Änder string.Format("{0}/{1}.txt”  zu string.Format("twitter/{0}/{1}.txt" um.

    05 vm - vs 34

    Noch zwei letzte Sachen:

    Zum erleichterten Start der Visual Studio Solution ist es ratsam, eine Verknüpfung des Ordners TwitterCEP und der Datei TwitterCepSolution.sln auf den Desktop zu kopieren.

    05 vm - vs 35

    Und zu Allerletzt empfiehlt es sich, die virtuelle Maschine auf den neuesten Stand bezüglich des Betriebssystems zu bringen:

    05 vm 36

    6. Demo-Maschine

    Im letzten Part des Aufbaus knöpfen wir uns unsere eigene Maschine jenseits der Wolke Azure vor.

    6.1. CloudXplorer

    Um mitverfolgen zu können, was denn im Laufe der Demo an Daten alles zusammengekommen ist und was genau im Azure Blob Storage gespeichert ist, bietet sich der CloudXplorer sehr gut an. Da richten wir unser Speicherkonto von Schritt 1 ein:

    07 cloudxplorer 01

    Der Name wie auch der Secret Key erhalten wir von der Setup-Textdatei, mit der wir ja im Laufe der Demo Buch geführt haben: <storage_account> und <storage_account_key>.

    07 cloudxplorer 02

    6.2. Excel – ODBC Treiber

    Für die Verbindung zwischen den Hive Tables (die im HDInsight Cluster im Analyse-Stadium erstellt wurden) und Excel muss zunächst ein Hive ODBC Treiber installiert werden. So können wir per Business Intelligence auf Excel die Hive Tables integrieren. Wichtig bei der Installation ist, welche Bit-Version von Excel auf der Demo-Maschine bereits vorhanden ist. Wenn es die 64-Bit Excel Version ist (die wärmstens angesichts der großen Datenmengen zu empfehlen ist), eignet sich nur der 64-Bit ODBC Treiber, wie unten angeklickt:

    06 excel 01Sobald installiert, rufen wir den ODBC Administrator vom Startmenü aus auf:

    06 excel 02

    Daraufhin fügen wir einen Hive Connector hinzu, den wir liebevoll TwitterHive nennen.

    06 excel 03

    Bei der Auswahl des Treibers für eine neue Datenquelle nehmen wir den Hive ODBC Driver:

    06 excel 04

    Bei den Einstellungen geben wir folgende Informationen ein und testen die Verbindung:

    Host <hdinsight_name>.azurehdinsight.net
    Port 443
    User Name <hdinsight_admin_name>
    Password <hdinsight_admin_password>

    06 excel 05

    06 excel 06

    Beim Test sollte ein SUCCESSFUL stehen :)

    Nun öffnen wir die Excel-Datei, die im Source Code der Big Data Twitter Demo auf Codeplex vorhanden ist (TwitterAnalysisFull.xlsx). In Excel selber öffnen wir die PowerPivot Tabelle über PowerPivot –> Manage:

    06 excel 07

    In PowerPivot gucken wir uns die bereits vorhandenen Verbindungen an:

    06 excel 08

    Zu sehen sind zwei PowerPivot Datenverbindungen: HOA (zum HDInsight-Cluster) und SqlServer… (zur SQL Azure Datenbank). Zunächst bearbeiten wir die SQL-Datenverbindung, wo wir folgende Informationen einfügen:

    Server Name <sql_server>.database.windows.net,1433
    SQL Server User Name <sql_admin>
    SQL Server Password <sql_password>
    Database Name <sql_database>

    06 excel 09

    06 excel 10

    Beim Testen sollte ebenfalls success stehen:

    06 excel 11

    Das Gleiche nun auch mit der Hive-Verbindung:

    06 excel 12

    06 excel 13

    In den Eigenschaften fügen wir folgende Sachen ein:

    Data Source Name TwitterHive
    User Name <hdinsight_admin_name>
    Password <hdinsight_admin_password>

    Hier erlauben wir das Speicher des Passwortes, und testen die Verbindung:

    06 excel 14

    Wenn da ein Fehler mit Architecture Mismatch steht, liegt es daran, dass die Bit-Versionen von Excel und dem ODBC Driver nicht vertragen, sprich: sind unterschiedlich. Entweder beide in 32-bit oder 64-bit.

    Und Voilà, fertig mit dem Aufbau!

    Im nächsten Beitrag gehen wir dann tatsächlich die Demo durch, wie man die zeigen würde.