19 Nisan 2015 Pazar

Hadoop Merhaba Dünya

Merhaba, bu yazımda örnek bir Hadoop programı oluşturacağız. Proje için kullandığım data merkez bankasının 1950 yılından beri olan Dolar ve Sterlin kurudur. Veriyi buradan alabilirsiniz.

Gereklilikler

Maven
Eclipse IDE

Öncelikle projemizi oluşturarak başlıyoruz. Oluşturacağımız proje "Maven Project" olacak. Maven projesi olmasının sebebi ise otomatik olarak bağımlılıkları indirebilmesidir. Böylece bizim bir şey yapmamıza gerek kalmadan gerekli olan kütüphaneler projemize dahil olmuş olacaklar.
Bundan sonra yapmamız gereken şey "pom.xml" dosyasını düzenlenmek. Bu işlemi yapmamızın sebebi ise Hadoop'un uygun kütüphanelerini eklemektir. Ben 2.6 versiyonunu kullandığım için bu versiyonları ekliyorum. Siz kendi versiyonlarınıza göre düzenleyebilirsiniz. Aşağıdaki kodu pom.xml'in içine yerleştirelim:
<dependency>
  <groupid>org.apache.hadoop</groupid>
  <artifactid>hadoop-common</artifactid>
  <version>2.6.0</version>
</dependency>
<dependency>
  <groupid>org.apache.hadoop</groupid>
  <artifactid>hadoop-yarn</artifactid>
  <version>2.6.0</version>
</dependency>
<dependency>
  <groupid>org.apache.hadoop</groupid>
  <artifactid>hadoop-mapreduce-client-shuffle</artifactid>
  <version>2.6.0</version>
</dependency>
<dependency>
  <groupid>org.apache.hadoop</groupid>
  <artifactid>hadoop-hdfs</artifactid>
  <version>2.6.0</version>
</dependency>

Bu aşamadan sonra artık sınıflarımınızı oluşturabiliriz. İlk sınıfımızı oluşturuyoruz.İlk sınıfımız driver yani sürücü sınıfı olacaktır. Sürücü sınıfında, yapılacak işi tanımlıyoruz. Ondan sonra ise Mapper ve Reducer sınıflarını tanımlıyoruz. En son kısmında ise işimiz bitince programı sonlandırıyoruz.

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class TCMB {

  public static void main(String[] args) throws Exception {
    if (args.length != 2) {
      System.err.println("Kullanım: TCMB <girdi> <çıktı>");
      System.exit(-1);
    }

    
    Job job=Job.getInstance();
    job.setJarByClass(TCMB.class);
    job.setJobName("TCMB");

    FileInputFormat.addInputPath(job, new Path(args[0]));
    FileOutputFormat.setOutputPath(job, new Path(args[1]));
    
    job.setMapperClass(TCMBMapper.class);
    job.setReducerClass(TCMBReducer.class);

    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(DoubleWritable.class);
    
    System.exit(job.waitForCompletion(true) ? 0 : 1);
  }
}

İkinci sınıfımız ise Mapper sınıfı olacak. Mapper sınıfında yazı dosyamızın nasıl işleneceğini anlatıyoruz. Yani dosyanın altıncı ila onuncu karakterleri arasında yıl bilgisi olduğu gibi.

import java.io.IOException;
import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

public class TCMBMapper extends Mapper<LongWritable, Text, Text, DoubleWritable> {

 @Override
 public void map(LongWritable key, Text value, Context context)
   throws IOException, InterruptedException {

  String line = value.toString();
  String year = line.substring(6, 10);
  String tempGbpA;
  Double gbpA;
        
  tempGbpA=line.substring(13, 25);
  gbpA = Double.parseDouble(tempGbpA);

  context.write(new Text(year), new DoubleWritable(gbpA));

 }
}

Ekleyeceğimiz son sınıf ise "Reducer" sınıfıdır. Bu sınıf ise yolladığımız verilerde nasıl bir işlem yapılacağına karar verir. Biz burada her yılın en yüksek değerini alıyoruz.

import java.io.IOException;
import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

public class TCMBReducer
  extends Reducer<text doublewritable="" text=""> {
  
  @Override
  public void reduce(Text key, Iterable<doublewritable> values,
      Context context)
      throws IOException, InterruptedException {
    
    Double maxValue = Double.MIN_VALUE;
    for (DoubleWritable value : values) {
      maxValue = Math.max(maxValue, value.get());
    }
    context.write(key, new DoubleWritable(maxValue));
  }
}

