Sviluppo della piattaforma dei servizi cloud di base per...

23
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 AlmavivA 18/05/2016 Verifica Silvana Ciampi, Marco Giolo AlmavivA Approvazione Vincenzo Martiello Regione Toscana Versione 1.6 1

Transcript of Sviluppo della piattaforma dei servizi cloud di base per...

Page 1: Sviluppo della piattaforma dei servizi cloud di base per ...oscat.rete.toscana.it/docman/view.php/604/3148/hiveES-1.6.pdf · job ad hoc, per esempio scritti con Pig e schedulati con

Sviluppo della piattaforma dei servizi cloud dibase per il data center TIX

INTEGRAZIONE CON HADOOP, PENTAHO, SAIKU, R EJBOSS DATA VIRTUALIZATION

RedazioneTommaso Anzidei

AlmavivA

18/05/2016

Verifica

Silvana Ciampi,

Marco Giolo

AlmavivA

ApprovazioneVincenzo Martiello

Regione Toscana

Versione 1.6

1

Page 2: Sviluppo della piattaforma dei servizi cloud di base per ...oscat.rete.toscana.it/docman/view.php/604/3148/hiveES-1.6.pdf · job ad hoc, per esempio scritti con Pig e schedulati con

Sommario1. 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

Page 3: Sviluppo della piattaforma dei servizi cloud di base per ...oscat.rete.toscana.it/docman/view.php/604/3148/hiveES-1.6.pdf · job ad hoc, per esempio scritti con Pig e schedulati con

1. Introduzione

Regione Toscana è interessata ad esplorare l'integrazione della piattaformaSAAS-plat con gli strumenti di classe bigdata messi a disposizione da ApacheBigtop ovvero Hadoop, Hive, Sqoop, Tez, Hue e Spark (cfr. documentoProgetto Sperimentazione piattaforma Bigtop/Hadoop versione 1.1dell'11/12/2015), alcuni strumenti di Analytics dell'ecosistema Pentaho (inparticolare Saiku) e JBoss Data Virtualization.

In questo documento mostriamo come l'integrazione sia possibile e cisoffermiamo sulle criticità.

Proponiamo il dimensionamento di un cluster di VM in ambiente di produzione.

3

Page 4: Sviluppo della piattaforma dei servizi cloud di base per ...oscat.rete.toscana.it/docman/view.php/604/3148/hiveES-1.6.pdf · job ad hoc, per esempio scritti con Pig e schedulati con

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 glistrumenti messi a disposizione dalla piattaforma (Kibana, Motix), anche construmenti di analytics diffusi nella comunità Hadoop (Hive, Hue), con glistrumenti di analytics in uso in Regione Toscana (Pentaho, R, Saiku) e conl'ambiente di virtualizzazione di connessioni a data source esterni JBoss DataVirtualization.

Ricordiamo brevemente che:

Hadoop è un framework per lo storage distribuito e l'elaborazione parallela didati

Hive è un framework di datawarehousing basato su Hadoop

Sqoop è uno strumento per il trasferimento dati di tipo bulk tra Haddop edatabase relazionali

Hue è un'interfaccia web per hadoop

Spark è un framework di cluster computing alternativa ad hadoop ma con luicompatibile

BigTop è un progetto Apache per la distribuzione semplificata ed il testing diHadoop, Hive, Sqoop, Hue, Spark ed altri strumenti di classe bigdata

elasticsearch è un database distribuito NoSQL per ricerche ad alteperformance basato su Apache Lucene

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 datiche 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 qualesi dimostra che i dati di elasticsearch possono essere resi disponibili a costozero su Hive, l'infrastruttura datawarehouse costruita su Hadoop. L'integrazionedi Hadoop, Hive ed Elasticsearch consiste nella creazione di tabelle Hiveconnesse ad elasticsearch tramite il prodotto (connettore a due vie) opensource ES-Hadoop. Dette tabelle possono essere interrogate da Pentaho ed R.

