DevVeri.com

Boğulacaksan büyük veride boğul!

Hadoop 1.0.3 Kurulumu Adım Adım

Daha önceki yazımızda Cloudera’nın CDH3 sürümü olan Hadoop kurulumundan bahsetmiştik. Bu yazımızda da Apache‘nin son stabil sürümü olan 1.0.3 sürümünü paket kullanmadan elle nasıl kurulduğundan bahsedeceğiz. CDH3 kurulumunda sorun yaşayanlar da bu yazıdan faydalanabilirler.

1. Kurulumun öncesinde sisteminizde yüklü Java olması ve openssh-server ve rsync paketlerinin kurulması gerekiyor.

sudo apt-get install ssh
sudo apt-get install rsync

 

2. Bu paketleri kurduktan sonra localhost adresine şifresiz olarak bağlantı yapabiliyor olmamız gerekli. Bu sebeple aşağıdaki adımları izliyoruz:

$ ssh localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is 00:ab:cd:ef:12:23:56:ab:ba:c4:89:11:d8:22:33:1b.
Are you sure you want to continue connecting (yes/no)? yes

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

 

3. Bundan sonra kurulumu yapacağımız klasörü ve verilerin bulunacağı klasörü hazırlamamız gerekiyor. Ben /usr/java klasörüne kurulum yapıyorum. Eğer bu klasör yoksa yaratılıp, yetki vermeliyiz:

sudo mkdir /usr/java
sudo chown -R devveri:devveri /usr/java
mkdir /usr/java/hadoop-data

 

4. Kurulumu yapacağımız klasöre geçip Apache’nin sitesinden Hadoop 1.0.3 sürümüne ait tar.gz uzantılı dosyayı indiriyoruz:

cd /usr/java/
wget "http://www.eu.apache.org/dist/hadoop/common/hadoop-1.0.3/hadoop-1.0.3.tar.gz"
gzip -dc hadoop-1.0.3.tar.gz | tar xf -
ln -s /usr/java/hadoop-1.0.3 /usr/java/hadoop

 

5. Kurulum neredeyse tamamlandı, bundan sonra conf klasörüne geçip konfigürasyon dosyalarını Pseudo-Distributed olarak çalışması için ayarlamamız gerekiyor.

Genel ayarların yapıldığı core-site.xml dosyasında aşağıdaki düzenlemeyi yapıyoruz:

<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://localhost:9000</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/usr/java/hadoop-data</value>
  </property>
</configuration>

HDFS ile ilgili ayarların yapıldığı hdfs-site.xml dosyasına varsayılan replikasyon ayarını 1 olacak şekilde ayarlıyoruz:

<configuration>
     <property>
         <name>dfs.replication</name>
         <value>1</value>
     </property>
</configuration>

Son olarak MapReduce ayarlarının yapıldığı mapred-site.xml dosyasına aşağıdaki tanımı yapıyoruz:

<configuration>
     <property>
         <name>mapred.job.tracker</name>
         <value>localhost:9001</value>
     </property>
</configuration>

 

6. Bu ayarların dışında hadoop-env.sh dosyasında iki ayar daha yapmamız gerekiyor. Birincisi JAVA_HOME klasörünü ayarlamak (benim bilgisayarımda /usr/java/jdk alanında Java 6 kurulu):

export JAVA_HOME=/usr/java/jdk

 

7. İkinci ayar da hafıza ayarı. Varsayılan ayarlarda her Java süreci için 1G hafıza alanı tanımlanıyor. Hadoop’un tam olarak çalışması için 5 Java süreci çalışması gerekeceği için eğer kurulum yaptığınız bilgisayarda yeterli hafıza yoksa bu ayarı değiştirmeniz gerekli, aksi takdirde Out Of Memory hataları ile karşılaşırsınız. Ben bu değeri 512MB olacak şekilde ayarlıyorum:

export HADOOP_HEAPSIZE=512

 

8. Yine kolaylık olması açısından kullanıcımızın .bash_profile (ya da .bashrc) dosyasına aşağıdaki tanımları ekleyerek Hadoop ile ilgili komutlarını erişilebilir kılıyoruz:

JAVA_HOME=/usr/java/jdk
PATH=$PATH:$JAVA_HOME/bin

HADOOP_HOME=/usr/java/hadoop
PATH=$PATH:$HADOOP_HOME/bin

 