Eclipse üzerinde çalışmak için Run Configuration kısmından girdi ve çıktı parametrelerini ekliyoruz. Bundan sonra çalıştır dedikten sonra çıktıları belirttiğiniz klasörde görebilirsiniz.

Aklınıza takılan bir şey olursa sormaktan çekinmeyin.

Hello, in this tutorial we are going to create a Hadoop application. For project,i use central bank's exchange data. It is started from 1950's. You cant get here.

Requirements

Maven
Eclipse IDE

First, we create "Maven Project". It is Maven project because we don't have to deal with dependencies. After that, we edit "pom.xml" file of project. I use Hadoop 2.6 so i added libraries. If you use different version, you can change version number. Added the below code to "pom.xml":

<dependency>
  <groupid>org.apache.hadoop</groupid>
  <artifactid>hadoop-common</artifactid>
  <version>2.6.0</version>
</dependency>
<dependency>
  <groupid>org.apache.hadoop</groupid>
  <artifactid>hadoop-yarn</artifactid>
  <version>2.6.0</version>
</dependency>
<dependency>
  <groupid>org.apache.hadoop</groupid>
  <artifactid>hadoop-mapreduce-client-shuffle</artifactid>
  <version>2.6.0</version>
</dependency>
<dependency>
  <groupid>org.apache.hadoop</groupid>
  <artifactid>hadoop-hdfs</artifactid>
  <version>2.6.0</version>
</dependency>

After that, we can create our classes. First class is driver class. Driver class is the main class of our application. Then we create Mapper and Reducer classes.

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class TCMB {

  public static void main(String[] args) throws Exception {
    if (args.length != 2) {
      System.err.println("Kullanım: TCMB <girdi> <çıktı>");
      System.exit(-1);
    }

    
    Job job=Job.getInstance();
    job.setJarByClass(TCMB.class);
    job.setJobName("TCMB");

    FileInputFormat.addInputPath(job, new Path(args[0]));
    FileOutputFormat.setOutputPath(job, new Path(args[1]));
    
    job.setMapperClass(TCMBMapper.class);
    job.setReducerClass(TCMBReducer.class);

    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(DoubleWritable.class);
    
    System.exit(job.waitForCompletion(true) ? 0 : 1);
  }
}

Second class is Mapper class. Mapper class is definer of the Hadoop application. For example, sixth and tenth characters of the text file is year information.

import java.io.IOException;
import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

public class TCMBMapper extends Mapper<LongWritable, Text, Text, DoubleWritable> {

 @Override
 public void map(LongWritable key, Text value, Context context)
   throws IOException, InterruptedException {

  String line = value.toString();
  String year = line.substring(6, 10);
  String tempGbpA;
  Double gbpA;
        
  tempGbpA=line.substring(13, 25);
  gbpA = Double.parseDouble(tempGbpA);

  context.write(new Text(year), new DoubleWritable(gbpA));

 }
}

Our last class is Reducer class. Reducer is decision maker of our application. We find maximum value of the each year.

import java.io.IOException;
import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

public class TCMBReducer
  extends Reducer<text doublewritable="" text=""> {
  
  @Override
  public void reduce(Text key, Iterable<doublewritable> values,
      Context context)
      throws IOException, InterruptedException {
    
    Double maxValue = Double.MIN_VALUE;
    for (DoubleWritable value : values) {
      maxValue = Math.max(maxValue, value.get());
    }
    context.write(key, new DoubleWritable(maxValue));
  }
}

To run this application from Eclipse, we need to edit Run Configuration. We need to add input and output arguments. After that, you can run application.
If you have questions, don't hesitate to ask.

11 Nisan 2015 Cumartesi

Hadoop Sorun Çözme - Troubleshooting

Hadoop Sorun Çözme

Initialization failed for Block pool <registering> (Datanode Uuid unassigned) service to localhost/127.0.0.1:8020.

Log dosyasında bu girdi görüldüğü zaman yapılması gereken işlem /tmp klasöründeki hadoop ile ilgili dosyaların silinmesidir.

SSH hatası

Centos SSH klasörünü okuyamadığı için hata verebiliyor. Ubuntu ise bu hatayı vermiyor. Ben şu işlemleri takip ettim: http://ubuntuforums.org/showthread.php?t=1932058

localhost: Error: JAVA_HOME is not set and could not be found

Bu hatanın çözümü ise hadoop-env.sh dosyasına JDK yolunu eklemektir.

Hadoop Troubleshooting