Nel prossimo paragrafo dettagliamo operativamente l'integrazione che è stataimplementata, per ora, nell'ambiente di staging di Regione Toscana. 4

Page 5: Sviluppo della piattaforma dei servizi cloud di base per ...oscat.rete.toscana.it/docman/view.php/604/3148/hiveES-1.6.pdf · job ad hoc, per esempio scritti con Pig e schedulati con

3. Installazione del PoC

✗ Installazione dell'ecosistema Hadoop. Sono stati installati, su unadistribuzione CentOS 6.7 i seguenti componenti Bigtop:

✔ Bigtop 1.0: distribuzione Hadoop. L'installazione consiste neiseguenti passi:

1. 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 unbrowser all'indirizzo: http://rt-bigtop-vm01-s1.rt.tix.it:8888

ed autenticandosi con le credenziali comunicate personalmente.

5

Page 6: Sviluppo della piattaforma dei servizi cloud di base per ...oscat.rete.toscana.it/docman/view.php/604/3148/hiveES-1.6.pdf · job ad hoc, per esempio scritti con Pig e schedulati con

✗ Installazione di ES-Hadoop 2.1.2. Si è installato ES-Hadoop 2.1.2 suuna distribuzione CentOS. L'installazione consiste nello scaricare un filezip (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 esternache punta all'indice e al tipo elasticsearch che si vuole rendere disponibilead Hive. In SAAS-plat, per esempio, i log del frontend Apache di sanitàsono conservati nell'indice syslog nel tipo syslog. Il comando Hive è ilseguente:

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 datiesterna, in questo caso elasticsearch) in Hive le cui colonne rappresentano unsottoinsieme delle informazioni registrate dai frontend Apache di interesse(presunto) statistico. Si tratta di un esempio che può essere adattato alle realiesigenze del dipartimento di statistica.

La tabella così definita, syslogs, può creare problemi ad Hive a causa delfatto 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

Page 7: Sviluppo della piattaforma dei servizi cloud di base per ...oscat.rete.toscana.it/docman/view.php/604/3148/hiveES-1.6.pdf · job ad hoc, per esempio scritti con Pig e schedulati con

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 esigenzediverse), ha due particolarità:

1. Utilizza nomi colonna compatibili con Hive eliminando la necessità diutilizzare singoli apici

2. Calcola il dominio richiesto dall'utente (quando presente nella querystring), età e sesso del richiedente (a partire dal suo codice fiscale).

Di nuovo si tratta di una semplice rivisitazione dei dati provenienti daelasticsearch a fini statistici.

✗ Interrogazione della tabella Hive. A questo punto i dati conservati suelasticsearch sono disponibili in Hive. Si veda la seguente sessione Hive:

7

Page 8: Sviluppo della piattaforma dei servizi cloud di base per ...oscat.rete.toscana.it/docman/view.php/604/3148/hiveES-1.6.pdf · job ad hoc, per esempio scritti con Pig e schedulati con

8

Page 9: Sviluppo della piattaforma dei servizi cloud di base per ...oscat.rete.toscana.it/docman/view.php/604/3148/hiveES-1.6.pdf · job ad hoc, per esempio scritti con Pig e schedulati con

✗ Pentaho. Per verificare la connessione con Pentaho si è utilizzatoPentaho Data Integration (spoon) versioni 5.3/6.0:

Si è definita una connessione JDBC:

9

Page 10: Sviluppo della piattaforma dei servizi cloud di base per ...oscat.rete.toscana.it/docman/view.php/604/3148/hiveES-1.6.pdf · job ad hoc, per esempio scritti con Pig e schedulati con

e si è eseguita una query (select * from logs limit 10):

10

Page 11: Sviluppo della piattaforma dei servizi cloud di base per ...oscat.rete.toscana.it/docman/view.php/604/3148/hiveES-1.6.pdf · job ad hoc, per esempio scritti con Pig e schedulati con

