2015-05-21

9) Spark lazy execution

#bigdata #hadoop #spark

Uma característica pouco compreendida no processamento de Big Data em Spark é a “execução preguiçosa” (lazy execution). A princípio é de se desconfiar que uma característica com nome de “preguiçosa” possa ser de alguma forma útil e adequada no caso de computação, mas como se verá, trata-se de algo muito bom para o desempenho de execução.

Um engenheiro de software, quando escreve código que chama uma determinada função, imagina que o programa vai executar a tal função no momento em que chegar na linha que a chama. É assim na execução tradicional (não preguiçosa). Mas em Spark não é assim que funciona. Dentre os componentes da API do Spark está o “Spark Core”, que implementa as funcionalidades mais básicas, incluindo o agendar, distribuir e monitorar as tarefas sobre os workers do cluster, cuidar da recuperação no caso de falha de um worker, gerência de memória e outros. A classe mais usada para código em Spark é a RDD (resilient distributed datasets), que logicamente representa uma coleção de itens de tipo genérico. Como o nome diz, um RDD é distribuído (tira proveito da distribuição de tarefas pelos workers do cluster), e resiliente (resiste a eventual falha de um worker).

Os programas para Spark são baseados em SparkContext (sc), que reconhece as características do cluster onde os workers estão. Um RDD é criado levando em conta o sc, o que garante que conseguirá interagir com o cluster. Em Spark, o software representa os dados em RDDs, e transforma RDDs em outros RDDs usando os métodos existentes na API do Spark, eventualmente passando funções como argumentos dos métodos. Sem trabalho explícito do programador, o Spark Core distribui os RDDs pelo cluster. Cada RDD é imutável (isso é, de apenas leitura). A criação de um RDD é feita ou a partir de se carregar um dataset externo, ou de forma programática. Uma vez criados, os RDD podem ser alvo de 2 tipos de operações: transformações e ações. Um exemplo de transformação de RDD é filtrar os dados para que cumpram um critério. Um caso seria filtrar as linhas que contém a palavra “ERROR”. Outro caso seria filtrar os campos cujo valor numérico é maior que um argumento dado. Lembre-se que um RDD é uma coleção de um tipo genérico, isso é, pode ser uma coleção de strings ou uma coleção de pares chave-valor.

Muitas vezes, escreve-se um algoritmo a partir de criar-se um RDD carregando um dataset externo, e sobre esse RDD aplica-se um conjunto de transformações. Esse conjunto de transformações é registrado pelo Spark, mas não é executado imediatamente, devido ao conceito sofisticado de execução preguiçosa. Apesar de soar bizarro, o fato de a execução ser preguiçosa faz muito sentido no caso de dados volumosos. Por exemplo: quando se cria um RDD a partir de um dataset muito volumoso, e sobre esse RDD se faz um conjunto de filtragens que faz diminuir muito o tamanho resultante, é possível diminuir o consumo de recursos computacionais (tarefas executadas, dados em memória, etc) por se otimizar o conjunto de transformações de RDD. É menos custoso executar o conjunto otimizado de transformações de RDD que executar cada transformação tomada isoladamente. Essa otimização é transparente para o programador.

Quando o código encontra uma ação aplicada sobre um RDD, então o Spark é forçado a efetivamente executar todo o conjunto de transformações e produzir a saída. Em outras palavras, apenas apenas quando uma ação ocorre é que o Spark deixa de ser “preguiçoso”. Dentre os exemplos de ações incluem-se a produção de saídas em console ou em disco.

Aplicações Spark simples, tal como word count, consistem em apenas criar um RDD a partir de dataset externo, transformá-lo algumas vezes e produzir a saída. Aplicações mais sofisticadas tem várias fontes de dados, e produzem várias saídas. Nesses casos mais sofisticados, pode-se melhorar o desempenho de execução acrescentando códigos para cacheamento de RDDs intermediários. O sistema Spark sem interferência de código de cacheamento cria um registro de transformações de RDD para cada ação que se deseja. Caso existam duas ações que tem uma parte do processamento comum, o Spark sem cache fará o processamento idêntico mais de uma vez. Nesses casos pode-se melhorar o desempenho escrevendo código que faça cache da parte comum.


--------------------------------------------------------------------------------
Sergio Barbosa Villas-Boas (sbVB), Ph.D.
software development, Big Data, cloud, mobile, IoT, HPC, optimization
sbvillasboas@gmail.com, sbvb@poli.ufrj.br
Skype: sbvbsbvb
http://www.sbVB.com.br
https://www.linkedin.com/in/sbvbsbvb
+55-21-97699-1337

2015-05-20

8) História do Big Data, Geração 1 e Geração 2

#bigdata #hadoop #spark