Initialization failed for Block pool <registering> (Datanode Uuid unassigned) service to localhost/127.0.0.1:8020.

This error happens when Hadoop doesn't terminated properly. Solution is very simple.Just delete files under /tmp folder which is related with Hadoop

SSH Error

When CenOS cannot read SSH folder,you may experience these errors. When using Ubuntu, I didn't experience any SSH related errors. I followed the following process:http://ubuntuforums.org/showthread.php?t=1932058

localhost: Error: JAVA_HOME is not set and could not be found

When JAVA_HOME is not set,you see this error. You need to add JDK folder to hadoop-env.sh file.

Hadoop Nedir?

Bu blog https://datademi.com/index.php/2017/08/07/hadoop-nedir/ adresine taşınmıştır


Hadoop Nedir?


Merhaba, bu yazımda kısaca Hadoop'un ne olduğununda ve nerelerde kullanıldığınından bahsedeceğim.

Kelime Anlamıyla Hadoop

Projenin başındaki kişi Doug Cutting'e göre Hadoop kelimesi tamamen anlamsız,çocuğunun uydurduğu bir kelimeymiş. Oyuncak sarıfiline bu ismi vermiş. Doug beyde projeyi oluştururken ismini düşünmeye başlamış. Sonra çocuğunun sarıfili aklına gelmiş. İsim kriterlerine bakmış hiçbir anlam ifade etmemesi, kolay söylenmesi ve akılda kalıcı olması. Hepsi tutunca demişki bu projenin adı Hadoop olsun. Böylece bizim bildiğimiz Hadoop ortaya çıkmış.

İşlevsel Anlamda Hadoop


Hadoop, bir küme(cluster) mimarisidir. Yani sizin bir "A" işiniz var. "A" işini eski mimari ile tek makinede çalıştırısınız ve "X" sürede sonuç alırsınız. Oysa "A" işini küme mimarisi ile "N" kadar makinede aynı anda çalıştırabilirsiniz. Böylece "X/10","X/20" gibi sürelerde işi tamamlayabilirsiniz.
Hadoop'un tam tanımı aynı işi değişik makinelere dağıtarak işi en kısa sürede tamamlayabilmektir. Hadoop'un en önemli özelliklerinden biri ortak ve güvenilir olmayan makineler üzerinde çalışabilir. Eğer makinelerden biri çalışmazsa veya bir problem olursa işi bir sonraki makineye yönlendirir.
Hadoop'un iki ana bileşeni mevcuttur. MapReduce ve HDFS.

HDFS

HDFS kelime açılımı itibari ile Hadoop Distributed Filesystem'dir. Daha önce Google'ın geliştirdiği bir dosya yapısından kalıtım almıştır. HDFS, büyük boyutlu dosyaları oluşturmak için idealdir. Çünkü bir veri bloğu varsayılan olarak 64 MB'den oluşur. Oysa bizim kullandığımız NTFS sistemlerde bu 512 KB'dir. HDFS, küçük boyutlu dosyaları saklamak ve erişmek için çok kötü bir tercihtir.

MapReduce

MapReduce, Hadoop'un işi yapan kısmıdır. İki fonksiyonun birleşmesinden oluşur: Map ve Reduce. Map yani haritalandırma kısmı veriyi, anahtar-değer ilişikisine getirir. Reduce yani küçültme kısmı ise anahtar-değer haline gelmiş veri içerisinde verdiğiniz ilişkiye göre azaltarak istenilen sonucu üretir.

Hadoop'un Diğer Sistemler İle Karşılaştırılması


Geleneksel Veritabanı MapReduce
Veri Boyutu Gigabyte Seviyesinde Petabyte Seyivesinde
Erişim Interaktif ve batch Batch
Güncellemeler Çoklu Okuma Yazma Bir Kere Yaz, Çok Oku
Yapı Statik Şema Dinamik Şema
Bütünlük Yüksek Düşük
Ölçeklendirme  Doğrusal Değil Doğrusal

 

Yahoo'da Kullanım

2004: Hadoop'un ilk versiyonu Doug Cutting ve Mike Cafarella tarafından implemente edildi.
Aralık 2005: Hadoop aynı anda 20 makinede başarıyla çalıştı.
Ocak 2006: Doug Cutting Yahoo! katıldı.
Şubat 2006:  Apache Hadoop projesi resmen başladı. 
Şubat 2006: Yahoo! tarafından adapte edildi.
Nisan 2006: 188 makine üzerinde 47,9 saatte sıralamayı tamamladı(Makine başına 10GB).
Mayıs 2006: Yahoo! 300 makine ile Hadoop araştıma kümesini kurdu.
Kasım 2006: Araştırma kümesi 600 makineye ulaştı.
Ocak 2007: Araştırma kümesi 900 makineye ulaştı.
Nisan 2007: Araştırma kümesi ikiye bölünerek 1000 makineye ulaştı.
Nisan 2008: 900 makine ile sıralama ödülü kazanıldı. 1 terabyte veriyi 209 saniyede sıralaması tamamlandı.
Kasım 2008: Günlük 10 TB veri araştırma kümelerine yüklendi.
Mart 2009: Toplam 24.000 makine ile 17 kümeye ulaştı.
Nisan 2009: 500 GB veri 59 saniyede sıralandı. Toplam 1.400 makine ile test tamamlandı. 100 TB veri ise 173 dakikada tamamlandı(3.400 makine).

Hadoop Ekosistemi 

 

Avro

RPC çağrıları için dataların kolay taşınmasını sağlayan bir serileştirme sistemidir.

MapReduce

Ortak makinelerde, dağıtık bir mimari ile modelleme ve çalıştırma mimarisidir.

HDFS

Ortak makinelerde, dağıtık bir mimariye sahip dosya sistemidir.

Pig

Veri akışını kontrol eden ve büyük boyutlu verilerde işlem yapmayı kolaylaştıran bir araçtır. HDFS ve MapReduce kümelerinde çalışır.

Hive

Dağıtık yapılı bir veri ambarıdır. SQL benzeri bir dil sağlar.

HBase

Dağıtık temelli, kolon bazlı bir veritabanıdır.

ZooKeeper

İşlerin sürekli çalışır halde kalmasını sağlayan bir takip sistemidir.

Sqoop

Klasik veritabanı ile HDFS arasında toplu olarak veri transferi yapılmasını sağlayan bir araçtır.

Oozie

Bütün işleri zamanlamak için kullanılan bir araçtır.

Hadoop Nedir?


Merhaba, bu yazımda kısaca Hadoop'un ne olduğununda ve nerelerde kullanıldığınından bahsedeceğim.

Kelime Anlamıyla Hadoop

Projenin başındaki kişi Doug Cutting'e göre Hadoop kelimesi tamamen anlamsız,çocuğunun uydurduğu bir kelimeymiş. Oyuncak sarıfiline bu ismi vermiş. Doug beyde projeyi oluştururken ismini düşünmeye başlamış. Sonra çocuğunun sarıfili aklına gelmiş. İsim kriterlerine bakmış hiçbir anlam ifade etmemesi, kolay söylenmesi ve akılda kalıcı olması. Hepsi tutunca demişki bu projenin adı Hadoop olsun. Böylece bizim bildiğimiz Hadoop ortaya çıkmış.

İşlevsel Anlamda Hadoop


Hadoop, bir küme(cluster) mimarisidir. Yani sizin bir "A" işiniz var. "A" işini eski mimari ile tek makinede çalıştırısınız ve "X" sürede sonuç alırsınız. Oysa "A" işini küme mimarisi ile "N" kadar makinede aynı anda çalıştırabilirsiniz. Böylece "X/10","X/20" gibi sürelerde işi tamamlayabilirsiniz.
Hadoop'un tam tanımı aynı işi değişik makinelere dağıtarak işi en kısa sürede tamamlayabilmektir. Hadoop'un en önemli özelliklerinden biri ortak ve güvenilir olmayan makineler üzerinde çalışabilir. Eğer makinelerden biri çalışmazsa veya bir problem olursa işi bir sonraki makineye yönlendirir.
Hadoop'un iki ana bileşeni mevcuttur. MapReduce ve HDFS.

HDFS

HDFS kelime açılımı itibari ile Hadoop Distributed Filesystem'dir. Daha önce Google'ın geliştirdiği bir dosya yapısından kalıtım almıştır. HDFS, büyük boyutlu dosyaları oluşturmak için idealdir. Çünkü bir veri bloğu varsayılan olarak 64 MB'den oluşur. Oysa bizim kullandığımız NTFS sistemlerde bu 512 KB'dir. HDFS, küçük boyutlu dosyaları saklamak ve erişmek için çok kötü bir tercihtir.

MapReduce

