This is an old revision of the document!


Instalare Hadoop 2.5.1

Pentru ca framework-ul Hadoop să poată funcționa, este necesar ca în prealabil să se instaleze:

  • o versiune a mașinii virtuale Java;
  • un server SSH prin intermediul căruia să se gestioneze accesul la nodurile de nume și de date.

Este recomandat să se creeze un grup / un utilizator dedicat pentru framework-ul Hadoop, realizându-se astfel separarea de alte programe utilizate pe mașina respectivă.

Configurare acces SSH

  1. se instalează serverul SSH
    aipi2014@ubuntu:~$ sudo apt-get install openssh-server
  2. se generează o cheie RSA (cu parola vidă) pentru utilizatorul curent
    aipi2014@ubuntu:~$ ssh-keygen -t rsa -P ""
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/aipi2014/.ssh/id_rsa): 
    Created directory '/home/aipi2014/.ssh'.
    Your identification has been saved in /home/aipi2014/.ssh/id_rsa.
    Your public key has been saved in /home/aipi2014/.ssh/id_rsa.pub.
    The key fingerprint is:
    60:50:6d:e7:07:d5:44:12:43:63:34:15:3c:64:b4:a5 aipi2014@ubuntu


    Deși nu este recomandată folosirea de parole vide, adoptarea unui astfel de comportament în acest caz este dictată de faptul că, în caz contrat, această informație va fi solicitată de fiecare dată când se realizează o conexiune între framework-ul Hadoop și nodurile pe care le gestionează.

  3. se indică permisiunile de acces SSH pe mașina locală folosind cheia generată
    aipi2014@ubuntu:~$ cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
  4. se testează comunicația folosind SSH printr-o conexiune la mașina locală cu utilizatorul curent; astfel, se stochează și cheia mașinii locale în fișierul known_host a utilizatorului curent
    aipi2014@ubuntu:~$ ssh localhost
    The authenticity of host 'localhost (127.0.0.1)' can't be established.
    ECDSA key fingerprint is bb:40:19:2c:64:82:15:d6:0f:a3:0e:a2:b2:a7:ae:5a.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
    aipi2014@localhost's password: 
    Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-35-generic i686)
    
     * Documentation:  https://help.ubuntu.com/
    
    
    The programs included with the Ubuntu system are free software;
    the exact distribution terms for each program are described in the
    individual files in /usr/share/doc/*/copyright.
    
    Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
    applicable law.

Alte configurări cu privire la serverul SSH pot fi realizate în fișierul /etc/ssh/sshd_config:

  • opțiunea PubkeyAuthentication trebuie să aibă valoarea true;
  • dacă opțiunea AllowUsers este activă, utilizatorul curent trebuie să se regăsească în această listă.

Încărcarea unei astfel de configurații (în situația în care au fost realizate modificări) se face prin comanda

aipi2014@ubuntu:~$ sudo /etc/init.d/ssh reload

Alte configurări referitoare la clientul SSH pot fi precizate în fișierul ~/.ssh/config.

Dezactivare protocol IP v6

Este recomandat ca pentru cele mai multe sisteme să se dezactiveze protocolul IP v6 întrucât framework-ul Hadoop utilizează adresa 0.0.0.0 pentru mai multe configurări, putând să se realizeze confuzia că aceasta ar aparține acestui spațiu.

În /etc/sysctl.conf trebuie precizate valorile următorilor parametri:

aipi2014@ubuntu:~$ sudo nano /etc/sysctl.conf
...
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

Actualizarea acestor valori se realizează în momentul în care se repornește sistemul de operare.

Starea protocolului IP v6 se poate testa prin comanda:

aipi2014@ubuntu:~$ cat /proc/sys/net/ipv6/conf/all/disable_ipv6

care poate furniza următoarele valori:

  • 0 - protocolul IP v6 este activat;
  • 1 - protocolul IP v6 este dezactivat.
Alternativ, se poate specifica utilizarea protocolului IP v4 în fișierul de configurare Hadoop ($HADOOP_HOME/etc/hadoop/hadoop-env.sh):
export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true

Obținerea celei mai recente versiuni stabile

  • se descarcă cea mai recentă versiune stabilă (lista poate fi consultată pe Hadoop Releases)
    aipi2014@ubuntu:~$ cd /tmp
    aipi2014@ubuntu:/tmp$ wget http://mirrors.advancedhosters.com/apache/hadoop/common/stable/hadoop-2.5.1.tar.gz
  • se copiază în /usr/local, creându-se și o legătură simbolică spre aceasta
    aipi2014@ubuntu:/tmp$ tar xzf hadoop-2.5.1.tar.gz 
    aipi2014@ubuntu:/tmp$ sudo mv hadoop-2.5.1 /usr/local/
    aipi2014@ubuntu:/tmp$ sudo ln -s /usr/local/hadoop-2.5.1/ /usr/local/hadoop
    aipi2014@ubuntu:/tmp$ rm -f hadoop-2.5.1.tar.gz
  • se specifică utilizatorul curent drept proprietarul acestui director
    aipi2014@ubuntu:~$ sudo chown -R aipi2014 /usr/local/hadoop

Specificarea parametrilor în fișierele de configurare

Se va crea directorul hdfs în $HOME, având subdirectoarele name, data și tmp, acestea urmând a fi folosite în contextul sistemului de fișiere distribuit Hadoop pentru diferite operații de către nodul de nume și nodul de date:

aipi2014@ubuntu:~$ mkdir $HOME/hdfs
aipi2014@ubuntu:~$ mkdir $HOME/hdfs/name
aipi2014@ubuntu:~$ mkdir $HOME/hdfs/data
aipi2014@ubuntu:~$ mkdir $HOME/hdfs/tmp
aipi2014@ubuntu:~$ sudo chmod -R 755 $HOME/hdfs

.bashrc

Se specifică în .bashrc valoarea variabilelor de sistem JAVA_HOME, HADOOP_INSTALL, HBASE_INSTALL care indică locațiile la care sunt instalate aceste programe, căile respective fiind adăugate și la PATH, pentru ca procesul de căutare a diferitelor utilitare să fie realizat în mod automat:

aipi2014@ubuntu:~$ sudo nano ~/.bashrc
...
export JAVA_HOME=/usr/local/java/jdk1.8.0_20
export HADOOP_INSTALL=/usr/local/hadoop
export PATH=$PATH:$HADOOP_INSTALL/bin:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_LIB_NATIVE_DIRE=$HADOOP_INSTALL/lib/native
export HBASE_INSTALL=/usr/local/hbase
export PATH=$PATH:$HBASE_INSTALL/bin
Încărcarea acestor valori specificate pentru variabilele de sistem se face prin comanda:
aipi2014@ubuntu:~$ source ~/.bashrc

hadoop-env.sh

În fișierul hadoop-env.sh trebuie specificată valoarea variabilei de sistem JAVA_HOME astfel încât aceasta să fie disponibilă de fiecare dată când pornește framework-ul Hadoop:

aipi2014@ubuntu:/usr/local/hadoop/etc/hadoop$ sudo nano hadoop-env.sh
...
export JAVA_HOME=/usr/local/java/jdk1.8.0_20

core-site.xml

În fișierul core-site.xml trebuie specificate valori ale unor proprietăți care vor fi utilizate de fiecare dată când pornește framework-ul Hadoop, suprascriind valorile implicite:

  • fs.default.name: URI-ul (protocol://gazda:port) ce descrie NameNode-ul pentru fiecare cluster, întrucât fiecare nod din cadrul sistemului pe care rulează framework-ul Hadoop trebuie să cunoască adresa acestuia;
  • hadoop.tmp.dir: locația la care vor fi plasate informațiile temporare - subdirectorul /tmp din $HOME/hdfs.
aipi2014@ubuntu:/usr/local/hadoop/etc/hadoop$ sudo nano core-site.xml
core-site.xml
<configuration>
  <property>
    <name>fs.default.name</name> 
    <value>hdfs://localhost:9000</value>
  </property> 
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/aipi2014/hdfs/tmp</value>
  </property>
</configuration>

yarn-site.xml

În fișierul yarn-site.xml pot fi specificate valori ale unor proprietăți care vor fi utilizate de fiecare dată când pornește procesul MapReduce, suprascriind valorile implicite:

aipi2014@ubuntu:/usr/local/hadoop/etc/hadoop$ sudo nano yarn-site.xml
yarn-site.xml
<configuration>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>
</configuration>

mapred-site.xml

În fișierul mapred-site.xml pot fi specificate proprietăți precum tipul de proces care va fi utilizat pentru planificarea sarcinilor (JobTracker / Yarn):

aipi2014@ubuntu:/usr/local/hadoop/etc/hadoop$ cp mapred-site.xml.template mapred-site.xml
aipi2014@ubuntu:/usr/local/hadoop/etc/hadoop$ nano mapred-site.xml
mapred-site.xml
<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>

hdfs-site.xml

În fișierul hdfs-site.xml, fiecare mașină din cluster trebuie să specifice locațiile de pe disc care vor fi folosite de nodul de nume, respectiv de nodul de date:

  • dfs.name.dir - calea din cadrul sistemului local de fișiere în care instanța NameNode își stochează datele; în cazul în care nu este indicată implicit, are valoarea /tmp;
  • dfs.data.dir - calea din cadrul sistemului local de fișiere în care instanța DataNode își stochează datele; în cazul în care nu este indicată implicit, are valoarea /tmp;
  • dfs.replication - nivelul de replicare (de câte ori va fi replicat același bloc în cadrul unor clustere diferite).
aipi2014@ubuntu:/usr/local/hadoop/etc/hadoop$ sudo nano hdfs-site.xml
hdfs-site.xml
<configuration>
  <property>
    <name>dfs.name.dir</name>
    <value>/home/aipi2014/hdfs/name</value>
  </property>
  <property>
    <name>dfs.data.dir</name>
    <value>/home/aipi2014/hdfs/data</value>
  </property>
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
</configuration>

Formatarea sistemului de fișiere distribuit HDFS

Înainte de a putea fi utilizat, sistemul de fișiere distribuit HDFS trebuie să fie formatat:

aipi2014@ubuntu:~$ hdfs namenode -format
14/10/10 22:20:25 INFO namenode.NameNode: STARTUP_MSG: 
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = ubuntu/127.0.1.1
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 2.5.1
STARTUP_MSG:   classpath = /usr/local/hadoop-2.5.1/etc/hadoop:/usr/local/hadoop/share/hadoop/common/lib/jackson-xc-1.9.13.jar:/usr/local/hadoop/share/hadoop/common/lib/jetty-6.1.26.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-beanutils-1.7.0.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-codec-1.4.jar:/usr/local/hadoop/share/hadoop/common/lib/jersey-core-1.9.jar:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar:/usr/local/hadoop/share/hadoop/common/lib/jaxb-impl-2.2.3-1.jar:/usr/local/hadoop/share/hadoop/common/lib/log4j-1.2.17.jar:/usr/local/hadoop/share/hadoop/common/lib/jackson-jaxrs-1.9.13.jar:/usr/local/hadoop/share/hadoop/common/lib/xz-1.0.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-configuration-1.6.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-logging-1.1.3.jar:/usr/local/hadoop/share/hadoop/common/lib/guava-11.0.2.jar:/usr/local/hadoop/share/hadoop/common/lib/paranamer-2.3.jar:/usr/local/hadoop/share/hadoop/common/lib/activation-1.1.jar:/usr/local/hadoop/share/hadoop/common/lib/servlet-api-2.5.jar:/usr/local/hadoop/share/hadoop/common/lib/jsr305-1.3.9.jar:/usr/local/hadoop/share/hadoop/common/lib/hamcrest-core-1.3.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-net-3.1.jar:/usr/local/hadoop/share/hadoop/common/lib/jettison-1.1.jar:/usr/local/hadoop/share/hadoop/common/lib/apacheds-i18n-2.0.0-M15.jar:/usr/local/hadoop/share/hadoop/common/lib/jsp-api-2.1.jar:/usr/local/hadoop/share/hadoop/common/lib/snappy-java-1.0.4.1.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-compress-1.4.1.jar:/usr/local/hadoop/share/hadoop/common/lib/netty-3.6.2.Final.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-lang-2.6.jar:/usr/local/hadoop/share/hadoop/common/lib/jaxb-api-2.2.2.jar:/usr/local/hadoop/share/hadoop/common/lib/mockito-all-1.8.5.jar:/usr/local/hadoop/share/hadoop/common/lib/java-xmlbuilder-0.4.jar:/usr/local/hadoop/share/hadoop/common/lib/jasper-runtime-5.5.23.jar:/usr/local/hadoop/share/hadoop/common/lib/xmlenc-0.52.jar:/usr/local/hadoop/share/hadoop/common/lib/junit-4.11.jar:/usr/local/hadoop/share/hadoop/common/lib/jsch-0.1.42.jar:/usr/local/hadoop/share/hadoop/common/lib/jetty-util-6.1.26.jar:/usr/local/hadoop/share/hadoop/common/lib/zookeeper-3.4.6.jar:/usr/local/hadoop/share/hadoop/common/lib/jackson-core-asl-1.9.13.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-collections-3.2.1.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-math3-3.1.1.jar:/usr/local/hadoop/share/hadoop/common/lib/protobuf-java-2.5.0.jar:/usr/local/hadoop/share/hadoop/common/lib/jets3t-0.9.0.jar:/usr/local/hadoop/share/hadoop/common/lib/httpclient-4.2.5.jar:/usr/local/hadoop/share/hadoop/common/lib/avro-1.7.4.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-cli-1.2.jar:/usr/local/hadoop/share/hadoop/common/lib/jersey-server-1.9.jar:/usr/local/hadoop/share/hadoop/common/lib/hadoop-annotations-2.5.1.jar:/usr/local/hadoop/share/hadoop/common/lib/jasper-compiler-5.5.23.jar:/usr/local/hadoop/share/hadoop/common/lib/slf4j-api-1.7.5.jar:/usr/local/hadoop/share/hadoop/common/lib/api-util-1.0.0-M20.jar:/usr/local/hadoop/share/hadoop/common/lib/asm-3.2.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-beanutils-core-1.8.0.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-httpclient-3.1.jar:/usr/local/hadoop/share/hadoop/common/lib/apacheds-kerberos-codec-2.0.0-M15.jar:/usr/local/hadoop/share/hadoop/common/lib/api-asn1-api-1.0.0-M20.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-digester-1.8.jar:/usr/local/hadoop/share/hadoop/common/lib/hadoop-auth-2.5.1.jar:/usr/local/hadoop/share/hadoop/common/lib/httpcore-4.2.5.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-io-2.4.jar:/usr/local/hadoop/share/hadoop/common/lib/jackson-mapper-asl-1.9.13.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-el-1.0.jar:/usr/local/hadoop/share/hadoop/common/lib/stax-api-1.0-2.jar:/usr/local/hadoop/share/hadoop/common/lib/jersey-json-1.9.jar:/usr/local/hadoop/share/hadoop/common/hadoop-common-2.5.1.jar:/usr/local/hadoop/share/hadoop/common/hadoop-common-2.5.1-tests.jar:/usr/local/hadoop/share/hadoop/common/hadoop-nfs-2.5.1.jar:/usr/local/hadoop/share/hadoop/hdfs:/usr/local/hadoop/share/hadoop/hdfs/lib/jetty-6.1.26.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/commons-codec-1.4.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/jersey-core-1.9.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/log4j-1.2.17.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/commons-daemon-1.0.13.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/commons-logging-1.1.3.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/guava-11.0.2.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/servlet-api-2.5.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/jsr305-1.3.9.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/jsp-api-2.1.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/netty-3.6.2.Final.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/commons-lang-2.6.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/jasper-runtime-5.5.23.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/xmlenc-0.52.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/jetty-util-6.1.26.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/jackson-core-asl-1.9.13.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/protobuf-java-2.5.0.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/commons-cli-1.2.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/jersey-server-1.9.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/asm-3.2.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/commons-io-2.4.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/jackson-mapper-asl-1.9.13.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/commons-el-1.0.jar:/usr/local/hadoop/share/hadoop/hdfs/hadoop-hdfs-2.5.1.jar:/usr/local/hadoop/share/hadoop/hdfs/hadoop-hdfs-2.5.1-tests.jar:/usr/local/hadoop/share/hadoop/hdfs/hadoop-hdfs-nfs-2.5.1.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/jackson-xc-1.9.13.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/jetty-6.1.26.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/commons-codec-1.4.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/jersey-core-1.9.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/jaxb-impl-2.2.3-1.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/log4j-1.2.17.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/jersey-client-1.9.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/jersey-guice-1.9.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/jline-0.9.94.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/jackson-jaxrs-1.9.13.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/xz-1.0.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/commons-logging-1.1.3.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/guava-11.0.2.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/guice-servlet-3.0.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/activation-1.1.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/servlet-api-2.5.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/jsr305-1.3.9.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/jettison-1.1.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/commons-compress-1.4.1.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/netty-3.6.2.Final.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/commons-lang-2.6.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/jaxb-api-2.2.2.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/guice-3.0.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/jetty-util-6.1.26.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/zookeeper-3.4.6.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/jackson-core-asl-1.9.13.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/commons-collections-3.2.1.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/protobuf-java-2.5.0.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/javax.inject-1.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/aopalliance-1.0.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/commons-cli-1.2.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/jersey-server-1.9.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/leveldbjni-all-1.8.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/asm-3.2.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/commons-httpclient-3.1.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/commons-io-2.4.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/jackson-mapper-asl-1.9.13.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/stax-api-1.0-2.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/lib/jersey-json-1.9.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/hadoop-yarn-server-resourcemanager-2.5.1.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/hadoop-yarn-applications-distributedshell-2.5.1.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/hadoop-yarn-server-common-2.5.1.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/hadoop-yarn-applications-unmanaged-am-launcher-2.5.1.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/hadoop-yarn-server-applicationhistoryservice-2.5.1.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/hadoop-yarn-server-tests-2.5.1.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/hadoop-yarn-server-web-proxy-2.5.1.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/hadoop-yarn-common-2.5.1.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/hadoop-yarn-api-2.5.1.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/hadoop-yarn-server-nodemanager-2.5.1.jar:/usr/local/hadoop-2.5.1/share/hadoop/yarn/hadoop-yarn-client-2.5.1.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/jersey-core-1.9.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/log4j-1.2.17.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/jersey-guice-1.9.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/xz-1.0.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/guice-servlet-3.0.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/paranamer-2.3.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/hamcrest-core-1.3.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/snappy-java-1.0.4.1.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/commons-compress-1.4.1.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/netty-3.6.2.Final.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/guice-3.0.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/junit-4.11.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/jackson-core-asl-1.9.13.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/protobuf-java-2.5.0.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/avro-1.7.4.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/javax.inject-1.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/aopalliance-1.0.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/jersey-server-1.9.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/hadoop-annotations-2.5.1.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/leveldbjni-all-1.8.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/asm-3.2.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/commons-io-2.4.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/jackson-mapper-asl-1.9.13.jar:/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.5.1-tests.jar:/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.1.jar:/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-hs-2.5.1.jar:/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.5.1.jar:/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.5.1.jar:/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-app-2.5.1.jar:/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-hs-plugins-2.5.1.jar:/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-common-2.5.1.jar:/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-shuffle-2.5.1.jar:/contrib/capacity-scheduler/*.jar
STARTUP_MSG:   build = https://git-wip-us.apache.org/repos/asf/hadoop.git -r 2e18d179e4a8065b6a9f29cf2de9451891265cce; compiled by 'jenkins' on 2014-09-05T23:11Z
STARTUP_MSG:   java = 1.8.0_20
************************************************************/
14/10/10 22:20:25 INFO namenode.NameNode: registered UNIX signal handlers for [TERM, HUP, INT]
14/10/10 22:20:25 INFO namenode.NameNode: createNameNode [-format]
Java HotSpot(TM) Client VM warning: You have loaded library /usr/local/hadoop-2.5.1/lib/native/libhadoop.so.1.0.0 which might have disabled stack guard. The VM will try to fix the stack guard now.
It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.
14/10/10 22:00:00 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Formatting using clusterid: CID-ea5581cc-e9ae-4ad4-8b99-a44ccb3f4c02
14/10/10 22:00:00 INFO namenode.FSNamesystem: fsLock is fair:true
14/10/10 22:00:00 INFO blockmanagement.DatanodeManager: dfs.block.invalidate.limit=1000
14/10/10 22:00:00 INFO blockmanagement.DatanodeManager: dfs.namenode.datanode.registration.ip-hostname-check=true
14/10/10 22:00:00 INFO blockmanagement.BlockManager: dfs.namenode.startup.delay.block.deletion.sec is set to 000:00:00:00.000
14/10/10 22:00:00 INFO blockmanagement.BlockManager: The block deletion will start around 2014 Oct 10 22:20:27
14/10/10 22:00:00 INFO util.GSet: Computing capacity for map BlocksMap
14/10/10 22:00:00 INFO util.GSet: VM type       = 32-bit
14/10/10 22:00:00 INFO util.GSet: 2.0% max memory 966.7 MB = 19.3 MB
14/10/10 22:00:00 INFO util.GSet: capacity      = 2^22 = 4194304 entries
14/10/10 22:00:00 INFO blockmanagement.BlockManager: dfs.block.access.token.enable=false
14/10/10 22:00:00 INFO blockmanagement.BlockManager: defaultReplication         = 1
14/10/10 22:00:00 INFO blockmanagement.BlockManager: maxReplication             = 512
14/10/10 22:00:00 INFO blockmanagement.BlockManager: minReplication             = 1
14/10/10 22:00:00 INFO blockmanagement.BlockManager: maxReplicationStreams      = 2
14/10/10 22:00:00 INFO blockmanagement.BlockManager: shouldCheckForEnoughRacks  = false
14/10/10 22:00:00 INFO blockmanagement.BlockManager: replicationRecheckInterval = 3000
14/10/10 22:00:00 INFO blockmanagement.BlockManager: encryptDataTransfer        = false
14/10/10 22:00:00 INFO blockmanagement.BlockManager: maxNumBlocksToLog          = 1000
14/10/10 22:00:00 INFO namenode.FSNamesystem: fsOwner             = aipi2014 (auth:SIMPLE)
14/10/10 22:00:00 INFO namenode.FSNamesystem: supergroup          = supergroup
14/10/10 22:00:00 INFO namenode.FSNamesystem: isPermissionEnabled = true
14/10/10 22:00:00 INFO namenode.FSNamesystem: HA Enabled: false
14/10/10 22:00:00 INFO namenode.FSNamesystem: Append Enabled: true
14/10/10 22:00:00 INFO util.GSet: Computing capacity for map INodeMap
14/10/10 22:00:00 INFO util.GSet: VM type       = 32-bit
14/10/10 22:00:00 INFO util.GSet: 1.0% max memory 966.7 MB = 9.7 MB
14/10/10 22:00:00 INFO util.GSet: capacity      = 2^21 = 2097152 entries
14/10/10 22:00:00 INFO namenode.NameNode: Caching file names occuring more than 10 times
14/10/10 22:00:00 INFO util.GSet: Computing capacity for map cachedBlocks
14/10/10 22:00:00 INFO util.GSet: VM type       = 32-bit
14/10/10 22:00:00 INFO util.GSet: 0.25% max memory 966.7 MB = 2.4 MB
14/10/10 22:00:00 INFO util.GSet: capacity      = 2^19 = 524288 entries
14/10/10 22:00:00 INFO namenode.FSNamesystem: dfs.namenode.safemode.threshold-pct = 0.9990000128746033
14/10/10 22:00:00 INFO namenode.FSNamesystem: dfs.namenode.safemode.min.datanodes = 0
14/10/10 22:00:00 INFO namenode.FSNamesystem: dfs.namenode.safemode.extension     = 30000
14/10/10 22:00:00 INFO namenode.FSNamesystem: Retry cache on namenode is enabled
14/10/10 22:00:00 INFO namenode.FSNamesystem: Retry cache will use 0.03 of total heap and retry cache entry expiry time is 600000 millis
14/10/10 22:00:00 INFO util.GSet: Computing capacity for map NameNodeRetryCache
14/10/10 22:00:00 INFO util.GSet: VM type       = 32-bit
14/10/10 22:00:00 INFO util.GSet: 0.029999999329447746% max memory 966.7 MB = 297.0 KB
14/10/10 22:00:00 INFO util.GSet: capacity      = 2^16 = 65536 entries
14/10/10 22:00:00 INFO namenode.NNConf: ACLs enabled? false
14/10/10 22:00:00 INFO namenode.NNConf: XAttrs enabled? true
14/10/10 22:00:00 INFO namenode.NNConf: Maximum size of an xattr: 16384
14/10/10 22:00:00 INFO namenode.FSImage: Allocated new BlockPoolId: BP-455075811-127.0.1.1-1412968829123
14/10/10 22:00:00 INFO common.Storage: Storage directory /home/aipi2014/hdfs/namenode has been successfully formatted.
14/10/10 22:00:00 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
14/10/10 22:00:00 INFO util.ExitUtil: Exiting with status 0
14/10/10 22:00:00 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at ubuntu/127.0.1.1
************************************************************/

Operațiile de pornire / oprire a proceselor Hadoop

Script-urile pentru operațiile de pornire / oprire a proceselor Hadoop sunt plasate în $HADOOP_INSTALL/sbin și se referă la:

  • sistemul de fișiere distribuit HDFS care gestionează procesele demon NameNode, DataNode și SecondaryDataNode
    aipi2014@ubuntu:~$ start-dfs.sh
    Starting namenodes on [localhost]
    localhost: starting namenode, logging to /usr/local/hadoop-2.5.1/logs/hadoop-aipi2014-namenode-ubuntu.out
    localhost: starting datanode, logging to /usr/local/hadoop-2.5.1/logs/hadoop-aipi2014-datanode-ubuntu.out
    Starting secondary namenodes [0.0.0.0]
    The authenticity of host '0.0.0.0 (0.0.0.0)' can't be established.
    ECDSA key fingerprint is bb:40:19:2c:64:82:15:d6:0f:a3:0e:a2:b2:a7:ae:5a.
    Are you sure you want to continue connecting (yes/no)? yes
    0.0.0.0: Warning: Permanently added '0.0.0.0' (ECDSA) to the list of known hosts.
    0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop-2.5.1/logs/hadoop-aipi2014-secondarynamenode-ubuntu.out
    • pornire: start-dfs.sh
    • oprire: stop-dfs.sh
  • procesul de gestiune a resurselor YARN care gestionează procesele demon ResourceManager și NodeManager
    aipi2014@ubuntu:~$ start-yarn.sh
    starting yarn daemons
    starting resourcemanager, logging to /usr/local/hadoop-2.5.1/logs/yarn-aipi2014-resourcemanager-ubuntu.out
    localhost: starting nodemanager, logging to /usr/local/hadoop-2.5.1/logs/yarn-aipi2014-nodemanager-ubuntu.out
    • pornire: start-yarn.sh
    • oprire: stop-yarn.sh