Entenda-se “Big Data” como a tecnologia de computação que baseia-se em sistema de arquivos distribuído, e que usa arquitetura de software baseado em Map Reduce. O resumo da história do Big Data assim definido é descrito a seguir. Em junho de 2003 houve uma demonstração do nutch (http://nutch.apache.org/), que é um software open source para busca na web, escrito por Doug Cutting e Mike Cafarella. Em 2004 a Google publicou um white paper a respeito do sistema de arquivos distribuído Google File System (GFS) e da arquitetura software Map Reduce (http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf). Em 2005, Yahoo patrocinou um projeto spin off do nutch – open source e hospedado pela Apache – baseado no paper da Google. Para isso contratou Doug Cutting e Mike Cafarella. O software foi chamado de Hadoop. Uma curiosidade é que o nome “Hadoop” é o som que o filho pequeno do Doug Cutting fazia para referir-se a um boneco de elefante, que é um dos símbolos de Big Data. O Hadoop, assim como o nutch é escrito em Java originalmente, mas admite ser usado com outras linguagens também. O site http://hadoop.apache.org/ disponibiliza todas as versões de Hadoop. A mais antiga é a versão 0.14.1 de setembro de 2007. O site mostra diversas versões de Hadoop, que segue em contínua evolução. Pode-se considerar Hadoop como a primeira geração de Big Data. Em 2009 Matei Zaharia iniciou o projeto Spark na universidade UC Berkeley, que pode ser considerado como a segunda geração de Big Data. No site http://spark.apache.org/ são disponibilizadas versões de Spark desde 2013. Em 2014 foi publicada uma demonstração em que o Spark bateu de longe o desempenho do Hadoop (http://www.datanami.com/2014/10/10/spark-smashes-mapreduce-big-data-benchmark/).

Spark é escrito na linguagem Scala, que foi desenvolvida inicialmente por Martin Odersky, na École Polytechnique Fédérale de Lausanne (EPFL), Suiça, em 2001. A linguagem Scala foi projetada para ser compatível em código compilado com a máquina virtual java. O código fonte *.scala é compilado com scalac, e gera bytecodes, da mesma forma que código fonte *.java compilado com javac. Todo código compilado com scalac pode ser usado numa máquina virtual java sem nem mesmo requerer que se avise ao administrador do computador que se está fazendo isso. Em outras palavras, Scala é o eterno “amigo” compatível perfeitamente com Java. Scala pode usar classes Java dentro do seu código, assim como bibliotecas Java compiladas *.jar. Com essa compatibilidade total e eterna, o Spark (compilado de Scala) pode conviver lado a lado com Hadoop (compilado de Java). Ou seja, para as empresas que instalaram algum sistema com Hadoop no passado, e que desejam expandir as funcionalidades, é possível instalar Spark na mesma máquina e ir acrescentando novas funcionalidades aos poucos, sem precisar parar com o Hadoop. Isso é muito conveniente.

Para as empresas e profissionais que estão entrando no desenvolvimento Big Data agora, recomendo que usem Spark, sem “perder tempo” com Hadoop. Spark é melhor em tudo que Hadoop. É melhor em desempenho de execução, o que é uma vantagem evidente. Mas é também melhor em desempenho de manutenção de código. O código Java do Hadoop, com base em orientação a objetos, torna-se muito “burocrático” ou “verborrágico”. Há quem diga que com Java “há muito código para encanamento, e pouco código para o algoritmo”. Em comparação, a linguagem Scala é funcional, e adapta-se muito bem para a finalidade de escrever algoritmos para Big Data. Para quem tem base em Java e orientação a objetos, o uso de linguagem funcional pode parecer um pouco complexa ao início, mas nas aulas tenho observado que os alunos aprendem rápido e em pouco tempo conseguem entender e escrever código muito bom com Scala/Spark.

Há grandes usuários de processamento digital, incluindo grandes empresas, setores governamentais e outros. Essas entidades são especialmente interessadas na existência de um saudável e vigoroso mercado a lhes suprir hardware e software, para que os sistemas digitais efetivamente possam entrar em produção. Desde 1983, Richard Stallman iniciou o projeto GNU, e ajudou muito a expandir o conceito de software open source. Muitos desconfiaram de que esse modelo pudesse prosperar. Hoje em dia, inclusive em função do uso massivo de cloud computing, o uso de software open source já ganhou enorme aceitação. Um cliente que adote uma solução de software closed source privado precisa aceitar o risco de que a empresa proprietária do software eventualmente no futuro imponha seu produto de forma desvantajosa (e.g. aumente o preço), ou que corte o suporte. O software open source não tem esse problema. Muitas empresas adotam software open source, e pagam por profissionais de suporte, o que resulta em muitas situações em soluções mais econômicas e melhores que as alternativas closed source privadas. Sendo a tecnologia de Big Data toda ela open source, todas as vantagens desse modelo de software são presentes. Para as empresas, é excelente implantar sistemas baseado em tecnologia open source, e poder contratar profissionais que sejam treinados nessa tecnologia. Quanto mais vigoroso o mercado, tanto melhor para todos.

A economia do Brasil ganha muito por uso massivo de open source em geral. Isso porque quanto mais se usa open source, mais se moderniza a sociedade sem que essa modernização implique em transferência maciça de recursos para o exterior. Big Data, pelo seu enorme potencial de processamento e implantação de sistemas modernos e eficientes, sendo open source como é, será um fator de modernização da sociedade ao mesmo tempo em que se reduz o fluxo de capitais para o exterior. As pessoas que desenvolvem software ou prestam suporte são em geral profissionais que moram no Brasil, e. portanto, reforçam a economia local. Com o dinheiro sendo mantido dentro do Brasil, cria-se um fator adicional de prosperidade para toda a nação.

Outro dinheiro que pode ser mantido dentro do Brasil é o de treinamento. Eu fiz o curso da Cloudera University de Spark Developer. O curso é excelente. Mas ressalte-se que o material é licenciado, e que cada aluno deve pagar pelo material, transferindo dinheiro para o exterior. Mas a licença não impede que o material de curso seja reinventado com um novo formato, novos exemplos e aplicações, e com isso se criar um novo curso. Quanto mais se criam cursos sobre um assunto, mais conhecimento se tem sobre o tal assunto. É sinal claro de vigor intelectual a multiplicação de numerosos cursos. Educação é o melhor investimento.


--------------------------------------------------------------------------------
Sergio Barbosa Villas-Boas (sbVB), Ph.D.
software development, Big Data, cloud, mobile, IoT, HPC, optimization
sbvillasboas@gmail.com, sbvb@poli.ufrj.br
Skype: sbvbsbvb
http://www.sbVB.com.br
https://www.linkedin.com/in/sbvbsbvb
+55-21-97699-1337



2015-05-15

7) Big Data, empregabilidade e destruição criativa