MapReduce, Hadoop'un işi yapan kısmıdır. İki fonksiyonun birleşmesinden oluşur: Map ve Reduce. Map yani haritalandırma kısmı veriyi, anahtar-değer ilişikisine getirir. Reduce yani küçültme kısmı ise anahtar-değer haline gelmiş veri içerisinde verdiğiniz ilişkiye göre azaltarak istenilen sonucu üretir.

Hadoop'un Diğer Sistemler İle Karşılaştırılması


Geleneksel Veritabanı MapReduce
Veri Boyutu Gigabyte Seviyesinde Petabyte Seyivesinde
Erişim Interaktif ve batch Batch
Güncellemeler Çoklu Okuma Yazma Bir Kere Yaz, Çok Oku
Yapı Statik Şema Dinamik Şema
Bütünlük Yüksek Düşük
Ölçeklendirme  Doğrusal Değil Doğrusal

 

Yahoo'da Kullanım

2004: Hadoop'un ilk versiyonu Doug Cutting ve Mike Cafarella tarafından implemente edildi.
Aralık 2005: Hadoop aynı anda 20 makinede başarıyla çalıştı.
Ocak 2006: Doug Cutting Yahoo! katıldı.
Şubat 2006:  Apache Hadoop projesi resmen başladı. 
Şubat 2006: Yahoo! tarafından adapte edildi.
Nisan 2006: 188 makine üzerinde 47,9 saatte sıralamayı tamamladı(Makine başına 10GB).
Mayıs 2006: Yahoo! 300 makine ile Hadoop araştıma kümesini kurdu.
Kasım 2006: Araştırma kümesi 600 makineye ulaştı.
Ocak 2007: Araştırma kümesi 900 makineye ulaştı.
Nisan 2007: Araştırma kümesi ikiye bölünerek 1000 makineye ulaştı.
Nisan 2008: 900 makine ile sıralama ödülü kazanıldı. 1 terabyte veriyi 209 saniyede sıralaması tamamlandı.
Kasım 2008: Günlük 10 TB veri araştırma kümelerine yüklendi.
Mart 2009: Toplam 24.000 makine ile 17 kümeye ulaştı.
Nisan 2009: 500 GB veri 59 saniyede sıralandı. Toplam 1.400 makine ile test tamamlandı. 100 TB veri ise 173 dakikada tamamlandı(3.400 makine).

Hadoop Ekosistemi 

 

Avro

RPC çağrıları için dataların kolay taşınmasını sağlayan bir serileştirme sistemidir.

MapReduce

Ortak makinelerde, dağıtık bir mimari ile modelleme ve çalıştırma mimarisidir.

HDFS

Ortak makinelerde, dağıtık bir mimariye sahip dosya sistemidir.

Pig

Veri akışını kontrol eden ve büyük boyutlu verilerde işlem yapmayı kolaylaştıran bir araçtır. HDFS ve MapReduce kümelerinde çalışır.

Hive

Dağıtık yapılı bir veri ambarıdır. SQL benzeri bir dil sağlar.

HBase

Dağıtık temelli, kolon bazlı bir veritabanıdır.

ZooKeeper

İşlerin sürekli çalışır halde kalmasını sağlayan bir takip sistemidir.

Sqoop

Klasik veritabanı ile HDFS arasında toplu olarak veri transferi yapılmasını sağlayan bir araçtır.

Oozie

Bütün işleri zamanlamak için kullanılan bir araçtır.

5 Nisan 2015 Pazar

Hadoop Kurulumu (Pseudodistributed)

Bu blog https://datademi.com/index.php/2017/08/08/hadoop-kurulumu-pseudodistributed/ adresine tasinmistir.


Merhaba,
Size bu yazımda Linux üzerinde Hadoop'u nasıl kurabileceğinizi anlatacağım. Ben şahsen Centos dağıtımı kullanıyorum. Ubuntu içinde aynı kurulumu sorunsuz yapabilirsiniz.

Ön Hazırlık

Öncelikle sisteminizin hadoop için uygun olup olmadığınızı kontrol etmeniz gerekli. Linux dağıtımınızdan tutunda JDK'ya kadar herşey etkili. Eğer uygun JDK mevcut ve sisteme tanımlı ise direk kurulum aşamasına geçebilirsiniz.
Bu sayfa üzerinden uyumlu JDK versiyonunuzu kontrol edebilirsiniz: http://wiki.apache.org/hadoop/HadoopJavaVersions
Ben, java version "1.8.0_11" JDK'yı başarılı olarak kullanıyorum. İşin sırrı son sürümlerden seçmemek.
Şimdi yapılacak işlem ise JAVA_HOME'u sisteme tanıtmak. Centos sistem üzerinde isterseniz /etc/profile.d içinde yeni bir script oluşturun isterseniz benim gibi direk /etc/profile dosyasına ekleyin.

