Instalação de um cluster Hadoop no Ubuntu 12.04 LTS (Parte 2)

Para a instalação do cluster Hadoop, é preciso fazer a primeira parte deste tutorial em todas as máquinas (masters e slaves).

Assim como a primeira parte, este post é um breve resumo do artigo Running Hadoop on Ubuntu Linux (Multi-Node Cluster), do Michael G. Noll. Anotei esses passos apenas como checklist para instalações futuras, mas resolvi compartilhar aqui no blog. Então para mais detalhes eu sugiro que leiam o artigo original.

Antes de começar, certifique-se que:

  • Tenha seguido a primeira parte do tutorial em todas máquinas (masters e slaves). É recomendado manter as mesmas estruturas, caminhos de diretórios e versão do sistema operacional.
  • Cada máquina tenha um IP devidamente configurado e que seja acessível pelas outras máquinas.
  • Todos os serviços Hadoop das máquinas estejam parados, através do comando stop-all.sh (na pasta bin do diretório do Hadoop, caso você não tenha adicionado essa pasta no $PATH – Passo 12 da primeira parte do artigo).

1. Instalar o Hadoop no modo multi-node

1) Configuração de rede (Master e Slave)

$ nano /etc/hosts

Adicionar as seguintes linhas (com os devidos IPs da sua rede). Coloque as demais máquinas de acordo com a configuração do seu cluster.

192.168.2.7 master
192.168.2.8 slave

E retirar (ou comentar, com um ‘#’ no início) essa linha se ela existir:

127.0.1.1 master

2) SSH (Master)

$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub hadoop@slave

Para testar:

$ ssh master
$ ssh slave

3) Configuração do Hadoop

O master executará o NameNode para a camada HDFS (Hadoop Distributed File System) e o JobTracker para a camada de processamento do MapReduce. Ambas as máquinas rodarão os daemons DataNode para a camada HDFS e TaskTracker para camada de processamento do MapReduce. Dessa forma, os daemons masters serão responsáveis pela coordenação e gerenciamento dos daemons slaves, enquanto estes fazem os trabalhos de processamento e armazenamento.

3.1) Master

$ nano /usr/local/hadoop/conf/masters
 
master
$ nano /usr/local/hadoop/conf/slaves
 
master
slave

3.2) Master e Slave(s)

$ nano /usr/local/hadoop/conf/core-site.xml
<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
 
<configuration> 
	<property> 
	  <name>hadoop.tmp.dir</name> 
	  <value>/home/hadoop/tmp</value> 
	  <description>A base for other temporary directories.</description> 
	</property> 
 
	<property> 
	  <name>fs.default.name</name> 
	  <value>hdfs://master:54310</value> 
	  <description>The name of the default file system.  A URI whose 
	  scheme and authority determine the FileSystem implementation.  The 
	  uri's scheme determines the config property (fs.SCHEME.impl) naming 
	  the FileSystem implementation class.  The uri's authority is used to 
	  determine the host, port, etc. for a filesystem.</description> 
	</property> 
</configuration>
$ nano /usr/local/hadoop/conf/mapred-site.xml
<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
 
<configuration> 
	<property> 
	  <name>mapred.job.tracker</name> 
	  <value>master:54311</value> 
	  <description>The host and port that the MapReduce job tracker runs 
	  at.  If "local", then jobs are run in-process as a single map 
	  and reduce task. 
	  </description> 
	</property> 
</configuration>
$ nano /usr/local/hadoop/conf/hdfs-site.xml
<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
 
<configuration> 
	<property> 
	  <name>dfs.replication</name> 
	  <value>2</value> 
	  <description>Default block replication. 
	  The actual number of replications can be specified when the file is created. 
	  The default is used if replication is not specified in create time. 
	  </description> 
	</property> 
</configuration>

4) Formatar o HDFS via NameNode

hadoop@master:~$ stop-all.sh
hadoop@master:~$ hadoop namenode -format

5) Iniciando o cluster

hadoop@master:~$ start-dfs.sh
hadoop@master:~$ start-mapred.sh

Para conferir:

hadoop@master:~$ jps
 
16017 Jps
14799 NameNode
15686 TaskTracker
14880 DataNode
15596 JobTracker
14977 SecondaryNameNode
hadoop@slave:~$ jps
 
