21 Temmuz 2017 Cuma

Ders 2: Datawarehouse Kavramları


  • OLTP(OnLine Transactional Processing):Sürekli insert, delete ve update işlemlerinin yapıldığı bir veritabanı olarak düşünebilirsiniz.Örnek olarak sürekli verilerin girildiği bir banka veritabanı düşünebilirsiniz.



  • ETL(Extract-Transform-Load):Bir veri entegre sürecidir. Verinin source'dan  extract edilip transform'a uğratılarak target'a load etmektir
       
  • ODS(Operational Data Store):OLTP deki verinin yani ham verinin neredeyse az bir değişiklikle tutulduğu alandır(Tasarladığınız datawarehouse mimarisine göre veritabanı veya schema, olarak düşünebilirsiniz)

  • STAGE:Kaynak sistemlerden gelen verileri geçici bir alanda tutulur.Bu alanda tutulan veriler daha sonra veri ambarlarına aktarılır. Kaynak sistemlerden gelen verilerin direk veri ambarlarına aktarılması, veri aktarılırken olabilecek hatalar sonucunda veri ambarının yapısının bozulmasının neden olur hemde performans açısında iyi değildir
  • DATAWAREHOUSE:Kaynak sistemdeki verilerin raporlama için anlamlı hale getirilip tutulduğu sanal bir depodur


  • DATAMART:Datawarehouse'un  alt kümleridir. Datawahouse veriler üzerinde genel bir bakış sağlarken, datamart'lar sadece belirli bir kısma bakış sağlar. Datamart'lara belirli birimlerin ihtiyac duyduğu verilere bağlı olarak analiz yapmaya imkan sağlar ve datawarehouse'daki  tüm karmaşıklık ile uğraşmadan ilgili datamart'lar sayesinde daha kolay analiz yaparlar

 DATAMART  VS  DATAWAREHOUSE
          -Datawarehouse genelde bir çok veri kaynağında beslenir, datamart ise genelde tek bir veri                    kaynağında beslenir
          -Datawarehouse bir çok konu üzerinde analiz yapılması içi veriler bir araya getirilir, datamart'ta            ise tek bir konu analizi için veriler bir araya getirilir
          -Datawarehouse kurumsal kullanılır, datamart ise departmansal olarak kullanılır
          -Datawarehouse veri hacmi büyüktür, datamart'ın  ise veri hacmi küçüktür.


  • METADATA:Bir tablonun özetine denir yani bir tablonun kolon adları, her kolonun data tipi, tablo adı gibi bilgiler bir tablonun metada bilgisidir.
  • SCD(Slowly Changing Dimension):Kaynak sistemden elde edilen veriler, tarihsel olarak saklanarak hiç bir veri silinmez.
  • TRUCATE-LOAD:Kaynak sistemden elde edilen verilerin tümünün silinerek yeniden yapılandırılması
  • FACT TABLE:İş birimlerinin kullanacağı nümerik metrik değerleri içerir. Büyük miktarda veri içerir, genellikle dimension tablolar ile foreign key ilişkilidir, genellikle ekleme yapılır, çabuk büyür ve çok hızlı genişler
  • DIMENSION TABLE:İş birimlerinin görmek istediği metin tipindeki verileri içerir. boyutları küçüktür,  Truncate-Load mekanizmasına uygundur, genellikle statik veri içerir.











1 Mayıs 2017 Pazartesi

Batch Programlama Loops(Döngüler)

Merhabalar 
Bu ders batch programlamada kullanılan döngüleri içermektedir.
1-while döngü
syntax'ı
Set counters
:label
If (expression) (
Do_something
Increment counter
Go back to :label
)
Örnek döngü uygulaması
@echo off
SET /A "index=1"
SET /A "count=5"
:while
if %index% leq %count% (
echo The value of index is %index%
SET /A "index = index + 1"
goto :while
)
pause
Çıktı:
2-For döngüsü
List  syntax
FOR %%variable IN list DO do_something
Örnek:
@echo off
FOR %%F IN (1 2 3 4 5)
 DO
echo %%F
pause
Çıktı:

Aralık üzerinden döngü oluşturma
FOR /L %%variable IN (lowerlimit,Increment,Upperlimit) DO do_something
/L: döngünün aralıklarla oluştuğunu ifade etmek için kullanılır.
Örnek:
@ECHO OFF
FOR /L %%X IN (0,1,5) DO ECHO %%X
pause
Çıktı:
Dosya üzerinden döngü oluşturma
For /F ["opstions"]  %%parameter in (filenameset) do command
options:
tokens=n: tokens=5 olursa txt dosyasındaki her bir satırın 5.kelimesini gösterir. tokens1,5
olursa txt dosyasındaki her satırın 1.ve 5. kelimesini gösterir, tokens=1-5 olursa dosyadaki
herbir satırın 1,2,3,4,5. kelimesini gösterir.tokens=* olursa her satırdaki tüm kelimeleri
gösterir. 
skip=n:skip=1 olursa txt dosyasının başından 1. satırı göstermez, skip=2 olursa ilk 2 satırı
göstermez
delims=xxx: delims== olursa txt dosyasındaki  tüm "="'leri boşluk ile değiştiri. ";" olursa aynı şekilde boşluk ile değiştirir.
filenameset:Bir veya birden fazla dosya kümesi
parameter:Değiştirilebilir parametre
errorlevel: Eğer hiç bir data üretilmezse errorlevel 1 döner.





Batch Programlama if statements

Merhabalar,
Bu ders,  if ifadesini nasıl kullanıldığını içermektedir.. if ifadesinin genel kullanım sytax'ı aşağıdaki gibidir.
if(condition) do_something
İlk örneğimiz integer variable'ları kontrol etmek
@echo off
SET /A a=5
SET /A b=10
SET /A c=%a% + %b%
if %c% == 15 echo "The value of variable c is 15"
if %c% == 10 echo "The value of variable c is
pause
çıktı
Bu örnekte string variable kontrol etme işlemi
@echo off
SET str1=String1
SET str2=String2
if %str1% == String1 echo "The value of variable String1"
if %str2% == String3 echo "The value of variable c is String3"
pause
Çıktı:
if/else ifadesi:
If (condition) (do_something) ELSE (do_something_else)
İnteger variable'ları kontrol etme
@echo off
@echo off
SET /A a=5
SET /A b=10
SET /A c=%a% + %b%
if %c% == 15 (echo "The value of variable c is 15") else (echo "Unknown value")
if %c% == 10 (echo "The value of variable c is 10") else (echo "Unknown value")
pause
Çıktı:
if defined  ifadesi:
if defined some variable some command
@echo off SET
str1=String1
SET str2=String2
if defined str1 echo "Variable str1 is defined"
if defined str3 (echo "Variable str3 is defined") else (echo "Variable str3 is not defined")
pause
Çıktı:
if exist ifadesi
If exist somefile.ext do_something
@echo off
if exist C:\set3.txt (echo "File exists") else (echo "File does not exist")
pause
Çıktı:
Nested If Statements
if(condition1) if (condition2) do_something
@echo off
SET /A a=5
SET /A b=10
if %a% == 5 if %b% == 10 echo "The value of the variables are correct"
pause
Çıktı:
if goto statement
@echo off
SET /A a=5
SET /A b=10
if %a% == 5 goto :labela
if %b% == 10 goto :labelb
:labela
echo "The value of a is 5"
:labelb
echo "The value of a is 10"
pause
Çıktı:

Batch Programlama Variable

Merhabalar,
Bu ders batch programlada  değişken tanımlama için set komutu nasıl kullanıldığını içermektedir. Local ve global olmak üzere 2 tip değişken bulunmaktadır. Default olarak komut isteminde tanımlanan tüm değişkenler global'dır. Değişkenleri komut dosyanızda local yapmak için SETLOCAL komutu çağırılır. SETLOCAL komutu çağrıldıktan sonra değişkenler tanımlanır ve sonra ENDLOCAL ile değişken kullanımı belli bir alan ile sınırlandırılır. yani SETLOCAL ve ENDLOCAL arasında tanımlanan tüm değişkenler sadece bu iki komut arasında kullanılır.
Örnek 1:
@echo off
SETLOCAL
set x=true
echo x=%x%
endlocal
echo x=%x%
pause
Örnek 2:
@ECHO off
SET x=true
ECHO x = %x%
SETLOCAL
 SET x=false
 ECHO x = %x%
ENDLOCAL
echo x= %x%
pause
@echo off
title Variables
set /a toplam=2+2
echo 2+2= %toplam%
set /p deger=bir degisken girin
echo %deger%
pause
Yukardaki örnek kodun çıktısı aşaıdaki gibi
/a : Degisken ataması sırasında aritmetik işlemleri destekler.
/p: Değişken atamaları sırasında kullanıcıdan parametre alır.
@echo off
set /A a=5
set /A b=5
set /A c=%a%+%b%
echo %c%
set /A c=%a%-%b%
echo %c%
set /A c=%a%*%b%
echo %c%
set /A c=%a%/%b%
echo %c%
pause
Set komutunu bir stringin belli bir kısmını çıkarmak için aşağıdaki şekilde kullanılabilir.
@ECHO off
SET x=The sky above was quite gray
SET z=%x:~0,7%
ECHO %z%
pause
Aşağıda görüldüğü üzere ilk karakteri göstermektedir.

