Tuesday, May 20, 2014

Facebook's Presto

In November 2013 Facebook published their Presto engine as Open Source, available at GitHub. Presto is a distributed interactive SQL query engine, able to run over dozens of modern BigData stores, based on Apache Hive or Cassandra. Presto comes with a limited JDBC Connector, supports Hive 0.13 with Parquet and Views.

Installation

Just a few specialties. Presto runs only with Java7, does not support Kerberos and does not have built-in user authentication, neither. To protect data a user should not be able to read, the use of HDFS Acl's / POSIX permissions should be considered. The setup of Presto is pretty easy and well documented. Just follow the documentation, use "uuidgen" to generate a unique ID for your Presto Node (node.id in node.properties) and add "hive" as datasource (config.properties: datasources=jmx,hive). I used user "hive" to start the server with:
export PATH=/usr/jdk64/jdk1.7.0_45/bin:$PATH && presto-server-0.68/bin/launcher start

After the successful start you should be able to connect to Presto's Webinterface (discovery.uri in config.properties). The UI is pretty simple, but a good point to see what happens with your queries, how many splits are created and what time each step takes.

The CLI is a stand-alone self-executing jar file and can be placed on any computer which has installed Java7 and can connect to the Presto Instance. To be sure that the client is using the correct Java version a PATH inclusion may make sense:
export PATH=/usr/jdk64/jdk1.7.0_45/bin:$PATH && /software/presto --server [your-presto-server]:[port] --catalog hive --schema default

presto:default> show tables;
    Table
--------------
 building
 hvac
 sample_07
 sample_08
 transactions

Now let's test if Presto is really fast and can compare with Impala. To make the tests more simple I wrote a small script which uses MR to generate sample data. Its available in my git-repo. Just run it as the user you want to be, maybe make it executable or use "sh". With the script I mentioned before I created a table called transactions, and this table we want to query. I post only 2 exemplary queries, but the script has a few more.

1. Finding highest gainers

select id, sum(amount) as amount from (select sender as id, amount * -1 as amount from transactions union all select recipient as id, amount from transactions) unionResult group by id order by amount desc limit 10;

Results
Hive: 39.078 seconds, Fetched: 10 row(s)
Tez: 18.227 seconds, Fetched: 10 row(s)
Presto: 0:02 [1.2M rows, 38.2MB] [720K rows/s, 22.9MB/s]


2. Finding fraudsters

select count(*) from (select a.sender, a.recipient, b.recipient as c from transactions a join transactions b on a.recipient = b.sender where a.time < b.time and b.time - a.time < 5) i;

Results
Hive: 208.065 seconds, Fetched: 1 row(s)
Tez: 101.758 seconds, Fetched: 1 row(s)
Presto: 1:02 [600K rows, 19.1MB] [9.7K rows/s, 317KB/s]

Conclusion

Since Tez brings a significant better performance, Presto brings light speed into Hadoop based SQL and can be measured with Impala. The advantage of Presto is the flexibility of connectors - the Presto Team will add more connectors for Oracle, MySQL, PostgresSQL and HBase very soon. Also Authentication (Kerberos), Authorization and SQL Grants will be supported within the next month [1].

Wednesday, May 14, 2014

Cloudera Manager fails to upgrade Sqoop2 when parcels are enabled

Cloudera Manager fails to update the generic Sqoop2 connectors when parcels are enabled, and the Sqoop2 server won't start anymore. In the logs a error like:

Caused by: org.apache.sqoop.common.SqoopException: JDBCREPO_0026:Upgrade required but not allowed - Connector: generic-jdbc-connector

is shown.
This issue can be fixed by adding two properties into the service safety valve of sqoop:

org.apache.sqoop.connector.autoupgrade=true
org.apache.sqoop.framework.autoupgrade=true


This happen trough the missing autoupdate of the default sqoop connectors in Cloudera Manager. After the properties are added, SqoopServer should be able to update the drivers and will start sucessfully.

Monday, May 12, 2014

Test: HDP 2.1 und Ambari 1.5.1

Im Rahmen einiger Analysen stelle ich hier die verschiedenen Distributionen in einem recht einfachen Verfahren gegenüber. Es kommt mir hierbei vor allem auf die Einfachheit und Schnelligkeit der Installation eines Clusters an, auf technischen Differenzen und Besonderheiten gehe ich jeweils kurz ein.