#nano /etc/profile

komutu ile direk profil dosyasını açıp içine jdk versionunuza uygun olarak satırı ekleyin:

JAVA_HOME=/usr/java/jdk1.8.0_11

Path kısmının sonuna ise :$JAVA_HOME/bin şeklinde ekleme yapın:

PATH=$PATH:$JAVA_HOME/bin

Ondan sonra ise export PATH ile başlayan kısmın sonuna JAVA_HOME ekleyin. Logout-login işleminden sonra

$java -version

yazdığınız zaman versiyonunuza uygun olarak aşağıdaki gibi bir sonuç görmeniz gerekmekte:

java version "1.8.0_11"

Java(TM) SE Runtime Environment (build 1.8.0_11-b12)

Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)

Hadoop Kurulumu

Hadoop sayfasından (http://www.apache.org/dyn/closer.cgi/hadoop/common/) istediğiniz versionu indirebilirsiniz. Burada ince bir ayrıntı mevcut. Aşağıdaki tabloyu incelerseniz aralarındaki farkları görebilirsiniz.

Özellik 1.x 0.22 2.x
Güvenli Otorizasyon Evet Hayır Evet
Eski Konfigrasyon İsimleri Evet Deprecated Deprecated
Yeni Konfigrasyon İsimler Hayır Evet Evet
Old MapReduce API Evet Evet Evet
Yeni MapReduce API Evet(Bazı kütüphaneler eksik) Evet Evet
MapReduce 1 (Klasik) Evet Evet Hayır
MapReduce 2 (YARN) Hayır Hayır Evet
HDFS federation Hayır Hayır Evet
HDFS high-availability Hayır Hayır Evet

Size uygun olan versiyonu seçtikten sonra indirme işlemini yapabilirsiniz. Ben YARN(Yet Another Resource Manager) kullanmayı tercih ediyorum.
İndirme işlemini yaptıktan sonra standart kullanıcıların erişebileceği bir klasöre açabilirsiniz.

Dosyaları yerleştirdikten sonra bunları PATH'e eklemek uzun vadede çok işe yarayan bir işlemdir. Bunun için gene profile dosyasını değiştireceğiz.

#nano /etc/profile

HADOOP_HOME=/home/sskapci/hadoop-2.6.0

Burada dosyaların olduğu klasör nerede ise orası gösterilmelidir. Ondan sonra ise:

PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

Şekline getirilmelidir.export PATH'in sonuna ise HADOOP_HOME eklenmelidir.

Bu aşamadan sonra yapılacak son şey Pseudodistributed Mode olarak ayarlamak. Bunun sebebini şimdi açıklayacağım. Aslında Hadoop tek bir makinede mi çalışıyor yoksa her bir iş ayrı makineden mi takip ediliyor ayrımı yapmıyor. Bu sebeple siz bir developer iseniz doğal olarak tek bir makine üzerinden işlem yapıyor olacaksınız. HDFS varsayımsal olarak bir datayı 3 noktaya koyar. Bu tek makinede çalışırken aslında istenen bir durum değildir.

Pseudodistributed Mode Ayarlanması

 Hadoop kendi sayfasında bununla ilgili bir açıklaması mevcut. Ben bu ayarları biraz daha farklı yaptım. Hadoop klasürünün içinde "etc/hadoop" klasörünün altında kullanacağımız dört adet xml dosyası mevcut. Bunlar sırasıyla
  • core-site.xml
  • hdfs-site.xml
  • mapred-site.xml
  • yarn-site.xml
dosyalarıdır. Yapacağımız değişiklikler ise aşağıdaki gibidir.

core-site.xml:
 <configuration>

   <property>

     <name>fs.default.name</name>

     <value>hdfs://localhost/</value>

   </property>

 </configuration>

hdfs-site.xml
<configuration>

   <property>

     <name>dfs.replication</name>

     <value>1</value>

   </property>

 </configuration>

mapred-site.xml (Eğer yoksa .template uzantısını silerek oluşturabilirsiniz.)
 <configuration>

   <property>

     <name>mapreduce.framework.name</name>

     <value>yarn</value>

   </property>

 </configuration>

yarn-site.xml
 <configuration>

   <property>

     <name>yarn.resourcemanager.address</name>

     <value>localhost:8032</value>

   </property>

   <property>

     <name>yarn.nodemanager.aux-services</name>

     <value>mapreduce_shuffle</value>

   </property>

 </configuration>

Kurulumun tamamlanması için geriye kalan tek işlem ise ssh ayarlanmasıdır.

SSH Konfigrasyonu

Normal kullanıcı olarak aşağıdaki iki satır komutu çalıştırmak yeterlirdir. 

$ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

$cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Böylece Hadoop'un şifresiz bir şekilde ssh yapmasını sağlamış olduk. Kontrolünü

$ssh localhost

Yazarak sağlayabilirsiniz. Eğer sorun yoksa direk sizi içeri alacaktır. Artık çalıştırıp sonuçları görelim.

Hadoop'un Çalışması

Öncelikle HDFS dosya sistemini formatlayalım:

$hadoop namenode -format

Daha sonra ise iki satır çalıştırmamız gereklidir:

$start-dfs.sh

$start-yarn.sh

Eğer şu aşamaya kadar hiç bir sorun yaşamadaysanız Java'nın kendi komutu olan çalışan Java işlemlerini gösteren "jps" komutunu çalıştırıdığınızda Hadoop görüyor olmalısınız.

$jps

6818 DataNode

6723 NameNode

7171 ResourceManager

8087 Jps

6954 SecondaryNameNode

Hadoop'un Portları

Eğer portları değiştirmediyseniz aşağıdaki sayfaları ziyaret ederek Hadoop'unuz durumu hakkında bilgi sahibi olabilirsiniz.

HDFS : http://localhost:50070/

YARN : http://localhost:8088/


Hadoop'un Durdurulması

Öncelikle YARN olmak üzere üzere işlemleri durduruyoruz.

$stop-yarn.sh 

$stop-dfs.sh

Merhaba,
Size bu yazımda Linux üzerinde Hadoop'u nasıl kurabileceğinizi anlatacağım. Ben şahsen Centos dağıtımı kullanıyorum. Ubuntu içinde aynı kurulumu sorunsuz yapabilirsiniz.

Ön Hazırlık

Öncelikle sisteminizin hadoop için uygun olup olmadığınızı kontrol etmeniz gerekli. Linux dağıtımınızdan tutunda JDK'ya kadar herşey etkili. Eğer uygun JDK mevcut ve sisteme tanımlı ise direk kurulum aşamasına geçebilirsiniz.
Bu sayfa üzerinden uyumlu JDK versiyonunuzu kontrol edebilirsiniz: http://wiki.apache.org/hadoop/HadoopJavaVersions
Ben, java version "1.8.0_11" JDK'yı başarılı olarak kullanıyorum. İşin sırrı son sürümlerden seçmemek.
Şimdi yapılacak işlem ise JAVA_HOME'u sisteme tanıtmak. Centos sistem üzerinde isterseniz /etc/profile.d içinde yeni bir script oluşturun isterseniz benim gibi direk /etc/profile dosyasına ekleyin.

#nano /etc/profile

komutu ile direk profil dosyasını açıp içine jdk versionunuza uygun olarak satırı ekleyin:

JAVA_HOME=/usr/java/jdk1.8.0_11

Path kısmının sonuna ise :$JAVA_HOME/bin şeklinde ekleme yapın:

PATH=$PATH:$JAVA_HOME/bin

Ondan sonra ise export PATH ile başlayan kısmın sonuna JAVA_HOME ekleyin. Logout-login işleminden sonra

$java -version

yazdığınız zaman versiyonunuza uygun olarak aşağıdaki gibi bir sonuç görmeniz gerekmekte:

java version "1.8.0_11"

Java(TM) SE Runtime Environment (build 1.8.0_11-b12)

Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)

