Documente Academic
Documente Profesional
Documente Cultură
Minicursos
Minicurso
1
Bancos de Dados NoSQL: Conceitos, Ferramentas, Linguagens e Estudos de Casos no Contexto
de Big Data
Marcos Rodrigues Vieira1, Josiel Maimone de Figueiredo2 , Gustavo Liberatti2 ,
Alvaro Fellipe Mendes Viebrantz2
1 IBM
2 Instituto
de Computao
Universidade Federal de Mato Grosso (UFMT)
josiel@ic.ufmt.br, {liberatti.gustavo, alvarowolfx}@gmail.com
Abstract
This lecture presents the data models, tools and languages concepts related to NoSQL
databases, with a big emphasis on the Big Data domain. The main goal of this lecture
is to provide an introductory, comparative and practical view of the definitions and the
main tools and languages for NoSQL products currently available in the market. Since
the definitions and tools for NoSQL are evolving rapidly in the past years, here we give
a special focus on the most used and well-known NoSQL technologies for manipulating
very large volumes of data. As a practical example, we present two use cases of NoSQL
applications in different domains: (1) a use case involving sensor datasets from micrometeorological towers; and (2) a use case of NoSQL technologies applied to a large
volume of textual dataset representing patent documents. We also discuss the impacts
and consequences of the adoption of NoSQL products by the industry, IT staff, and the
scientific database community.
Resumo
Este minicurso apresenta os conceitos relacionados a modelagem, ferramentas e linguagens de manipulao de banco de dados NoSQL, com principal enfoque para Big
Data. Este minicurso tem como objetivo principal dar um viso introdutria, comparativa e prtica dos conceitos e das principais ferramentas e linguagens NoSQL disponveis no mercado para diferentes domnios de problemas e aplicaes. Como o conceito
e ferramentas de NoSQL esto em rpida evoluo nos ltimos anos, o enfoque principal voltado para as tecnologias mais adotadas e difundidas de manipulao de grande
volume de dados utilizando ferramentas NoSQL. Como exemplo pratico, apresentado
dois estudos de casos de uso NoSQL em diferentes domnios de aplicaes: (1) estudo
de caso envolvendo dados de sensores presentes em torres micrometeorolgicas; e (2) a
utilizao de tecnologias NoSQL aplicadas para dados textuais em grande bases de patentes. Por fim, so apresentados os impactos da adoo desses produtos na indstria,
aos usurios de TI, e tambm a comunidade cientfica de banco de dados.
1.1. Introduo
Um dos grandes desafios atualmente na rea de Computao a manipulao e processamento de grande quantidade de dados no contexto de Big Data. O conceito Big Data
pode ser resumidamente definido como uma coleo de bases de dados to complexa
e volumosa que se torna muito difcil (ou impossvel) e complexa fazer algumas operaes simples (e.g., remoo, ordenao, sumarizao) de forma eficiente utilizando
Sistemas Gerenciadores de Bases de Dados (SGBD) tradicionais. Por causa desse problema, e outros demais, um novo conjunto de plataformas de ferramentas voltadas para
Big Data tem sido propostas, como por exemplo Apache Hadoop [3].
A quantidade de dados gerada diariamente em vrios domnios de aplicao
como, por exemplo, da Web, rede sociais, redes de sensores, dados de sensoriamento,
entre diversos outros, esto na ordem de algumas dezenas, ou centenas, de Terabytes.
Essa imensa quantidade de dados gerados traz novos grandes desafios na forma de manipulao, armazenamento e processamento de consultas em vrias reas de computao,
e em especial na rea de bases de dados, minerao de dados e recuperao de informao. Nesse contexto, os SGBD tradicionais no so os mais adequados, ou completos,
s necessidades do domnio do problema de Big Data, como por exemplo: execuo de
consultas com baixa latncia, tratamento de grandes volumes de dados, escalabilidade
elstica horizontal, suporte a modelos flexveis de armazenamento de dados, e suporte
simples a replicao e distribuio dos dados.
Uma das tendncias para solucionar os diversos problemas e desafios gerados
pelo contexto Big Data o movimento denominado NoSQL (Not only SQL). NoSQL
promove diversas solues inovadoras de armazenamento e processamento de grande
volume de dados. Estas solues foram inicialmente criadas para solucionar problemas
gerados por aplicaes, por exemplo, Web 2.0 que na sua maioria necessitam operar
com grande volume de dados, tenham uma arquitetura que escale com grande facilidade de forma horizontal, permitam fornecer mecanismos de insero de novos dados de
forma incremental e eficiente, alm da necessidade de persistncia dos dados em aplicaes nas nuvens (cloud computing). Essas diversas solues vm sendo utilizadas com
muita frequncia em inmeras empresas, como por exemplo, IBM, Twitter, Facebook,
Google e Yahoo! para o processamento analtico de dados de logs Web, transaes
convencionais, entre inmeras outras tarefas.
Atualmente, existe uma grande adoo e difuso de tecnologias NoSQL nos
mais diversos domnios de aplicao no contexto de Big Data. Esses domnios envolvem, em sua maioria, os quais os SBGD tradicionais ainda so fortemente dominantes
como, por exemplo, instituies financeiras, agncias governamentais, e comercio de
produtos de varejo. Isto pode ser explicado pelo fato que existe uma demanda muito
grande para solues que tenham alta flexibilidade, escalabilidade, performance, e suporte a diferentes modelos de dados complexos.
Podemos basicamente resumir as caractersticas de Big Data em quatro propriedades: (1) dados na ordem de dezenas ou centenas de Terabytes; (2) poder de crescimento elstico horizontal; (3) fcil distribuio dos dados e/ou processamento; e (4)
tipos de dados variados, complexos e/ou semiestruturados. A caracterstica de manipulao de dados na ordem (ou maior) de Terabytes envolve, entre outros aspectos, o requisito de alto poder computacional de processamento, manipulao e armazenamento
de dados. O poder de crescimento elstico esta relacionado ao fato de que a quantidade
de dados pode variar de alguns Megabytes a vrias centenas de Terabytes (e vice-versa)
em um espao de tempo relativamente curto, fazendo com que a estrutura de hardware/software demandada tenha que se adaptar, i.e. seja alocada/desalocada sob demanda
da aplicao. A distribuio significa que os dados devem ser distribudos de forma
transparente em vrios ns de processamento, o que demanda armazenamento e processamento distribudo. E a quarta caracterstica esta relacionada a adoo de modelos
mais apropriados, flexveis e eficientes para o armazenamento de tipos de dados complexos, variados e semiestruturados. Vale ressaltar que o modelo relacional tradicional
no o mais adequado para tais propriedades acima citadas pois no possui suficiente
flexibilidade para o armazenamento de dados e na evoluo do modelo de dados.
Em relao a SGBD tradicionais, a distribuio dos dados de forma elstica inviabilizado pois o modelo de garantia de consistncia fortemente baseado no controle
transacional ACID (Atomicity, Consistency, Isolation e Durability). Esse tipo de controle transacional praticamente invivel quando os dados e o processamento so distribudos em vrios ns. O teorema CAP (Consistency, Availability e Partition tolerance)
mostra que somente duas dessas 3 propriedades podem ser garantidas simultaneamente
no mercado, como por exemplo: Column Store (e.g., Hadoop, Casandra, Amazon
SimpleDB, Hypertable), Document Store (e.g., Apache CouchDB, MongoDB),
Key-Value/Tuple Store (e.g., Voldemort, Redis, MemcacheDB), Graph Databases
(e.g, Neo4J, HyperGraphDB). Assim, sero abordadas implementaes existentes para os problemas de distribuio, transaes, minerao e a infraestrutura
computacional de nuvem;
3. Estudo de caso 1 (durao 60 minutos): este mdulo apresenta um estudo de
caso de soluo NoSQL no contexto de Big Data de dados textuais a partir de uma
aplicao de bases de patentes. Este mdulo descreve as solues escolhidas, suas
vantagens/desvantagens, e suas implementaes;
4. Estudo de caso 2 (durao 60 minutos): este mdulo descreve o uso de streams
de dados originados de sensores em torres micrometeorolgicas. Este mdulo
descreve a forma de manipular essas informaes dentro da soluo de produtos
NoSQL;
5. Desafios, direes futuras, problemas em aberto (durao 30 minutos): este
mdulo apresenta os desafios de adoo desses novos produtos por ambientes tradicionais de desenvolvimento de sistemas baseados na tecnologia relacional.
tambm levantado o problema de adaptao do ambiente tradicional, no qual diversas padronizaes j consolidadas (e.g., padres de projetos, bibliotecas, drivers de conexo, mapeamento objeto-relacional) precisam ser adaptadas para obteno das informaes originrias dos produtos NoSQL. Ser abordado tambm
o impacto desses novos produtos nos atores envolvidos, ou seja, programadores e
administradores (DBA).
dos e armazenados para posterior anlise: difuso dos dispositivos captao de dados,
dispositivo com armazenamento na ordem de Terabytes e aumento de velocidade de
transmisso nas redes. Os dispositivos de aquisio, bem como os dispositivos de armazenamento de grande escala se difundiram principalmente pelo seu barateamento
(e.g., redes de sensores, GPS, smartphones), enquanto que as redes aumentaram sua
velocidade e abrangncia geogrfica. Outro fator importante a facilidade de gerao e aquisio de dados gerados digitalmente, como mquinas fotogrficas digitais,
smartphones, GPS, etc. Como consequncia novas demandas esto surgindo, como a
demanda por anlise de grande volume de dados em tempo real (data analytics), o aumento do detalhamento das informaes, bem como plataformas escalveis e eficientes
de baixo custo [10].
Basicamente, podemos resumir as caractersticas do contexto Big Data em quatro propriedades: (1) dados na ordem de dezenas ou centenas de Terabytes (podendo
chegar a ordem de Petabytes), (2) poder de crescimento elstico, (3) distribuio do
processamento dos dados; e (4) tipos de dados variados, complexos e/ou semiestruturados. A caracterstica de anlise dos dados na ordem de Terabytes envolve, entre outros
aspectos, o requisito de alto poder computacional de armazenamento e processamento
dos dados. A elasticidade esta relacionada ao fato de que a quantidade de dados pode
variar de alguns Megabytes a vrios Terabytes (e vice-versa) em um espao de tempo
relativamente curto, fazendo com que a estrutura de software/hardware adapta-se sob
demanda, i.e. seja alocada/desalocada dinamicamente. A distribuio significa que os
dados devem ser distribudos de forma transparente em vrios ns espalhados de processamento, o que demanda armazenamento, processamento e controle de falhas distribudo. Finalmente, a quarta caracterstica esta relacionada a adoo de modelos mais
apropriados, flexveis e eficientes para o armazenamento de tipos de dados variados e
semiestruturados. Vale ressaltar que o modelo relacional no o mais adequado pois
no possui flexibilidade para o armazenamento de dados e evoluo no modelo para tais
tipos de dados citados acima.
A anlise de dados (data analytics) no contexto de Big Data normalmente envolve processamento da ordem de Terabytes em dados de baixo valor (i.e., informao
original bruta) que so transformados para dados de maior valor (e.g., valores agregados/sumarizados). Mesmo com a grande quantidade de dados Big Data em si no
garante a qualidade da informao, pois a anlise continua, em grande parte, sendo
muito subjetiva. Isso se deve ao fato que os dados em si no so autoexplicativos, onde
o processo de limpeza, amostragem, e relacionamento dos dados continua sendo crtico
e passvel a erros, aproximaes e incertezas [14]. Por exemplo, a anlise de dados da
ordem de Petabytes (ou Exabytes) de cunho cientficos (e.g., dados genmicos, fsica
ambiental e simulaes numricas) tem se tornado muito comum hoje em dia, onde
aceitvel que o resultado da anlise contenham impreciso (i.e., erro entre certos limites
de erros), porm seja computado de forma (relativamente) rpida e/ou em tempo real.
Recentemente, ambientes de computao em nuvem (cloud computing) tm sido
utilizados para o gerenciamento de dados em forma de Big Data, enfocando principalmente em duas tecnologias: Bases de Dados Como Servio (Database as a Service
(DaaS)) e Infraestrutura Como Servio (Infrastructure as a service (IaaS)) (para maiores detalhes, vide [21, 1]). DaaS utiliza um conjunto de ferramentas que permite o
gerenciamento remoto dos servidores de dados mantidos por uma infraestrutura externa
sob demanda. Essa infraestrutura IaaS fornece elasticidade, pagamento sob demanda,
backup automticos, e rapidez de implantao e entrega.
As principais caractersticas que envolvem os ambientes em nuvem so: escalabilidade, elasticidade, tolerncia a falhas, auto gerenciamento e a possibilidade de funcionar em hardware commodity (comum). Por outro lado, a maioria dos primeiros SGBD
relacionais comerciais foram desenvolvidos e concebidos para execuo em ambientes
corporativos. Em um ambiente de computao em nuvem traz inmeros desafios do
ponto de vista computacional. Por exemplo, o controle de transao na forma tradicional (i.e., definida pelas propriedades ACID) em um ambiente de nuvem extremamente
complexo.
De uma maneira geral, os ambientes em nuvem precisam ter a capacidade de
suportar alta carga de atualizaes e processos de anlises de dados. Os data centers
so uma das bases da computao em nuvem, pois uma grande estrutura como servio
escalvel e dinmica fornecida para vrios clientes. Um ambiente de gerenciamento
de dados escalvel (scalable data management) pode ser dividido em: (1) uma aplicao
complexa com um SGBD gerenciando uma grande quantidade de dados (single tenant);
e (2) uma aplicao no qual o ambiente deve suportar um grande nmero de aplicaes
com dados possivelmente no muito volumosos [2]. A influncia direta dessas duas
caractersticas que o SGBD deve fornecer um mesmo esquema genrico para inmeros
clientes com diferentes aplicaes, termo denominado bases de dados multitenant.
importante lembrar que em ambientes multitenant a soma dos tenant pode
gerar um grande volume de dados armazenado no SGBD. Este caracterstica apropriadamente gerenciada pelo ambiente em nuvem, onde novas instncias de SGBD so
criadas em novos ns e/ou servidores do ambiente (os dados de diferentes tenant so
independentes entre si).
Em ambientes tradicionais, quando uma aplicao cresce sua complexidade o
SGBD atende s requisies e a escalabilidade do sistema no modo que aumenta o seu
poder computacional. Por exemplo, o poder computacional do sistema como um todo
cresce a medida que mais memria e/ou nmero de ns do cluster so adicionados ao
servidor. No entanto, esta abordagem so caras, dependentes de arquitetura, e normalmente no presentes em SGBD livres (open sources).
1.2.2. Consistncia
Consistncia pode ser definido como um contrato entre um processo e um dados armazenado (distribudos), no qual o dados armazenado especifica precisamente qual
o resultado de operaes de escrita e leitura na presena de concorrncia. O modelo
de consistncia pode ser definido em dois casos: centrado nos dados e centrado no cliente [6]. Modelo de consistncia centrado nos dados refere-se ao estado interno do
sistema de armazenamento, ou seja, a consistncia alcanada no momento em que
todas as cpias de um mesmo dado se tornam iguais. J o modelo de consistncia centrado no cliente fornece garantias apenas para um cliente (em especfico) em relao a
consistncia de acesso aos dados do cliente em questo. Neste ltimo caso, quando o
cliente verifica o quanto eventual a consistncia (o que mede o tamanho da janela de
inconsistncia), duas perspectivas podem existir: a do ambiente servidor, e a do cliente.
Para o servidor pode aplicar o gerenciamento centrado nos dados, enquanto que para o
cliente no faz diferena o que est ocorrendo no servidor [32], pois o cliente possui
controles prprios para identificar dados caducos.
O interesse e uso do teorema CAP (Consistency, Availability e Partition tolerance), tambm conhecido como Brewers theorem [7], pelos SGBD tm atingido novas demandas em aplicaes que requerem vrios ns de processamento. O teorema
CAP, resumidamente, afirma que existem trs propriedades que so teis em SGBD: C:
consistncia, cujo objetivo permitir que transaes distribudas em vrios ns agem
com a semntica de tudo-ou-nada, bem como (quando existirem) das rplicas estarem sempre em um estado consistente; A: disponibilidade, tem como objetivo manter
o sistema sempre disponvel, e em caso de falha o sistema deve continuar funcionando
com alguma rplica dos recursos indisponveis; P: tolerncia a parties, cujo objetivo
manter o sistema operando mesmo no caso de falhas de rede, para isso dividido o
processamento dos ns em grupos que no se comunicam (os subgrupos continuam o
processamento independentemente) [29]. O teorema CAP afirma que no possvel
alcanar todos os trs objetivos simultaneamente quando erros existem, porm uma das
propriedades tem que ser desprezada.
Existem duas direes na escolha de A ou C: (1) a primeira necessita de forte
consistncia como propriedade para tentar maximizar a disponibilidade [18]. A vantagem de existir uma poltica forte de consistncia que as aplicaes podem ser desenvolvidas com mais simplicidade. Por outro lado, controles complexos devem ser
implementados nas aplicaes caso no exista o controle de consistncia; (2) a segunda
direo prioriza disponibilidade e tenta maximizar a consistncia, sendo que um dos
argumentos que o ambiente indisponvel traz perdas financeiras para o usurio do servio. Portanto o servio estar sempre com os dados disponveis, mesmo que em alguns
momentos no esteja com os dados consistentes. Em aplicaes Web que utilizam a
escalabilidade horizontal necessrio decidir entre A ou C, enquanto que os SGBD
10
11
Nos ltimos anos, o paradigma chamado MapReduce [13] tem ganhado grande
ateno e muitos adeptos tanto na indstria quanto na rea acadmica. Este paradigma
foi inicialmente proposto para simplificar o processamento de grande volume de dados
em arquiteturas paralelas e distribudas (e.g., clusters). O enfoque principal do MapReduce tornar transparente os detalhes da distribuio dos dados e balanceamento de
carga, permitindo que o programador enfoque somente nos aspectos de tratamento dos
dados [24]. MapReduce voltado para uso em clusters de computadores commodities,
onde os dados so distribudos e armazenados utilizando como pares < key, value >
(vrios valores podem ser armazenados para a mesma chave). Ambas as funes Map
e Reduce so definidas com relao aos dados estruturados em pares < key, value >.
Como consequncia desta arquitetura, o paradigma MapReduce fornece uma abordagem altamente escalvel voltado para o processamento intensivo de grande volume de
dados (i.e., o alto desempenho da arquitetura conseguida atravs da alocao dos dados e computao em um mesmo n).
Provavelmente uma das maiores vantagens deste paradigma a sua simplicidade, onde a manipulao dos dados feita pelo uso de duas funes bsicas: Map
(funo de mapeamento) e Reduce (funo de reduo). Ambas funes so codificadas pelo programador na linguagem do ambiente, que normalmente uma linguagem
procedural. Porm, alguns produtos possibilitam o uso de linguagens declarativas com
SQL (e.g, Hive [4, 31]), que so depois transformadas em funes Map e Reduce.
Resumidamente, a funo Map tem como entrada um par de dados, com o tipo
in one domnio de dados, e retorna uma lista de pares em um domnio diferente. Isto ,
a funo Map(k1 , v1 ) list(k2, v2 ). A funo Map aplicada em paralela para cada par
do conjunto de dados de entrada, gerando uma lista de pares para cada chamada). Em
uma segunda etapa, o processo MapReduce coleta e agrupa todos os pares com a mesma
key das listas, criando um grupo para cada diferente key gerada. Este conjunto de pares
construdo utilizando uma funo de mapeamento (hash) utilizando os valores key dos
12
pares, que ento so distribudo em diversos ns para serem utilizado na fase Reduce.
A funo Reduce ento aplicada a cada grupo em paralelo, onde produzido
uma coleo de valores em um mesmo domnio: Reduce(k2 , list(v2)) list(v3). O
conjunto de pares < key, value > de cada conjunto intermedirio so processados por
jobs independentes. Este processamento na fase Reduce gera, para cada n, resultados
intermedirios ordenados por key, e que so direcionados para um arquivo no sistema
de arquivos. Esse conjunto de arquivos deve ser ento processados (i.e., agregados
em um nico resultado) para gerar o resultado final. A Figura 1.1 ilustra o paradigma
MapReduce para contar palavras em um arquivo grande de texto.
13
14
1.3. Ferramentas
Os produtos NoSQL possuem vrias caractersticas comuns entre si (vide Seo 1.2),
porm se diferenciam quanto ao modelo de dados utilizados (i.e., os produtos so classificados pela representao dos dados). Atualmente, os principais produtos NoSQL
disponveis1, so organizados segundo seu modelo de dados a seguir:
Baseado em Coluna (Column Stores): Hbase, Cassandra, Hypertable, Accumulo, Amazon SimpleDB, Cloudata, Cloudera, SciDB, HPCC, Stratosphere;
Baseado em Documentos (Document Stores): MongoDB, CouchDB, BigCouch,
RavenDB, Clusterpoint Server, ThruDB, TerraStore, RaptorDB, JasDB, SisoDB,
SDB, SchemaFreeDB, djondb;
Baseado em Grafos (Graph-Based Stores): Neo4J, Infinite Graph, Sones, InfoGrid, HyperGraphDB, DEX, Trinity, AllegroGraph, BrightStarDB, BigData,
Meronymy, OpenLink Virtuoso, VertexDB, FlockDB;
Baseado em Chave-Valor (Key-Value Stores): Dynamo, Azure Table Storage,
Couchbase Server, Riak, Redis, LevelDB, Chordless, GenieDB, Scalaris, Tokyo
Cabinet/Tyrant, GT.M, Scalien, Berkeley DB, Voldemort, Dynomite, KAI, MemcacheDB, Faircom C-Tree, HamsterDB, STSdb, Tarantool/Box, Maxtable, Pin1 listagem
obtida em www.nosql-database.org
15
caster, RaptorDB, TIBCO Active Spaces, allegro-C, nessDB, HyperDex, Mnesia,LightCloud, Hibari, BangDB.
Dentre esses vrios produtos NoSQL, a seguir detalhamos os principais.
1.3.1. Apache Hadoop e IBM BigInsights
O projeto Apache Hadoop [3] atualmente a referncia do paradigma MapReduce. Este
projeto envolve um conjunto de ferramentas voltadas para o processamento de dados de
forma escalvel, confivel e distribuda. O conjunto de projetos relacionados ao Hadoop
so ilustrados na Figura 1.2.
16
mento do tipo (Job) MapReduce envolve o particionamento dos dados em partes independentes. Estas partes so processadas por uma funo de mapeamento de forma
totalmente paralela em cada n do cluster de computadores. Este framework ordena as
sadas das funes de mapeamento e que servem de entrada para as funes de reduo.
Na maioria dos casos, as entradas e sadas desses processo so armazenadas no sistema
de arquivos HDFS. O Apache Hadoop tambm pode organizar a ordem de execuo dos
processos, e monitoramento e re-execuo em caso de falhas nas tarefas.
1.3.1.2. Hadoop Distributed File System (HDFS)
HDFS um sistema de arquivos distribudos voltado para o processamento de volume
de dados na ordem de Terabytes (ou Petabytes). Este sistema tambm suporta controle
de falhas e acesso paralelo, sendo que os arquivos so automaticamente armazenados de
forma redundante e transparente em vrios ns. Para que qualquer dado seja processado
por um dos produtos Hadoop, preciso que os dados esteja armazenados no sistema de
arquivos visualizado pelo ambiente. Isto , apesar do HDFS ser o mais usual, tambm
possvel utilizar outros sistemas de arquvos, como o NFS. Os controles do HDFS fazem
com que em cada n os dados sejam armazenados em blocos contnuos, o que facilita
muito o acesso aos dados de forma sequencial. Outra importante caracterstica o no
cacheamento dos arquivos, dado que estes podem chegar a tamanhos extremamente
grandes.
1.3.1.3. Apache Hive
O sistema Apache Hive [4] incorpora ao framework Hadoop funcionalidades de data
warehouse, i.e., o Hive facilita operaes de sumarizao e consultas ad-hoc voltadas
para anlise de grandes volumes de dados. O desenvolvedor pode definir consultas
utilizando funes Map/Reduce ou utilizar a linguagem Hive QL. Esta linguaguem
baseada em SQL e encapsula o processamento MapReduce. A organizao dos dados
pelo Hive feita pelas seguintes estruturas:
Databases: usado como namespace para resolver conflitos de nomes;
Table: dados dentro de um mesmo esquema;
Partition: especifica a diviso dos dados de uma Table para o armazenamento;
Bucket: forma de organizao de um Partition, i.e., um grupo de Bucket forma
uma partio.
17
18
19
20
e faz a chamada das outras duas classes; (2) gerar um arquivo .jar, que empacota todo
o cdigo construdo, e implant-lo no ambiente Hadoop.
Devemos escrever duas classes que estendam respectivamente das seguintes
classes: Mapper e Reducer. Essas classes so genricas e devem ser parametrizadas
com os tipos de entradas e sadas das funes de Map e Reduce, sendo que esses parmetros devem implementar a interface Writable (o Hadoop j fornece alguns tipos
bsicos que seguem essa interface).
1 p u b l i c s t a t i c c l a s s Map e x t e n d s Mapper < L o n g W r i t a b l e , Tex t , Tex t , I n t W r i t a b l e > {
2
p r i v a t e T e x t word = new T e x t ( ) ;
3
p r i v a t e f i n a l s t a t i c I n t W r i t a b l e one = new I n t W r i t a b l e ( 1 ) ;
4
5
p u b l i c v o i d map ( L o n g W r i t a b l e key , T e x t v a l u e , C o n t e x t c o n t e x t )
6
throws java . io . IOException , I n t e r r u p t e d E x c e p t i o n , IOException {
7
S t r i n g xm lS tr ing = htmlTagClean ( value . t o S t r i n g ( ) ) ;
8
i f ( xmlString . trim ( ) . l en g t h ( ) > 0) {
9
try {
10
S A X Bu i l d er s a x = new S A X Bu i l d er ( ) ;
11
Document doc = s a x . b u i l d ( new S t r i n g R e a d e r ( x m l S t r i n g ) ) ;
12
El em en t r o o t = doc . g e t R o o t E l e m e n t ( ) ;
13
String ab s t ra ct T e xt = root . getChild (" a b s t r a c t " ) . getText ( ) ;
14
S t r i n g T o k e n i z e r t o k e n i z e r = new S t r i n g T o k e n i z e r ( a b s t r a c t T e x t ) ;
15
w h i l e ( t o k e n i z e r . h asMo r eTo k en s ( ) ) {
16
word . s e t ( t o k e n i z e r . n e x t T o k e n ( ) ) ;
17
c o n t e x t . w r i t e ( word , one ) ; }
18
} c a t c h ( JDOMException e ) {
19
e . printStackTrace ( ) ; }
20
c o n t e x t . w r i t e ( word , one ) ; } } }
Figura 1.3: Classe Map para contagem de palavras contidas no resumo das patentes.
A classe Map, ilustrada na Figura 1.3, estendeu de Mapper com os parmetros
que indicam a entrada e a sada da funo Map, que no caso a entrada vai ser uma
entidade XML e vamos ter como sada uma chave com a palavra e o numero 1 para
cada palavra que depois vai ser somada na funo de Reduce. No contexto usado, foi
necessrio extrair as marcaes html contidas no resumo da patente e separar todas as
palavras no texto para serem contadas.
1 p u b l i c s t a t i c c l a s s Reduce e x t e n d s Red u cer <Tex t , I n t W r i t a b l e , Tex t , I n t W r i t a b l e > {
2
p u b l i c v o i d r e d u c e ( T e x t key , I t e r a b l e < I n t W r i t a b l e > v a l u e s ,
3
Context c o n t e x t ) throws IOException , I n t e r r u p t e d E x c e p t i o n {
4
i n t sum = 0 ;
5
f o r ( I n t W r i t a b l e v a l : v a l u e s ) { sum += v a l . g e t ( ) ; }
6
c o n t e x t . w r i t e ( key , new I n t W r i t a b l e ( sum ) ) ;
} }
Figura 1.4: Classe Reduce para contagem de palavras contidas no resumo das patentes.
A classe Reduce, que estende de Reducer, parametrizaas sadas da funo Map
(i.e., uma palavra seguida de um nmero) e os tipos da sada do mtodo Reduce que
sero os mesmo tipos, mas vo representar a contagem total das palavras. A funo
bem simples, como j foi visto, teremos uma lista de nmeros que foram emitidos
na funo de map para cada palavra, ento nosso trabalho aqui apenas agregar esses
valores, neste caso apenas fazer a soma dos valores.
21
Outra questo importante que os dados originais precisam ser ajustados, pois
o Hadoop por padro particiona os arquivos a serem processados por linha do arquivo.
Esse comportamento obviamente no funciona com arquivos XML pois precisamos que
cada funo Map receba uma entidade XML para que ela consiga extrair informaes
de cada patente. Para tal vamos utilizar um classe que estende InputFormat, ou seja,
ela determina qual o formato de entrada dos dados e como ele deve ser particionado.
O projeto Apache Mahout j desenvolveu uma classe XMLInputFormat 3 que faz exatamente o que desejamos, sendo necessria apenas que seja informado quais so as strings
de inicio e fim da entidade XML.
Para finalizar, vamos construir a parte final do Job, que determina todas as configuraes iniciais, as delimitaes do XML, as entradas e sadas do Job. Os caminhos
das entradas e sadas vo ser passados como parmetro na execuo do Job.Segue o
exemplo de tal configurao.
1 p u b l i c s t a t i c c l a s s G o o g l e P a t e n t Wo r d C o u n t{
2
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) t h r o w s E x c e p t i o n {
3
C o n f i g u r a t i o n c o n f = new C o n f i g u r a t i o n ( ) ;
4
5
c o n f . s e t ( " x m l i n p u t . s t a r t " , " < usp a t e n t a p p l i c a t i o n " ) ;
6
c o n f . s e t ( " x m l i n p u t . end " , " </ usp a t e n t a p p l i c a t i o n > " ) ;
7
8
Jo b j o b = new Jo b ( co n f , " G o o g l e P a t e n t Word Co u n t " ) ;
9
10
job . setOutputKeyClass ( Text . c l a s s ) ;
11
job . setOutputValueClass ( IntWritable . c l a s s ) ;
12
13
j o b . s e t J a r B y C l a s s ( GooglePatentWordCount . c l a s s ) ;
14
j o b . s e t M a p p e r C l a s s ( Map . c l a s s ) ;
15
j o b . s e t R e d u c e r C l a s s ( Reduce . c l a s s ) ;
16
17
j o b . s e t I n p u t F o r m a t C l a s s ( X m l I n p u t F o r m at . c l a s s ) ;
18
job . setOutputF or m atClass ( TextOutputFormat . c l a s s ) ;
19
20
F i l e I n p u t F o r m a t . s e t I n p u t P a t h s ( j o b , new P a t h ( a r g s [ 1 ] ) ) ;
21
F i l e O u t p u t F o r m a t . s e t O u t p u t P a t h ( j o b , new P a t h ( a r g s [ 2 ] ) ) ;
22
23
job . waitForCompletion( t r u e ) ; } }
9e1265d/examples/src/main/java/org/apache/mahout/classifier/bayes/XmlInputFormat.java
22
1 <assembly
2
x m l n s =" h t t p : / / maven . a p a c h e . o r g / p l u g i n s / mavenassem b l y p l u g i n / a s s e m b l y / 1 . 1 . 0 "
3
x m l n s : x s i =" h t t p : / / www . w3 . o r g / 2 0 0 1 / XMLSchemai n s t a n c e "
4
x s i : s c h e m a L o c a t i o n =" h t t p : / / maven . a p a c h e . o r g / p l u g i n s / mavena s s e m b l y p l u g i n / a s s e m b l y / 1 . 1 . 0
5
h t t p : / / maven . a p a c h e . o r g / x sd / assem b l y 1 . 1 . 0 . x sd " >
6
<id >job </ id >
7
<formats >
8
<format > jar </ format >
9
</ f o r m a t s >
10
< includeBaseDire ct ory > f a l se </ includeBaseDire ct ory >
11
<dependencySets >
12
<dependencySet >
13
<unpack > f a l s e < / unpack >
14
< sco p e > r u n t i m e < / sco p e >
15
< o u t p u t D i r e c t o ry > lib </ o u t p u t D i r e c t o ry >
16
<excludes >
17
< e x c l u d e >$ { a r t i f a c t . g r o u p I d } : $ { a r t i f a c t . a r t i f a c t I d } </ e x c l u d e >
18
</ e x c l u d e s >
19
</ d e p e n d e n c y S e t >
20
<dependencySet >
21
<unpack > f a l s e < / unpack >
22
< sco p e > sy st em < / sco p e >
23
< o u t p u t D i r e c t o ry > lib </ o u t p u t D i r e c t o ry >
24
<excludes >
25
< e x c l u d e >$ { a r t i f a c t . g r o u p I d } : $ { a r t i f a c t . a r t i f a c t I d } </ e x c l u d e >
26
</ e x c l u d e s >
27
</ d e p e n d e n c y S e t >
28
</ d e p e n d e n c y S e t s >
29
<fileSets >
30
<fileSet >
31
< d i r e c t o r y >\ ${ b a s e d i r } / t a r g e t / c l a s s e s </ d i r e c t o r y >
32
< o u t p u t D i r e c t o ry >/ </ o u t p u t D i r e c t o ry >
33
<excludes >
34
< e x c l u d e >. j a r < / e x c l u d e >
35
</ e x c l u d e s >
36
</ f i l e S e t >
37
</ f i l e S e t s >
38 </ assem b l y >
Figura 1.6: Arquivo job.xml contendo a configurao do Maven para inserir as classes geradas no Hadoop.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<build >
<plugins >
<plugin >
< a r t i f a c t I d >mavenassem b l y p l u g i n < / a r t i f a c t I d >
<version >2.2.1 </ version >
<configuration >
<descriptors >
< d e s c r i p t o r > s r c / main / j a v a / j o b . xml < / d e s c r i p t o r >
</ d e s c r i p t o r s >
<archive >
<manifest >
< m a i n C l a s s > b r . u f m t . p a t e n t . w o r d c o u n t . j o b . G o o g l eP at en t Wo r d Co u n t < / m a i n C l a s s >
</ m a n i f e s t > </ a r c h i v e > </ c o n f i g u r a t i o n >
<executions >
<execution >
< i d >makeassem b l y < / i d >
< p h ase > p ack ag e < / p h ase >
<goals >
<goal > si n g l e </ goal >
</ g o a l s > </ e x e c u t i o n > </ e x e c u t i o n s > </ p l u g i n > </ p l u g i n s > </ b u i l d >
o arquivo jar para que nosso job possa ser executado, para isso preciso copiar o jar
para a mquina que o Namenode no cluster e guardar o destino do arquivo, pois o
mesmo deve ser chamado para execuo do processamento.
23
Para que o Hadoop possa executar o job preciso utilizar a interface fornecida
pela ferramenta da IBM, que em uma instalao padro vai responder pela porta 8080
do Namenode. Nessa interface, na aba Jobs, possvel submeter o job clicando no
boto "CreateJarJob. . . ".
1.4.1.5. Utilizando o Hadoop como Ferramenta de ETL
Aqui tratamos o seguinte problema: Como executar consultas nos dados de patentes e
como armazenar estes dados que suporte consultas eficientes. Para a resoluo deste
problema vamos utilizar o Apache Hive. O Hive consegue utilizar a estrutura do Hadoop para armazenar os dados e abstrai o MapReduce em forma de consulta SQL. No
momento do processamento a consulta SQL transformada em um job MapReducer
que executado no cluster.
Mas temos que adequar nossos dados a estrutura que ele fornece para trabalhar.
O formato mais simples um formato de arquivo em que cada registro se encontra e
uma linha do arquivo e os campos esto delimitados por algum caractere especial. Isso
nos lembra o formato de um arquivo CSV, ento nosso trabalho aqui transformar os
dados XML em um arquivo com formatao CSV e importar os dados para dentro do
Hive. Para tal tarefa vamos aproveitar a estrutura do Hadoop para trabalhar com uma
grande quantidade de dados e de forma paralela.
Nossa funo Map vai ter como objetivo converter as entidades XML em objetos
Java e emitir para cada patente (usando como chave o atributo datadepublicao), criar
todas as representaes do objeto no formato CSV. Neste exemplo criada uma tabela
nica que contem todas as combinaes de classificaes vs. depositantes, conforme o
cdigo ilustrado na Figura 1.8.
1 p u b l i c c l a s s G o o g l e P a t e n t M a p p e r e x t e n d s Mapper < L o n g W r i t a b l e , Tex t , Tex t , Tex t > {
2
p r i v a t e T e x t pubNumber = new T e x t ( ) ;
3
p r i v a t e T e x t p p S t r i n g = new T e x t ( ) ;
4
5
p u b l i c v o i d map ( L o n g W r i t a b l e key , T e x t v a l u e , C o n t e x t c o n t e x t )
6
throws java . io . IOException , I n t e r r u p t e d E x c e p t i o n {
7
String xmlString = value . t o St ri ng ( ) ;
8
i f ( xmlString . trim ( ) . l en g t h ( ) > 0) {
9
Pr oj ectP aten t patent = GooglePatentToProjectPatentUtil . convertGooglePatent ( xmlString ) ;
10
i f ( p a t e n t != n u l l ){
11
for ( C la s s i f ic a ti on ipc : patent . ge t Cl a s s if i c at io n ( ) ) {
12
f o r ( A p p l i c a n t app : p a t e n t . g e t A p p l i c a n t s ( ) ) {
13
patent . s etI pcS elect ( ipc ) ;
14
p a t e n t . s e t A p p l i c a n t S e l e c t ( app ) ;
15
pubNumber . s e t ( p a t e n t . g e t P u b l i c a t i o n N u m b e r ( ) ) ;
16
ppString . set ( patent . toString ( ) ) ;
17
c o n t e x t . w r i t e ( pubNumber , p p S t r i n g ) ;
} } } } }
Figura 1.8: Preparao dos dados pela funo Map a serem inseridos no Hive.
Explicando um pouco o cdigo: Recebemos uma entidade em XML, converte-
24
mos para um objeto java contendo os atributos de interesse, usando a biblioteca X Stream,
e depois geramos todas as combinaes com as classificaes e depositantes dentro das
patentes para a funo Reduce. Agora o cdigo da funo Reduce bem simples. Como
no temos nenhuma agregao a fazer, apenas iteramos pelos valores gerados para cada
chave e passamos para a sada do Job.
1 p u b l i c c l a s s G o o g l e P a t e n t R e d u c e r e x t e n d s Red u cer < Tex t , Tex t , Tex t , Tex t > {
2
p u b l i c v o i d r e d u c e ( T e x t key , I t e r a b l e < Tex t > v a l u e s , C o n t e x t c o n t e x t )
3
throws IOException , I n t e r r u p t e d E x c e p t i o n {
4
f o r ( Text val : values ) {
5
c o n t e x t . w r i t e ( key , v a l ) ;
} } }
Figura 1.9: Preparao dos dados pela funo Reduce a serem inseridos no Hive.
https://github.com/cloudhead/cradle
25
Figura 1.10: Converso e insero em lote no CouchDB das patentes no formato JSON.
A forma escolhida para gerar um exemplo de estatstica foi a criao de uma
viso no CouchDB que usa agregao para mostrar a contagem do numero de patentes
dentro da hierarquia estabelecida pela classificao internacional. Uma viso guardada internamente como um designdocument e executada no momento em que feita
a consulta viso. Para construo da viso foram criadas as funes Map e Reduce.
Na funo Map, ilustrada na Figura 1.11, so organizadas os campos da classificao,
de forma que recebe apenas um parmetro, que o documento em que est sendo executado. Partindo desse documento os dados so extrados e com a funo Emit, so
definidos quais dados vo ser passados para a funo de Reduce. A funo Emit recebe
dois parmetros, uma chave e um valor, podendo ser chamada mais de uma vez, como
no exemplo esto sendo enviadas todas as classificaes dentro de uma patente para a
funo de Reduce (se tiver mais de uma classificao). Outro ponto a ser observado
que as chaves e os valores passados para essas funes podem ser listas, no exemplo as
classificaes so separadas nos seus campos principais.
5 Endereo:
6 Endereo:
https://github.com/Gagle/Node-BufferedReader
https://github.com/Leonidas-from-XIV/node-xml2js
26
1 f u n c t i o n ( doc ) {
2
v a r i p c r s = doc [ usb i b l i o g r a p h i c d a t a a p p l i c a t i o n ] [ c l a s s i f i c a t i o n s i p c r ] [ c l a s s i f i c a t i o n i p c r ] ;
3
/ / V e r i f i c a s e e s t e o b j e t o eh um A r r a y
4
i f ( O b j e c t . p r o t o t y p e . t o S t r i n g . c a l l ( i p c r s ) == [ o b j e c t A r r a y ] ) {
5
f or ( var i in i pc r s ){
6
var sect ion = i p cr s [ i ][ section ] ;
7
var clazz = i p crs [ i ][ class ] ;
8
var subclass = i pc r s [ i ][ subclass ] ;
9
v a r g r o u p = i p c r s [ i ] [ maing r o u p ] ;
10
v a r s u b g r o u p = i p c r s [ i ] [ su b g r o u p ] ;
11
var ipc = s e c t i o n + c l a z z + s u b c l a s s + group + subgroup ;
12
e m i t ( [ s e c t i o n , c l a z z , s u b c l a s s , g r o u p , su b g r o u p , i p c ] , 1 ) ; }
13
/ / S en ao t r a t a como um o b j e t o s i m p l e s
14
} else {
15
var sect io n = i p crs [ section ] ;
16
var clazz = ip crs [ class ] ;
17
var subclass = i p cr s [ subclass ] ;
18
v a r g r o u p = i p c r s [ maing r o u p ] ;
19
v a r s u b g r o u p = i p c r s [ su b g r o u p ] ;
20
var ipc = s e c t i o n + c l a z z + s u b c l a s s + group + subgroup ;
21
e m i t ( [ s e c t i o n , c l a z z , s u b c l a s s , g r o u p , su b g r o u p , i p c ] , 1 ) ; } }
Figura 1.11: Funo Map para a viso por classificao das patentes.
A funo Reduce, ilustrada na Figura 1.12, aplica uma funo de agregao nas
chaves e valores enviados pela funo Map, que nesse caso apenas a soma dos valores
para cada chave, obtendo assim a contagem de classificaes.
1 f u n c t i o n ( k ey s , v a l u e s , r e r e d u c e ) { r e t u r n sum ( v a l u e s ) ;
Figura 1.12: Funo Reduce para a viso por classificao das patentes.
Como pode ser observado, a funo Reduce recebe 3 parmetros: keys, values e
rereduce. A chave recebida pela funo pode vir no formato de listas, j que possvel
fazer isso na funo Map. A varivel values corresponde a todos os valores associados
com uma determinada chave. J a varivel rereduce um booleano que diz se essa
funo Reduce j foi executa em uma mesma chave. Isto deve ser levado em considerao em determinados casos nos quais a funo de agregao no deve ser aplicada da
mesma forma se a funo Reduce passar duas vezes pela mesma chave.
1.4.2. Dados Micrometeorolgicos
Os dados obtidos atravs de simulaes cientficas, experimentos e observaes em
larga escala, facilmente chegam a terabytes, devido ao aumento do nmero de transistores dentro dos chips, conhecido como a lei de Moore e o barateamento dos mesmos.
Entre esses equipamentos encontra-se aqueles que so voltados para medir dados micrometeorolgicos, sendo esses coletados atravs de vrios sensores efetuando medies de
mltiplas variveis.
Assim, a quantidade de dados muito significativa, pois vrios sensores podem
medir vrias variveis micrometeorolgicas em um tempo curto, por exemplo, medir
a temperatura entre 10 e 10 segundos, assim a quantidade de dados cresce 3153600
27
por ano e por varivel medida. Aps a obteno dos dados alguns clculos realizados sobre os mesmos pode demorar muito tempo para seu processamento, no contexto
do Programa de Ps-Graduao em Fsica Ambiental (PGPFA-UFMT), existem vrios
clculos que demandam esse tempo, por exemplo, o clculo para obter dimenso fractal, o expoente de Lyapunov, a anlise de recorrncia, entre outros. Para otimizar esse
tempo pode-se utilizar algumas solues com enfoque em paralelismo, como clusters
de computadores, ou GPU (Graphics Processing Unit).
Apesar deste Curso no abordar esses clculos complexos, a ideia demonstrar
o uso do produto SciDB para armazenamento e processamento de variveis micrometeorolgicas. Dessa forma, o exemplo aqui apresentado envolve variveis (evaporao,
insolao, precipitao, temperatura mxima, temperatura minima, umidade relativa
do ar e velocidade do vento) captadas em 4 locais diferentes no Estado de MT entre
os anos de 1985 a 2010. Os seguintes passos foram necessrios para construir o exemplo: (1): converso dos dados do formato CSV para o formato SciDB; (2): insero
dos dados na base SciDB em forma de vetor unidimensional; (3): converso do vetor
unidimensional para vetores multidimensionais, ou seja, converso de atributos para dimenses. Para insero de dados o SciDB fornece o aplicativo csv2scidb que converte
do formato CSV (separado por ,) para o formato de leitura do SciDB, assim, depois
de convertidos usa-se a funo Load (em AFL) para insero dos dados na base.
28
Referncias
[1] D. Agrawal, S. Das, and A. El Abbadi. Big data and cloud computing: New wine or just new
bottles? Proc. VLDB Endow., 3(2):16471648, 2010.
[2] D. Agrawal, S. Das, and A. El Abbadi. Big data and cloud computing: current state and future
opportunities. In EDBT, page 530, 2011.
[3] Apache Hadoop. http://hadoop.apache.org, 2012.
[4] Apache Hive. hive.apache.org, 2012.
[5] Apache Pig. http://pig.apache.org, 2012.
[6] D. Bermbach and S. Tai. Eventual consistency: How soon is eventual? An evaluation of Amazon
S3s consistency behavior. In Workshop on Middleware for Service Oriented Computing, 2011.
[7] E. A. Brewer. Towards robust distributed systems (abstract). In Symp. on Principles of Distributed
Computing, PODC, page 7, New York, NY, USA, 2000.
[8] J. B. Buck, N. Watkins, J. LeFevre, K. Ioannidou, C. Maltzahn, N. Polyzotis, and S. Brandt. SciHadoop: Array-Based Query Processing in Hadoop. In SC, page 66, 2011.
[9] R. Cattell. Scalable SQL and NoSQL data stores. ACM SIGMOD Record, 39(4):12, May 2011.
[10] S. Chaudhuri. What next? A Half-Dozen Data Management Research Goals for Big Data and the
Cloud. In PODS, page 1, 2012.
[11] I. Clarke. A distributed decentralised information storage and retrieval system. In PhD Thesis.
University of Edinburgh, 1999.
[12] A. Cuzzocrea, I.-y. Song, and K. C. Davis. Analytics over large-scale multidimensional data: the
big data revolution! In Intl Workshop on Data Warehousing and OLAP (DOLAP), page 101, 2011.
29
[13] J. Dean and S. Ghemawat. MapReduce: Simplified Data Processing on Large Clusters. In Sixth
Symposium on Operating System Design and Implementation (OSDI), 2004.
[14] D. Fisher, R. DeLine, M. Czerwinski, and S. Drucker. Interactions with Big Data Analytics. Interactions, 19(3):50, May 2012.
[15] IBM InfoSphere BigInsights. www.ibm.com/software/data/infosphere/biginsights, 2012.
[16] M.-y. Iu and W. Zwaenepoel. HadoopToSQL: a mapReduce query optimizer. In EuroSys, 2010.
[17] S. Khatchadourian, M. Consens, and J. Simeon. Web data processing on the cloud. Conf. of the
Center for Advanced Studies on Collaborative Research (CASCON), page 356, 2010.
[18] I. Konstantinou, E. Angelou, D. Tsoumakos, C. Boumpouka, N. Koziris, and S. Sioutas. TIRAMOLA: Elastic NoSQL Provisioning Through a Cloud Management Platform. In SIGMOD, 2012.
[19] V. Kumar, H. Andrade, B. Gedik, and K.-l. Wu. DEDUCE: at the intersection of MapReduce and
stream processing. In EDBT, page 657, 2010.
[20] K.-H. Lee, Y.-j. Lee, H. Choi, Y. D. Chung, and B. Moon. Parallel data processing with MapReduce:
a survey. ACM SIGMOD Record, 40(4):11, Jan. 2012.
[21] D. B. Lomet. Data management on cloud computing platforms. In S. P. Beng Chin Ooi, editor,
IEEE Data Engineering Bulletin, volume 32, pages 182. 2009.
[22] A. Marmor, W. Lawson, and J. Terapane. The Technology Assessment and Forecast Program of the
United States Patent and Trademark Office. World Patent Information, 1(1):1523, 1979.
[23] J. S. Nunes and L. Goulart. Universidades Brasileiras - Utilizao do Sistema de Patentes de 2000
a 2004. Technical report, INPI/CEDIN/DIESPRO, 2007.
[24] A. Okcan and M. Riedewald. Processing theta-joins using MapReduce. SIGMOD, page 949, 2011.
[25] C. Olston, B. Reed, U. Srivastava, R. Kumar, and A. Tomkins. Pig latin: a not-so-foreign language
for data processing. In SIGMOD, page 1099, 2008.
[26] A. Pavlo, E. Paulson, A. Rasin, D. J. Abadi, D. J. DeWitt, S. Madden, and M. Stonebraker. A
comparison of approaches to large-scale data analysis. SIGMOD, page 165, 2009.
[27] J. C. Ralph Kimball. DW ETL toolkitThe Data Warehouse ETL Toolkit: Practical Techniques for
Extracting, Cleaning, Conforming, and Delivering Data. John Wiley, 2004.
[28] A. Rowstron, D. Narayanan, A. Donnelly, G. OShea, and A. Douglas. Nobody ever got fired for
using Hadoop on a cluster. Intl Workshop on Hot Topics in Cloud Data Processing, 2012.
[29] M. Stonebraker. In Search of Database Consistency. Commun. ACM, 53(10):8, Oct. 2010.
[30] M. Stonebraker, S. Madden, D. J. Abadi, S. Harizopoulos, N. Hachem, and P. Helland. The End of
an Architectural Era (Its Time for a Complete Rewrite). VLDB, pages 11501160, 2007.
[31] A. Thusoo, J. S. Sarma, N. Jain, Z. Shao, P. Chakka, N. Zhang, S. Antony, H. Liu, R. Murthy,
S. Anthony, P. Wyckoff, F. Data, and I. Team. Hive - a petabyte scale data warehouse using Hadoop.
In ICDE, pages 9961005, 2010.
[32] W. Vogels. Eventually Consistent. Queue, 6(6):14, Oct. 2008.
[33] WIPO. Using Patent Information for the Benefit of Your Small and Medium-sized Enterprise, 2012.
30