9. Son olarak tüm ayarlar yapıldı, bir kereye mahsus olmak üzere Hadoop NameNode’un formatlanması gerekiyor:

$ hadoop namenode -format
12/09/05 00:07:06 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = devveri-HP-ProBook-6540b/127.0.1.1
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 1.0.3
STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.0 -r 1335192; compiled by 'hortonfo' on Tue May  8 20:31:25 UTC 2012
************************************************************/
12/09/05 00:07:06 INFO util.GSet: VM type       = 32-bit
12/09/05 00:07:06 INFO util.GSet: 2% max memory = 9.1025 MB
12/09/05 00:07:06 INFO util.GSet: capacity      = 2^21 = 2097152 entries
12/09/05 00:07:06 INFO util.GSet: recommended=2097152, actual=2097152
12/09/05 00:07:07 INFO namenode.FSNamesystem: fsOwner=devveri
12/09/05 00:07:07 INFO namenode.FSNamesystem: supergroup=supergroup
12/09/05 00:07:07 INFO namenode.FSNamesystem: isPermissionEnabled=true
12/09/05 00:07:07 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100
12/09/05 00:07:07 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)
12/09/05 00:07:07 INFO namenode.NameNode: Caching file names occuring more than 10 times
12/09/05 00:07:07 INFO common.Storage: Image file of size 111 saved in 0 seconds.
12/09/05 00:07:07 INFO common.Storage: Storage directory /usr/java/hadoop-data/dfs/name has been successfully formatted.
12/09/05 00:07:07 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at devveri-HP-ProBook-6540b/127.0.1.1
************************************************************/

 

10. Eğer buraya kadar bir sorunla karşılaşmadıysanız kurulumu tamamlamışsınız demektir. Tabi kurulumun düzgün olup olmadığını anlamak için onu çalıştırmamız gerekiyor. start-all.sh ile Hadoop’u başlatıyoruz:

$ start-all.sh
starting namenode, logging to /usr/java/hadoop-1.0.3/libexec/../logs/hadoop-devveri-namenode-devveri-HP-ProBook-6540b.out
localhost: starting datanode, logging to /usr/java/hadoop-1.0.3/libexec/../logs/hadoop-devveri-datanode-devveri-HP-ProBook-6540b.out
localhost: starting secondarynamenode, logging to /usr/java/hadoop-1.0.3/libexec/../logs/hadoop-devveri-secondarynamenode-devveri-HP-ProBook-6540b.out
starting jobtracker, logging to /usr/java/hadoop-1.0.3/libexec/../logs/hadoop-devveri-jobtracker-devveri-HP-ProBook-6540b.out
localhost: starting tasktracker, logging to /usr/java/hadoop-1.0.3/libexec/../logs/hadoop-devveri-tasktracker-devveri-HP-ProBook-6540b.out

 

11. Tüm süreçlerin doğru başladığına emin olmak için jps komutuyla süreçleri listeliyoruz. Bu süreçlerin hepsinin çalışıyor olması gerekiyor:

$ jps
12941 JobTracker
12355 NameNode
13953 Jps
12845 SecondaryNameNode
13178 TaskTracker
12605 DataNode

 

12. Eğer herhangi bir hata ile karşılaşmadıysanız http://localhost:50070 ve http://localhost:50030 adreslerinden Job Tracker ve Name Node grafik arayüzlerine erişebilirsiniz:

 

13. HDFS’in düzgün çalıştığını test etmek için bir dosya oluşturup bunu HDFS’e atmayı, sonra oradan okumayı deniyoruz:

$ echo 'hello, hadoop!' > test.txt
$ hadoop dfs -put test.txt test.txt
$ hadoop dfs -ls
Found 1 items
-rw-r--r--   1 devveri supergroup         15 2012-06-27 00:52 /user/devveri/test.txt
$ hadoop dfs -cat test.txt
hello, hadoop!

 

14. MapReduce’ün düzgün çalıştığını test etmek içinde Hadoop ile beraber gelen wordcount örneğini çalıştırıyoruz:

$ hadoop jar /usr/java/hadoop/hadoop-examples-1.0.3.jar wordcount test.txt result
12/09/05 00:18:27 INFO input.FileInputFormat: Total input paths to process : 1
12/09/05 00:18:27 INFO util.NativeCodeLoader: Loaded the native-hadoop library
12/09/05 00:18:27 WARN snappy.LoadSnappy: Snappy native library not loaded
12/09/05 00:18:27 INFO mapred.JobClient: Running job: job_201209050009_0001
12/09/05 00:18:28 INFO mapred.JobClient:  map 0% reduce 0%
12/09/05 00:18:43 INFO mapred.JobClient:  map 100% reduce 0%
12/09/05 00:18:55 INFO mapred.JobClient:  map 100% reduce 100%
12/09/05 00:19:00 INFO mapred.JobClient: Job complete: job_201209050009_0001
12/09/05 00:19:00 INFO mapred.JobClient: Counters: 29
12/09/05 00:19:00 INFO mapred.JobClient:   Job Counters
12/09/05 00:19:00 INFO mapred.JobClient:     Launched reduce tasks=1
12/09/05 00:19:00 INFO mapred.JobClient:     SLOTS_MILLIS_MAPS=12206
12/09/05 00:19:00 INFO mapred.JobClient:     Total time spent by all reduces waiting after reserving slots (ms)=0
12/09/05 00:19:00 INFO mapred.JobClient:     Total time spent by all maps waiting after reserving slots (ms)=0
12/09/05 00:19:00 INFO mapred.JobClient:     Launched map tasks=1
12/09/05 00:19:00 INFO mapred.JobClient:     Data-local map tasks=1
12/09/05 00:19:00 INFO mapred.JobClient:     SLOTS_MILLIS_REDUCES=10153
12/09/05 00:19:00 INFO mapred.JobClient:   File Output Format Counters
12/09/05 00:19:00 INFO mapred.JobClient:     Bytes Written=19
12/09/05 00:19:00 INFO mapred.JobClient:   FileSystemCounters
12/09/05 00:19:00 INFO mapred.JobClient:     FILE_BYTES_READ=33
12/09/05 00:19:00 INFO mapred.JobClient:     HDFS_BYTES_READ=121
12/09/05 00:19:00 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=43265
12/09/05 00:19:00 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=19
12/09/05 00:19:00 INFO mapred.JobClient:   File Input Format Counters
12/09/05 00:19:00 INFO mapred.JobClient:     Bytes Read=15
12/09/05 00:19:00 INFO mapred.JobClient:   Map-Reduce Framework
12/09/05 00:19:00 INFO mapred.JobClient:     Map output materialized bytes=33
12/09/05 00:19:00 INFO mapred.JobClient:     Map input records=1
12/09/05 00:19:00 INFO mapred.JobClient:     Reduce shuffle bytes=0
12/09/05 00:19:00 INFO mapred.JobClient:     Spilled Records=4
12/09/05 00:19:00 INFO mapred.JobClient:     Map output bytes=23
12/09/05 00:19:00 INFO mapred.JobClient:     CPU time spent (ms)=5200
12/09/05 00:19:00 INFO mapred.JobClient:     Total committed heap usage (bytes)=218169344
12/09/05 00:19:00 INFO mapred.JobClient:     Combine input records=2
12/09/05 00:19:00 INFO mapred.JobClient:     SPLIT_RAW_BYTES=106
12/09/05 00:19:00 INFO mapred.JobClient:     Reduce input records=2
12/09/05 00:19:00 INFO mapred.JobClient:     Reduce input groups=2
12/09/05 00:19:00 INFO mapred.JobClient:     Combine output records=2
12/09/05 00:19:00 INFO mapred.JobClient:     Physical memory (bytes) snapshot=216649728
12/09/05 00:19:00 INFO mapred.JobClient:     Reduce output records=2
12/09/05 00:19:00 INFO mapred.JobClient:     Virtual memory (bytes) snapshot=770465792
12/09/05 00:19:00 INFO mapred.JobClient:     Map output records=2

 

15. M/R sonucu oluşan dosyayı görüntülemek için:

$ hadoop dfs -ls result/
Found 3 items
-rw-r--r--   1 devveri supergroup          0 2012-09-05 00:18 /user/devveri/result/_SUCCESS
drwxr-xr-x   - devveri supergroup          0 2012-09-05 00:18 /user/devveri/result/_logs
-rw-r--r--   1 devveri supergroup         19 2012-09-05 00:18 /user/devveri/result/part-r-00000

$ hadoop dfs -cat result/part-r-00000
hadoop!	1
hello,	1

 