Vorbereitungen
Als Basis dient ein frisches CentOS 6.5 in einem Oracle VirtualBox VM Container, 6GB Memory, 4 CPU und 100 GB HDD. Als Gastsystem kommt Windows zum Einsatz - einfach weil Windows üblicherweise auf Bürorechnern installiert ist.
Da Ambari erst vor 2 Wochen die Version 1.5.1 veröffentlicht hat, starte ich mit hiermit. Das Einspielen der entprechenden Pakete ist hinlänglich und ausführlich in der Dokumentation beschrieben. Nachdem der Ambari Server gestartet wurde ist ein problemloses Einloggen auf der Webkonsole per http://FQHN:8080 möglich.
Wichtig ist hierbei, das die zu installierenden Server per DNS lookup erreichbar sind. Im Falle der VM stellte dies ein geringfügiges Problem dar, da das Gastsystem erst den Namen per C:\Windows\System32\drivers\etc\hosts auflösen musste. Hierzu ist der Windows-eigene Editor mit Administratorrechten zu starten und die folgenden Änderungen einzutragen:
<IP-Adresse der VM>    hdp    hdp.alo

Installation
Nachdem dies erledigt ist, kann mit der Installation des Clusters begonnen werden. Hierbei fällt auf, das Ambari (und demzufolge HDP) nur FQHN (Full qualified host names) akzeptiert. Im Folgenden war die SSH Installation nicht funktionsfähig, der private key wurde schlicht nicht übertragen (keyfile=/var/run/ambari-server/bootstrap/5/sshKey passwordFile null), was zu einem unschönen Abbruch führte - ohne entsprechende Fehlermeldungen. Dies kann durch die manuelle Installation des ambari-client (siehe Dokumentation) workarounded werden. Ab nun lief die Installation recht einfach und ohne Komplikationen. Bevor Hive und Oozie installiert werden können muss eine entsprechende Datenbank (in diesem Fall MySQL) installiert und initialisiert werden (anlegen der Datenbanken und Berechtigungen der User). Hier wäre ein intuitives Interface wünschenswert. Nach etwa 25 Minuten war HDP installiert und Ambari meldete die Einsatzbereitschaft.


Das aufgeräumte Interface macht einen guten Eindruck, ebenso die erweiterte Verwaltung wie Jobmanagement, Heatmaps, Services und Admin waren sehr aufgeräumt. Persönlich gut gelöst fand ich die Integration von Ganglia und Nagios, hier ist die Anbindung des Clusters an eine bestehende Infrastruktur recht einfach.


Allerdings waren beim Tab "Hosts" keinerlei Metriken zu sehen, was auf fehlerhafte Nagios Implementation hindeutet. Auch bei HDFS und YARN zeigten die eingeblendeten Metriken gar keine Daten, was gerade bei einem frisch installierten Cluster eher Unsicherheiten erzeugt.




Leider wird Hue nicht per default installiert, sondern muss manuell nachinstalliert werden. Das ist unschön, aber auch einfach per yum install hue erledigt. Allerdings muss in  /etc/hue/conf/hue.ini die entsprechenden Einträge von localhost mit dem FQHN angepasst und in der HDFS Konfiguration die "Custom core-site.xml" editiert und die Properties hadoop.proxyuser.hue.group und hadoop.proxyuser.hue.hosts hinzugefügt und mit "*" belegt werden. Dasselbe muss mit der WebHcat Konfiguration per "Custom webhcat-site.xml" mit den Properties hadoop.proxyuser.webhcat.group und hadoop.proxyuser.webhcat.hosts
ebenfalls geschehen. Nach einem Speichern und anschließenden Restarten der Services HDFS, YARN, WebHCat und MapReduce2 und dem Restart des Hue-Servers ist dieser wie gewohnt einsatzbereit.
Allerdings bleibt der Job Reiter bei Jobs, die aus Hue abgesetzt wurden, leer.  Die reibungslose Integration ist hier leider nicht vorhanden.


Test Tez vs. MR

Um die unterschiedlichen Frameworks mittels Hue zu nutzen muss die entsprechende Engine unter Settings definiert werden. Neugierig bin ich vor allem auf die Finalen Ergebisse der Stinger Initiative und deren vektorbasierte Beschleunigung vor allem im Vergleich mit InMemory Tools wie Spark oder Impala. Hierzu benutze ich Tutorialdaten von Hortonworks, bereitgestellt bei Amazon S3. Der Wechsel zwischen MR und Tez klappt ohne Probleme, der versprochene Geschwindigkeitszuwachs ist ebenfalls merkbar.Um die Differenz genau zu messen, führe ich dieselben Abfragen per Hive CLI aus:

set hive.execution.engine=mr;

select a.buildingid, b.buildingmgr, max(a.targettemp-a.actualtemp)
from hvac a join building b
on a.buildingid = b.buildingid
group by a.buildingid, b.buildingmgr;


[...]
Time taken: 45.22 seconds, Fetched: 20 row(s)

Dasselbe mit Tez:
set hive.execution.engine=tez;

select a.buildingid, b.buildingmgr, max(a.targettemp-a.actualtemp)
from hvac a join building b
on a.buildingid = b.buildingid
group by a.buildingid, b.buildingmgr;


[...]
Time taken: 19.59 seconds, Fetched: 20 row(s)

Alles in allem eine Geschwindigkeitssteigerung von etwa 2,4 - was beeindruckend ist. Allerdings sehe ich von den oft proklamierten "100 times faster" hier nichts, was an dem Datenset liegen kann.

