====== Instalare Hadoop 2.6.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 ===== - se instalează serverul SSH\\ student@aipi2015:~$ sudo apt-get install openssh-server - se generează o cheie RSA (cu parola vidă) pentru utilizatorul curent\\ student@aipi2015:~$ ssh-keygen -t rsa -P "" Generating public/private rsa key pair. Enter file in which to save the key (/home/student/.ssh/id_rsa): Created directory '/home/student/.ssh'. Your identification has been saved in /home/student/.ssh/id_rsa. Your public key has been saved in /home/student/.ssh/id_rsa.pub. The key fingerprint is: 36:56:1b:da:48:03:69:66:d3:36:f5:e6:9c:f7:a7:9c student@aipi2015 Deși nu este recomandată folosirea de parole vide, adoptarea unui astfel de comportament în acest caz este dictată de faptul că, în caz contrar, 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ă. - se indică permisiunile de acces SSH pe mașina locală folosind cheia generată\\ student@aipi2015:~$ cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys - 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\\ student@aipi2015:~$ ssh localhost The authenticity of host 'localhost (127.0.0.1)' can't be established. ECDSA key fingerprint is 7a:0d:10:b0:d2:54:09:82:85:57:37:bd:7a:11:3a:d4. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts. Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.19.0-25-generic x86_64) * 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 ''yes''; * 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\\ student@aipi2015:~$ 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: student@aipi2015:~$ 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: student@aipi2015:~$ 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 [[http://hadoop.apache.org/releases.html#Download|Hadoop Releases]])\\ student@aipi2015:~$ cd /tmp student@aipi2015:/tmp$ wget http://mirrors.hostingromania.ro/apache.org/hadoop/common/hadoop-2.6.1/hadoop-2.6.1.tar.gz * se copiază în /usr/local, creându-se și o legătură simbolică spre aceasta\\ student@aipi2015:/tmp$ tar xzf hadoop-2.6.1.tar.gz student@aipi2015:/tmp$ sudo mv hadoop-2.6.1 /usr/local/ student@aipi2015:/tmp$ sudo ln -s /usr/local/hadoop-2.6.1/ /usr/local/hadoop student@aipi2015:/tmp$ rm -f hadoop-2.6.1.tar.gz * se specifică utilizatorul curent drept proprietarul acestui director\\ student@aipi2015:~$ sudo chown -R student /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: student@aipi2015:~$ mkdir $HOME/hdfs student@aipi2015:~$ mkdir $HOME/hdfs/name student@aipi2015:~$ mkdir $HOME/hdfs/data student@aipi2015:~$ mkdir $HOME/hdfs/tmp student@aipi2015:~$ 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: student@aipi2015:~$ sudo nano ~/.bashrc ... export JAVA_HOME=/usr/local/java/jdk1.8.0_60 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:\\ student@aipi2015:~$ 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: student@aipi2015:/usr/local/hadoop/etc/hadoop$ sudo nano hadoop-env.sh ... export JAVA_HOME=/usr/local/java/jdk1.8.0_60 ==== 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''. student@aipi2015:/usr/local/hadoop/etc/hadoop$ sudo nano core-site.xml fs.default.name hdfs://localhost:9000 hadoop.tmp.dir /home/student/hdfs/tmp ==== 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: student@aipi2015:/usr/local/hadoop/etc/hadoop$ sudo nano yarn-site.xml yarn.nodemanager.aux-services mapreduce_shuffle yarn.nodemanager.aux-services.mapreduce.shuffle.class org.apache.hadoop.mapred.ShuffleHandler ==== 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): student@aipi2015:/usr/local/hadoop/etc/hadoop$ cp mapred-site.xml.template mapred-site.xml student@aipi2015:/usr/local/hadoop/etc/hadoop$ nano mapred-site.xml mapreduce.framework.name yarn ==== 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). student@aipi2015:/usr/local/hadoop/etc/hadoop$ sudo nano hdfs-site.xml dfs.name.dir /home/student/hdfs/name dfs.data.dir /home/student/hdfs/data dfs.replication 1 ===== Formatarea sistemului de fișiere distribuit HDFS ===== Înainte de a putea fi utilizat, sistemul de fișiere distribuit HDFS trebuie să fie formatat: student@aipi2015:~$ hdfs namenode -format 15/09/26 04:54:19 INFO namenode.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG: host = aipi2015/127.0.1.1 STARTUP_MSG: args = [-format] STARTUP_MSG: version = 2.6.1 STARTUP_MSG: classpath = /usr/local/hadoop-2.6.1/etc/hadoop:/usr/local/hadoop/share/hadoop/common/lib/protobuf-java-2.5.0.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-httpclient-3.1.jar:/usr/local/hadoop/share/hadoop/common/lib/jaxb-impl-2.2.3-1.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-configuration-1.6.jar:/usr/local/hadoop/share/hadoop/common/lib/jasper-compiler-5.5.23.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-compress-1.4.1.jar:/usr/local/hadoop/share/hadoop/common/lib/jettison-1.1.jar:/usr/local/hadoop/share/hadoop/common/lib/curator-client-2.6.0.jar:/usr/local/hadoop/share/hadoop/common/lib/httpclient-4.2.5.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-net-3.1.jar:/usr/local/hadoop/share/hadoop/common/lib/api-asn1-api-1.0.0-M20.jar:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar:/usr/local/hadoop/share/hadoop/common/lib/jsp-api-2.1.jar:/usr/local/hadoop/share/hadoop/common/lib/avro-1.7.4.jar:/usr/local/hadoop/share/hadoop/common/lib/zookeeper-3.4.6.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-collections-3.2.1.jar:/usr/local/hadoop/share/hadoop/common/lib/jersey-core-1.9.jar:/usr/local/hadoop/share/hadoop/common/lib/jersey-server-1.9.jar:/usr/local/hadoop/share/hadoop/common/lib/jackson-jaxrs-1.9.13.jar:/usr/local/hadoop/share/hadoop/common/lib/jetty-util-6.1.26.jar:/usr/local/hadoop/share/hadoop/common/lib/httpcore-4.2.5.jar:/usr/local/hadoop/share/hadoop/common/lib/jaxb-api-2.2.2.jar:/usr/local/hadoop/share/hadoop/common/lib/apacheds-kerberos-codec-2.0.0-M15.jar:/usr/local/hadoop/share/hadoop/common/lib/asm-3.2.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-el-1.0.jar:/usr/local/hadoop/share/hadoop/common/lib/mockito-all-1.8.5.jar:/usr/local/hadoop/share/hadoop/common/lib/jackson-core-asl-1.9.13.jar:/usr/local/hadoop/share/hadoop/common/lib/hadoop-annotations-2.6.1.jar:/usr/local/hadoop/share/hadoop/common/lib/curator-framework-2.6.0.jar:/usr/local/hadoop/share/hadoop/common/lib/guava-11.0.2.jar:/usr/local/hadoop/share/hadoop/common/lib/netty-3.6.2.Final.jar:/usr/local/hadoop/share/hadoop/common/lib/curator-recipes-2.6.0.jar:/usr/local/hadoop/share/hadoop/common/lib/junit-4.11.jar:/usr/local/hadoop/share/hadoop/common/lib/stax-api-1.0-2.jar:/usr/local/hadoop/share/hadoop/common/lib/jackson-mapper-asl-1.9.13.jar:/usr/local/hadoop/share/hadoop/common/lib/xz-1.0.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-cli-1.2.jar:/usr/local/hadoop/share/hadoop/common/lib/api-util-1.0.0-M20.jar:/usr/local/hadoop/share/hadoop/common/lib/htrace-core-3.0.4.jar:/usr/local/hadoop/share/hadoop/common/lib/jets3t-0.9.0.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-digester-1.8.jar:/usr/local/hadoop/share/hadoop/common/lib/jackson-xc-1.9.13.jar:/usr/local/hadoop/share/hadoop/common/lib/hamcrest-core-1.3.jar:/usr/local/hadoop/share/hadoop/common/lib/jsr305-1.3.9.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-io-2.4.jar:/usr/local/hadoop/share/hadoop/common/lib/xmlenc-0.52.jar:/usr/local/hadoop/share/hadoop/common/lib/snappy-java-1.0.4.1.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-beanutils-1.7.0.jar:/usr/local/hadoop/share/hadoop/common/lib/jersey-json-1.9.jar:/usr/local/hadoop/share/hadoop/common/lib/gson-2.2.4.jar:/usr/local/hadoop/share/hadoop/common/lib/jasper-runtime-5.5.23.jar:/usr/local/hadoop/share/hadoop/common/lib/hadoop-auth-2.6.1.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-lang-2.6.jar:/usr/local/hadoop/share/hadoop/common/lib/java-xmlbuilder-0.4.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-codec-1.4.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-math3-3.1.1.jar:/usr/local/hadoop/share/hadoop/common/lib/slf4j-api-1.7.5.jar:/usr/local/hadoop/share/hadoop/common/lib/apacheds-i18n-2.0.0-M15.jar:/usr/local/hadoop/share/hadoop/common/lib/servlet-api-2.5.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-beanutils-core-1.8.0.jar:/usr/local/hadoop/share/hadoop/common/lib/log4j-1.2.17.jar:/usr/local/hadoop/share/hadoop/common/lib/jetty-6.1.26.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/jsch-0.1.42.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-logging-1.1.3.jar:/usr/local/hadoop/share/hadoop/common/hadoop-common-2.6.1.jar:/usr/local/hadoop/share/hadoop/common/hadoop-nfs-2.6.1.jar:/usr/local/hadoop/share/hadoop/common/hadoop-common-2.6.1-tests.jar:/usr/local/hadoop/share/hadoop/hdfs:/usr/local/hadoop/share/hadoop/hdfs/lib/protobuf-java-2.5.0.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/commons-daemon-1.0.13.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/jsp-api-2.1.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/jersey-core-1.9.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/jersey-server-1.9.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/jetty-util-6.1.26.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/asm-3.2.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/commons-el-1.0.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/jackson-core-asl-1.9.13.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/guava-11.0.2.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/netty-3.6.2.Final.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/jackson-mapper-asl-1.9.13.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/commons-cli-1.2.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/htrace-core-3.0.4.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/xml-apis-1.3.04.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/jsr305-1.3.9.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/commons-io-2.4.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/xmlenc-0.52.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/jasper-runtime-5.5.23.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/commons-lang-2.6.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/commons-codec-1.4.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/servlet-api-2.5.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/log4j-1.2.17.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/jetty-6.1.26.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/xercesImpl-2.9.1.jar:/usr/local/hadoop/share/hadoop/hdfs/lib/commons-logging-1.1.3.jar:/usr/local/hadoop/share/hadoop/hdfs/hadoop-hdfs-nfs-2.6.1.jar:/usr/local/hadoop/share/hadoop/hdfs/hadoop-hdfs-2.6.1.jar:/usr/local/hadoop/share/hadoop/hdfs/hadoop-hdfs-2.6.1-tests.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/guice-3.0.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/protobuf-java-2.5.0.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/commons-httpclient-3.1.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/jaxb-impl-2.2.3-1.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/aopalliance-1.0.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/commons-compress-1.4.1.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/jettison-1.1.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/leveldbjni-all-1.8.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/zookeeper-3.4.6.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/commons-collections-3.2.1.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/jersey-core-1.9.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/jersey-server-1.9.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/jackson-jaxrs-1.9.13.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/jetty-util-6.1.26.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/jersey-guice-1.9.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/jaxb-api-2.2.2.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/asm-3.2.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/jackson-core-asl-1.9.13.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/guava-11.0.2.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/netty-3.6.2.Final.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/stax-api-1.0-2.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/jackson-mapper-asl-1.9.13.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/xz-1.0.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/commons-cli-1.2.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/jackson-xc-1.9.13.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/jsr305-1.3.9.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/jline-0.9.94.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/commons-io-2.4.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/javax.inject-1.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/jersey-json-1.9.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/guice-servlet-3.0.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/commons-lang-2.6.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/commons-codec-1.4.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/jersey-client-1.9.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/servlet-api-2.5.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/log4j-1.2.17.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/jetty-6.1.26.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/activation-1.1.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/lib/commons-logging-1.1.3.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/hadoop-yarn-server-tests-2.6.1.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/hadoop-yarn-server-web-proxy-2.6.1.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/hadoop-yarn-registry-2.6.1.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/hadoop-yarn-client-2.6.1.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/hadoop-yarn-api-2.6.1.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/hadoop-yarn-applications-distributedshell-2.6.1.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/hadoop-yarn-applications-unmanaged-am-launcher-2.6.1.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/hadoop-yarn-server-resourcemanager-2.6.1.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/hadoop-yarn-server-common-2.6.1.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/hadoop-yarn-server-applicationhistoryservice-2.6.1.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/hadoop-yarn-common-2.6.1.jar:/usr/local/hadoop-2.6.1/share/hadoop/yarn/hadoop-yarn-server-nodemanager-2.6.1.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/guice-3.0.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/protobuf-java-2.5.0.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/aopalliance-1.0.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/commons-compress-1.4.1.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/leveldbjni-all-1.8.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/avro-1.7.4.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/jersey-core-1.9.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/jersey-server-1.9.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/jersey-guice-1.9.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/asm-3.2.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/jackson-core-asl-1.9.13.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/hadoop-annotations-2.6.1.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/netty-3.6.2.Final.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/junit-4.11.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/jackson-mapper-asl-1.9.13.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/xz-1.0.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/hamcrest-core-1.3.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/commons-io-2.4.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/snappy-java-1.0.4.1.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/javax.inject-1.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/guice-servlet-3.0.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/log4j-1.2.17.jar:/usr/local/hadoop/share/hadoop/mapreduce/lib/paranamer-2.3.jar:/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.6.1.jar:/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-app-2.6.1.jar:/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-hs-2.6.1.jar:/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-hs-plugins-2.6.1.jar:/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.6.1.jar:/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.6.1-tests.jar:/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.1.jar:/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-shuffle-2.6.1.jar:/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-common-2.6.1.jar:/contrib/capacity-scheduler/*.jar STARTUP_MSG: build = https://git-wip-us.apache.org/repos/asf/hadoop.git -r b4d876d837b830405ccdb6af94742f99d49f9c04; compiled by 'jenkins' on 2015-09-16T21:07Z STARTUP_MSG: java = 1.8.0_60 ************************************************************/ 15/09/26 04:54:19 INFO namenode.NameNode: registered UNIX signal handlers for [TERM, HUP, INT] 15/09/26 04:54:19 INFO namenode.NameNode: createNameNode [-format] 15/09/26 04:54:21 WARN common.Util: Path /home/student/hdfs/name should be specified as a URI in configuration files. Please update hdfs configuration. 15/09/26 04:54:21 WARN common.Util: Path /home/student/hdfs/name should be specified as a URI in configuration files. Please update hdfs configuration. Formatting using clusterid: CID-9fa0722d-3fbc-452a-b3a0-b4784d27a95b 15/09/26 04:54:21 INFO namenode.FSNamesystem: No KeyProvider found. 15/09/26 04:54:21 INFO namenode.FSNamesystem: fsLock is fair:true 15/09/26 04:54:21 INFO blockmanagement.DatanodeManager: dfs.block.invalidate.limit=1000 15/09/26 04:54:21 INFO blockmanagement.DatanodeManager: dfs.namenode.datanode.registration.ip-hostname-check=true 15/09/26 04:54:21 INFO blockmanagement.BlockManager: dfs.namenode.startup.delay.block.deletion.sec is set to 000:00:00:00.000 15/09/26 04:54:21 INFO blockmanagement.BlockManager: The block deletion will start around 2015 Sep 26 04:54:21 15/09/26 04:54:21 INFO util.GSet: Computing capacity for map BlocksMap 15/09/26 04:54:21 INFO util.GSet: VM type = 64-bit 15/09/26 04:54:21 INFO util.GSet: 2.0% max memory 966.7 MB = 19.3 MB 15/09/26 04:54:21 INFO util.GSet: capacity = 2^21 = 2097152 entries 15/09/26 04:54:21 INFO blockmanagement.BlockManager: dfs.block.access.token.enable=false 15/09/26 04:54:21 INFO blockmanagement.BlockManager: defaultReplication = 1 15/09/26 04:54:21 INFO blockmanagement.BlockManager: maxReplication = 512 15/09/26 04:54:21 INFO blockmanagement.BlockManager: minReplication = 1 15/09/26 04:54:21 INFO blockmanagement.BlockManager: maxReplicationStreams = 2 15/09/26 04:54:21 INFO blockmanagement.BlockManager: shouldCheckForEnoughRacks = false 15/09/26 04:54:21 INFO blockmanagement.BlockManager: replicationRecheckInterval = 3000 15/09/26 04:54:21 INFO blockmanagement.BlockManager: encryptDataTransfer = false 15/09/26 04:54:21 INFO blockmanagement.BlockManager: maxNumBlocksToLog = 1000 15/09/26 04:54:21 INFO namenode.FSNamesystem: fsOwner = student (auth:SIMPLE) 15/09/26 04:54:21 INFO namenode.FSNamesystem: supergroup = supergroup 15/09/26 04:54:21 INFO namenode.FSNamesystem: isPermissionEnabled = true 15/09/26 04:54:21 INFO namenode.FSNamesystem: HA Enabled: false 15/09/26 04:54:21 INFO namenode.FSNamesystem: Append Enabled: true 15/09/26 04:54:22 INFO util.GSet: Computing capacity for map INodeMap 15/09/26 04:54:22 INFO util.GSet: VM type = 64-bit 15/09/26 04:54:22 INFO util.GSet: 1.0% max memory 966.7 MB = 9.7 MB 15/09/26 04:54:22 INFO util.GSet: capacity = 2^20 = 1048576 entries 15/09/26 04:54:22 INFO namenode.NameNode: Caching file names occuring more than 10 times 15/09/26 04:54:22 INFO util.GSet: Computing capacity for map cachedBlocks 15/09/26 04:54:22 INFO util.GSet: VM type = 64-bit 15/09/26 04:54:22 INFO util.GSet: 0.25% max memory 966.7 MB = 2.4 MB 15/09/26 04:54:22 INFO util.GSet: capacity = 2^18 = 262144 entries 15/09/26 04:54:22 INFO namenode.FSNamesystem: dfs.namenode.safemode.threshold-pct = 0.9990000128746033 15/09/26 04:54:22 INFO namenode.FSNamesystem: dfs.namenode.safemode.min.datanodes = 0 15/09/26 04:54:22 INFO namenode.FSNamesystem: dfs.namenode.safemode.extension = 30000 15/09/26 04:54:22 INFO namenode.FSNamesystem: Retry cache on namenode is enabled 15/09/26 04:54:22 INFO namenode.FSNamesystem: Retry cache will use 0.03 of total heap and retry cache entry expiry time is 600000 millis 15/09/26 04:54:22 INFO util.GSet: Computing capacity for map NameNodeRetryCache 15/09/26 04:54:22 INFO util.GSet: VM type = 64-bit 15/09/26 04:54:22 INFO util.GSet: 0.029999999329447746% max memory 966.7 MB = 297.0 KB 15/09/26 04:54:22 INFO util.GSet: capacity = 2^15 = 32768 entries 15/09/26 04:54:22 INFO namenode.NNConf: ACLs enabled? false 15/09/26 04:54:22 INFO namenode.NNConf: XAttrs enabled? true 15/09/26 04:54:22 INFO namenode.NNConf: Maximum size of an xattr: 16384 15/09/26 04:54:22 INFO namenode.FSImage: Allocated new BlockPoolId: BP-819976783-127.0.1.1-1443232462466 15/09/26 04:54:22 INFO common.Storage: Storage directory /home/student/hdfs/name has been successfully formatted. 15/09/26 04:54:22 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0 15/09/26 04:54:22 INFO util.ExitUtil: Exiting with status 0 15/09/26 04:54:22 INFO namenode.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at aipi2015/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\\ student@aipi2015:~$ start-dfs.sh Starting namenodes on [localhost] Starting namenodes on [localhost] localhost: starting namenode, logging to /usr/local/hadoop-2.6.1/logs/hadoop-student-namenode-aipi2015.out localhost: starting datanode, logging to /usr/local/hadoop-2.6.1/logs/hadoop-student-datanode-aipi2015.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 7a:0d:10:b0:d2:54:09:82:85:57:37:bd:7a:11:3a:d4. 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.6.1/logs/hadoop-student-secondarynamenode-aipi2015.out * pornire: ''start-dfs.sh'' * oprire: ''stop-dfs.sh'' * procesul de gestiune a resurselor YARN care gestionează procesele demon ResourceManager și NodeManager\\ student@aipi2015:~$ start-yarn.sh starting yarn daemons starting resourcemanager, logging to /usr/local/hadoop-2.6.1/logs/yarn-student-resourcemanager-aipi2015.out localhost: starting nodemanager, logging to /usr/local/hadoop-2.6.1/logs/yarn-student-nodemanager-aipi2015.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: student@aipi2015:~$ jps 4272 SecondaryNameNode 4821 Jps 3959 NameNode 4073 DataNode 4410 ResourceManager 4526 NodeManager ===== 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;\\ {{ :utile:hadoop_hbase:hadoop_namenode.png?nolink }} * 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.\\ {{ :utile:hadoop_hbase:hadoop_resourcemanager.png?nolink&800 }} ====== Instalare HBase 1.1.2 ====== ===== Obținerea celei mai recente versiuni ===== * se descarcă cea mai recentă versiune stabilă (lista poate fi consultată pe [[http://www.apache.org/dyn/closer.cgi/hbase/|HBase Downloads]])\\ student@aipi2015:~$ cd /tmp student@aipi2015:/tmp$ wget http://mirrors.hostingromania.ro/apache.org/hbase/1.1.2/hbase-1.1.2-bin.tar.gz * se copiază în /usr/local, creându-se și o legătură simbolică spre aceasta\\ student@aipi2015:/tmp$ tar xzf hbase-1.1.2-bin.tar.gz student@aipi2015:/tmp$ sudo mv hbase-1.1.2 /usr/local/ student@aipi2015:/tmp$ sudo ln -s /usr/local/hbase-1.1.2/ /usr/local/hbase student@aipi2015:/tmp$ rm -f hbase-1.1.2-bin.tar.gz * se specifică utilizatorul curent drept proprietarul acestui director\\ student@aipi2015:~$ sudo chown -R student /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). student@aipi2015:/usr/local/hbase/lib$ cp /usr/local/hadoop/share/hadoop/common/*.jar ./ student@aipi2015:/usr/local/hbase/lib$ cp /usr/local/hadoop/share/hadoop/common/lib/*.jar ./ student@aipi2015:/usr/local/hbase/lib$ cp /usr/local/hadoop/share/hadoop/hdfs/*.jar ./ student@aipi2015:/usr/local/hbase/lib$ cp /usr/local/hadoop/share/hadoop/mapreduce/*.jar ./ student@aipi2015:/usr/local/hbase/lib$ cp /usr/local/hadoop/share/hadoop/yarn/*.jar ./ student@aipi2015:/usr/local/hbase/lib$ rm -f hadoop*2.5.1* 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): student@aipi2015:/usr/local/hbase/conf$ sudo nano hbase-env.sh ... export JAVA_HOME=/usr/local/java/jdk1.8.0_60 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. student@aipi2015:/usr/local/hbase/conf$ nano hbase-site.xml fs.default.name hdfs://localhost:9000/hbase hbase.cluster.distributed true hbase.zookeeper.quorum localhost hbase.zookeeper.property.clientPort 2181 hbase.zookeeper.property.dataDir /home/student/hbase/zookeeper ===== 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\\ student@aipi2015:~$ start-hbase.sh localhost: starting zookeeper, logging to /usr/local/hbase/bin/../logs/hbase-student-zookeeper-aipi2015.out starting master, logging to /usr/local/hbase/bin/../logs/hbase-student-master-aipi2015.out starting regionserver, logging to /usr/local/hbase/bin/../logs/hbase-student-1-regionserver-aipi2015.out * oprire\\ student@aipi2015:~$ 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: student@aipi2015:~$ jps 7089 HMaster 6167 SecondaryNameNode 5976 DataNode 6360 ResourceManager 7032 HQuorumPeer 5849 NameNode 6489 NodeManager 7593 Jps 7180 HRegionServer ===== 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 (neimplementată pentru versiunea 1.1.2). ==== 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: student@aipi2015:~$ hbase shell HBase Shell; enter 'help' for list of supported commands. Type "exit" to leave the HBase Shell Version 1.1.2, rcc2b70cf03e3378800661ec5cab11eb43fafe0fc, Wed Aug 26 20:11:27 PDT 2015 hbase(main):001:0> list TABLE 0 row(s) in 0.4310 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. ====== Plugin Hadoop pentru Eclipse ===== Dezvoltarea aplicațiilor Hadoop / HDFS în Eclipse poate fi facilitată de folosirea [[http://aipi2015.andreirosucojocaru.ro/hadoop-eclipse-plugin-2.6.1.jar|unui plugin]]. Arhiva ''.jar'' corespunzătoare acestuia trebuie copiată în subdirectorul ''plugins'' al mediului de dezvoltare Eclipse pentru a putea fi folosit corespunzător. Există posibilitatea de a exista unele probleme de compatibilitate cu anumite versiuni Hadoop / Eclipse. Pentru remedierea acestora, plugin-ul trebuie compilat din surse. **1.** Se indică versiunile curente ale bibliotecilor Hadoop existente în versiunea instalată pe mașina locală, în fișierele * ''~/hadoop2x-eclipse-plugin/ivy/libraries.properties'' * ''~/hadoop2x-eclipse-plugin/src/ivy/libraries.properties'' Specificarea unor valori incorecte pentru aceste proprietăți va conduce la eșuarea procesului de obținere a unui plugin pe baza versiunilor curente de Eclipse și Hadoop instalate pe mașina locală. **2.** Se precizează căile către versiunile de Hadoop / Eclipse existente pe mașina pe care se dorește folosirea acestuia. student@aipi2015:~/hadoop2x-eclipse-plugin$ cd src/contrib/eclipse-plugin student@aipi2015:~/hadoop2x-eclipse-plugin/src/contrib/eclipse-plugin$ ant jar -Dversion=2.6.1 -Declipse.home=/opt/eclipse -Dhadoop.home=/usr/local/hadoop Arhiva ''.jar'' corespunzătoare plugin-ului obținut va fi plasată în ''~/hadoop2x-eclipse-plugin/build/contrib/eclipse-plugin''. Se selectează //Window// → //Perspective// → //Open Perspective// → //Other...// și din cadrul listei de perspective disponibile se selectează opțiunea //Map/Reduce//. {{ :utile:hadoop_hbase:hadoop_plugin01.png?nolink }} În bara de perspective va apărea secțiunea //Map/Reduce Locations// în care vor trebui configurați anumiți parametrii legați de localizarea framework-ului Hadoop, prin: - click dreapta în zona de lucru a perspectivei; sau - accesarea pictogramei reprezentând un elefant și semnul + ({{:utile:hadoop_hbase:hadoop_icon.png?nolink}}). {{ :utile:hadoop_hbase:hadoop_plugin02.png?nolink&750 }} Definirea unei locații Hadoop presupune: * asocierea unei denumiri (nu există restricții în acest sens); * specificarea adresei mașinii și a portului pe care rulează sistemul de fișiere HDFS (secțiunea ''DFS Master''): ''localhost:9000''; * specificarea adresei mașinii și a portului pe care rulează procesul care gestionează aplicațiile de tip Map/Reduce (secțiunea ''Map/Reduce(V2) Master''): ''localhost:50020''; * indicarea utilizatorului care va dezvolta aplicații de tip Map/Reduce. {{ :utile:hadoop_hbase:hadoop_plugin03.png?nolink }} În urma realizării acestor configurații, locația respectivă va fi disponibilă pentru a fi accesată în secțiunea //Map/Reduce Locations//: {{ :utile:hadoop_hbase:hadoop_plugin04.png?nolink&750 }} De asemenea, în secțiunea //Project Explorer// va fi disponibil un navigator pentru sistemul de fișiere HDFS (DFS Locations) care oferă posibilitatea interacțiunii cu sistemul de fișiere local prin operații de tip încărcare / descărcare de diferite resurse. {{ :utile:hadoop_hbase:hadoop_plugin05.png?nolink }} Configurarea unui proiect Map/Reduce se face prin //New// → //Project// → //Map/Reduce// → //Map/Reduce Project//, specificându-se și locația unde a fost instalat framework-ul Hadoop pe discul local (//Use Default Hadoop// → //Configure Hadoop install directory...//) {{ :utile:hadoop_hbase:hadoop_plugin06.png?nolink&600 }} {{ :utile:hadoop_hbase:hadoop_plugin07.png?nolink&600 }} {{ :utile:hadoop_hbase:hadoop_plugin08.png?nolink&600 }} Ulterior, clasele specifice acestui tip de aplicaţii (clasa principală, respectiv clasele Mapper şi Reducer) se vor genera automat (//New// → //Other// → //Map/Reduce// de unde se selectează tipurile de clasă respective: //MapReduce Driver//, //Mapper// şi //Reducer//), utilizatorul completând numai conţinutul metodelor responsabile cu sarcinile executate pe fiecare cluster în parte şi cu prelucrarea rezultatelor finale pe baza informaţiilor provenite de la proces care a rulat o anumită parte a sarcinii. {{ :utile:hadoop_hbase:hadoop_plugin09.png?nolink&600 }} {{ :utile:hadoop_hbase:hadoop_plugin10.png?nolink&600 }} {{ :utile:hadoop_hbase:hadoop_plugin11.png?nolink&600 }} De asemenea, pentru clasele de tip ''Mapper'' / ''Reducer'', vor trebui specificate tipul de intrare şi tipul de ieşire prin indicarea clasei de bază parametrizate pe care o vor moșteni. {{ :utile:hadoop_hbase:hadoop_plugin12.png?nolink&600 }} {{ :utile:hadoop_hbase:hadoop_plugin13.png?nolink&600 }} {{ :utile:hadoop_hbase:hadoop_plugin14.png?nolink&600 }} {{ :utile:hadoop_hbase:hadoop_plugin15.png?nolink&600 }} Întrucât se doreşte ca rezultatele procesărilor distribuite să fie afişate în cadrul consolei Eclipse, se va crea un fişier ''log4j.properties'' care va fi plasat în subdirectorul ''bin'' al proiectului respectiv: log4j.rootLogger=INFO,console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.target=System.err log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n Rularea proiectului va trebui realizată în contexul Hadoop, astfel încât să fie invocate procesele care sunt responsabile cu distribuirea sarcinii, respectiv cu preluarea rezultatelor obţinute în urma prelucrărilor pe diferite sarcini. Astfel, din meniul contextual al proiectului va trebui să se specifice //Run As// → //Run On Hadoop//. {{ :utile:hadoop_hbase:hadoop_plugin16.png?nolink }} Pe măsură ce este rulată aplicaţia, în consolă vor fi afişate actualizările privind sarcinile de tip map şi sarcinile de tip reduce, exprimate procentual. După ce aplicaţia a fost executată, vor fi afişate statistici referitoare la numărul de octeţi citiţi şi scrişi (din sistemul de fişiere local respectiv din sistemul de fişiere distribuit HDFS), numărul de operaţii de citire şi scriere (cu evidenţierea celor care au durat mai mult timp) ca şi numărul de înregistrări procesate în cadrul sarcinilor de tip map şi de tip reduce. ====== Resurse ====== [[http://hadoop.apache.org/docs/r2.5.1/hadoop-project-dist/hadoop-common/SingleCluster.html|Hadoop MapReduce Next Generation - Setting up a Single Node Cluster]]\\ [[https://www.digitalocean.com/community/tutorials/how-to-install-hadoop-on-ubuntu-13-10|How to Install Hadoop on Ubuntu]]\\ [[https://github.com/winghc/hadoop2x-eclipse-plugin|Hadoop 2.x Plugin for Eclipse]]\\ [[http://www.srccodes.com/p/article/47/build-install-configure-eclipse-plugin-apache-hadoop|Build, Install and Configure Eclipse Plugin for Hadoop 2.2.0]]