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-*:
- JDK >= 1.6
- Maven >= 3.0
- Findbugs 1.3.9 (if running findbugs)
- ProtocolBuffer 2.5.0
- CMake >= 2.6
- Zlib devel
- openssl devel
- git &/| svn
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....