30 Nisan 2017 Pazar

Batch Programlamaya Giriş


Merhabalari
Bu ders batch programlamaya giriş niteliğinde örnekler içermektedir. ilk işlemimiz ekrana "Hello world!" yazmak. Bunun için  bir txt dosyasına aşağıdaki kodu ekleyin ve dosyasının uzantısını .bat yapın
@echo off
echo Hello world!
pause
Çıktı:
Yukardaki kodun sırayla açıklaması:
@echo off: Bu kodu eklemezsek .bat dosyasıının içindeki her kodu aşağıda görüldüğü üzere,  .bat dosyasını çalıştıran herkes görür
echo: Bu komut ekrana yazı yazdırmak için kullanılır C programlamadaki printf'e karşılık gelmektedir.
pause: Bu komut gelen ekranın kullanıcının onayı olmadan ekranı kapatmasını önlemek için kullanılır.Eğer komutu kullanmazsak .bat dosyasının içindeki işlemler sırayla tamamlandıktan sonra hemen kaybolur.
Batch programlamadan sık kullanılan komutlar
help: cmd ekranında bu komutu yazdığımızda .bat programlamada kullanılan komutları açıklamasıyla beraber listeler. Bir komutun nasıl kullanıldığını öğrenmek içinde kullanılır.
Örnek olarak
help for
help findstr
help rem
gibi
cls:Ekrandaki yazıyı siler
rem:.bat dosyası içine yorum satırı yazmak için kulllanılır.
exit:Bu komut, komut istemini sonlandırmak için kullanılır.
call:Bu komut .bat dosyasında başka bir .at dosyasını çağırmak için kullanılır.
tasklist:Bu komut, arkaplanda PID(işlem kimliği), oturum adı, bellek kullanımı ile birlikte şuanda çalışan tüm işlemleri görüntülemek için kullanılır.
taskkill: Bu komut local ve remote, belirtilen işlemi sonlandırmak için kullanılır.
title:Bu komut .bat dosyasının başlığı tanımlar.
@echo off
title Hello
echo Worlds
pause

tree: Dosya dizinleri tree şeklinde gösterir.
%time%:Mevcut saati gösterir.
color: Ekrandaki yazı rengini değiştirmek için kullanılır.
Kullanımı:
color 0
color 1
Environment Variable'lar

Örnek Kullanımı:
echo %CD%
echo %DATE%
gibi.

5 Şubat 2017 Pazar

Hadoop MapReduce

MapReduce, güvenilir ve hataya dayanıklı bir şekilde sıradan  sunuculardan oluşan geniş bir cluster üzerinde çok miktarda veriyi parallel olarak çalıştıran uygulamaları kolayca yazmak için kullanılan bir yazılım kütüphanesidir.

MapReduce framework(kütüphane)'ü 2 önemli task(görev)'i içerir.
  • Map
  • Reduce
Bir MapReduce job'ı, genellikle  girilen verilere bağımsız olarak block'lara ayırır ki bunlar parallel bir şekilde map task tarafında yürütülür. Framework(kütüphane), map'in çıktıklarını sort(sıralar) eder ve sonra reduce task ile girdileri azaltır(gruplar).

MapReduce iş akışı oluşturmak için 2 script yazmak gerekir, bunlar map ve reduce scriptleridir. Şimdi bir senaryo üzerinde MapReduce  uygulaması gerçekleştirelim

Senaryo:Yaygın olarak kullanılan wordcount uygulaması, yani HDFS'te bulunan bir file'daki kelimelerin kaç kez kullanıldığını gösteren MapReduce uygulaması.



Yukardaki MapReduce örneğinin scripti aşağıda yer almaktadır.