✗ Saiku. Per verificare la connessione con Saiku, si sono intallati PentahoBusiness Intelligence Server (versioni 5.3 e 6.0), il relativo plugin Saikue l'ambiente di authoring di cubi OLAP Mondrian Schema Workbenchversione 3.11.

La produzione di report Saiku ha evidenziato come l'integrazione tra strumentidi Business Intelligence con Hive ed Elasticsearch possa beneficiare di:

1. Un dimensionamento appropriato del cluster Hadoop: Saiku, nelconsultare il cubo OLAP esegue numerose query ad Hive e diconseguenza ad Elasticsearch. Le query Hive vengono trasformate, daHadoop, in job Map/Reduce che ovviamente diventano più efficientiall'aumentare dei nodi Hadoop.

2. La predisposizione, su Hive, di aggregazioni di dati precalcolati ememorizzati il tabelle interne ad Hive. Infatti job ad hoc, per esempioscritti con Pig e schedulati con Oozie, possono aggregare dati, peresempio giornalieri, mensili o settimanali ed conservare l'aggregazionesu Hive. In questo modi si riduce il throughput. Per esempio si è creatauna tabelle interna Hive, denominata hits, che aggrega i logs a partireda una certa data:create table hits

(

totalhits int,

url string,

browser string,

osname string,

dominio string,

anno string,

sesso string

) ;

3. Il calcolo periodico di tali aggregazioni con hiveQL (il dialetto SQLdi Hive) oppure il linguaggio dataflow di Hadoop Pig (schedulandoentrambe le possibilità con Oozie). Nell'esempio si è popolata la tabellahits 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

Page 12: Sviluppo della piattaforma dei servizi cloud di base per ...oscat.rete.toscana.it/docman/view.php/604/3148/hiveES-1.6.pdf · job ad hoc, per esempio scritti con Pig e schedulati con