Verificarea faptului că aceste procese au fost pornite / oprite cu succes se face prin inspectarea proceselor java care rulează la un moment dat:

aipi2014@ubuntu:~$ jps
4883 ResourceManager
4566 DataNode
5223 Jps
5193 NodeManager
4427 NameNode
4749 SecondaryNameNode

Instrumente pentru monitorizarea cluster-ului

Framework-ul Hadoop pune la dispoziția utilizatorilor interfețe web ce permit monitorizarea cluster-ului:

  • procesul NameNode (http://localhost:50070) oferă informații cu privire la sistemul de fișiere distribuit HDFS, putând fi consultată inclusiv structura acestuia și descărcate resurse din cadrul său;
    hadoop_namenode.jpg
  • procesul ResourceManager (http://localhost:8088) conține date referitoare la sarcinile care au fost rulate, starea acestora, putând fi consultate și statistici cu privire la aplicațiile executate.
    hadoop_resourcemanager.jpg

Instalare HBase 0.98.6.1

Obținerea celei mai recente versiuni

  • se descarcă cea mai recentă versiune stabilă (lista poate fi consultată pe HBase Downloads)
    aipi2014@ubuntu:~$ cd /tmp
    aipi2014@ubuntu:/tmp$ wget http://mirrors.koehn.com/apache/hbase/stable/hbase-0.98.6.1-hadoop2-bin.tar.gz
  • se copiază în /usr/local, creându-se și o legătură simbolică spre aceasta
    aipi2014@ubuntu:/tmp$ tar xzf hbase-0.98.6.1-hadoop2-bin.tar.gz 
    aipi2014@ubuntu:/tmp$ sudo mv hbase-0.98.6.1-hadoop2 /usr/local/
    aipi2014@ubuntu:/tmp$ sudo ln -s /usr/local/hbase-0.98.6.1-hadoop2/ /usr/local/hbase
    aipi2014@ubuntu:/tmp$ rm -f hbase-0.98.6.1-hadoop2-bin.tar.gz
  • se specifică utilizatorul curent drept proprietarul acestui director
    aipi2014@ubuntu:~$ sudo chown -R aipi2014 /usr/local/hbase

Suprascrierea bibliotecilor Hadoop

În directorul $HBASE_INSTALL/lib, HBase stochează biblioteci Hadoop pe care le-ar folosi doar în situația în care nu ar fi utilizat în corelație cu acest framework (modul standalone). Întrucât această colecție de biblioteci nu este actualizată, acest proces trebuie realizat manual (bibliotecile respective din distribuția curentă Hadoop sunt copiate în contextul HBase).

aipi2014@ubuntu:/usr/local/hbase/lib$ cp /usr/local/hadoop/share/hadoop/common/*.jar ./
aipi2014@ubuntu:/usr/local/hbase/lib$ cp /usr/local/hadoop/share/hadoop/common/lib/*.jar ./
aipi2014@ubuntu:/usr/local/hbase/lib$ cp /usr/local/hadoop/share/hadoop/hdfs/*.jar ./
aipi2014@ubuntu:/usr/local/hbase/lib$ cp /usr/local/hadoop/share/hadoop/mapreduce/*.jar ./
aipi2014@ubuntu:/usr/local/hbase/lib$ cp /usr/local/hadoop/share/hadoop/yarn/*.jar ./
aipi2014@ubuntu:/usr/local/hbase/lib$ rm -f hadoop*2.2.0*

Eventual, se pot șterge manual și alte biblioteci pentru care există versiuni diferite.

Specificarea parametrilor în fișierele de configurare

hbase-env.sh

În fișierul hbase-env.sh trebuie specificată valoarea variabilei de sistem JAVA_HOME astfel încât aceasta să fie disponibilă de fiecare dată când pornește sistemul de baze de date HBase, precum și a variabilelor de sistem HBASE_REGIONSERVERS (fișierul de configurare pentru serverele de regiuni), respectiv HBASE_MANAGES_ZK (HBase gestionează propria instanță ZooKeeper):

aipi2014@ubuntu:/usr/local/hbase/conf$ sudo nano hbase-env.sh
hbase-env.sh
...
export JAVA_HOME=/usr/local/java/jdk1.8.0_20
export HBASE_REGIONSERVERS=/usr/local/hbase/conf/regionservers
export HBASE_MANAGES_ZK=true

hbase-site.xml

În cadrul fișierului de configurare hbase-site.xml sunt specificate proprietăți care determină modul în care operează sistemul de baze de date distribuit HBase:

  • hbase.rootdir - indică denumirea locației în care sistemul de baze de date distribuit HBase va stoca informațiile din tabele; întrucât este folosit HDFS, se va specifica aceeași locașie ca în cazul proprietății fs.default.name din cadrul fișierului de configurare $HADOOP_INSTALL/etc/hadoop/core-site.xml, sufixat de /hbase;
  • hbase.cluster.distributed - poate lua valorile:
    • true - pentru modul de lucru (pseudo-)distribuit;
    • false - pentru modul de lucru de sine stătător.
  • hbase.zookeeper.quorum - reprezintă adresa locației la care procesul ZooKeeper (ce monitorizează clusterele) își stochează datele;
  • dfs.replication - stabilește nivelul de replicare (de câte ori va fi stocat același bloc în cadrul unor clustere diferite); trebuie să aibă aceeași valoare ca în cazul proprietății omonime din $HADOOP_INSTALLATION/etc/hadoop/core-site.xml
  • hbase.zookeeper.property.clientPort - configurează portul prin care comunică diferitele instanțe ZooKeeper;
  • hbase.zookeeper.property.dataDir - precizează locația din cadrul sistemului de fișiere local în care procesul ZooKeeper își stochează datele temporare.
aipi2014@ubuntu:/usr/local/hbase/conf$ nano hbase-site.xml
hbase-site.xml
<configuration>
  <property>
    <name>fs.default.name</name> 
    <value>hdfs://localhost:9000/hbase</value>
  </property>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>localhost</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.clientPort</name>
    <value>2181</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/home/aipi2014/hbase/zookeeper</value>
  </property>
</configuration>

Operațiile de pornire / oprire a instanței HBase

Script-urile pentru operațiile de pornire / oprire a proceselor Hadoop sunt plasate în $HBASE_INSTALL/bin și gestionează procesele HMaster, HRegionServer ale sistemului de baze de date distribuite HBase și HQuorumPeer al procesului ZooKeeper.

  • pornire
    aipi2014@ubuntu:~$ start-hbase.sh
    localhost: starting zookeeper, logging to /usr/local/hbase/bin/../logs/hbase-aipi2014-zookeeper-ubuntu.out
    starting master, logging to /usr/local/hbase/bin/../logs/hbase-aipi2014-master-ubuntu.out
    localhost: starting regionserver, logging to /usr/local/hbase/bin/../logs/hbase-aipi2014-regionserver-ubuntu.out
  • oprire
    aipi2014@ubuntu:~$ stop-hbase.sh

Verificarea faptului că aceste procese au fost pornite / oprite cu succes se face prin inspectarea proceselor java care rulează la un moment dat:

aipi2014@ubuntu:~$ jps
4282 ResourceManager
7277 HQuorumPeer
4489 NodeManager
3853 DataNode
7334 HMaster
7685 Jps
7541 HRegionServer
4109 SecondaryNameNode
3653 NameNode

Instrumente pentru monitorizarea sistemului de baze de date

Sistemul de baze de date distribuit HBase permite gestiunea informațiilor stocate:

  • în mod text, prin intermediul unei console (shell);
  • vizual, prin intermediul unei interfețe web.

Consola (Shell)

Prin intermediul consolei (shell), accesibilă prin comanda $HBASE_INSTALL/bin/hbase shell se permite realizarea tuturor operațiilor DDL/DML specifice acestui tip de sistem de baze de date:

aipi2014@ubuntu:~$ hbase shell
2014-10-10 23:07:59,084 INFO  [main] Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.98.6.1-hadoop2, r96a1af660b33879f19a47e9113bf802ad59c7146, Sun Sep 14 21:27:25 PDT 2014

hbase(main):001:0> list
TABLE                                                                           
0 row(s) in 0.1250 seconds

=> []
hbase(main):002:0> exit

Interfața Web

Prin intermediul interfeței web, disponibilă la http://localhost:60010, utilizatorul are la dispoziție doar operații de consultare a stării bazei de date sau a vizualizării tabelelor.

hadoop_hbase.jpg

Resurse

utile/instalare_hadoop_hbase.1413178620.txt.gz · Last modified: 2014/10/13 08:37 by Andrei Roșu-Cojocaru
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0