import java.io.IOException;
import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class WordCount {

  public static class TokenizerMapper
       extends Mapper{

    private final static IntWritable one = new IntWritable(1);
    private Text word = new Text();

    public void map(Object key, Text value, Context context
                    ) throws IOException, InterruptedException {
      StringTokenizer itr = new StringTokenizer(value.toString());
      while (itr.hasMoreTokens()) {
        word.set(itr.nextToken());
        context.write(word, one);
      }
    }
  }

  public static class IntSumReducer
       extends Reducer {
    private IntWritable result = new IntWritable();

    public void reduce(Text key, Iterable values,
                       Context context
                       ) throws IOException, InterruptedException {
      int sum = 0;
      for (IntWritable val : values) {
        sum += val.get();
      }
      result.set(sum);
      context.write(key, result);
    }
  }

  public static void main(String[] args) throws Exception {
    Configuration conf = new Configuration();
    Job job = Job.getInstance(conf, "word count");
    job.setJarByClass(WordCount.class);
    job.setMapperClass(TokenizerMapper.class);
    job.setCombinerClass(IntSumReducer.class);
    job.setReducerClass(IntSumReducer.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
    FileInputFormat.addInputPath(job, new Path(args[0]));
    FileOutputFormat.setOutputPath(job, new Path(args[1]));
    System.exit(job.waitForCompletion(true) ? 0 : 1);
  }
}


Yukardaki java kodunu kendi sisteminizde uygulamanız için aşağıdaki işlemleri sırasıyla yapmanız gerekemektedir.

1-Aşağıdaki ortam değişkenlilerini sistem set etmelisiniz

export JAVA_HOME=/usr/java/default
export PATH=${JAVA_HOME}/bin:${PATH}
export HADOOP_CLASSPATH=${JAVA_HOME}/lib/tools.jar

2-Yukarıda oluşturmuş olduğumuz wordcount java dosyasını compile(derlemek) edip ve jar dosyası oluşturmamiz gerekmektedir.

$bin/hadoop com.sun.tools.javac.main wordcount.java
$jar cf wc.jar wordcount*.class

3-Wordcount jar dosyası için input ve output diresctory'ları HDFS'te oluşturmamız gerekmektedir.
  • /user/sukru/wordcount/input - input directory in HDFS
  • /user/sukru/wordcount/output - output directory in HDFS

4-Input için HDFS'de  /user/sukru/wordcount/input directory'sinde 2 file(file01,file02) tanımladığımızı varsayalım. Aşağıdaki komutlarlar ile de dosya içeriğini görelim

$bin/hadoop fs -cat /user/sukru/wordcount/input/file01
Dear, Bear,River

$bin/hadoop fs -cat /user/sukru/wordcount/input/file02
Car,Car,River,Dear,Car,Bear

5-Şimdi uygulamayı çalıştıralım.
$bin/hadoop jar wc.jar wordcount /user/sukru/wordcount/input /user/sukru/wordcount/output


6-Uygulama çıktısını görelim.

$bin/hadoop fs -cat /user/sukru/wordcount/output/part-r-0000
Bear 2
Car 3
River 2
Dear 2






4 Şubat 2017 Cumartesi

Hadoop HDFS




HDFS'e Giriş

Hadoop Distributed File System(HDFS), sıradan sunucular üzerinde çalıştırılmak için tasarlanmış dağıtık dosya sistemidir. HDFS'de master and slave mimarisi mevcuttur.

  • Master:File System metadata'sını yönetmek için tek bir NameNode'tur.
  • Slave:Data'yı depolamak için birden fazla DataNode'tur.

Cluster üzerinde depolanmadan önce, HDFS'deki file'lar block(chunk)'lara ayrılır. Block boyutu varsayılan olarak 64MB veya 128 MB'tır. Bir file'a ait block  farklı node üzerinde store edilir.

Hadoop Daemon

Hesaplama terimlerinde daemon, arkaplanda çalışan process'tir. Hadoop'ta 5 tane vardır.
Bunlar;

  • NameNode
    • Bir block'u DataNode'a eşler.
    • File'a okuma/yazma erişimini kontrol eder.
    • Block'lar için replication(kopyalama) engine'i yönetir.
    • Client, DataNode ve SecondaryNameNode ile etkileşim halindedir.
    • File System Meta'sını yönetir.
NameNode'ta, Fsimage ve Editlog olmak üzere 2 tip dosya vardır. Fsimage, NameNode başlatıldığında dosya sisteminin o anki durumunu içerir. Editlog,NameNode başladıktan sonra dosya sisteminde oluşan değişikliklerdir.
  • SecondaryNameNode:Fsimage ve Editlog dosyasını periyodik olarak güncellemektedir. Bu sayede editlog dosyasının boyutu yönetilebilir boyut limitlerini geçmemektedir.
  • DataNode
    • Okuma, yazma isteklerinde(block oluşturma, silme ve kopyalama) sorumludur.
    • Data block'ları store(depolamak)  eder.
    • Client'tan gelen block'ları alır.

  • JobTracker(Resource Manager)
    • Kullanıcıdan gelen MapReduce task'ları kabul eder.
    • Gelen task'ı, taskTracker'a assing(atamak) eder ve status'ünü görüntüler.
  • TaskTracker(Node Manager)
    • MapReduce task'ları çalıştırır.
    • Hearbeat'i, JobTracker'e gönderir.
    • Job(İş) resource(kaynağını) HDFS'ten alır.
Her bir daemon, kendi sunucusu üzerinde bulunan JVM'te ayrı olarak çalışır.

Yazma


Okuma







HDFS Mimarisi


Featured Documents

Customization

View more

Tips and Tricks

View more

Tutorials

View more

Getting Started

View more