#bigdata #hadoop #spark

A história mostra numerosos exemplos de tecnologias inovadoras em seu tempo que transformaram profundamente o ambiente econômico. Lembremos de alguns: a mecanização no setor rural, a automatização e robotização em fábricas, os super cargueiros que transportam mais matéria em menos tempo e por menos custo, o uso de software para aumento de eficiência de serviço burocrático e de secretaria. A humanidade já acumulou muito conhecimento tecnológico, e seguimos acumulando cada vez mais. Já vimos muitos processos produtivos serem transformados por tecnologias, e muito mais ainda está por vir. Joseph Schumpeter cunhou o termo “destruição criativa” que pode resumir o processo como uma tecnologia suplanta a anterior. Big Data é uma tecnologia de informação que está no foco dos tempos atuais, com alto potencial de criar novos valores e processos. É característica fundamental do século 21 o uso massivo de computação, e muitas vezes a tecnologia por trás disso é Big Data. Alguns exemplos do uso quotidiano de Big Data é buscar algo no Google, postar no facebook ou comprar na Amazon. No Brasil temos exemplos também, tal como o painel de notícias recomendadas do globo.com, ou o relacionamento com clientes do Hotel Urbano. Mas tudo que se fez até agora é pouco. A maior parte das transformações ainda está por vir. Governos, empresas e profissionais de TI prudentes e antenados com seu tempo devem investir tempo para buscar adaptar seu modo de viver, criar e trocar valor. Quem apega-se a modelos de vida com pacto com o passado pode ter sérias dificuldades de viver com prosperidade.



Os profissionais de TI, que vivem de prestar serviços profissionais no mercado de trabalho, já estão acostumados a verem tecnologias novas tornarem-se valorizadas pelo mercado. O vigoroso dinamismo é a característica mais marcante do mercado de TI. Para esses profissionais, o recado agora é claro: a tecnologia da vez é Big Data. Os melhores salários, as melhores oportunidades, os melhores projetos, tendem a ser vinculadas a Big Data, e por isso o profissional faz muito bem para sua empregabilidade por estudar essa tecnologia.


Muitas empresas têm relação forte com TI, e podem beneficiar-se do uso de Big Data para criar mais valor. De fato, quanto mais nos damos conta de o que se pode fazer com a tecnologia digital, mais nos parece primitivo trabalhar sem observar os resultados por essa tecnologia produzidos. A concorrência – sempre muito grande, e crescente mais e mais – serve de estímulo para que empresas invistam em tecnologias inovadoras com o objetivo de ganhar produtividade. A empresa pode investir para melhorar processos que já tem, e também para explorar novos valores inovadores a partir do uso de Big Data. Repita-se: ainda há muito a ser feito. Se a empresa não investir, pode acontecer de em pouco tempo tornar-se sem competitividade para se sustentar no mercado.

Os integrantes do governo que efetivamente desejam construir estruturas do Estado eficientes, têm muito a ganhar pelo uso de tecnologia de informação em geral, em particular Big Data. O uso de tecnologia de informação já mostrou enorme valor por exemplo no caso do sistema de imposto de renda no Brasil. Quem já declarou imposto de renda com sistema pré tecnologia de informação não tem nenhuma saudade daquela forma ineficiente de se trabalhar. É tecnicamente possível melhorar muitíssimo a eficiência da sociedade a partir do uso com sabedoria de tecnologia de informação em sistemas relacionados ao governo, incluindo a área de impostos, criação/fechamento de empresas, processamentos jurídicos e policiais, sistema carcerário, transparência fiscal, saúde pública, educação, transportes e muito mais. Registre-se que há iniciativas governamentais de se explorar o potencial de novas tecnologias para inovações que poderão trazer benefícios a população. Uma delas é a disponibilização de dados feito por algumas cidades, entre elas o Rio de Janeiro (http://data.rio.rj.gov.br/). No meu curso de tecnologia de Big Data da UFRJ, alguns dos trabalhos são feitos em que os alunos escrevem código Big Data em Spark para tratar esses dados.

Há que se comentar sobre o processo de implantação de tecnologias inovadoras. Um software novo e muito bem concebido é muitas vezes o centro de muitas inovações importantes. Mas é igualmente importante que se trabalhe a mente das pessoas que vão usar e interagir com o software em questão. Por exemplo: seja uma empresa que deseja incorporar o uso de um novo sistema baseado em Big Data para aprender como os usuários e clientes percebem o produto da empresa. O que realmente se espera fazer é tornar a empresa como um todo mais eficiente e, portanto,z mais lucrativa. Para esse objetivo ser atingido, é preciso que o time que usa o software compreenda como a empresa cria valor e lucra, para que se conduza os conhecimentos produzidos pelo processamento massivo de dados em ações e decisões que melhorem o desempenho e o lucro da empresa. O profissional de TI deve, portanto, ter também um bom conhecimento do modelo de negócios da empresa em que trabalha, para tornar-se um efetivo colaborador com a missão da empresa, hora pensando em detalhes sórdidos de tecnologia, hora pensando em processos e modelos de negócios. Os usuários e clientes muitas vezes interagem diretamente sobre o os dados, e para esses há que se pensar em interfaces intuitivas e modelos de negócio atrativos e com lógica simples.

A construção de uma sociedade estruturalmente eficiente é a única forma de se obter prosperidade coletiva. O uso intenso e sábio de tecnologia de informação, inclusive Big Data, é peça fundamental na transformação de aumento de eficiência da sociedade.

--------------------------------------------------------------------------------
Sergio Barbosa Villas-Boas (sbVB), Ph.D.
software development, Big Data, cloud, mobile, IoT, HPC, optimization
sbvillasboas@gmail.com, sbvb@poli.ufrj.br
Skype: sbvbsbvb
http://www.sbVB.com.br
https://www.linkedin.com/in/sbvbsbvb
+55-21-97699-1337


2015-05-06

6) Big Data, Cloud e SaaS versus IaaS

#bigdata #hadoop #spark

Para que se implante um novo serviço baseado em Big Data, é preciso que um cluster com n computadores (workers) exista em algum lugar. Quem deseja entregar um serviço de processamento, deve controlar o data-center que contém o cluster para a produção desse serviço. Essa é a situação por exemplo de quem faz funcionar uma empresa com modelo de negócios “Software como Serviço (SaaS)”, em que um cliente paga para usar um processamento que lhe é entregue pela rede. No ano de 2015 se está observando numerosa criação de startups que prestam serviços relacionados a Big Data, com modelo de negócios SaaS. Como já comentei nesse Blog, em serviços de tecnologia de informação, o foco correto deve ser na eficácia. Ganha o jogo quem entrega o serviço feito, nas condições que o ambiente requer. O que qualquer empreendedor precisa fazer é descobrir como oferecer seu produto ou serviço de forma que consiga atrair clientes, sendo que o cliente comprará o produto ou serviço pensando basicamente na sua própria perspectiva. Isso quer dizer que o produto ou serviço deve apresentar um conjunto de preço, valor, qualidade, suporte e outros que seja capaz de atrair clientes.

No caso de empresas relacionadas a Big Data, é particularmente provável e adequado atuar num modelo de negócios SaaS, onde o serviço é vendido no contexto de “Business to Business (B2B)”. Por exemplo: uma empresa de media (setor cultural) deseja obter um relatório sintetizado que mostra como o seu produto cultural está sendo comentado por redes sociais. Isso pode ser feito a partir dos dados, que são vendidos pelas empresas de rede social, e processados para que se obtenha a síntese desejada. A tecnologia de Big Data é muito adequada para dar conta desse requisito, mas sobre a tecnologia básica de Big Data é preciso que se desenvolvam algoritmos configuráveis para que se atinja o resultado na forma que o cliente realmente entenda e veja valor para si (e, portanto, anime-se a pagar pelo serviço). O empreendedor no modelo SaaS tem a responsabilidade de desenvolver o software sobre a tecnologia de Big Data, de colocar o software em produção, de vender o serviço, e de entender o que os clientes querem para seguir aperfeiçoando o software.

Uma empresa startup que se proponha a fazer algo como descrito acima opera no risco, como toda empresa privada com fins lucrativos. A proposta de negócio pode dar errado. Para que dê certo, o dinheiro que os clientes pagam deve ser suficiente para pagar salários, impostos e outros custos, e ainda dar lucro. Um aspecto interessante a considerar são as opções que um empreendedor como esse tem para viabilizar o data-center para seu negócio. É quase uma certeza que o empreendedor vai escolher alugar um data-center na nuvem. Isso porque um data-center na cloud é muitíssimo menos custoso e mais simples de se implantar que uma alternativa local.

Alguns clientes têm motivos – muito compreensíveis – para não permitir que os dados sejam processados fora de seu data-center local. Exemplos desses clientes incluem empresas financeiras e empresas com alta tecnologia (no setor de petróleo, farmacêutico, militar e outras). Mesmo para atender clientes assim, a cloud é muito útil para um empreendedor prestador de serviço. Isso porque antes de se fechar um contrato de maior valor, em geral são feitos vários testes ou provas de conceito. Isso pode ser feito na cloud a custos baixos, usando dados falsos (mas no formato dos dados verdadeiros). Em se ficando satisfeito com o desempenho experimental feito na cloud, com todos os envolvidos convencidos de que o serviço será de fato feito a contento, então passa-se para a fase de se implantar o serviço dentro do data-center do cliente, com a exata mesma tecnologia que se testou na cloud.

As empresas fornecedoras de data-center na cloud operam um modelo de negócios conhecido como “infraestrutura como serviço (IaaS)”. O custo do serviço prestado por essas empresas é um fator da maior importância para sua competitividade. Como consequência, as empresas nessa categoria têm altas vantagens por tornarem-se grandes e com abrangência mundial, e o preço do serviço torna-se cada vez menor. Uma lista das atuais empresas importantes nessa categoria inclui Amazon (produto AWS), Google (produto Cloud Platform), Microsoft (produto azure), Digital Ocean e muitas outras. O crescimento da atividade de IaaS tem sido explosivo. O leitor interessado pode procurar por exemplo por “amazon IaaS growth 2014”, e ler sobre isso.

O uso massivo e crescente de data-center remoto na cloud é um fenômeno mundial, e faz surgir questões de interesse estratégico. Esse uso massivo leva a que muito processamento seja feito fisicamente em local e infraestrutura não controlada pelo governo de um país. Tal situação permite prever teoricamente um novo tipo de pressão política entre nações, que poderia ser negativo para países como o Brasil. Uma política que eventualmente prevenisse essa situação seria a de se incentivar uma indústria local de cloud a partir de se onerar com impostos a compra de serviços IaaS feitos por empresas estrangeiras. Mas não há almoço grátis, ou seja, a eventual implantação de uma política para proteger a atividade local de IaaS é ao mesmo tempo um forte estímulo negativo para a atividade de se empreender e inovar no modelo SaaS. A sociedade deve estar preparada para discutir qual política deseja para regular a atividade de processamento digital de informações.

Eu trabalho na UFRJ desde 1991, e atuo ensinando e orientando alunos em temas como desenvolvimento de software para Big Data, cloud, mobile, otimização e outros. É com orgulho que observo que alguns dos nossos melhores alunos abrem empresas startups em atividades como SaaS. Entendo que é muitíssimo mais produtivo e promissor para toda a sociedade Brasileira apostar no crescimento das empresas no modelo SaaS (não necessariamente Big Data) do que proteger a atividade IaaS. Uma das poucas coisas que ainda se consegue fazer no Brasil com chance de ser competitivo mundialmente é uma empresa de software no modelo SaaS, pois nossas severas deficiências (que compõe o chamado “custo Brasil”) são menos relevantes no caso da atividade de software. A eventual política em favor de se proteger a atividade de IaaS vai encarecer o uso de data-center remoto, e retirar competitividade do SaaS, um promissor segmento para o Brasil.

Para o leitor que imagina que uma política para proteger IaaS onerando o SaaS seria boa, sugiro que pense como seria nossa vida se tivéssemos uma política análoga para proteger a produção de chip de CPU, que é uma atividade ainda mais competitiva e concentrada que IaaS. Digamos que seja possível produzir no Brasil CPU's no Brasil por um custo 100 vezes maior. Seria sensato onerar toda a sociedade Brasileira forçando todos nós a usar CPU's produzidas aqui, ao invés de comprar essa mercadoria por quem a produz de forma eficiente? Se eventualmente fizéssemos isso e de fato onerássemos toda a sociedade, haveria chance real de um dia termos uma indústria nacional de CPU que atingisse competitividade mundial? O que a história econômica recente nos ensina? O que fazem outros países?

--------------------------------------------------------------------------------
Sergio Barbosa Villas-Boas (sbVB), Ph.D.
software development, Big Data, cloud, mobile, IoT, HPC, optimization
sbvillasboas@gmail.com, sbvb@poli.ufrj.br
Skype: sbvbsbvb
http://www.sbVB.com.br
https://www.linkedin.com/in/sbvbsbvb
+55-21-97699-1337


2015-04-29

5) O Futuro do MainFrame

As tecnologias de informação (TI) competem por existir num mercado bravo, implacável e extremamente dinâmico. A história está repleta de casos de tecnologias que foram muito importantes em uma certa época, mas que foram perdendo força até a extinção ou próximo disso. O profissional de TI prudente deve viver especulando o ambiente futuro, cuidando sempre de sua empregabilidade, de forma a decidir da melhor forma possível a prioridade do que se vai estudar, e consequentemente o que se vai ignorar. Conheço vários casos de pessoas que tornaram-se especialistas numa tecnologia que não interessa mais, e passaram de uma situação em que eram valorizados profissionalmente e salarialmente para outra bem diferente. Essas coisas acontecem com o mesmo dinamismo do mercado de TI, ou seja, num tempo comparável ao que a CPU do seu computador leva para somar números em ponto flutuante.

Um assunto de interesse especial é especular sobre o futuro do Mainframe (também chamado de computador de grande porte). Num resumo brevíssimo da história de TI, pode-se dizer que a humanidade não tinha computadores minimamente decentes até meados da segunda guerra mundial. Com o fim dessa e o início do período de guerra fria, houve vários avanços na computação digital. As primeiras gerações de computação usavam linguagem de máquina e assembler, o que é extremamente complexo. A primeira linguagem de programação de terceira geração foi FORTRAN, em 1957, com ênfase em computação científica, e usada até hoje. A segunda linguagem de computação inventada foi o COBOL, em 1959, com ênfase em computação comercial, e também usada até hoje.
Um nicho em que se encontra facilmente hoje em dia o uso de COBOL e Mainframe é no setor bancário. Claro que todas as tecnologias evoluíram desde sua criação. A versão atual dos Mainframes e do COBOL é baseada na sua própria história, mas adaptou-se para servir a quem lhe contrata. Uma qualidade que o Mainframe provê para seus clientes é uma excelente robustez (“robustez 5 noves”, isso é, 99,999% de tempo no ar, o que permite a no máximo 5 minutos fora do ar por ano). Outra qualidade do Mainframe é sua excelente capacidade de processamento, que permite dar conta de um número gigantesco de transações por segundo. Mas essas qualidades são entregues com alguns problemas. Um deles é o preço, que é bem expressivo, e transforma-se num custo operacional para o cliente, que compreensivelmente está sempre pensando em formas de reduzi-los. Outro problema mais sutil é a confiança que um cliente de Mainframe tem de que permanecerá conseguindo contratar profissionais para manter seu processamento funcionando. Esse segundo problema decorre do fato de que com o surgimento da microinformática no final da década de 1970, e o crescimento explosivo de sua utilização, a nova geração quase sempre confunde computação com microinformática e ignora o Mainframe. O uso generalizado de cloud computing, que é em geral feito com servidores Linux instanciados na quantidade que se deseja para atender necessidade de processamento que se tem, fez mais uma vez a nova geração distanciar-se do Mainframe, pois a resolução de grandes problemas de TI é feita com uso massivo de microinformática.

Fazem alguns anos, eu fui chamado para conversar com o setor de RH da Stefanini (uma grande empresa de serviço de software, com atuação no Rio de Janeiro e clientes em vários países). A chefe do RH reconhecia que nós da UFRJ formávamos bons profissionais, e nos chamou para ajudar a resolver um problema específico: eles precisavam urgentemente de gente com conhecimento de COBOL e Mainframe. Queriam que montássemos um curso extra desse assunto. Eu retruquei que reconhecia o problema deles, mas que não é muito simples convencer a nova geração a estudar isso (e nem a nós professores a montar cursos desse assunto). Argumentei que a verdadeira necessidade da Stefanini é o que o mercado inteiro precisa: uma solução para o grave problema de o que fazer com os Mainframes. Esse problema é muito sério, pois não se consegue mudar a cultura rapidamente. Mas o tempo segue indo para frente, com os profissionais de COBOL aumentando de idade e sem haver quase ninguém da nova geração para repô-los. Eu propus trabalhar junto com a Stefanini num projeto que ajudasse a se produzir uma solução geral e decente para a substituição dos Mainframes por outra coisa. Mas como eles apenas queriam um curso de COBOL, nossa conversa acabou sem nenhuma consequência. E o problema de o que fazer com os Mainframes segue aumentando sua agudez e gritando por uma solução.

Com o surgimento da tecnologia de Big Data, facilitou-se ainda mais a transformação de um conjunto de computadores (em geral Linux) em um cluster. Agrupando os computadores com software de Big Data (e.g. Spark), consegue-se 2 qualidades muito desejáveis: robustez (pois no caso de um computador falhar o cluster segue trabalhando), e desempenho (pois o paralelismo do Big Data faz aumentar muito a capacidade de processamento do cluster). Essas duas qualidades são justamente o diferencial que os Mainframes sustentam na hora de serem vendidos. Considerando que com o Big Data se consegue finalmente produzir com microinformática as qualidades do Mainframe, surge então a pergunta: será que finalmente conseguimos encontrar uma forma de fazer a microinformática substituir o Mainframe? Antes de ficar animado em demasia é bom lembrar que já se tentou antes substituir o uso de Mainframe, e há casos antológicos de fracasso. Um dos mais citados é a falência do Banco Bamerindus. O leitor interessado pode procurar no Google por “bamerindus Mainframe fracasso” e verá várias histórias. Além disso, deve-se sempre registrar o fato de que Big Data não é uma tecnologia de aceleração computacional de aplicação genérica. Os problemas de TI que permitem tirar proveito das qualidades especiais da arquitetura Big Data devem permitir que os dados fiquem armazenados em HDFS, por exemplo.

Uma empresa ou entidade que hoje está usando Mainframe, muito compreensivelmente, deve olhar com suspeição para um projeto de se implantar Big Data para substituir o Mainframe. Um roteiro prudente para o gestor de TI é o de definir experiências e provas de conceito para serem feitas com tecnologia de Big Data, e verificar na prática o tempo que leva uma aplicação para ser desenvolvida e mantida, e o desempenho e a robustez do serviço quando colocado em produção. É por provar-se viável com experiências práticas que o Big Data poderá abocanhar o mercado. Há um valor adicional no uso de Big Data: trata-se de uma tecnologia open-source, em oposição à tecnologia dos Mainframes, que são tecnologias proprietárias. O cliente pode avaliar por suas próprias perspectivas qual a qualidade e preço do serviço de TI quando é baseado em tecnologias proprietárias, em comparação o que é baseado em tecnologias open-source e padrões abertos. Muita gente tem verificado que essa última abordagem entrega serviço melhor e mais barato. Além da perspectiva do cliente, há também a perspectiva da nação Brasileira. Um projeto de TI baseado em solução proprietária produz um fluxo de dinheiro do Brasil para o local onde moram os proprietários das empresas donas das licenças (muitos moram nos EUA). Essa drenagem de recursos empobrece nossa sociedade. Alternativamente, um projeto de TI baseado em qualquer alternativa open-source (inclusive Big Data) faz o cliente pagar salários e impostos dentro do Brasil, o que irriga e faz aumentar nossa economia local.


Em resumo: A análise do ambiente permite especular que veremos cada vez mais casos de Big Data substituindo usos tradicionais de Mainframe. Nesse jogo, vão ganhar os que souberem de fato desenvolver aplicações Big Data, pois esses são os que vão ganhar os novos contratos. Os usuários e consumidores de serviços de TI vão ganhar também, pois vão livrar-se de hardware e software proprietário, e passar a resolver seus problemas com hardware de prateleira e software básico open-source, o que gerará mais flexibilidade e menor custo. As universidades, escolas de TI e estudantes também vão ganhar, pois poderão usar a melhor tecnologia do mundo sem maiores dificuldades, para seus testes e pesquisas. Pelo mesmo motivo, ganharão também os empreendedores inovadores. Vai ganhar a sociedade brasileira como um todo, pois se deixará de fazer fluir nosso dinheiro para o exterior, em licenças de software. Vão perder os que vendem soluções proprietárias baseadas em Mainframe, que verão esse mercado diminuir (a menos que evoluam seu produto, e entreguem alguma qualidade exclusiva e útil).

--------------------------------------------------------------------------------
Sergio Barbosa Villas-Boas (sbVB), Ph.D.
software development, Big Data, cloud, mobile, IoT, HPC, optimization
sbvillasboas@gmail.com, sbvb@poli.ufrj.br
Skype: sbvbsbvb
http://www.sbVB.com.br
https://www.linkedin.com/in/sbvbsbvb
+55-21-97699-1337

2015-04-26

4) Hello Big Data: word count

#bigdata #hadoop #spark

Para quem deseja entender os mecanismos internos da tecnologia de Big Data, um bom começo é estudar o algoritmo “word count”. Trata-se de um algoritmo simples, e que vale-se das boas características do Big Data para produzir um desempenho altamente escalável; de certa forma esse é um algoritmo “Hello World of Big Data”. Considere o seguinte problema: é dado um conjunto de arquivos em formato de texto plano. Deseja-se produzir um relatório com a contagem do número de ocorrências de cada palavra que ocorre nos textos. O algoritmo é descrito a seguir. Faz-se um laço para varrer cada um dos arquivos do conjunto de entrada. Para cada arquivo encontrado, deve-se abri-lo, e varrer cada linha, varrendo cada palavra de cada linha. Para cada palavra encontrada, deve-se acrescentá-la a um objeto contenedor de pares chave-valor, sendo a chave a palavra, e o valor a contagem do número de ocorrências. Na hora de acrescentar uma palavra ao contenedor, se a palavra não existe, cria-se uma chave nova com valor 1. Se a palavra já existe, incrementa-se da contagem correspondente.

Se o volume de dados é enorme, o tempo de execução pode tornar-se insuportavelmente lento. Esse algoritmo pode ser escrito para Big Data, de forma a tirar proveito pleno do elemento especial do Big Data: o sistema de arquivos distribuído HDFS. O conjunto de arquivos de entrada deverá ser carregado no HDFS de um cluster Big Data. Para os arquivos grandes, são criadas divisões e cada parte é salva fisicamente em workers diferentes do mesmo cluster. Um job em Big Data é executado em 3 fases: map-shuffle-reduce. A fase shuffle é sempre a mesma, e portanto é feita internamente pelo software de Big Data (Hadoop ou Spark). É preciso que se escreva o código para implementar as fases map e reduce. Muitas pessoas resumem essa forma de execução de jobs com o nome “Map Reduce”.

Em Hadoop (Big Data geração 1), é explícita a definição do código da fase map e da fase reduce. Usando a linguagem Java, para se escrever a fase map, cria-se uma classe que estende MapReduceBase e implementa Mapper, e escreve-se o código do método map. Para se escrever a fase reduce, cria-se uma classe que estende MapReduceBase e implementa Reducer, e escreve-se o código do método reduce. Para se criar um job Big Data, instancia-se um objeto JobConf, seta-se parâmetros (incluindo passar o nome da classe de Map e de Reduce), e a partir desse objeto, executa-se o job.

Em Spark (Big Data geração 2) é tudo mais simples para o desenvolvedor. Usando a linguagem funcional scala, com 1 linha de código carrega-se os dados num objeto RDD (Resilient Distributed Dataset). Os RDD's são centrais no Spark, e representam uma coleção de qualquer coisa, já tirando proveito das qualidades especiais do Big Data (uso de sistema de arquivos distribuído). Nas linhas de código seguintes executam-se transformações no objeto RDD, de forma a produzir a saída desejada. Internamente o Spark também usa map-shuffle-reduce, mas devido a forma sintética de escrita de código isso não fica tão explícito quanto no caso de Hadoop. O estilo sintético do código em linguagem funcional Scala, base do Spark, é altamente valioso. Com esse estilo, escreve-se menos, e com isso foca-se mais no algoritmo e menos no “encanamento”. O leitor interessado pode procurar no Google por “Hadoop word count example” e “Spark word count example”, e verá que no primeiro caso encontrará um código de 58 linhas, e no segundo um código de 5 linhas. A linguagem orientada a objetos java tem grande tradição, enquanto a linguagem funcional Scala é mais recente, menos conhecida, mas vem crescendo rapidamente. Apesar de a linguagem Scala eventualmente assustar um desenvolvedor experiente, recomendo aos interessados em desenvolver código de aplicações Big Data priorizar o estudo da geração 2 (Spark), com a linguagem funcional Scala.

Na fase map do algoritmo, o código incide sobre um pedaço do conjunto dos dados de entrada, criando em cada worker um contenedor de pares chave-valor, sendo a chave a palavra corrente e o valor 1. A etapa shuffle do algoritmo faz os dados serem transmitidos pela rede, de forma a que em um worker seja feito o trabalho de redução, que nesse caso consiste em somar as ocorrências com mesma chave. Se o conjunto de dados é gigantesco, pode-se acelerar esse algoritmo por se alocar numerosos workers no cluster Big Data. Na fase map do algoritmo cada worker trabalha sobre dados com dimensão igual ao conjunto original dividido pelo número de workers. A escalabilidade é próximo de perfeita nessa fase.

Big Data não é uma arquitetura de software para aceleração computacional com aplicação genérica. Para que ocorra o desempenho de execução altamente escalável do Big Data, é preciso que os dados estejam no HDFS, e que seja possível que na fase map do algoritmo se possa aplicar o foco computacional em cada pedaço do dado de entrada de forma independente.


Seja o problema não computacional a seguir, como metáfora para o uso de Big Data. Alguns palitos são espalhados por toda a área de uma praia muito grande (digamos Copacabana). Deseja-se contar os palitos. Esse problema pode ser resolvido rapidamente dividindo-se a área total em muitos blocos, cada um pequeno, e alocando-se um trabalhador para procurar independentemente em cada bloco. Essa seria a fase map. Em seguida, cada trabalhador transmite (fase shuffle) para um trabalhador que consolide o total de palitos, no que seria a fase reduce.


