26
04/2010
0

Hadoop és Cassandra installálása Linuxra

Ő is hadoopot installált, azért ilyen boldogMivel az olyan trendi blogok, mint a dwbi, odafigyel a következo évezredek technikai újításaira, így gyakran fog szó esni olyan remek és felső körökben divatos technológiákról, mint a manapság megkerülhetetlen Big Data adatbázisok.

Hogy olvasóink maguk is ki tudják próbálni az itt olvasottakat, gyorsan pótoljuk az elmaradásunkat, és megmutatjuk, milyen komponensekből állnak, illetve hogyan tudják felreszelni eme remek szoftvertermékeket saját - vagy rackspace/amazon-os - klaszterükre. A Cassandra és a Hadoop kialakulásának előzményeit az előző bejegyzésünk tartalmazza. Mivel a cikk erősen technikai jellegű, így megtekintését semmilyen korosztálynak nem ajánljuk!

A célplatform természetesen Linux, mert az olcsó és jó, főleg ha az ember száz feletti szervert üzemeltet (ami ezeknél a szoftvereknél nem is túl irreális szám). Linuxon belül a Redhat Enterprise/Oracle Unbreakable/CentOS vonalon mozgunk (ez a három gyakorlatilag teljesen ugyanaz, kivéve, hogy az utolsó ingyenes és ugyanaz), ám az installáció nagyjából bármelyik linux vagy BSD disztribúciónál hasonló.

Az előkészületek

Természetesen két alapvető szoftverre szükségünk lesz: javara és rubyra. Ez utóbbi azért inkább csak opcionális, mivel az egyes tesztprogramok Cassandra esetén rubyban, Hadoop esetén java-ban lesznek publikálva. De nyugodjunk meg, a ruby jó, sőt, a legjobb. A leírásban két gépes klaszterre telepítünk, de természetesen az installálás menete hasonló 3, 4 vagy 10 gép esetén is.

Első körben rakjuk fel az összes gépünkre azokat a szoftvereket, amikre biztosan szükségünk lesz: 

[root@clust-02 ~]# yum install java gcc ruby ruby-rdoc ruby-devel 
[...]

Ez utan érdemes felraknunk a Cassandra ruby könyvtárait is, előbb utóbb úgyis szükségünk lesz rá:

[root@clust-02 ~]# cd /usr/local/src   
[root@clust-02 src]# wget http://rubyforge.org/frs/download.php/69365/rubygems-1.3.5.tgz
[root@clust-02 src]# tar xzf rubygems-1.3.5.tgz 
[root@clust-02 src]# cd rubygems-1.3.5
[root@clust-01 rubygems-1.3.5]# ruby setup.rb 
RubyGems 1.3.5 installed
[...]
[root@clust-01 rubygems-1.3.5]# gem install cassandra

Következő etapban - ha akarunk hadoop-ot is installálni - be kell állítani a hadoopot futtató felhasználó számára a gépek közötti jelszómentes ssh átjárást. Ezt megspórolhatjuk ugyan egy darabig, de amikor negyvendszer írjuk be a jelszót, úgyus beadjuk a derekunkat.

 

[root@clust-02 ~]# ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa 
Generating public/private dsa key pair.
Created directory '/root/.ssh'.
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
1c:9d:7f:4a:34:81:34:34:33:d6:9b:34:0c:45:77:18 root@clust-02.starschema.biz
[root@clust-02 ~]# cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
[root@clust-02 ~]# ssh clust-01 "cat >> ~/.ssh/authorized_keys" << ~/.ssh/id_dsa.pub
root@clust-01's password:
[root@clust-02 ~]# ssh clust-01 uname -a
Linux clust-01.starschema.biz 2.6.18-164.15.1.el5 #1 SMP Wed Mar 17 11:30:06 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux
[root@clust-02 ~]#

Ha ezzel megvagyunk az összes gépünkön (vagyis minden fel van installálva, és a felhasználók ki-be járkálhatnak a gépek között), akkor bele is csaphatunk ha klászteresdibe.

Apache Cassandra installálása

Első körben töltsük le, majd konfiguráljuk be a Cassandránkat az első - majd a többi - node-ra:

[root@clust-01 ~]# cd /opt
[root@clust-01 opt]# links 'http://www.apache.org/dyn/closer.cgi?path=/cassandra/0.6.1/apache-cassandra-0.6.1-bin.tar.gz'
[..]
[root@clust-01 opt]# tar xzf apache-cassandra-0.6.1-bin.tar.gz
[root@clust-01 opt]# cd apache-cassandra-0.6.1/