15183 DataNode
15897 TaskTracker
16284 Jps

6) Parando o cluster

hadoop@master:~$ stop-mapred.sh
hadoop@master:~$ stop-dfs.sh

6) Testando

Baixar vários livros em formato texto puro para a pasta gutenberg, como mostrado anteriormente.

$ hadoop dfs -copyFromLocal gutenberg gutenberg
$ hadoop dfs -rmr gutenberg-output
$ cd /usr/local/hadoop
$ hadoop jar hadoop-examples-1.1.0.jar wordcount /user/hadoop/gutenberg /user/hadoop/gutenberg-output
$ hadoop dfs -cat /user/hadoop/gutenberg-output/part-r-00000

Abrir os logs no master e slave(s) para conferir se o DataNode na máquina slave recebeu os blocos do master:

$ tail -50 /usr/local/hadoop/logs/hadoop-hadoop-datanode-slave.log

Para mais detalhes, leia também a documentação oficial do Apache Hadoop.

Qualquer dúvida ou sugestão, sinta-se à vontade para postar nos comentários. ;)

Instalação de um cluster Hadoop no Ubuntu 12.04 LTS (Parte 1)

Este tutorial é um resumo do artigo Running Hadoop on Ubuntu Linux (Single-Node Cluster), do Michael G. Noll. Anotei esses passos com as devidas modificações apenas como checklist para instalações futuras, mas resolvi compartilhar aqui no blog. Então para mais detalhes eu sugiro que leiam o artigo original.

Antes de tudo, o que é o Hadoop?

Vamos ver o que diz a página do Apache™ Hadoop®:

The Apache Hadoop software library is a framework that allows for the distributed processing of large data sets across clusters of computers using simple programming models. It is designed to scale up from single servers to thousands of machines, each offering local computation and storage. Rather than rely on hardware to deliver high-avaiability, the library itself is designed to detect and handle failures at the application layer, so delivering a highly-availabile service on top of a cluster of computers, each of which may be prone to failures.

Ou seja, é um framework open-source para processamento paralelo e distribuído, criado e mantido pela Apache Software Foundation, cross-plataform (construído em Java), que escala até milhares de nós. É utilizado para processar grandes quantidades de dados, geralmente em terabytes e petabytes, e tem como característica a alta disponibilidade, devido ao seu mecanismo de detecção de falhas. Implementa o MapReduce, um modelo de programação paralela de grandes volumes de dados, inicialmente proposto e desenvolvido pela Google.
Clique aqui para ler o post completo

Hadoop: Corrigindo o erro “ClassNotFoundException: WordCount$Map”

Uma dica rápida para quem não conseguiu rodar corretamente o exemplo WordCount da Wiki do Apache Hadoop.

$ hadoop jar WordCount.jar WordCount /home/hadoop/input-wordcount.txt /home/hadoop/output-wordcount

O erro retornado é o seguinte:

java.lang.RuntimeException: java.lang.ClassNotFoundException: WordCount$Map
	at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:867)
	at org.apache.hadoop.mapreduce.JobContext.getMapperClass(JobContext.java:199)
	at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:719)
	at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
	at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAs(Subject.java:396)
	at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121)
	at org.apache.hadoop.mapred.Child.main(Child.java:249)

A solução é alterar em torno da linha 47 do exemplo. Adicione a segunda linha abaixo, logo após criar o novo Job:

ob job = new Job(conf, "wordcount");
job.setJarByClass(WordCount.class);

Segundo a API do Hadoop, o que o setJarByClass faz é definir o Jar encontrando a origem de uma determinada classe.

Fonte: My Daily Learning Blog

Isso aí, até a próxima.

Meu ambiente de trabalho

Convidado pelo Jonnas Fonini, descrevo aqui meu ambiente de trabalho em alguns itens. Tenho basicamente 3 ambientes de trabalho: desktop, notebook[bb] e um PC na empresa que eu trabalho.
Clique aqui para ler o post completo

Highlighter de Expressão Regular

Uma expressão regular bem trabalhada e com muitos caracteres geralmente é de difícil leitura e pode parecer um bicho de sete cabeças. A dificuldade está em identificar onde fecham alguns metacaracteres, como um grupo (os parênteses), as chaves e colchetes.

Para solucionar esse problema, existem scripts para fazer highlight (destacar) os metacaracteres e facilitar a leitura da regex.

Steven Levithan, criador do RegexPal, extraiu a engine de highlight do RegexPal e deixou ela disponível, chamando-a de Javascript Regex Syntax Highlighter, para ser usada em qualquer página HTML.

Exemplos

\b[0-9]{4}(-[0-9]{2})?\b
^[A-Za-z0-9\._+-]+[@]{1}[A-Za-z0-9\.|-|_]*[.]{1}[a-z]{2,5}$

Os erros da expressão regular[bb] são estilizados na cor vermelha. Confira abaixo (parênteses e colchetes sem fechamento):

([0-9]{4}\/[a-z

Clique aqui para ler o post completo

Documente seu código PHP usando o PHPDoc

O phpDocumentator é uma ferramenta para geração de documentação de código feito na linguagem de programação PHP.

Um pouco sobre o phpDoc:

  • Pode ser usado tanto via linha de comando quanto via interface web.
  • Pode exportar para HTML, XML, PDF e para CHM (helpfile do Windows).
  • Bastante customizável (usa templates). A interface web tem um preview de cada tema.
  • Linka classes e faz herança entre elas.
  • Documentação de arquivos README/CHANGELOG/INSTALL/FAQ

Veja mais features na página oficial.

Download

Versão 1.4.3 .zip | 1.4.3 .tgz (verifique se há alguma versão mais recente)

Instalação (Linux e Windows)

  • Esteja certo que você tem o PHP rodando corretamente na sua máquina. Para a interface web, você precisa de um servidor. Para Windows, indico o tutorial do Pedro Rogério chamado Instalar Apache+PHP+MySQL no Windows 7/Vista/XP e para Linux existem vários artigos por aí.
  • Extraia o arquivo .zip ou .tgz que você baixou.
  • No Linux: sugiro colocar a pasta do phpdoc em /opt (faça isso como super usuário) e adicioná na variável $PATH do sistema: $ echo ‘PATH=$PATH:/opt/php-doc’ >> ~/.bashrc && source ~/.bashrc
  • No Windows: coloque o caminho da pasta extraída no PATH do sistema (configurações avançadas) para que possa executá-lo apenas com o comando phpdoc (referente ao arquivo phpdoc.bat).
  • Para rodar a interface web, coloque a pasta que foi extraída dentro do seu diretório de documentos do apache (ex: c:/apache/htdocs/php-doc ou /var/www/php-doc) e abra a página no seu navegador com http://localhost/php-doc, por exemplo.

Clique aqui para ler o post completo

CSS pra quem nunca viu

Claro que existem pessoas que estudam (ou trabalham com) computação e não conhecem CSS[bb]. Talvez o foco é outro (bem) distante de web ou há algum motivo para continuar a estilização via HTML. Vou tentar ser o mais direto possível, pois meu objetivo aqui é mostrar o básico através de exemplos.

Neste tutorial vamos construir uma área de artigos na qual cada uma da lista contém um título, uma imagem e o texto. O exemplo final será parecido com isso:

Exemplo final

Clique para ampliar

Obs.: O texto foi gerado com o famoso Lorem Lipsum.

Definição

CSS – Cascading Style Sheet (folhas de estilo) – é uma linguagem para atribuir forma visual – estilo, formas, cores e tamanhos – a elementos usados na linguagem de marcação (HTML[bb], XHTML e XML[bb] são exemplos).

Sintaxe básica

1
2
3
seletor {
	propriedade: valor;
}
O ” ; ” (ponto-vírgula) é opcional na última propriedade.

Clique aqui para ler o post completo

Editor TinyMCE no Django admin

Primeiramente, TinyMCE é um editor WYSIWYG (“O que você vê é o que você obtem”) mais popular em todo o mundo. É usado em grandes CMS como Wordpress e Joomla. Aqui vamos implementar o TinyMCE no painel de administração do Django.

UPDATE: se você está usando o Django no Apache com mod_python, leia também o tópico Considerações para quem está em servidor Apache em produção.

Preview

TinyMCE no Django admin

Screencast (vídeo tutorial)

Clique aqui para ler o post completo

Página 1 de 4
1234»