Tüm bu adımları başarıyla geçtiyseniz tek bir bilgisayar üzerinde Hadoop kurulumunu başarıyla yapmışsınız demektir. Son olarak “Warning: $HADOOP_HOME is deprecated” hatasını görüyorsanız hadoop-env.sh dosyasına aşağıdaki satırı eklemeniz gerekiyor:

export HADOOP_HOME_WARN_SUPPRESS="TRUE"

Kaynak:
Single Node Setup
MapReduce Tutorial

, ,

18 thoughts on “Hadoop 1.0.3 Kurulumu Adım Adım

  • Merhabalar;

    Makalenizi gerçekten çok faydalı buldum. Yazılarınızın devamını diliyorum, hadoop ve alt yazılımları ilgili Türkçe makale malesef fazla yok. Lütfen, vakit buldukça konuya eğilim gösterin. Her ne kadar Hadoop kullanacak boyutta veri ve harddisk bulamamış olsam da konuyu çok merak ediyor ve üstünde çalışmalar yapıyorum. Bu konu da da Türkçe içerikli bir sonuç bulmak gerçekten sevindirici oluyor.

    Teşekkürler.

  • Hakan İlter dedi ki:

    Selamlar,

    Bildiğim kadarıyla wikipedia tüm verisinin indirilmesine izin veriyor, bu veriyi örnek olarak kullanabilirsiniz. Bunun dışında internette örnek olarak bulabileceğiniz başka veriler de mevcut. Wiki için şuraya bakabilirsiniz: http://en.wikipedia.org/wiki/Wikipedia:Database_download

  • Can dedi ki:

    Merhaba,

    öncelikle bu faydalı paylaşım için teşekkürler.

    Benim 3 sorum olacaktı..

    1. Bu Apache‘nin son stabil sürümü olan 1.0.3 ve de Cloudera’nın CDH3 sürümü olan Hadoop arasındaki fark ne dir ? Hangisini kurmam gerektiği konusunda şüpheye düştüm de ?

    2. Ben öncelikle Hadoop ‘u standalone ve sonrasında Pseudo-Distributed ve en son da cluster olarak kurmak istiyorum ki adım adım denemek istiyorum. Bunun için hangi sürüm daha uygundur acaba ?

    3. Bu stable ve daha bir sürü sürüm var. Acaba bu stable sürüm ne oluyor ? 🙂

    Şimdiden çok teşekkür ederim..

  • Hakan İlter dedi ki:

    Selam,

    Cloudera’nın sürümünde Apache’nin sürümünden farklı olarak bazı bugfixler, performans iyileştirmeleri vs mevcut ama en büyük farkı Cloudera Manager gibi bir arayüzü olması, bu arayüzden hbase, hive vs gibi kurulumların kolayca yapılabilmesi. Bildiğim kadarıyla 50 node’a kadar ücretsiz, daha sonrası için para ödemek icap ediyor.

    Bence standalone kurmanın pek bir anlamı yok, pseudo-distributed kurup kurcalayıp daha sonra cluster olarak kurmak bana daha anlamlı geliyor.

    Şu anki sürümlerden 1.0.X olan stabil sürüm, yani en çok kurulup kullanılan bol bol test edilmiş güncel sürüm. Diğer sürümler ise beta ya da eski sürümler. İlla yeni kod yapısında bulunan bir özellik gerekmiyorsa sağlıklı bir kurulum için stabil olanı kurmakta fayda var. Şu an en güncel sürüm 1.0.4 olarak görünüyor.

    Ben şimdiye kadar gerçek ortamda hep Apache sürümünden gittim. Ancak Cloudera’nın sürümünü de kurup incelemek istiyorum.

  • Kerem dedi ki:

    Merhaba;

    Benim bir iki yerde problemim oldu öncelikle kullandıgım sitemi belirtiyim;
    ubuntu 12.10- hadoop version 1.0.3 java version 1.7

    6. aşamada ne yapılması gerektiğini tam olarak anlamadım, windows kullanıyor olsam ProgramFiles/Java/jdkx gibi bir path verebilirim ama sizin gösterdiğiniz path de ki java nın içi tamamen boş bende.

    9 cu aşamada hadoop namenode -format komutunda
    ” hadoop : command not found ” diye bir hata alıyorum bunun sebebini de anlamış değilim

    • Kerem dedi ki:

      Ek olarakda başında hadoop olan komutları kullanamıyorum, java home problemini hallettim ancak consol üzerinde start-all.sh v.b komutlar calısmıyor command not found diyor

      • Hakan İlter dedi ki:

        8. adımda Hadoop’un bulunduğu dizini de HADOOP_HOME olarak set ediyoruz. Ayrıca bunu PATH değişkenine ekliyoruz. PATH değişkenine eklerseniz o zaman terminalde herhangi bir yerden bu komutlara ulaşabilirsiniz. Aksi takdirde sürekli path vermeniz gerekir.

        HADOOP_HOME=/usr/java/hadoop
        PATH=$PATH:$HADOOP_HOME/bin

    • Hakan İlter dedi ki:

      Ubuntu’da java normalde /usr/lib/jvm/ klasörünün altında oluyor. Sizde buraya bakıp JAVA_HOME değişkenini set edebilirsiniz.

  • Gülhan dedi ki:

    Merhaba,
    Hadoop 2.1.0 betayı ubuntu 12.04 kuruyorum.

    İlk 9 işlemi tamamladım fakat 10.da start-all.sh komutunu yazdığımda böyle bir komut bulunmamaktadır diyor.

    Nerde hata yapmış olabilirim?

    • Hakan İlter dedi ki:

      .bash_profile ya da .bashrc dosyasının içinde şu satırların yer aldığından emin olun:
      HADOOP_HOME=/usr/java/hadoop
      PATH=$PATH:$HADOOP_HOME/bin

      Burada yaptığımız Hadoop’u kurduğunuz dizinin altındaki bin dizinini PATH’e ekleyerek heryerden erişebilmek.

      Eğer olmaz ise direkt kurulumu yaptığınız dizin altındaki bin dizinine girip ordan çalıştırın. Dosyanın orda olduğundan emin olun.

  • Özgür dedi ki:

    Merhaba,

    Bu güzel anlatım için teşekkürler…

    – Hadoop kurulumu sonrasında test amaçlı çok büyük boyutta olmayan bir veriyi oluşturabilceğimiz script yada bu datayı nasıl oluşturabileceğimize ait yol gösterebilirmisiniz ?

    – Oracle’dan Hadoop’a veri taşıma konusunda tecrübelerinizi ve inceleyebileceğimiz kaynak varsa paylaşabilirmisiniz ?

    Teşekkürler…

  • mustafa dedi ki:

    Merhaba ben en başta ki sudo apt-get install ssh komutunu yazıyorum ancak paketlerim yüklenemiyor.Yardımcı olur musunuz._?

  • Enes Açıkoğlu dedi ki:

    Öncelikle paylaşım için teşekkürler Hakan Bey.
    Ben multi-node hadoop clusterı kurmak istiyorum bu yüzden sizin dökümanlarıda kullanarak farklı bilgisayarlara single node kurulumları gerçekleştirdim bu bilgisayarlar birbirlerine ping atabiliyor.Bundan sonra yapılacak adımları bir multi-node kurulumu nasıl yapılır şeklinde paylaşırsanız çok sevinirim.Başka dökümalarda multi node kurulumları var ama orda ayrı hadoop grubları oluşturduğundan ssh ile ilgili sorunlar oluşuyor.

    Teşekkürler.

    • Hakan İlter dedi ki:

      Selam,

      Gerçek cluster kurulumu için eğer Apache dağıtımını kullanmak zorunda değilseniz Cloudera veya Hortonworks dağıtımlarını kurmanızı tavsiye ederim. Cloudera Manager veya Ambari yardımı ile küme kurulumu gerçekten çok kolay. Manual kurulum yapacaksanız gerçekten çok uğraşmanız gerekiyor, her komponenti tek tek kurmanız, ayarlamanız gerekiyor.

  • Burhan Gemici dedi ki:

    Selamlar

    Elinize sağlık.Çok güzel bir yazı olmuş.sorum belki temel olacak ama merak ediyorum gerçekten.
    ‘core-site.xml’ dosyası ne amaçla kullanılıyor. Bu php ‘deki php.ini ile aynı işlevdemi.

    Şimdiden teşekkürler.

  • mozd dedi ki:

    Merhabalar,
    Ben start-all.sh komutu ile başlatıyorum ancak jps komutu ile süreçleri listelediğimde yalnızca jps:7180 yazıyor diğer süreçler listelenmiyor. http://localhost:50070 sayfasına da ulaşamıyorum. yardımcı olursanız sevinirim. Teşekkürler.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir