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