Hadoop Kurulumu

Hadoop sayfasından (http://www.apache.org/dyn/closer.cgi/hadoop/common/) istediğiniz versionu indirebilirsiniz. Burada ince bir ayrıntı mevcut. Aşağıdaki tabloyu incelerseniz aralarındaki farkları görebilirsiniz.

Özellik 1.x 0.22 2.x
Güvenli Otorizasyon Evet Hayır Evet
Eski Konfigrasyon İsimleri Evet Deprecated Deprecated
Yeni Konfigrasyon İsimler Hayır Evet Evet
Old MapReduce API Evet Evet Evet
Yeni MapReduce API Evet(Bazı kütüphaneler eksik) Evet Evet
MapReduce 1 (Klasik) Evet Evet Hayır
MapReduce 2 (YARN) Hayır Hayır Evet
HDFS federation Hayır Hayır Evet
HDFS high-availability Hayır Hayır Evet

Size uygun olan versiyonu seçtikten sonra indirme işlemini yapabilirsiniz. Ben YARN(Yet Another Resource Manager) kullanmayı tercih ediyorum.
İndirme işlemini yaptıktan sonra standart kullanıcıların erişebileceği bir klasöre açabilirsiniz.

Dosyaları yerleştirdikten sonra bunları PATH'e eklemek uzun vadede çok işe yarayan bir işlemdir. Bunun için gene profile dosyasını değiştireceğiz.

#nano /etc/profile

HADOOP_HOME=/home/sskapci/hadoop-2.6.0

Burada dosyaların olduğu klasör nerede ise orası gösterilmelidir. Ondan sonra ise:

PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

Şekline getirilmelidir.export PATH'in sonuna ise HADOOP_HOME eklenmelidir.

Bu aşamadan sonra yapılacak son şey Pseudodistributed Mode olarak ayarlamak. Bunun sebebini şimdi açıklayacağım. Aslında Hadoop tek bir makinede mi çalışıyor yoksa her bir iş ayrı makineden mi takip ediliyor ayrımı yapmıyor. Bu sebeple siz bir developer iseniz doğal olarak tek bir makine üzerinden işlem yapıyor olacaksınız. HDFS varsayımsal olarak bir datayı 3 noktaya koyar. Bu tek makinede çalışırken aslında istenen bir durum değildir.

Pseudodistributed Mode Ayarlanması

 Hadoop kendi sayfasında bununla ilgili bir açıklaması mevcut. Ben bu ayarları biraz daha farklı yaptım. Hadoop klasürünün içinde "etc/hadoop" klasörünün altında kullanacağımız dört adet xml dosyası mevcut. Bunlar sırasıyla
  • core-site.xml
  • hdfs-site.xml
  • mapred-site.xml
  • yarn-site.xml
dosyalarıdır. Yapacağımız değişiklikler ise aşağıdaki gibidir.

core-site.xml:
 <configuration>

   <property>

     <name>fs.default.name</name>

     <value>hdfs://localhost/</value>

   </property>

 </configuration>

hdfs-site.xml
<configuration>

   <property>

     <name>dfs.replication</name>

     <value>1</value>

   </property>

 </configuration>

mapred-site.xml (Eğer yoksa .template uzantısını silerek oluşturabilirsiniz.)
 <configuration>

   <property>

     <name>mapreduce.framework.name</name>

     <value>yarn</value>

   </property>

 </configuration>

yarn-site.xml
 <configuration>

   <property>

     <name>yarn.resourcemanager.address</name>

     <value>localhost:8032</value>

   </property>

   <property>

     <name>yarn.nodemanager.aux-services</name>

     <value>mapreduce_shuffle</value>

   </property>

 </configuration>

Kurulumun tamamlanması için geriye kalan tek işlem ise ssh ayarlanmasıdır.

SSH Konfigrasyonu

Normal kullanıcı olarak aşağıdaki iki satır komutu çalıştırmak yeterlirdir. 

$ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

$cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Böylece Hadoop'un şifresiz bir şekilde ssh yapmasını sağlamış olduk. Kontrolünü

$ssh localhost

Yazarak sağlayabilirsiniz. Eğer sorun yoksa direk sizi içeri alacaktır. Artık çalıştırıp sonuçları görelim.

Hadoop'un Çalışması

Öncelikle HDFS dosya sistemini formatlayalım:

$hadoop namenode -format

Daha sonra ise iki satır çalıştırmamız gereklidir:

$start-dfs.sh

$start-yarn.sh

Eğer şu aşamaya kadar hiç bir sorun yaşamadaysanız Java'nın kendi komutu olan çalışan Java işlemlerini gösteren "jps" komutunu çalıştırıdığınızda Hadoop görüyor olmalısınız.

$jps

6818 DataNode

6723 NameNode

7171 ResourceManager

8087 Jps

6954 SecondaryNameNode

Hadoop'un Portları

Eğer portları değiştirmediyseniz aşağıdaki sayfaları ziyaret ederek Hadoop'unuz durumu hakkında bilgi sahibi olabilirsiniz.

HDFS : http://localhost:50070/

YARN : http://localhost:8088/


Hadoop'un Durdurulması

Öncelikle YARN olmak üzere üzere işlemleri durduruyoruz.

$stop-yarn.sh 

$stop-dfs.sh