Zusammenfassung
Ambari ist Open Source, kann aber derzeit nur Hortonworks' Version von Apache Hadoop installieren und verwalten, was Ambari zu einem Verwaltungstool für HDP "only" macht. Dessen muss man sich klar sein. Alles in allem überzeugen die fehlenden Metriken und die fehlende Integration von Hue nicht - dagegen der Einsatz von Stinger vollstens. Hier merkt man den Geschwindigkeitsvorteil deutlich. Falcon scheint noch etwas wackelig zu sein, so werden Tez Jobs teilweise mit Laufzeiten von 35 Minuten angezeigt. Oder sie fehlen ganz - und es ist nicht ersichtlich ob diese von der CLI oder per HCat (Hue) abgesetzt wurden.
Grundsätzlich lässt sich ein HDP basierender Cluster recht einfach verwalten, nur das Verschieben von Services ist nicht möglich - was einen Cluster etwas unflexibel macht. Nicht getestet wurde LDAP und Kerberos Integration, Rolling Restarts und Namenode HA.

Edit 23.05.2014

Das Problem der fehlenden Graphs liegt am nicht automatisch gestarteten Apache Webserver - Nagios braucht diesen. Nach dem Start und einschalten des Systemstarts (chkconfig httpd on) waren alle Graphen verfügbar.

Tuesday, May 6, 2014

The Forrester Wave (Or: We're all the leaders)

Forrester Research, an independent market research firm, released in February 2014 the quarterly Forrester Wave Big Data Hadoop Solutions, Q1 2014 Report [1]. The report shows this graphic, and it looks like that all major, minor and non-hadoop Vendors think they lead. It looks really funny when you follow the mainstream press news.

IBM [5] think they lead, Hortonworks [4] claim the leadership too, MapR [3] leads too, Teradata is the true leader (they say) [6]. Cloudera [2] ignores the report. The metapher is - all of the named companies are in the leader area, but nobody leads.

Forrester Wave Big Data Hadoop Solutions, Q1 2014 Report
Anyway, let us do a quick overview about the "Big Three" - Cloudera, MapR, Hortonworks.

The 3 major Hadoop firms (Horton, MapR, Cloudera) are nearly in the same position. All distributions have the sweet piece, which lets the customer decide which one fits most. And that is the most important point - the customer wins. Not the marketing noise.

Cloudera [2] depends on Apache Hadoop, has Cloudera Manager, a strong, sophisticated and great tool to manage an entire hadoop cluster, including add, relocate and remove services from a node to another. In addition to the Open Source version of Hadoop they offer Closed Source Applications on top, like Cloudera Manager Enterprise, Cloudera Navigator (Data Lineage), BDR, Snapshotting, Data Replication. But these additional services aren't OpenSource.

MapR [3] is the most convenient guy here - the press release on their website is clear, no big noise. The message: Choose what is the best for your business. Makes the company a bit friendly. MapR has 3 different solutions - M3, the free-to-use edition, M5 - the Enterprise Edition with NFS Support, Snapshotting, independent code support and M7, the Enterprise Database Edition, optimized for Low Latency and High Throughput. MapR Editions aren't Open Source, and the management console is not as feature-rich as Cloudera Manager. Additionally, the company created their own HDFS-like file system (MapR-FS), mostly written in C(++).

Hortonworks [4] is the youngest player in the market. Originally Horton comes from Yahoo and is a spin-off from the core developers on Apache Hadoop MapReduce, Apache Hadoop HDFS and Apache Hadoop Yarn. HDP, the Hortonworks Edition of Apache Hadoop, is the only 100% Open Source distribution in the market. The managing tool, Apache Ambari (incubating) is also not so feature-rich as Cloudera Manager, but it's Open Source and works well. Furthermore, Horton sells only Apache Projects in their distribution, for Data Governance Falcon, and for Security Purposes Knox.

All of  these three players have a strong support department as well as service delivery (Solution Architect), Pre- and Post Sales and a significant amount of customers.

In my eyes, I see only one true leader. Apache Hadoop. All of those "BigData" companies rely on a great idea, originally developed at Google and rebuilt by the Apache Open Source Community. This is what true leadership means - evolve and divide.

[1] http://www.forrester.com/pimages/rws/reprints/document/112461/oid/1-PBE69P
[2] http://www.cloudera.com
[3] http://www.mapr.com/forrester-wave-hadoop-distribution-comparison-and-benchmark-report
[4] http://info.hortonworks.com/ForresterWave_Hadoop.html
[5] http://www.ibmbigdatahub.com/whitepaper/forrester-wave-big-data-hadoop-solutions-q1-2014
[6] http://www.teradata.de/News-Releases/2014/Teradata-is-a-Leader-in-Big-Data-Hadoop-Solutions-in-2014/?LangType=1031