Instituto de Computação - UNICAMP

MC855 - Projeto em Sistemas de Computação

Segundo Semestre de 2014

Compilação do hadoop-common

Otávio Augusto


A compilação do hadooop-common e de todo os seus subsistema necessitam de uma série de dependências. Serão listadas todas as necessárias, entretanto aquelas disponíveis por repositórios de pacotes terão sua instalação direcionadas pelos gerenciadores de pacotes.

Ao longo destes e dos seguintes tips, será utilizado a simbologia usual de referência a shell input, onde ' $ ' indica uma comando de usuário aleatório e '#' do usuário root, via su ou sudo.

Caso o ambiente não possua um ambiente de compilação GNU compliance, é necessário instalar (gcc,g++,ld etc).

# apt-get install build-essential 

Dependências

As seguintes dependências são necessárias para o Hadoop-*:

Debian's :

# apt-get install git svnkit libssl-dev openjdk-7-jdk openjdk-7-jre-headless zlib1g-dev findbugs cmake

RedHat/Fedora/CentOS

# yum -y install  lzo-devel  zlib-devel  gcc autoconf automake libtool openssl-devel java-1.7.0-openjdk git svn findbugs cmake

Protobuf

A única dependência que deve ser obtida através do fonte é o Protobuf, as seguintes entradas na shell devem instalá-lo:
$ wget https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.bz2
$ tar -xf protobuf-2.5.0.tar.bz2;cd  protobuf-2.5.0;
$ ./configure ; make 
# make install

Maven

Apesar do Maven estar disponível na maioria dos repositórios, sua versão é antiga em relação a aquela mínima para compilar o Hadoop. Então é necessário, ou compilar dos fontes a versão 3, ou obter um pacote mais recente, normalmente colocado no brache unstable dos repositórios. Para Ubuntu 14.04, Linux Mint 17 e derivados, o seguinte pacote é suficiente: http://ppa.launchpad.net/natecarlson/maven3/ubuntu/pool/main/m/maven3/maven3_3.2.1-0~ppa1_all.deb Para instalá-lo é necessário remover quaisquer pacotes do maven, e resolver as dependências do pacote mais recente, com o gdebi.
$ sudo apt-get remove maven*
$ sudo apt-get install gdebi
$ wget http://ppa.launchpad.net/natecarlson/maven3/ubuntu/pool/main/m/maven3/maven3_3.2.1-0~ppa1_all.deb
# gdebi maven3_3.2.1-0~ppa1_all.deb

# ln -s /usr/share/maven3/bin/mvn /usr/bin/maven

Código fonte

O Hadoop pode ser obtido tanto pelo svn quanto pelo git.

SVN

Para obter o release corrente considerado mais estável, ou o trunck:
$ svn checkout http://svn.apache.org/repos/asf/hadoop/common/trunk
Caso seja necessário obter algum release anterior do trunk, ex release 1234:
$ svn checkout -r 1234 http://svn.apache.org/repos/asf/hadoop/common/trunk
Para obter branches específicos, onde alguns tem referência a algum path no Jira:
$ svn checkout http://svn.apache.org/repos/asf/hadoop/common/branches/[branche]

Git

Para obter o último release do Hadoop, é necessário clonar o repositório. E diferentemente do svn, onde os branches estão apenas no repositório oficial, no git a maioria estão via fork de repositórios de desenvolvedores. Existem dois repositórios: git://git.apache.org/hadoop.git e https://github.com/apache/hadoop.git. Onde o segundo é um mirror, entretanto via GitHub, na interface web, é mais fácil visualizar alterações, comentário e mesmo ver os forks e merges pendentes. Assim, clonando o repositório:
$ git clone git://git.apache.org/hadoop.git
Para clonar um branch específico(pós git clone):
$ git checkout [branche]

Compilando

Nesse ponto todas as dependências do Hadoop e seu subsistema foram resolvidas, sendo então possível compilar todo o subsistema ou isoladamente, como apenas o Hadoop-Mapreduce. Porém visando gerar um release completo do Hadoop, será compilado todo o sistema. Todas as compilações visam gerar um pacote comprimido, em código nativo, de todo o Hadoop, similar á aquele distribuído e utilizado no início da disciplina nos exemplos do Mapreduce.

Yarn

Iniciaremos a compilação pelo Hadoop-Yarn, que é dependência da maioria dos outros, e caso haja falhas do maven, estas será isolada em um pacote, facilitando a resolução de dependências.
$ mvn clean;mvn install
Caso nenhum erro tenha ocorrido, a compilação de todo o Hadoop pode começar.

Hadoop-common

Existem diversas flags para a geração do Hadoop, serão utilizadas aqui somente aquelas para gerar um pacote distribuível, comprimido, e em código nativo. Todas as opções de compilação podem ser encontrada no arquivo BUILDING.txt em hadoop-common.
$ mvn clean package -Pdist -Dtar -DskipTests -Pnative
Antes mesmo da compilação, o maven irá baixar diversos subpacotes e instala-los, então mantenha uma conexão com a internet =] . Após todo o housing keep, a compilação irá iniciar. Esta leva um tempo, mesmo desabilitando os testes (-DskipTests ) e ao seu término, será gerado em hadoop-common/hadoop-dist/target o hadoop-3.0.0-SNAPSHOT.tar.gz. Este pacote contem todo Hadoop compilado, com os executáveis, bibliotecas, exemples etc. , separados em diretórios. Também é gerado um hadoop-3.0.0-SNAPSHOT.jar e seu javadoc, porém dados as flags de compilações, estes talvez não sejam completamente funcionais.

Testes

Durante o processo de compilação, todos os testes foram desabilitados, oque reduz bastante o tempo de build. Porém é possível executar testes em cada subsistema separadamente, seja executando exemplos ou os testes automatizados. Os testes automatizados são de grande importância, pois estes fazem parte do ciclo de vida de um patch no Hadoop-*, até que ele seja considerado aceitável. Para executar um teste automatizado em qualquer subsistema, navegue até este e insira na shell:
$ mvn test [-Pnative] // a adição da flag -Pnative irá utilizar o build nativo e não o jar gerado.
Para executar em todo o Hadoop, basta estar no diretório hadoop-common/ e executar o comando acima. Tenha muita paciência....