Sviluppo della piattaforma dei servizi cloud di base per il data center TIX INTEGRAZIONE CON HADOOP, PENTAHO, SAIKU, R E JBOSS DATA VIRTUALIZATION Redazione Tommaso Anzidei 18/05/2016 AlmavivA Silvana Ciampi, Verifica Marco Giolo AlmavivA Approvazione Versione 1 Vincenzo Martiello Regione Toscana 1.6 Sommario 1. Introduzione......................................................................................3 2. Descrizione dell'integrazione.................................................................4 3. Installazione del PoC...........................................................................5 4. Dimensionamento VM in Produzione.....................................................19 5. Conclusioni, criticità, altre sperimentazioni............................................21 2 1. Introduzione Regione Toscana è interessata ad esplorare l'integrazione della piattaforma SAAS-plat con gli strumenti di classe bigdata messi a disposizione da Apache Bigtop ovvero Hadoop, Hive, Sqoop, Tez, Hue e Spark (cfr. documento Progetto Sperimentazione piattaforma Bigtop/Hadoop versione 1.1 dell'11/12/2015), alcuni strumenti di Analytics dell'ecosistema Pentaho (in particolare Saiku) e JBoss Data Virtualization. In questo documento mostriamo come l'integrazione sia possibile e ci soffermiamo sulle criticità. Proponiamo il dimensionamento di un cluster di VM in ambiente di produzione. 3 2. Descrizione dell'integrazione La piattaforma SAAS-plat conserva i propri dati su elasticsearch che a sua volta è alimentato da logstash e Karaf. Regione Toscana è interessata ad interrogare detti dati, oltre che con gli strumenti messi a disposizione dalla piattaforma (Kibana, Motix), anche con strumenti di analytics diffusi nella comunità Hadoop (Hive, Hue), con gli strumenti di analytics in uso in Regione Toscana (Pentaho, R, Saiku) e con l'ambiente di virtualizzazione di connessioni a data source esterni JBoss Data Virtualization. Ricordiamo brevemente che: Hadoop è un framework per lo storage distribuito e l'elaborazione parallela di dati Hive è un framework di datawarehousing basato su Hadoop Sqoop è uno strumento per il trasferimento dati di tipo bulk tra Haddop e database relazionali Hue è un'interfaccia web per hadoop Spark è un framework di cluster computing alternativa ad hadoop ma con lui compatibile BigTop è un progetto Apache per la distribuzione semplificata ed il testing di Hadoop, Hive, Sqoop, Hue, Spark ed altri strumenti di classe bigdata elasticsearch è un database distribuito performance basato su Apache Lucene NoSQL per ricerche ad alte Pentaho è un insieme di strumenti open source di Business Intelligence R è un linguaggio di programmazione orientato alla statistica Saiku è un client di analytics JBoss Data Virtualization è una soluzione di integrazione e fornitura di dati che permette di raggruppare più origini dati e di trattarle come un'unica origine AlmavivA ha realizzato un Proof of Concept (da qui in avanti PoC) con la quale si dimostra che i dati di elasticsearch possono essere resi disponibili a costo zero su Hive, l'infrastruttura datawarehouse costruita su Hadoop. L'integrazione di Hadoop, Hive ed Elasticsearch consiste nella creazione di tabelle Hive connesse ad elasticsearch tramite il prodotto (connettore a due vie) open source ES-Hadoop. Dette tabelle possono essere interrogate da Pentaho ed R. Nel prossimo paragrafo dettagliamo operativamente l'integrazione che è stata implementata, per ora, nell'ambiente di staging di Regione Toscana. 4 3. Installazione del PoC ✗ Installazione dell'ecosistema Hadoop. Sono stati installati, su una distribuzione CentOS 6.7 i seguenti componenti Bigtop: ✔ Bigtop 1.0: distribuzione seguenti passi: 1. Hadoop. L'installazione consiste nei wget http://www.apache.org/dist/bigtop/bigtop-1.0.0/repos/centos6/bigtop.repo 2. aggiunto il repo alla configurazione di yum 3. yum install hadoop\* mahout\* oozie\* hbase\* hive\* hue\* pig\* zookeeper\ Per accedere all'installazione attraverso Hue è necessario connettersi con un browser all'indirizzo: http://rt-bigtop-vm01-s1.rt.tix.it:8888 ed autenticandosi con le credenziali comunicate personalmente. 5 ✗ Installazione di ES-Hadoop 2.1.2. Si è installato ES-Hadoop 2.1.2 su una distribuzione CentOS. L'installazione consiste nello scaricare un file zip (elasticsearch-hadoop-2.1.2.zip), nello scompattare l'archivio, copiare il file elasticsearch-hadoop-2.1.2.jar nella cartella {$HIVE_HOME}\lib e nel configurare Hive creando il file {$HIVE_HOME}\conf\hive-site.xml con il contenuto simile a: <property> <name>hive.aux.jars.path</name> <value>/home/tsf/hive/apache-hive/lib/elasticsearch-hadoop-2.1.2.jar</value> <description>A comma separated list (with no spaces) of the jar files</description> </property> ✗ Creazione di una tabella Hive esterna connessa ad elasticsearch. Questa attività consiste nel creare, tramite Hive, una tabella Hive esterna che punta all'indice e al tipo elasticsearch che si vuole rendere disponibile ad Hive. In SAAS-plat, per esempio, i log del frontend Apache di sanità sono conservati nell'indice syslog nel tipo syslog. Il comando Hive è il seguente: CREATE EXTERNAL TABLE syslogs ( `@timestamp` timestamp, `secure-user` string, `url` string, `query-string` string, `name` string, `os_name` string ) STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler' TBLPROPERTIES('es.resource' = 'syslog/syslog', 'es.nodes' = '10.159.33.222:9200' ); Si è quindi creata una tabella esterna (che punta cioè ad una fonte dati esterna, in questo caso elasticsearch) in Hive le cui colonne rappresentano un sottoinsieme delle informazioni registrate dai frontend Apache di interesse (presunto) statistico. Si tratta di un esempio che può essere adattato alle reali esigenze del dipartimento di statistica. La tabella così definita, syslogs, può creare problemi ad Hive a causa del fatto che Hive non supporta nomi di colonne con caratteri speciali (come “-”). Per ovviare a questo inconveniente si è creata una vista Hive, nominata logs, siffatta: 6 create view logs as SELECT `@timestamp` as timestamp, `url` as url, `name` as browser, `os_name` as osname, if(`query-string` is null, null, str_to_map(regexp_replace(`query-string`,'\\?',''),'&','=')['idDominio']) as dominio, substr(`secure-user`,1,2) as anno, if(cast(substr(`secure-user`,4,2) as int) > 40,'D','U') as sesso FROM syslogs; La vista così creata, logs, (che è sempre un esempio adattabile ad esigenze diverse), ha due particolarità: 1. Utilizza nomi colonna compatibili con Hive eliminando la necessità di utilizzare singoli apici 2. Calcola il dominio richiesto dall'utente (quando presente nella query string), età e sesso del richiedente (a partire dal suo codice fiscale). Di nuovo si tratta di una semplice rivisitazione dei dati provenienti da elasticsearch a fini statistici. ✗ 7 Interrogazione della tabella Hive. A questo punto i dati conservati su elasticsearch sono disponibili in Hive. Si veda la seguente sessione Hive: 8 ✗ Pentaho. Per verificare la connessione con Pentaho si è utilizzato Pentaho Data Integration (spoon) versioni 5.3/6.0: Si è definita una connessione JDBC: 9 e si è eseguita una query (select * from logs limit 10): 10 ✗ Saiku. Per verificare la connessione con Saiku, si sono intallati Pentaho Business Intelligence Server (versioni 5.3 e 6.0), il relativo plugin Saiku e l'ambiente di authoring di cubi OLAP Mondrian Schema Workbench versione 3.11. La produzione di report Saiku ha evidenziato come l'integrazione tra strumenti di Business Intelligence con Hive ed Elasticsearch possa beneficiare di: 1. Un dimensionamento appropriato del cluster Hadoop: Saiku, nel consultare il cubo OLAP esegue numerose query ad Hive e di conseguenza ad Elasticsearch. Le query Hive vengono trasformate, da Hadoop, in job Map/Reduce che ovviamente diventano più efficienti all'aumentare dei nodi Hadoop. 2. La predisposizione, su Hive, di aggregazioni di dati precalcolati e memorizzati il tabelle interne ad Hive. Infatti job ad hoc, per esempio scritti con Pig e schedulati con Oozie, possono aggregare dati, per esempio giornalieri, mensili o settimanali ed conservare l'aggregazione su Hive. In questo modi si riduce il throughput. Per esempio si è creata una tabelle interna Hive, denominata hits, che aggrega i logs a partire da una certa data: create table hits ( totalhits url int, string, browser string, osname string, dominio string, anno string, sesso string ); 3. Il calcolo periodico di tali aggregazioni con hiveQL (il dialetto SQL di Hive) oppure il linguaggio dataflow di Hadoop Pig (schedulando entrambe le possibilità con Oozie). Nell'esempio si è popolata la tabella hits con lo script: insert into table hits select count(*) , url, browser, osname, dominio, anno, sesso from logs where timestamp >= '2016-02-01' group by url, browser, osname, dominio, anno, sesso; 4. Le performance del sistema possono essere ulteriormente migliorate 11 sostituendo Hive con Spark SQL e hiveserver2 (il demone che espone Hive a connessioni JDBC) con Thrift JDBC/ODBC server (il demone che espone Spark a connessioni JDBC/ODBC) Si è connesso Mondrian ad Hive e si è costruito il seguente schema: Lo schema usa come misura il numero di accessi registrato nei log raggruppandoli per: 12 • url • browser • sistema operativo • dominio • anno di nascita • sesso Si è pubblicato lo schema su Pentaho BI e lo si è sottomesso a Saiku calcolando, per esempio, il numero di hits per browser raggruppati per sesso: Naturalmente Saiku permette di visualizzare i dati graficamente. Si può quindi verificare che il browser più utilizzato sia per gli uomini che per le donne è Firefox, seguito da Chrome: 13 Si tenga presente che Saiku interroga Hive che a sua volta, per ogni query Saiku, lancia un job Map/Reduce. Infatti, se si consulta la console Hadoop si può verificare come le query Saiku si trasformino in jobs: 14 15 ✗ JBoss Data Virtualization. Per verificare la connessione con JBoss Data Virtualization si sono eseguiti i seguenti passi: 1. Installato JBoss EAP 6.4.0 2. Installato JBoss Data Virtualization 6.2.0 ed aggiunto un utente applicativo per le connessioni JDBC. 3. Configurato il prodotto aggiungendo un data source che lo connette alla nostra installazione Hadoop/Hive 4. Installato il prodotto open source Teiid Designer che è lo strumento JBoss per l'editing di Database Virtuali per JBoss Data Virtualization 16 5. Con Teiid Designer creato un Database Virtuale (chiamato esVDB) che punta ad Hadoop/Hive 6. Configurato il client jdbc SQL Workbench usando il driver jdbc di Jboss Data Virtualization facendolo puntare al database Virtuale creato al punto 4, esVDB connettendosi con l'utente JBoss Data Virtualization definito al punto 1) 17 7. Verificato che è possibile interrogare i log di elasticsearch passando da JBoss Data Virtualization 18 4. Dimensionamento VM in Produzione Dimensionamento ottimale Il numero di nodi Hadoop necessari è stato calcolato con il planner di Hortonworks: http://hortonworks.com/cluster-sizing-guide/ Sistema Operativo CentOS 6 (64 bit) CPU Virtuali 8 RAM 48 Gb Numero di nodi Hadoop 8 Dimensionamento proposto Si propone di riutilizzare tre macchine già utilizzate in ambiente di collaudo SAAS-Plat. Sistema Operativo CentOS 6 (64 bit) CPU Virtuali 2 RAM 1 con 32 Gb le altre con 8 Gb Numero di nodi Hadoop 2 19 Attività previste Siano Nodo1, Nodo2, e Nodo 3 le tre macchine. Macchina Prodotto Attività Nodo1 Bigtop Installazione e configurazione Nodo2 Apache Hadoop Installazione e configurazione come worker di Hadoop installato in Nodo1 Nodo3 JBoss Data Virtualization Installazione e configurazione 20 5. Conclusioni, criticità, altre sperimentazioni L'integrazione tra la piattaforma SAAS-plat con Hadoop/Hive estremamente semplificata attraverso l'utilizzo di ES-Hadoop. Le operazioni di analytics sono straightforward perché basate su SQL. L'architettura proposta è di seguito semplificata: 21 è Criticità: ✗ La produzione di report Saiku ha evidenziato come l'integrazione tra strumenti di Business Intelligence con Hive ed Elasticsearch possa beneficiare di: 1. Un dimensionamento appropriato del cluster Hadoop: Saiku, nel consultare il cubo OLAP esegue numerose query ad Hive e di conseguenza ad Elasticsearch. Le query Hive vengono trasformate, da Hadoop, in job Map/Reduce che ovviamente diventano più efficienti all'aumentare dei nodi Hadoop. 2. La predisposizione, su Hive, di aggregazioni di dati precalcolati e memorizzati il tabelle interne ad Hive. Infatti job ad hoc, per esempio scritti con Pig e schedulati con Oozie, possono aggregare dati, per esempio giornalieri, mensili o settimanali ed conservare l'aggregazione su Hive. In questo modi si riduce il throughput. 3. Il calcolo periodico di tali aggregazioni con HiveQL (il dialetto SQL di Hive) oppure il linguaggio dataflow di Hadoop, Pig (schedulando entrambe le possibilità con Oozie) 4. Le performance del sistema possono essere ulteriormente migliorate sostituendo Hive con Spark SQL e sostituendo hiveserver2 (il demone che espone Hive a connessioni JDBC) con Thrift JDBC/ODBC server (il demone che espone Spark a connessioni JDBC/ODBC) ✗ 22 Hive preferisce nomi colonna privi di caratteri speciali. Workaround: creare viste con nomi colonna senza caratteri speciali. Sperimentazione prodotti non oggetto di implementazione o messa in produzione: ✗ R. Per verificare la connessione con R, si sono installati i packages rJava e RJDBC, ed è stata svolta (in rstudio) la seguente sessione: library(RJDBC) drv <- JDBC(driverClass = "org.apache.hive.jdbc.HiveDriver", classPath = list.files("/home/JDBC",pattern="jar$",full.names=T), identifier.quote="`") conn <- dbConnect(drv, "jdbc:hive2://rt-bigtop-vm01-s1.rt.tix.it:10000/default", "", "") r <- dbGetQuery(conn, "select * from logs limit 10", "10") ottenendo il seguente risultato: 23