sostituendo Hive con Spark SQL e hiveserver2 (il demone che esponeHive a connessioni JDBC) con Thrift JDBC/ODBC server (il demone cheespone 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 lograggruppandoli per:

• url

• browser

• sistema operativo

• dominio

• anno di nascita

• sesso

12

Page 13: Sviluppo della piattaforma dei servizi cloud di base per ...oscat.rete.toscana.it/docman/view.php/604/3148/hiveES-1.6.pdf · job ad hoc, per esempio scritti con Pig e schedulati con

Si è pubblicato lo schema su Pentaho BI e lo si è sottomesso a Saikucalcolando, 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 ledonne è Firefox, seguito da Chrome:

13

Page 14: Sviluppo della piattaforma dei servizi cloud di base per ...oscat.rete.toscana.it/docman/view.php/604/3148/hiveES-1.6.pdf · job ad hoc, per esempio scritti con Pig e schedulati con

Si tenga presente che Saiku interroga Hive che a sua volta, per ogni querySaiku, lancia un job Map/Reduce.

Infatti, se si consulta la console Hadoop si può verificare come le query Saikusi trasformino in jobs:

14

Page 15: Sviluppo della piattaforma dei servizi cloud di base per ...oscat.rete.toscana.it/docman/view.php/604/3148/hiveES-1.6.pdf · job ad hoc, per esempio scritti con Pig e schedulati con

15

Page 16: Sviluppo della piattaforma dei servizi cloud di base per ...oscat.rete.toscana.it/docman/view.php/604/3148/hiveES-1.6.pdf · job ad hoc, per esempio scritti con Pig e schedulati con

✗ JBoss Data Virtualization. Per verificare la connessione con JBoss DataVirtualization si sono eseguiti i seguenti passi:

1. Installato JBoss EAP 6.4.0

2. Installato JBoss Data Virtualization 6.2.0 ed aggiunto un utenteapplicativo per le connessioni JDBC.

3. Configurato il prodotto aggiungendo un data source che lo connettealla nostra installazione Hadoop/Hive

4. Installato il prodotto open source Teiid Designer che è lo strumentoJBoss per l'editing di Database Virtuali per JBoss Data Virtualization

16

Page 17: Sviluppo della piattaforma dei servizi cloud di base per ...oscat.rete.toscana.it/docman/view.php/604/3148/hiveES-1.6.pdf · job ad hoc, per esempio scritti con Pig e schedulati con

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 diJboss Data Virtualization facendolo puntare al database Virtualecreato al punto 4, esVDB connettendosi con l'utente JBoss DataVirtualization definito al punto 1)

17

Page 18: Sviluppo della piattaforma dei servizi cloud di base per ...oscat.rete.toscana.it/docman/view.php/604/3148/hiveES-1.6.pdf · job ad hoc, per esempio scritti con Pig e schedulati con

7. Verificato che è possibile interrogare i log di elasticsearch passandoda JBoss Data Virtualization

18

Page 19: Sviluppo della piattaforma dei servizi cloud di base per ...oscat.rete.toscana.it/docman/view.php/604/3148/hiveES-1.6.pdf · job ad hoc, per esempio scritti con Pig e schedulati con

4. Dimensionamento VM in Produzione

Dimensionamento ottimale

Il numero di nodi Hadoop necessari è stato calcolato con il planner diHortonworks:

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 collaudoSAAS-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

Page 20: Sviluppo della piattaforma dei servizi cloud di base per ...oscat.rete.toscana.it/docman/view.php/604/3148/hiveES-1.6.pdf · job ad hoc, per esempio scritti con Pig e schedulati con

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 comeworker di Hadoop installato in Nodo1

Nodo3 JBoss Data Virtualization Installazione e configurazione

20

Page 21: Sviluppo della piattaforma dei servizi cloud di base per ...oscat.rete.toscana.it/docman/view.php/604/3148/hiveES-1.6.pdf · job ad hoc, per esempio scritti con Pig e schedulati con

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

Page 22: Sviluppo della piattaforma dei servizi cloud di base per ...oscat.rete.toscana.it/docman/view.php/604/3148/hiveES-1.6.pdf · job ad hoc, per esempio scritti con Pig e schedulati con

Criticità:

✗ La produzione di report Saiku ha evidenziato come l'integrazionetra strumenti di Business Intelligence con Hive ed Elasticsearchpossa beneficiare di:

1. Un dimensionamento appropriato del cluster Hadoop: Saiku,nel consultare il cubo OLAP esegue numerose query ad Hive edi conseguenza ad Elasticsearch. Le query Hive vengonotrasformate, da Hadoop, in job Map/Reduce che ovviamentediventano più efficienti all'aumentare dei nodi Hadoop.

2. La predisposizione, su Hive, di aggregazioni di datiprecalcolati e memorizzati il tabelle interne ad Hive. Infattijob ad hoc, per esempio scritti con Pig e schedulati con Oozie,possono aggregare dati, per esempio giornalieri, mensili osettimanali ed conservare l'aggregazione su Hive. In questomodi si riduce il throughput.

3. Il calcolo periodico di tali aggregazioni con HiveQL (il dialettoSQL di Hive) oppure il linguaggio dataflow di Hadoop, Pig(schedulando entrambe le possibilità con Oozie)

4. Le performance del sistema possono essere ulteriormentemigliorate sostituendo Hive con Spark SQL e sostituendohiveserver2 (il demone che espone Hive a connessioni JDBC)con Thrift JDBC/ODBC server (il demone che espone Spark aconnessioni JDBC/ODBC)

✗ Hive preferisce nomi colonna privi di caratteri speciali. Workaround:creare viste con nomi colonna senza caratteri speciali.

22

Page 23: Sviluppo della piattaforma dei servizi cloud di base per ...oscat.rete.toscana.it/docman/view.php/604/3148/hiveES-1.6.pdf · job ad hoc, per esempio scritti con Pig e schedulati con

Sperimentazione prodotti non oggetto di implementazione omessa in produzione:

✗ R. Per verificare la connessione con R, si sono installati i packages rJavae 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