--------------------------------------------------------------------------------
Sergio Barbosa Villas-Boas (sbVB)
software development, Big Data, cloud, mobile, IoT, HPC, optimization
sbvillasboas@gmail.com, sbvb@poli.ufrj.br
Skype: sbvbsbvb
http://www.sbVB.com.br
https://www.linkedin.com/in/sbvbsbvb
+55-21-97699-1337


2015-04-21

3) Foco na Eficácia

#bigdata #hadoop #spark

Particularmente nos serviços de tecnologia de informação, é valorizado o “foco na eficácia”. Em outras palavras, “quem entrega o serviço feito ganha o jogo”. A medida e o julgamento de quais meios e recursos que se usou para entregar o serviço – desde que lícitos, disponíveis, dentro do orçamento e do prazo de entrega – não são a prioridade. Essa abordagem permite uma analogia com um ditado popular. O que importa não é “matar a cobra e mostrar o pau”, mas “matar a cobra e mostrar a cobra morta”. O primeiro caso consiste em “focar no recurso” que se usou para resolver o problema, e o segundo consiste em “focar na eficácia”, isso é, na confirmação de que o serviço foi efetivo.

Big Data é uma forma inovadora de se implementar a computação paralela. A computação, por ser paralela, faz aumentar em tese o poder computacional efetivo. Com a arquitetura Big Data - para uma classe de problemas - a efetividade é particularmente grande. Nesses casos, com muitos computadores worker no cluster, tem-se um enorme poder efetivo. Ou seja, resolve-se problemas computacionais gigantescos em tempo relativamente pequeno.

O leitor já deu-se conta de o quão grande é o problema que a Google resolve no seu site de busca? A Google recebe uma string como parâmetro, e em menos de 1 segundo produz uma lista de links ordenados por peso, a partir de varrer de toda a Internet (Very Big Data), cujo conteúdo foi previamente vasculhado e armazenado localmente no data center da Google. O sofisticado algoritmo de busca leva em conta também volumosos dados pessoais de cada indivíduo, o que faz a busca ficar personalizada e portanto muito mais útil. Segundo o próprio Google, o número de buscas em 2015 anda em torno de 40 mil por segundo ou 3,5 bilhões por dia. A Google chegou tarde no cenário de buscadores, que em 1998 era dominado por Yahoo e Altavista. Como sabemos, o Google cresceu e hoje seu sucesso é supremo, tendo tornado-se líder dos buscadores com larga diferença em relação aos concorrentes. O produto da Google é altamente eficaz. Pouco importa os recursos que a Google aloca para resolver o problema.

Um uso para a computação são as técnicas de “aprendizado de máquina” (machine learning) para efetuar predições. O comércio é uma das muitas atividades que podem beneficiar-se dessas técnicas. Algumas perguntas que interessam ao comerciante incluem: “quais produtos esse cliente provavelmente quer comprar?”, ou “qual a chance de esse cliente ser um bom (ou mau) pagador?”, ou “quantas unidades desse produto eu devo ter em estoque para a próxima temporada de vendas?”, ou “qual o nível de satisfação para os clientes produzido por cada departamento da minha empresa?”, ou ainda “qual o valor do preço desse produto de forma a otimizar o lucro?”. Numa época de competição extrema, e com a possibilidade de uso intensivo de tecnologia de informação para a apoio a negócios, observa-se que grandes empresas de comércio estão investindo para ter boas respostas para perguntas como essas. O que importa para o comerciante é a eficácia do serviço de produzir as tais respostas (basicamente respostas corretas, e entregues no tempo que se espera). Isso é: “a cobra morta”. O método e os recursos que se usam para produzir as respostas é um problema técnico de quem se apresenta como fornecedor do serviço de produzir as respostas. Isso é: “o pau que mata a cobra”. Pensemos num comerciante de alto volume, tal como Amazon. Uma busca no Google mostra que em 2013 a Amazon vendia 426 itens por segundo. O volume de dados a serem processados por um comerciante com essas proporções é evidentemente bem alto, e algumas das perguntas acima tem que ser respondidas com a mesma velocidade das vendas. Trata-se de um grande problema computacional. O enorme poder computacional provido pela arquitetura Big Data é uma excelente alternativa tecnológica para eficazmente resolver o problema. Se o problema está pesado demais para um cluster Big Data com n workers, pode-se aumentar o valor de n. Em muitos casos isso é suficiente.

Existem atualmente empresas que vendem serviços computacionais relacionados a machine learning por meio de API. Essa é uma forma de pronta entrega do serviço, num formato que permite ser integrado ao fluxo de informação de um cliente. Para usar outra expressão popular, um serviço assim é do tipo que “entra porco e sai linguiça”. No exemplo do comerciante, isso seria o comerciante entrar com a base de dados e demais parâmetros, e usar o serviço de machine learning para obter diretamente as respostas o comerciante que deseja, com pouca importância em saber o método e recursos que foram usados para a obtenção das mesmas. É transparente para o comerciante-cliente saber o número de workers do cluster Big Data, assim como é transparente para os usuários e clientes do Google saber quantos computadores eles tem em seu data center. Só se observa a eficácia do serviço.

Em resumo: Força bruta funciona. Big Data é uma tecnologia prática e eficaz de se implementar força bruta. O foco certo é na eficácia.



--------------------------------------------------------------------------------
Sergio Barbosa Villas-Boas (sbVB), Ph.D.
software development, Big Data, cloud, mobile, IoT, HPC, optimization
sbvillasboas@gmail.com, sbvb@poli.ufrj.br
Skype: sbvbsbvb
http://www.sbVB.com.br
https://www.linkedin.com/in/sbvbsbvb
+55-21-97699-1337