Ha ez megvan, még három dolgot kell beállítani a conf/storage-conf.xml -ben:

  • ListenAddress: Ezen a hálózati címen fog figyelni a Cassandra, ennek a címnek kell elérhetőnek lennie a klaszter összes pontjáról. Ide nem adhatunk meg 0.0.0.0-s címet, szóval mindenképpen egy konkrét, létező IP cím vagy hoszt név kell
  • ThriftAddress: Ezen a címen lehet vezérelni, megszólítani a Cassandrát. Ide már lehet, sőt javasolt is 0.0.0.0-t írni, vagyis az összes hálózati interfészről programozhatjuk klaszterünket.
  • Seed: A Cassandra klaszterbe kötött gépek egy Gosip nevű, remek algoritmus segítségével találják meg egymást. Azonban hogy egy új node is megtalálja a többit, minimum egy, működő node-ot ismernie kell. A Seed pont ezt definiálja, vagyis olyan ipcímeket és hostokat tartalmaz, amelyek valószínűleg a klaszterben aktívak. Két gép esetén értelem szerűen a másik node címét kell megadnunk, több gép esetén minimum kettő, de inkább három seedet érdemes felsorolni.

Amennyiben az összes gépen beállítottuk a fenti három értéket, készen is állunk az első indításra:

[root@clust-01 apache-cassandra-0.6.1]# bin/cassandra
INFO 11:06:56,895 Auto DiskAccessMode determined to be mmap
INFO 11:06:57,584 Sampling index for /var/lib/cassandra/data/system/LocationInfo-1-Data.db
INFO 11:06:57,584 Replaying /var/lib/cassandra/commitlog/CommitLog-1272012459901.log
INFO 11:06:57,635 Log replay complete
INFO 11:06:57,739 Saved Token found: 51016424719329262807242379658728757701
INFO 11:06:57,739 Saved ClusterName found: Starschema Cluster
INFO 11:06:57,739 Creating new commitlog segment
/var/lib/cassandra/commitlog/CommitLog-1272272817739.log
INFO 11:06:57,844 Starting up server gossip
INFO 11:06:58,053 Binding thrift service to /0.0.0.0:9160

Ha minden oké, és az összes szerverünkön elindult a szolgáltatás, akkor ellenőrízhetjük a kapcsolataikat:

[root@clust-01 apache-cassandra-0.6.1]# bin/nodetool -host clust-01 ring 
Address Status Load Range Ring
87634784585759432755383551693491412258
192.168.223.8 Up 731 bytes 51016424719329262807242379658728757701 |<--|
192.168.223.9 Up 731 bytes 87634784585759432755383551693491412258 |-->|

Ugye nem volt bonyolult. 

Apache Hadoop Installálása

Mielőtt itt is elmélyülnénk a parancssor gyászos fekete hátterén illumináló kurzor csodálatának meditatív kisugárzásaiban, essék szó néhány alapvető hadoop triviáról:

  • NameNode: Az első és legfontosabb eltérés a Hadoop és a Cassandra storage kezelése között, hogy míg a Cassandra betonstabil - értsd High Available, - addig a Hadoop NameNodejának kiesése esetén egész egyszerűen elpusztul. Ez fájdalmas pont, azonban a nincs es másképpen a Google GFS-e esetén sem: a Master kiesése esetén a Chunkserver-ek sem képesek gyakorlatilag a hő leadásán kívül semmire. Épp ezért a NameNode-ot olyan helyre rakjuk, ahol a tajvani vasegyüttható meglehetősen alacsony, mert elvesztése fájdalmas konzekvenciákat hordoz egész klaszterünkre tekintve.
  • SecondaryNameNode: Bár neve mégis sejtet valamiféle hibatűrést, ez igazából csak egy opciónális checkpoint szerver, amely az ellen nem véd. Érdemes másik gépre rakni, hogy a NameNode leállása esetén ne legyen a klaszter inkonzisztens, azonban önmagában semmilyen HA feladatot nem lát el.
  • DataNode: Az érdemi munka itt folyik, ebben a szervízben. Ha sok gépünk van értelem szerűen dedikált DataNode-okat használjunk, amelyek semmiféle Naming feladatot nem töltenek be.
  • JobTracker: Feladata a MapReduce munkák átvétele, valamint ahhoz a DataNode-hoz való továbbítása, ahol az adatok valószínűleg megtalálhatóak. Amennyiben az a DataNode foglalt, a topológiában legközelebb eső node-hoz fogja leadni a feladatot.
  • TaskTracker: A TaskTracker veszi át a feladatot a JobTrackertől. Meghatározott számú slot-tal rendelkezik, vagyis maximalizált, hogy mennyi párhuzamos munkafolyamatot képes ellátni. Érdemes a slotok számát a CPU magokhoz és az IO rendszerhez alakítani. 

A fenti szervízeket optimális, többszerveres installáció esetén nem szokás egy gépre telepíteni, vagyis egy szerveren ne fusson egyszerre DataNode, JobTracker vagy TaskTracker.

Most, hogy ismerük a szolgáltatásokat, essünk  neki a konfigurálásnak. Első körben mindig a kiszemelt NameNode -ot konfiguráljuk be, majd onnan érdemes átmásolni a beállításokat a többi gépre.

Először is állítsuk be a master (SecondaryNameNode, JobTracker) és slave node-ok elérhetőségeit:

  • a conf/masters -be írjuk be azon gépek címét, amelyek a klaszter elsődleges, master node-jai lesznek. Maximum két gépet írjunk be ide, amelyből az egyik fogja magát a NameNode-ot is futtatni. Ha két gépből áll a klaszterünk, írjuk be ide mindkettő IP címét vagy hosztnevét
  • a conf/slaves -be írjuk be azon gépek neveit, amelyeken szeretnénk DataNode-okat futtatni. Ha két gépünk van csak, ne legyünk restek mindkettőt beleírni.
  • A NameNode mindig azon a gépen fog elindulni, ahol a klaszter indítását végrehajtjuk

A default install a /tmp könyvtárba rakja adatainkat, ami nem legmissönkritikálabb megoldás, így javasolt létrehozni saját könyvtárakat a leendő hadoop fájlrendszerünknek:

[root@clust-01 hadoop-0.20.2]# mkdir -p /opt/hadoop-0.20.2/local/data /opt/hadoop-0.20.2/local/name  /opt/hadoop-0.20.2/local/mapred  /opt/hadoop-0.20.2/local/client-buffer
[root@clust-01 hadoop-0.20.2]# ssh clust-02 mkdir -p /opt/hadoop-0.20.2/local/data /opt/hadoop-0.20.2/local/name /opt/hadoop-0.20.2/local/mapred /opt/hadoop-0.20.2/local/client-buffer

Ha ez megvan, jöhet a konfigurálás. Állítsuk be a JAVA_HOME környezeti változó értékét a bin/hadoop-env.sh -ban, ha azt eddig nem tettük meg rendszer szinten. A saját, site specifikus beállításainkat a conf/hadoop-site.xml -be kell beírnunk. Praktikusan a következő beállítások már elegendőek a boldogsághoz:

[root@clust-01 hadoop-0.20.2]# cat conf/hadoop-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-0.20.2/local/</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://clust-01:54310</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>hdfs://clust-01:54311</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/opt/hadoop-0.20.2/local/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/opt/hadoop-0.20.2/local/data</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/opt/hadoop-0.20.2/local/mapred</value>
</property>
<property>
<name>dfs.client.buffer.dir</name>
<value>/opt/hadoop-0.20.2/local/client-buffer</value>
</property>
</configuration>

Ha a beállításokat átmásoltuk a klaszter összes szerverére, akkor több konfigurációs feladatunk már nincs. Azonban meg mielőtt elindítanánk a klasztert, első használat előtt le kell formatálnunk:

 [root@clust-01 hadoop-0.20.2]# bin/hadoop namenode -format 

Most már indíthatjuk a klasztert:

 [root@clust-01 hadoop-0.20.2]# bin/start-all.sh
starting namenode, logging to
clust-02: starting datanode, logging to
clust-01: starting datanode, logging to
clust-01: starting secondarynamenode, logging to
clust-02: starting secondarynamenode, logging to
clust-02: starting tasktracker, logging to
clust-01: starting tasktracker, logging to

Örömkönnyek.

A Cassandra sorozat eddigi részei:

  1. Ismerkedés Cassandrával
  2. Hadoop és Cassandra installálása Linuxra

A bejegyzés trackback címe:

https://dwbi.blog.hu/api/trackback/id/tr561950628

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.