Hadoop - Hızlı Kılavuz
"Dünya verilerinin% 90'ı son birkaç yılda oluşturuldu."
Yeni teknolojilerin, cihazların ve sosyal ağ siteleri gibi iletişim araçlarının ortaya çıkması nedeniyle, insanlığın ürettiği veri miktarı her yıl hızla artıyor. Zamanın başından 2003 yılına kadar ürettiğimiz veri miktarı 5 milyar gigabayttı. Verileri disk şeklinde yığarsanız, tüm futbol sahasını doldurabilir. Her iki günde bir aynı miktar2011ve her on dakikada bir 2013. Bu oran hala muazzam bir şekilde artıyor. Üretilen tüm bu bilgiler anlamlı ve işlendiğinde faydalı olabilse de ihmal edilmektedir.
Büyük Veri nedir?
Big datageleneksel hesaplama teknikleri kullanılarak işlenemeyen büyük veri kümelerinden oluşan bir koleksiyondur. Tek bir teknik ya da araç değil, çeşitli araçları, teknikleri ve çerçeveleri içeren tam bir konu haline geldi.
Büyük Verinin Altında Ne Var?
Büyük veri, farklı cihazlar ve uygulamalar tarafından üretilen verileri içerir. Aşağıda Büyük Veri çatısı altında yer alan alanlardan bazıları verilmiştir.
Black Box Data - Helikopter, uçak ve jetlerin vb. Bir bileşenidir. Uçuş ekibinin seslerini, mikrofon ve kulaklık kayıtlarını ve uçağın performans bilgilerini yakalar.
Social Media Data - Facebook ve Twitter gibi sosyal medya bilgileri ve dünya çapında milyonlarca insan tarafından yayınlanan görüşleri tutar.
Stock Exchange Data - Menkul kıymetler borsası verileri, müşteriler tarafından farklı şirketlerin bir payına ilişkin alınan 'al' ve 'sat' kararları hakkında bilgi içerir.
Power Grid Data - Güç şebekesi verileri, bir baz istasyonuna göre belirli bir düğüm tarafından tüketilen bilgileri tutar.
Transport Data - Taşıma verileri, bir aracın modelini, kapasitesini, mesafesini ve kullanılabilirliğini içerir.
Search Engine Data - Arama motorları, farklı veritabanlarından çok sayıda veri alır.
Bu nedenle Büyük Veri, büyük hacim, yüksek hız ve genişletilebilir veri çeşitliliği içerir. İçindeki veriler üç tipte olacaktır.
Structured data - İlişkisel veriler.
Semi Structured data - XML verileri.
Unstructured data - Word, PDF, Metin, Medya Günlükleri.
Büyük Verinin Faydaları
Pazarlama ajansları, Facebook gibi sosyal ağda tutulan bilgileri kullanarak kampanyalarının, promosyonlarının ve diğer reklam araçlarının yanıtlarını öğreniyor.
Sosyal medyadaki bilgileri kullanarak tüketicilerinin, ürün şirketlerinin ve perakende kuruluşlarının tercihleri ve ürün algısı gibi bilgileri kullanarak üretimlerini planlıyorlar.
Hastaların geçmiş tıbbi geçmişine ait verileri kullanarak hastaneler daha iyi ve hızlı hizmet vermektedir.
Büyük Veri Teknolojileri
Büyük veri teknolojileri, daha doğru analiz sağlamada önemlidir ve bu da daha somut karar vermeye yol açarak daha fazla operasyonel verimlilik, maliyet düşüşleri ve işletme için daha az risk ile sonuçlanabilir.
Büyük verinin gücünden yararlanmak için, büyük hacimli yapılandırılmış ve yapılandırılmamış verileri gerçek zamanlı olarak yönetebilen ve işleyebilen ve veri gizliliği ve güvenliğini koruyabilen bir altyapıya ihtiyacınız olacaktır.
Pazarda, büyük verileri işlemek için Amazon, IBM, Microsoft vb. Büyük veriyi işleyen teknolojileri incelerken, aşağıdaki iki teknoloji sınıfını inceliyoruz:
Operasyonel Büyük Veri
Bu, verilerin öncelikle yakalandığı ve depolandığı gerçek zamanlı, etkileşimli iş yükleri için operasyonel yetenekler sağlayan MongoDB gibi sistemleri içerir.
NoSQL Büyük Veri sistemleri, son on yılda ortaya çıkan yeni bulut bilişim mimarilerinden yararlanarak devasa hesaplamaların ucuz ve verimli bir şekilde çalıştırılmasına izin verecek şekilde tasarlanmıştır. Bu, operasyonel büyük veri iş yüklerinin yönetilmesini çok daha kolay, daha ucuz ve daha hızlı uygulanmasını sağlar.
Bazı NoSQL sistemleri, minimum kodlama ile ve veri bilimcilerine ve ek altyapıya ihtiyaç duymadan gerçek zamanlı verilere dayalı modeller ve trendler hakkında içgörüler sağlayabilir.
Analitik Büyük Veri
Bunlar, verilerin çoğuna veya tümüne dokunabilecek geriye dönük ve karmaşık analizler için analitik yetenekler sağlayan Massively Parallel Processing (MPP) veritabanı sistemleri ve MapReduce gibi sistemleri içerir.
MapReduce, SQL tarafından sağlanan yetenekleri tamamlayan yeni bir veri analizi yöntemi ve tek sunuculardan binlerce yüksek ve düşük uçlu makineye ölçeklendirilebilen MapReduce tabanlı bir sistem sunar.
Bu iki teknoloji sınıfı birbirini tamamlar ve sıklıkla birlikte kullanılır.
Operasyonel ve Analitik Sistemler
Operasyonel | Analitik | |
---|---|---|
Gecikme | 1 ms - 100 ms | 1 dk - 100 dk |
Eşzamanlılık | 1000 - 100.000 | 1 - 10 |
Erişim Modeli | Yazıyor ve Okuyor | Okur |
Sorguları | Seçici | Seçici değil |
Veri Kapsamı | Operasyonel | Geriye dönük |
Son kullanıcı | Müşteri | Veri Bilimcisi |
Teknoloji | NoSQL | MapReduce, MPP Veritabanı |
Büyük Veri Zorlukları
Büyük veriyle ilgili başlıca zorluklar aşağıdaki gibidir:
- Veri yakalama
- Curation
- Storage
- Searching
- Sharing
- Transfer
- Analysis
- Presentation
Yukarıdaki zorlukların üstesinden gelmek için kuruluşlar normalde kurumsal sunuculardan yardım alır.
Geleneksel yaklaşım
Bu yaklaşımda, bir kuruluşun büyük verileri depolamak ve işlemek için bir bilgisayarı olacaktır. Depolama amacıyla, programcılar Oracle, IBM, vb. Gibi veritabanı satıcıları seçiminde yardım alacaklardır. Bu yaklaşımda, kullanıcı uygulama ile etkileşime girer ve bu uygulama da veri depolama ve analizinin bir kısmını yönetir.
Sınırlama
Bu yaklaşım, standart veritabanı sunucuları tarafından barındırılabilen daha az hacimli verileri veya verileri işleyen işlemcinin sınırına kadar işleyen uygulamalarda iyi çalışır. Ancak, büyük miktarlarda ölçeklenebilir veriyle uğraşmak söz konusu olduğunda, bu tür verileri tek bir veritabanı darboğazı üzerinden işlemek yoğun bir iştir.
Google'ın Çözümü
Google bu sorunu MapReduce adlı bir algoritma kullanarak çözdü. Bu algoritma, görevi küçük parçalara böler ve bunları birçok bilgisayara atar ve entegre edildiğinde sonuç veri setini oluşturan sonuçları bunlardan toplar.
Hadoop
Google tarafından sağlanan çözümü kullanarak, Doug Cutting ve ekibi adında bir Açık Kaynak Projesi geliştirdi HADOOP.
Hadoop, verilerin diğerleriyle paralel olarak işlendiği MapReduce algoritmasını kullanarak uygulamaları çalıştırır. Kısacası, Hadoop, büyük miktarda veri üzerinde tam istatistiksel analiz gerçekleştirebilecek uygulamalar geliştirmek için kullanılır.
Hadoop, basit programlama modelleri kullanarak büyük veri kümelerinin bilgisayar kümeleri arasında dağıtılmış olarak işlenmesine olanak tanıyan, java ile yazılmış bir Apache açık kaynak çerçevesidir. Hadoop çerçeve uygulaması , bilgisayar kümeleri arasında dağıtılmış depolama ve hesaplama sağlayan bir ortamda çalışır . Hadoop, her biri yerel hesaplama ve depolama sunan tek sunucudan binlerce makineye ölçeklenecek şekilde tasarlanmıştır.
Hadoop Mimarisi
Hadoop'un özünde iki ana katman vardır:
- İşleme / Hesaplama katmanı (MapReduce) ve
- Depolama katmanı (Hadoop Dağıtılmış Dosya Sistemi).
Harita indirgeme
MapReduce, büyük miktarda verinin (çok terabaytlı veri kümeleri), ticari donanımın büyük kümelerinde (binlerce düğüm) güvenilir ve hataya dayanıklı bir şekilde verimli işlenmesi için Google'da tasarlanmış dağıtılmış uygulamaları yazmak için paralel bir programlama modelidir. MapReduce programı, Apache açık kaynaklı bir çerçeve olan Hadoop üzerinde çalışır.
Hadoop Dağıtılmış Dosya Sistemi
Hadoop Dağıtılmış Dosya Sistemi (HDFS), Google Dosya Sistemine (GFS) dayanır ve ticari donanım üzerinde çalışmak üzere tasarlanmış dağıtılmış bir dosya sistemi sağlar. Mevcut dağıtılmış dosya sistemleriyle birçok benzerliği vardır. Bununla birlikte, diğer dağıtılmış dosya sistemlerinden farklılıklar önemlidir. Son derece hataya dayanıklıdır ve düşük maliyetli donanımlara yerleştirilmek üzere tasarlanmıştır. Uygulama verilerine yüksek verimli erişim sağlar ve büyük veri kümelerine sahip uygulamalar için uygundur.
Yukarıda belirtilen iki temel bileşenin yanı sıra, Hadoop çerçevesi ayrıca aşağıdaki iki modülü içerir -
Hadoop Common - Bunlar, diğer Hadoop modülleri için gerekli olan Java kitaplıkları ve yardımcı programlarıdır.
Hadoop YARN - Bu, iş planlaması ve küme kaynak yönetimi için bir çerçevedir.
Hadoop Nasıl Çalışır?
Büyük ölçekli işlemlerin üstesinden gelen ağır yapılandırmalara sahip daha büyük sunucular oluşturmak oldukça pahalıdır, ancak alternatif olarak birçok ticari bilgisayarı tek CPU ile tek bir işlevsel dağıtılmış sistem olarak birbirine bağlayabilir ve pratik olarak kümelenmiş makineler veri setini okuyabilir. paralel olarak ve çok daha yüksek bir verim sağlar. Dahası, bir üst düzey sunucudan daha ucuzdur. Bu, Hadoop'u kümelenmiş ve düşük maliyetli makinelerde kullanmanın arkasındaki ilk motivasyon faktörüdür.
Hadoop, kodu bir bilgisayar kümesi üzerinde çalıştırır. Bu süreç, Hadoop'un gerçekleştirdiği aşağıdaki temel görevleri içerir -
Veriler başlangıçta dizinlere ve dosyalara bölünür. Dosyalar, 128M ve 64M'lik (tercihen 128M) tek tip boyutlu bloklara bölünmüştür.
Bu dosyalar daha sonra işlenmek üzere çeşitli küme düğümlerine dağıtılır.
Yerel dosya sisteminin tepesinde olan HDFS, işlemeyi denetler.
Donanım arızasını gidermek için bloklar çoğaltılır.
Kodun başarıyla yürütüldüğünün kontrol edilmesi.
Harita ve azaltma aşamaları arasında gerçekleşen sıralamayı gerçekleştirmek.
Sıralanan verileri belirli bir bilgisayara gönderme.
Her iş için hata ayıklama günlüklerinin yazılması.
Hadoop'un Avantajları
Hadoop çerçevesi, kullanıcının dağıtılmış sistemleri hızlı bir şekilde yazmasına ve test etmesine olanak tanır. Verimlidir ve verileri otomatik olarak dağıtır ve makineler arasında çalışır ve karşılığında CPU çekirdeklerinin temelindeki paralelliği kullanır.
Hadoop, hata toleransı ve yüksek kullanılabilirlik (FTHA) sağlamak için donanıma güvenmez, bunun yerine Hadoop kitaplığının kendisi uygulama katmanındaki hataları algılamak ve işlemek için tasarlanmıştır.
Sunucular dinamik olarak kümeye eklenebilir veya kümeden kaldırılabilir ve Hadoop kesintisiz olarak çalışmaya devam eder.
Hadoop'un bir diğer büyük avantajı da açık kaynak kodlu olmasının yanı sıra Java tabanlı olduğu için tüm platformlarda uyumlu olmasıdır.
Hadoop, GNU / Linux platformu ve çeşitleri tarafından desteklenmektedir. Bu nedenle, Hadoop ortamını kurmak için bir Linux işletim sistemi kurmamız gerekiyor. Linux dışında bir işletim sisteminiz varsa, içine bir Virtualbox yazılımı yükleyebilir ve Virtualbox içinde Linux'a sahip olabilirsiniz.
Kurulum Öncesi Kurulum
Hadoop'u Linux ortamına kurmadan önce, Linux'u kullanarak ssh(Güvenli Kabuk). Linux ortamını kurmak için aşağıda verilen adımları izleyin.
Bir Kullanıcı Oluşturma
Başlangıçta, Hadoop dosya sistemini Unix dosya sisteminden izole etmek için Hadoop için ayrı bir kullanıcı oluşturmanız önerilir. Bir kullanıcı oluşturmak için aşağıda verilen adımları izleyin -
"Su" komutunu kullanarak kökü açın.
"Useradd username" komutunu kullanarak kök hesaptan bir kullanıcı oluşturun.
Artık "su username" komutunu kullanarak mevcut bir kullanıcı hesabını açabilirsiniz.
Linux terminalini açın ve bir kullanıcı oluşturmak için aşağıdaki komutları yazın.
$ su
password:
# useradd hadoop
# passwd hadoop
New passwd:
Retype new passwd
SSH Kurulumu ve Anahtar Oluşturma
SSH kurulumu, bir kümede başlatma, durdurma, dağıtılmış arka plan programı kabuğu işlemleri gibi farklı işlemler yapmak için gereklidir. Farklı Hadoop kullanıcılarının kimliğini doğrulamak için, bir Hadoop kullanıcısı için genel / özel anahtar çifti sağlanması ve bunu farklı kullanıcılarla paylaşması gerekir.
Aşağıdaki komutlar, SSH kullanılarak bir anahtar-değer çifti oluşturmak için kullanılır. İd_rsa.pub genel anahtarlarını yetkili_keys'e kopyalayın ve sahibine sırasıyla auth_keys dosyasına okuma ve yazma izinleri verin.
$ ssh-keygen -t rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys $ chmod 0600 ~/.ssh/authorized_keys
Java yükleme
Java, Hadoop'un temel ön koşuludur. Öncelikle “java -version” komutunu kullanarak sisteminizde java varlığını doğrulamalısınız. Java sürüm komutunun sözdizimi aşağıda verilmiştir.
$ java -version
Her şey yolundaysa, size aşağıdaki çıktıyı verecektir.
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b13)
Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode)
Sisteminizde java kurulu değilse, java yüklemek için aşağıda verilen adımları izleyin.
Aşama 1
Aşağıdaki bağlantıyı www.oracle.com ziyaret ederek java'yı (JDK <en son sürüm> - X64.tar.gz) indirin
Sonra jdk-7u71-linux-x64.tar.gz sisteminize indirilecektir.
Adım 2
Genellikle indirilen java dosyasını İndirilenler klasöründe bulacaksınız. Doğrulayın vejdk-7u71-linux-x64.gz aşağıdaki komutları kullanarak dosya.
$ cd Downloads/
$ ls jdk-7u71-linux-x64.gz $ tar zxf jdk-7u71-linux-x64.gz
$ ls
jdk1.7.0_71 jdk-7u71-linux-x64.gz
Aşama 3
Java'yı tüm kullanıcıların kullanımına açmak için, onu "/ usr / local /" konumuna taşımalısınız. Kökü açın ve aşağıdaki komutları yazın.
$ su
password:
# mv jdk1.7.0_71 /usr/local/
# exit
4. adım
Kurulum için PATH ve JAVA_HOME değişkenler, aşağıdaki komutları ekleyin ~/.bashrc dosya.
export JAVA_HOME=/usr/local/jdk1.7.0_71
export PATH=$PATH:$JAVA_HOME/bin
Şimdi tüm değişiklikleri mevcut çalışan sisteme uygulayın.
$ source ~/.bashrc
Adım 5
Java alternatiflerini yapılandırmak için aşağıdaki komutları kullanın -
# alternatives --install /usr/bin/java java usr/local/java/bin/java 2
# alternatives --install /usr/bin/javac javac usr/local/java/bin/javac 2
# alternatives --install /usr/bin/jar jar usr/local/java/bin/jar 2
# alternatives --set java usr/local/java/bin/java
# alternatives --set javac usr/local/java/bin/javac
# alternatives --set jar usr/local/java/bin/jar
Şimdi, yukarıda açıklandığı gibi terminalden java -version komutunu doğrulayın.
Hadoop'u indirme
Aşağıdaki komutları kullanarak Apache yazılım temelinden Hadoop 2.4.1'i indirin ve çıkarın.
$ su
password:
# cd /usr/local
# wget http://apache.claz.org/hadoop/common/hadoop-2.4.1/
hadoop-2.4.1.tar.gz
# tar xzf hadoop-2.4.1.tar.gz
# mv hadoop-2.4.1/* to hadoop/
# exit
Hadoop Çalışma Modları
Hadoop'u indirdikten sonra, Hadoop kümenizi desteklenen üç moddan birinde çalıştırabilirsiniz -
Local/Standalone Mode - Hadoop'u sisteminize indirdikten sonra, varsayılan olarak bağımsız bir modda yapılandırılır ve tek bir java işlemi olarak çalıştırılabilir.
Pseudo Distributed Mode- Tek makinede dağıtılmış bir simülasyondur. Hdfs, iplik, MapReduce vb. Gibi her bir Hadoop arka plan programı, ayrı bir java işlemi olarak çalışacaktır. Bu mod geliştirme için kullanışlıdır.
Fully Distributed Mode- Bu mod, bir küme halinde en az iki veya daha fazla makineyle tamamen dağıtılmıştır. İlerleyen bölümlerde bu moda detaylı olarak rastlayacağız.
Hadoop'u Bağımsız Modda Kurma
Burada kurulumunu tartışacağız Hadoop 2.4.1 bağımsız modda.
Çalışan hiçbir arka plan programı yoktur ve her şey tek bir JVM'de çalışır. Bağımsız mod, geliştirme sırasında MapReduce programlarını çalıştırmak için uygundur, çünkü onları test etmek ve hatalarını ayıklamak kolaydır.
Hadoop'u Kurma
Aşağıdaki komutları ekleyerek Hadoop ortam değişkenlerini ayarlayabilirsiniz. ~/.bashrc dosya.
export HADOOP_HOME=/usr/local/hadoop
Daha fazla ilerlemeden önce, Hadoop'un düzgün çalıştığından emin olmanız gerekir. Sadece aşağıdaki komutu verin -
$ hadoop version
Kurulumunuzda her şey yolundaysa, aşağıdaki sonucu görmelisiniz -
Hadoop 2.4.1
Subversion https://svn.apache.org/repos/asf/hadoop/common -r 1529768
Compiled by hortonmu on 2013-10-07T06:28Z
Compiled with protoc 2.5.0
From source with checksum 79e53ce7994d1628b240f09af91e1af4
Bu, Hadoop'unuzun bağımsız mod kurulumunun iyi çalıştığı anlamına gelir. Varsayılan olarak, Hadoop tek bir makinede dağıtılmamış modda çalışacak şekilde yapılandırılmıştır.
Misal
Basit bir Hadoop örneğine bakalım. Hadoop kurulumu, MapReduce'un temel işlevselliğini sağlayan ve Pi değeri, belirli bir dosya listesindeki kelime sayıları vb. Gibi hesaplamalar için kullanılabilen aşağıdaki örnek MapReduce jar dosyasını sunar.
$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar
Birkaç dosyayı iteceğimiz bir girdi dizinine sahip olalım ve ihtiyacımız bu dosyalardaki toplam kelime sayısını saymaktır. Toplam kelime sayısını hesaplamak için, .jar dosyasının kelime sayımı uygulamasını içermesi koşuluyla, MapReduce'umuzu yazmamız gerekmez. Aynı .jar dosyasını kullanarak diğer örnekleri deneyebilirsiniz; hadoop-mapreduce-samples-2.2.0.jar dosyasıyla desteklenen MapReduce işlevsel programlarını kontrol etmek için aşağıdaki komutları verin.
$ hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduceexamples-2.2.0.jar
Aşama 1
Giriş dizininde geçici içerik dosyaları oluşturun. Bu girdi dizinini çalışmak istediğiniz her yerde oluşturabilirsiniz.
$ mkdir input $ cp $HADOOP_HOME/*.txt input $ ls -l input
Giriş dizininizde aşağıdaki dosyaları verecektir -
total 24
-rw-r--r-- 1 root root 15164 Feb 21 10:14 LICENSE.txt
-rw-r--r-- 1 root root 101 Feb 21 10:14 NOTICE.txt
-rw-r--r-- 1 root root 1366 Feb 21 10:14 README.txt
Bu dosyalar Hadoop kurulum ana dizininden kopyalanmıştır. Deneyiniz için farklı ve büyük dosyalara sahip olabilirsiniz.
Adım 2
Giriş dizininde bulunan tüm dosyalardaki toplam kelime sayısını hesaplamak için Hadoop sürecini aşağıdaki gibi başlatalım -
$ hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduceexamples-2.2.0.jar wordcount input output
Aşama 3
Adım-2, gerekli işlemi yapacak ve çıktıyı çıktı / part-r00000 dosyasına kaydedecek ve bunu kullanarak kontrol edebilirsiniz -
$cat output/*
Giriş dizininde bulunan tüm dosyalarda bulunan toplam sayıları ile birlikte tüm kelimeleri listeler.
"AS 4
"Contribution" 1
"Contributor" 1
"Derivative 1
"Legal 1
"License" 1
"License"); 1
"Licensor" 1
"NOTICE” 1
"Not 1
"Object" 1
"Source” 1
"Work” 1
"You" 1
"Your") 1
"[]" 1
"control" 1
"printed 1
"submitted" 1
(50%) 1
(BIS), 1
(C) 1
(Don't) 1
(ECCN) 1
(INCLUDING 2
(INCLUDING, 2
.............
Hadoop'u Sözde Dağıtılmış Modda Yükleme
Hadoop 2.4.1'i sözde dağıtılmış modda kurmak için aşağıdaki adımları izleyin.
Adım 1 - Hadoop'u Kurma
Aşağıdaki komutları ekleyerek Hadoop ortam değişkenlerini ayarlayabilirsiniz. ~/.bashrc dosya.
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin export HADOOP_INSTALL=$HADOOP_HOME
Şimdi tüm değişiklikleri mevcut çalışan sisteme uygulayın.
$ source ~/.bashrc
Adım 2 - Hadoop Yapılandırması
Tüm Hadoop yapılandırma dosyalarını “$ HADOOP_HOME / etc / hadoop” konumunda bulabilirsiniz. Bu yapılandırma dosyalarında Hadoop altyapınıza göre değişiklik yapmanız gerekir.
$ cd $HADOOP_HOME/etc/hadoop
Java'da Hadoop programları geliştirmek için, java ortam değişkenlerini sıfırlamanız gerekir. hadoop-env.sh değiştirerek dosya JAVA_HOME java'nın sisteminizdeki konumu ile değer.
export JAVA_HOME=/usr/local/jdk1.7.0_71
Aşağıda, Hadoop'u yapılandırmak için düzenlemeniz gereken dosyaların listesi bulunmaktadır.
core-site.xml
core-site.xml dosyası, Hadoop örneği için kullanılan bağlantı noktası numarası, dosya sistemi için ayrılan bellek, verileri depolamak için bellek sınırı ve Okuma / Yazma arabelleklerinin boyutu gibi bilgileri içerir.
Core-site.xml dosyasını açın ve aşağıdaki özellikleri <configuration>, </configuration> etiketleri arasına ekleyin.
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
hdfs-site.xml
hdfs-site.xmldosyası, yerel dosya sistemlerinizin çoğaltma verilerinin değeri, ad kodu yolu ve veri düğümü yolları gibi bilgileri içerir. Hadoop altyapısını depolamak istediğiniz yer anlamına gelir.
Aşağıdaki verileri varsayalım.
dfs.replication (data replication value) = 1
(In the below given path /hadoop/ is the user name.
hadoopinfra/hdfs/namenode is the directory created by hdfs file system.)
namenode path = //home/hadoop/hadoopinfra/hdfs/namenode
(hadoopinfra/hdfs/datanode is the directory created by hdfs file system.)
datanode path = //home/hadoop/hadoopinfra/hdfs/datanode
Bu dosyayı açın ve bu dosyadaki <configuration> </configuration> etiketleri arasına aşağıdaki özellikleri ekleyin.
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>file:///home/hadoop/hadoopinfra/hdfs/namenode </value>
</property>
<property>
<name>dfs.data.dir</name>
<value>file:///home/hadoop/hadoopinfra/hdfs/datanode </value>
</property>
</configuration>
Note - Yukarıdaki dosyada tüm özellik değerleri kullanıcı tanımlıdır ve Hadoop altyapınıza göre değişiklik yapabilirsiniz.
yarn-site.xml
Bu dosya, ipliği Hadoop'ta yapılandırmak için kullanılır. İplik-site.xml dosyasını açın ve bu dosyadaki <configuration>, </configuration> etiketleri arasına aşağıdaki özellikleri ekleyin.
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
mapred-site.xml
Bu dosya hangi MapReduce çerçevesini kullandığımızı belirtmek için kullanılır. Varsayılan olarak, Hadoop bir iplik-site.xml şablonu içerir. Öncelikle dosyanın kopyalanması gerekir.mapred-site.xml.template -e mapred-site.xml aşağıdaki komutu kullanarak dosya.
$ cp mapred-site.xml.template mapred-site.xml
Açık mapred-site.xml dosyasını açın ve bu dosyadaki <configuration>, </configuration> etiketleri arasına aşağıdaki özellikleri ekleyin.
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
Hadoop Kurulumunu Doğrulama
Aşağıdaki adımlar Hadoop kurulumunu doğrulamak için kullanılır.
Adım 1 - Ad Düğümü Kurulumu
“Hdfs namenode -format” komutunu kullanarak ad kodunu aşağıdaki gibi ayarlayın.
$ cd ~
$ hdfs namenode -format
Beklenen sonuç aşağıdaki gibidir.
10/24/14 21:30:55 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = localhost/192.168.1.11
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 2.4.1
...
...
10/24/14 21:30:56 INFO common.Storage: Storage directory
/home/hadoop/hadoopinfra/hdfs/namenode has been successfully formatted.
10/24/14 21:30:56 INFO namenode.NNStorageRetentionManager: Going to
retain 1 images with txid >= 0
10/24/14 21:30:56 INFO util.ExitUtil: Exiting with status 0
10/24/14 21:30:56 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at localhost/192.168.1.11
************************************************************/
Adım 2 - Hadoop dfs'yi doğrulama
Aşağıdaki komut dfs'yi başlatmak için kullanılır. Bu komutun yürütülmesi Hadoop dosya sisteminizi başlatacaktır.
$ start-dfs.sh
Beklenen çıktı aşağıdaki gibidir -
10/24/14 21:37:56
Starting namenodes on [localhost]
localhost: starting namenode, logging to /home/hadoop/hadoop
2.4.1/logs/hadoop-hadoop-namenode-localhost.out
localhost: starting datanode, logging to /home/hadoop/hadoop
2.4.1/logs/hadoop-hadoop-datanode-localhost.out
Starting secondary namenodes [0.0.0.0]
Adım 3 - İplik Komut Dosyasını Doğrulama
İplik betiğini başlatmak için aşağıdaki komut kullanılır. Bu komutun yürütülmesi iplik daemonlarınızı başlatacaktır.
$ start-yarn.sh
Beklenen çıktı aşağıdaki gibidir -
starting yarn daemons
starting resourcemanager, logging to /home/hadoop/hadoop
2.4.1/logs/yarn-hadoop-resourcemanager-localhost.out
localhost: starting nodemanager, logging to /home/hadoop/hadoop
2.4.1/logs/yarn-hadoop-nodemanager-localhost.out
Adım 4 - Tarayıcıda Hadoop'a Erişim
Hadoop'a erişmek için varsayılan bağlantı noktası numarası 50070'tir. Tarayıcıda Hadoop hizmetlerini almak için aşağıdaki url'yi kullanın.
http://localhost:50070/
Adım 5 - Küme için Tüm Uygulamaları Doğrulayın
Tüm küme uygulamalarına erişmek için varsayılan bağlantı noktası numarası 8088'dir. Bu hizmeti ziyaret etmek için aşağıdaki url'yi kullanın.
http://localhost:8088/
Hadoop Dosya Sistemi, dağıtılmış dosya sistemi tasarımı kullanılarak geliştirilmiştir. Emtia donanımı üzerinde çalıştırılır. Diğer dağıtılmış sistemlerin aksine, HDFS hataya karşı son derece dayanıklıdır ve düşük maliyetli donanım kullanılarak tasarlanmıştır.
HDFS çok büyük miktarda veri tutar ve daha kolay erişim sağlar. Bu kadar büyük verileri depolamak için dosyalar birden çok makinede saklanır. Bu dosyalar, arıza durumunda sistemi olası veri kayıplarından kurtarmak için yedekli bir şekilde saklanır. HDFS ayrıca uygulamaları paralel işleme için kullanılabilir hale getirir.
HDFS'nin özellikleri
- Dağıtılmış depolama ve işleme için uygundur.
- Hadoop, HDFS ile etkileşim için bir komut arabirimi sağlar.
- Yerleşik namenode ve datanode sunucuları, kullanıcıların kümenin durumunu kolayca kontrol etmelerine yardımcı olur.
- Dosya sistemi verilerine akış erişimi.
- HDFS, dosya izinleri ve kimlik doğrulama sağlar.
HDFS Mimarisi
Aşağıda bir Hadoop Dosya Sisteminin mimarisi verilmiştir.
HDFS, master-slave mimarisini takip eder ve aşağıdaki unsurlara sahiptir.
Namenode
İsim kodu, GNU / Linux işletim sistemini ve isim kodu yazılımını içeren ticari donanımdır. Emtia donanımı üzerinde çalıştırılabilen bir yazılımdır. İsim koduna sahip sistem ana sunucu olarak hareket eder ve aşağıdaki görevleri yerine getirir:
Dosya sistemi ad alanını yönetir.
İstemcinin dosyalara erişimini düzenler.
Ayrıca, dosyaları ve dizinleri yeniden adlandırma, kapatma ve açma gibi dosya sistemi işlemlerini yürütür.
Datanode
Datanode, GNU / Linux işletim sistemine ve datanode yazılımına sahip bir ticari donanımdır. Bir kümedeki her düğüm (Emtia donanımı / Sistemi) için bir veri düğümü olacaktır. Bu düğümler, sistemlerinin veri depolamasını yönetir.
Datanodes, istemci isteğine göre dosya sistemleri üzerinde okuma-yazma işlemleri gerçekleştirir.
Ayrıca, ad kodunun talimatlarına göre blok oluşturma, silme ve çoğaltma gibi işlemleri de gerçekleştirirler.
Blok
Genel olarak kullanıcı verileri HDFS dosyalarında saklanır. Bir dosya sistemindeki dosya, bir veya daha fazla bölüme ayrılacak ve / veya ayrı veri düğümlerinde saklanacaktır. Bu dosya segmentleri bloklar olarak adlandırılır. Başka bir deyişle, HDFS'nin okuyabileceği veya yazabileceği minimum veri miktarına Blok denir. Varsayılan blok boyutu 64MB'dir, ancak HDFS yapılandırmasında değişiklik ihtiyacına göre artırılabilir.
HDFS'nin Hedefleri
Fault detection and recovery- HDFS çok sayıda ticari donanım içerdiğinden, bileşenlerde sık sık arıza meydana gelir. Bu nedenle HDFS, hızlı ve otomatik arıza tespiti ve kurtarma mekanizmalarına sahip olmalıdır.
Huge datasets - HDFS, büyük veri kümelerine sahip uygulamaları yönetmek için küme başına yüzlerce düğüme sahip olmalıdır.
Hardware at data- Hesaplama verinin yakınında gerçekleştiğinde istenen görev verimli bir şekilde yapılabilir. Özellikle büyük veri kümelerinin söz konusu olduğu yerlerde, ağ trafiğini azaltır ve verimi artırır.
HDFS'yi başlatma
Başlangıçta yapılandırılmış HDFS dosya sistemini biçimlendirmeniz, ad kodunu (HDFS sunucusu) açmanız ve aşağıdaki komutu çalıştırmanız gerekir.
$ hadoop namenode -format
HDFS'yi biçimlendirdikten sonra, dağıtılmış dosya sistemini başlatın. Aşağıdaki komut, küme olarak isim düğümünün yanı sıra veri düğümlerini başlatacaktır.
$ start-dfs.sh
HDFS'de Dosyaları Listeleme
Bilgileri sunucuya yükledikten sonra, bir dizindeki dosyaların listesini, bir dosyanın durumunu, kullanarak bulabiliriz. ‘ls’. Aşağıda verilen sözdizimils argüman olarak bir dizine veya dosya adına geçebilirsiniz.
$ $HADOOP_HOME/bin/hadoop fs -ls <args>
HDFS'ye Veri Ekleme
Yerel sistemde file.txt adlı dosyada hdfs dosya sistemine kaydedilmesi gereken veriye sahip olduğumuzu varsayalım. Gerekli dosyayı Hadoop dosya sistemine eklemek için aşağıda verilen adımları izleyin.
Aşama 1
Bir giriş dizini oluşturmanız gerekir.
$ $HADOOP_HOME/bin/hadoop fs -mkdir /user/input
Adım 2
Put komutunu kullanarak bir veri dosyasını yerel sistemlerden Hadoop dosya sistemine aktarın ve saklayın.
$ $HADOOP_HOME/bin/hadoop fs -put /home/file.txt /user/input
Aşama 3
Dosyayı ls komutunu kullanarak doğrulayabilirsiniz.
$ $HADOOP_HOME/bin/hadoop fs -ls /user/input
HDFS'den Veri Alma
HDFS'de adlı bir dosyamız olduğunu varsayalım. outfile. Aşağıda, gerekli dosyayı Hadoop dosya sisteminden almak için basit bir gösteri verilmiştir.
Aşama 1
Başlangıçta, HDFS'deki verileri şu şekilde görüntüleyin: cat komut.
$ $HADOOP_HOME/bin/hadoop fs -cat /user/output/outfile
Adım 2
Dosyayı HDFS'den yerel dosya sistemine şunu kullanarak alın: get komut.
$ $HADOOP_HOME/bin/hadoop fs -get /user/output/ /home/hadoop_tp/
HDFS'yi Kapatma
Aşağıdaki komutu kullanarak HDFS'yi kapatabilirsiniz.
$ stop-dfs.sh
İçinde daha birçok komut var "$HADOOP_HOME/bin/hadoop fs"burada gösterilenden daha fazla, ancak bu temel işlemler başlamanıza yardımcı olacaktır. ./Bin/hadoop dfs'yi hiçbir ek argüman olmadan çalıştırmak, FsShell sistemi ile çalıştırılabilecek tüm komutları listeleyecektir. Ayrıca,$HADOOP_HOME/bin/hadoop fs -help commandName, takılı kalırsanız, söz konusu işlem için kısa bir kullanım özeti görüntüler.
Tüm işlemlerin bir tablosu aşağıda gösterilmiştir. Parametreler için aşağıdaki kurallar kullanılır -
"<path>" means any file or directory name.
"<path>..." means one or more file or directory names.
"<file>" means any filename.
"<src>" and "<dest>" are path names in a directed operation.
"<localSrc>" and "<localDest>" are paths as above, but on the local file system.
Diğer tüm dosyalar ve yol adları, HDFS içindeki nesnelere atıfta bulunur.
Sr.No | Komut ve Açıklama |
---|---|
1 | -ls <path> Her giriş için adlar, izinler, sahip, boyut ve değişiklik tarihini göstererek yola göre belirtilen dizinin içeriğini listeler. |
2 | -lsr <path> -Ls gibi davranır, ancak yolun tüm alt dizinlerinde girdileri yinelemeli olarak görüntüler. |
3 | -du <path> Yolla eşleşen tüm dosyalar için disk kullanımını bayt cinsinden gösterir; dosya adları, tam HDFS protokolü önekiyle rapor edilir. |
4 | -dus <path> -Du gibi, ancak yoldaki tüm dosyaların / dizinlerin disk kullanımının bir özetini yazdırır. |
5 | -mv <src><dest> Src ile belirtilen dosya veya dizini HDFS içinde dest'e taşır. |
6 | -cp <src> <dest> Src ile tanımlanan dosya veya dizini HDFS içinde dest'e kopyalar. |
7 | -rm <path> Yol ile tanımlanan dosyayı veya boş dizini kaldırır. |
8 | -rmr <path> Yol ile tanımlanan dosya veya dizini kaldırır. Yinelemeli olarak tüm alt girdileri siler (yani, dosyalar veya yol alt dizinleri). |
9 | -put <localSrc> <dest> LocalSrc tarafından tanımlanan yerel dosya sisteminden dosyayı veya dizini DFS içindeki hedefe kopyalar. |
10 | -copyFromLocal <localSrc> <dest> Aynı-girdi |
11 | -moveFromLocal <localSrc> <dest> LocalSrc tarafından tanımlanan yerel dosya sistemindeki dosyayı veya dizini HDFS içindeki hedefe kopyalar ve ardından başarılı olduğunda yerel kopyayı siler. |
12 | -get [-crc] <src> <localDest> Src ile tanımlanan HDFS'deki dosyayı veya dizini localDest tarafından tanımlanan yerel dosya sistemi yoluna kopyalar. |
13 | -getmerge <src> <localDest> HDFS'de src yoluyla eşleşen tüm dosyaları alır ve bunları localDest tarafından tanımlanan yerel dosya sistemindeki tek bir birleştirilmiş dosyaya kopyalar. |
14 | -cat <filen-ame> Standart çıktıda dosya adının içeriğini görüntüler. |
15 | -copyToLocal <src> <localDest> Aynı-hedef |
16 | -moveToLocal <src> <localDest> -Get gibi çalışır, ancak başarı durumunda HDFS kopyasını siler. |
17 | -mkdir <path> HDFS'de yol adlı bir dizin oluşturur. Yoldaki eksik olan tüm üst dizinleri oluşturur (örneğin, Linux'ta mkdir -p). |
18 | -setrep [-R] [-w] rep <path> Kopyalama yolu ile tanımlanan dosyalar için hedef çoğaltma faktörünü ayarlar. (Gerçek çoğaltma faktörü, zamanla hedefe doğru hareket edecektir) |
19 | -touchz <path> Zaman damgası olarak geçerli saati içeren yolda bir dosya oluşturur. Dosya zaten 0 boyutunda değilse, yolda zaten bir dosya varsa başarısız olur. |
20 | -test -[ezd] <path> Yol varsa 1 döndürür; sıfır uzunluğa sahiptir; veya bir dizin veya aksi takdirde 0'dır. |
21 | -stat [format] <path> Yol hakkında bilgi yazdırır. Biçim, dosya boyutunu bloklar (% b), dosya adı (% n), blok boyutu (% o), çoğaltma (% r) ve değişiklik tarihi (% y,% Y) olarak kabul eden bir dizedir. |
22 | -tail [-f] <file2name> Standart çıktıdaki son 1KB'lik dosyayı gösterir. |
23 | -chmod [-R] mode,mode,... <path>... Yol ile tanımlanan bir veya daha fazla nesneyle ilişkili dosya izinlerini değiştirir .... R. modu ile yinelemeli olarak değişiklikler yapar, 3 basamaklı sekizlik moddur veya {augo} +/- {rwxX}. Kapsam belirtilmediğini ve bir umask uygulamadığını varsayar. |
24 | -chown [-R] [owner][:[group]] <path>... Yol ... ile tanımlanan dosyalar veya dizinler için sahip olan kullanıcıyı ve / veya grubu ayarlar. -R belirtilmişse sahibi özyinelemeli olarak ayarlar. |
25 | -chgrp [-R] group <path>... Yol ... ile tanımlanan dosyalar veya dizinler için sahip grubu ayarlar. -R belirtilmişse grubu yinelemeli olarak ayarlar. |
26 | -help <cmd-name> Yukarıda listelenen komutlardan biri için kullanım bilgilerini döndürür. Cmd'de baştaki '-' karakterini atlamalısınız. |
MapReduce, büyük miktarda veriyi paralel olarak büyük ticari donanım kümelerinde güvenilir bir şekilde işlemek için uygulamalar yazabileceğimiz bir çerçevedir.
MapReduce nedir?
MapReduce, java tabanlı dağıtılmış hesaplama için bir işleme tekniği ve bir program modelidir. MapReduce algoritması, Map ve Reduce olmak üzere iki önemli görev içerir. Harita, bir veri kümesini alır ve bunları, ayrı öğelerin demetlere (anahtar / değer çiftleri) bölündüğü başka bir veri kümesine dönüştürür. İkinci olarak, bir haritadan çıktıyı girdi olarak alan ve bu veri gruplarını daha küçük bir grup kümesinde birleştiren görevi azaltın. MapReduce adının sırasından da anlaşılacağı gibi, azaltma görevi her zaman harita işinden sonra gerçekleştirilir.
MapReduce'un en büyük avantajı, veri işlemeyi birden çok hesaplama düğümü üzerinde ölçeklendirmenin kolay olmasıdır. MapReduce modeli altında, veri işleme ilkelleri eşleyiciler ve indirgeyiciler olarak adlandırılır. Bir veri işleme uygulamasını eşleştiricilere ve indirgeyicilere ayrıştırmak bazen önemsizdir. Ancak, MapReduce formunda bir uygulama yazdığımızda, uygulamayı bir kümedeki yüzlerce, binlerce ve hatta on binlerce makineyi çalıştıracak şekilde ölçeklendirmek yalnızca bir yapılandırma değişikliğidir. Bu basit ölçeklenebilirlik, birçok programcıyı MapReduce modelini kullanmaya yönelten şeydir.
Algoritma
Genel olarak MapReduce paradigması, bilgisayarı verinin bulunduğu yere göndermeye dayanır!
MapReduce programı, harita aşaması, karıştırma aşaması ve azaltma aşaması olmak üzere üç aşamada yürütülür.
Map stage- Harita veya haritacının görevi, giriş verilerini işlemektir. Genellikle giriş verileri dosya veya dizin biçimindedir ve Hadoop dosya sisteminde (HDFS) saklanır. Girdi dosyası, eşleyici işlevine satır satır iletilir. Eşleştirici, verileri işler ve birkaç küçük veri parçası oluşturur.
Reduce stage - Bu aşama, Shuffle sahne ve Reducesahne. Redüktörün görevi, eşleştiriciden gelen verileri işlemektir. İşlemden sonra, HDFS'de saklanacak yeni bir çıktı seti üretir.
Bir MapReduce işi sırasında Hadoop, Harita ve Azaltma görevlerini kümedeki uygun sunuculara gönderir.
Çerçeve, görevlerin verilmesi, görevin tamamlanmasının doğrulanması ve düğümler arasındaki küme etrafındaki verilerin kopyalanması gibi veri aktarımının tüm ayrıntılarını yönetir.
Hesaplamanın çoğu, ağ trafiğini azaltan yerel disklerdeki verilere sahip düğümlerde gerçekleşir.
Verilen görevler tamamlandıktan sonra, küme verileri toplar ve uygun bir sonuç oluşturmak için küçültür ve Hadoop sunucusuna geri gönderir.
Girdiler ve Çıktılar (Java Perspective)
MapReduce çerçevesi <anahtar, değer> çiftleri üzerinde çalışır, yani çerçeve işin girdisini bir <anahtar, değer> çifti kümesi olarak görür ve işin çıktısı olarak bir dizi <anahtar, değer> çifti oluşturur. , muhtemelen farklı tiplerde.
Anahtar ve değer sınıfları çerçeve tarafından serileştirilmiş şekilde olmalıdır ve bu nedenle Yazılabilir arabirimi uygulamalıdır. Ek olarak, anahtar sınıfların çerçeveye göre sıralamayı kolaylaştırmak için Yazılabilir-Karşılaştırılabilir arabirimi uygulaması gerekir. Giriş ve Çıkış türleriMapReduce job - (Giriş) <k1, v1> → harita → <k2, v2> → azalt → <k3, v3> (Çıkış).
Giriş | Çıktı | |
---|---|---|
Harita | <k1, v1> | liste (<k2, v2>) |
Azalt | <k2, liste (v2)> | liste (<k3, v3>) |
Terminoloji
PayLoad - Uygulamalar Harita ve Azaltma işlevlerini uygular ve işin özünü oluşturur.
Mapper - Eşleştirici, giriş anahtarı / değer çiftlerini bir dizi ara anahtar / değer çifti ile eşler.
NamedNode - Hadoop Dağıtılmış Dosya Sistemini (HDFS) yöneten düğüm.
DataNode - Herhangi bir işlem yapılmadan önce verilerin önceden sunulduğu düğüm.
MasterNode - JobTracker'ın çalıştığı ve istemcilerden gelen iş isteklerini kabul eden düğüm.
SlaveNode - Harita ve Azaltma programının çalıştığı düğüm.
JobTracker - İşleri planlar ve atanan işleri Görev izleyiciye izler.
Task Tracker - Görevi izler ve durumu JobTracker'a bildirir.
Job - Bir program, bir veri kümesinde bir Eşleştirici ve İndirgeyici'nin yürütülmesidir.
Task - Bir veri dilimi üzerinde bir Mapper veya Reducer'ın çalıştırılması.
Task Attempt - Bir SlaveNode üzerinde bir görevi yürütme girişiminin belirli bir örneği.
Örnek Senaryo
Aşağıda bir kuruluşun elektrik tüketimine ilişkin veriler verilmiştir. Aylık elektrik tüketimini ve çeşitli yılların yıllık ortalamasını içerir.
Oca | Şubat | Mar | Nis | Mayıs | Haz | Tem | Ağu | Eylül | Ekim | Kasım | Aralık | Ort. | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1979 | 23 | 23 | 2 | 43 | 24 | 25 | 26 | 26 | 26 | 26 | 25 | 26 | 25 |
1980 | 26 | 27 | 28 | 28 | 28 | 30 | 31 | 31 | 31 | 30 | 30 | 30 | 29 |
1981 | 31 | 32 | 32 | 32 | 33 | 34 | 35 | 36 | 36 | 34 | 34 | 34 | 34 |
1984 | 39 | 38 | 39 | 39 | 39 | 41 | 42 | 43 | 40 | 39 | 38 | 38 | 40 |
1985 | 38 | 39 | 39 | 39 | 39 | 41 | 41 | 41 | 00 | 40 | 39 | 39 | 45 |
Yukarıdaki veriler girdi olarak verilmişse, bunları işlemek için uygulamalar yazmalı ve maksimum kullanım yılını bulma, minimum kullanım yılı vb. Gibi sonuçlar üretmeliyiz. Bu, sınırlı sayıda kaydı olan programcılar için bir gezmedir. Sadece gerekli çıktıyı üretmek için mantığı yazacaklar ve verileri yazılı uygulamaya iletecekler.
Ancak, oluşumundan bu yana belirli bir devletin tüm büyük ölçekli endüstrilerinin elektrik tüketimini temsil eden verileri düşünün.
Bu tür toplu verileri işlemek için uygulamalar yazdığımızda,
Yürütmek çok zaman alacak.
Verileri kaynaktan ağ sunucusuna taşıdığımızda yoğun bir ağ trafiği olacaktır.
Bu sorunları çözmek için MapReduce çerçevesine sahibiz.
Giriş Verileri
Yukarıdaki veriler şu şekilde kaydedilir: sample.txtve girdi olarak verilir. Girdi dosyası aşağıda gösterildiği gibi görünür.
1979 23 23 2 43 24 25 26 26 26 26 25 26 25
1980 26 27 28 28 28 30 31 31 31 30 30 30 29
1981 31 32 32 32 33 34 35 36 36 34 34 34 34
1984 39 38 39 39 39 41 42 43 40 39 38 38 40
1985 38 39 39 39 39 41 41 41 00 40 39 39 45
Örnek Program
Aşağıda, MapReduce çerçevesini kullanan örnek verilere yönelik program verilmiştir.
package hadoop;
import java.util.*;
import java.io.IOException;
import java.io.IOException;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapred.*;
import org.apache.hadoop.util.*;
public class ProcessUnits {
//Mapper class
public static class E_EMapper extends MapReduceBase implements
Mapper<LongWritable ,/*Input key Type */
Text, /*Input value Type*/
Text, /*Output key Type*/
IntWritable> /*Output value Type*/
{
//Map function
public void map(LongWritable key, Text value,
OutputCollector<Text, IntWritable> output,
Reporter reporter) throws IOException {
String line = value.toString();
String lasttoken = null;
StringTokenizer s = new StringTokenizer(line,"\t");
String year = s.nextToken();
while(s.hasMoreTokens()) {
lasttoken = s.nextToken();
}
int avgprice = Integer.parseInt(lasttoken);
output.collect(new Text(year), new IntWritable(avgprice));
}
}
//Reducer class
public static class E_EReduce extends MapReduceBase implements Reducer< Text, IntWritable, Text, IntWritable > {
//Reduce function
public void reduce( Text key, Iterator <IntWritable> values,
OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
int maxavg = 30;
int val = Integer.MIN_VALUE;
while (values.hasNext()) {
if((val = values.next().get())>maxavg) {
output.collect(key, new IntWritable(val));
}
}
}
}
//Main function
public static void main(String args[])throws Exception {
JobConf conf = new JobConf(ProcessUnits.class);
conf.setJobName("max_eletricityunits");
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(IntWritable.class);
conf.setMapperClass(E_EMapper.class);
conf.setCombinerClass(E_EReduce.class);
conf.setReducerClass(E_EReduce.class);
conf.setInputFormat(TextInputFormat.class);
conf.setOutputFormat(TextOutputFormat.class);
FileInputFormat.setInputPaths(conf, new Path(args[0]));
FileOutputFormat.setOutputPath(conf, new Path(args[1]));
JobClient.runJob(conf);
}
}
Yukarıdaki programı farklı kaydedin ProcessUnits.java. Programın derlenmesi ve çalıştırılması aşağıda açıklanmıştır.
Proses Birimleri Programının Derlenmesi ve Yürütülmesi
Bir Hadoop kullanıcısının ana dizininde olduğumuzu varsayalım (örneğin / home / hadoop).
Yukarıdaki programı derlemek ve yürütmek için aşağıda verilen adımları izleyin.
Aşama 1
Aşağıdaki komut, derlenmiş java sınıflarını depolamak için bir dizin oluşturmaktır.
$ mkdir units
Adım 2
İndir Hadoop-core-1.2.1.jar,MapReduce programını derlemek ve yürütmek için kullanılır. Kavanozu indirmek için aşağıdaki mvnrepository.com bağlantısını ziyaret edin . İndirilen klasörün/home/hadoop/.
Aşama 3
Aşağıdaki komutlar, ProcessUnits.java program ve program için bir jar oluşturma.
$ javac -classpath hadoop-core-1.2.1.jar -d units ProcessUnits.java
$ jar -cvf units.jar -C units/ .
4. adım
Aşağıdaki komut, HDFS'de bir giriş dizini oluşturmak için kullanılır.
$HADOOP_HOME/bin/hadoop fs -mkdir input_dir
Adım 5
Aşağıdaki komut, adlı giriş dosyasını kopyalamak için kullanılır sample.txtHDFS'nin giriş dizininde.
$HADOOP_HOME/bin/hadoop fs -put /home/hadoop/sample.txt input_dir
6. Adım
Aşağıdaki komut, giriş dizinindeki dosyaları doğrulamak için kullanılır.
$HADOOP_HOME/bin/hadoop fs -ls input_dir/
7. Adım
Aşağıdaki komut, girdi dosyalarını girdi dizininden alarak Eleunit_max uygulamasını çalıştırmak için kullanılır.
$HADOOP_HOME/bin/hadoop jar units.jar hadoop.ProcessUnits input_dir output_dir
Dosya yürütülene kadar bir süre bekleyin. Yürütmeden sonra, aşağıda gösterildiği gibi, çıktı, girdi bölme sayısını, Harita görevlerinin sayısını, azaltıcı görevlerin sayısını vb. İçerecektir.
INFO mapreduce.Job: Job job_1414748220717_0002
completed successfully
14/10/31 06:02:52
INFO mapreduce.Job: Counters: 49
File System Counters
FILE: Number of bytes read = 61
FILE: Number of bytes written = 279400
FILE: Number of read operations = 0
FILE: Number of large read operations = 0
FILE: Number of write operations = 0
HDFS: Number of bytes read = 546
HDFS: Number of bytes written = 40
HDFS: Number of read operations = 9
HDFS: Number of large read operations = 0
HDFS: Number of write operations = 2 Job Counters
Launched map tasks = 2
Launched reduce tasks = 1
Data-local map tasks = 2
Total time spent by all maps in occupied slots (ms) = 146137
Total time spent by all reduces in occupied slots (ms) = 441
Total time spent by all map tasks (ms) = 14613
Total time spent by all reduce tasks (ms) = 44120
Total vcore-seconds taken by all map tasks = 146137
Total vcore-seconds taken by all reduce tasks = 44120
Total megabyte-seconds taken by all map tasks = 149644288
Total megabyte-seconds taken by all reduce tasks = 45178880
Map-Reduce Framework
Map input records = 5
Map output records = 5
Map output bytes = 45
Map output materialized bytes = 67
Input split bytes = 208
Combine input records = 5
Combine output records = 5
Reduce input groups = 5
Reduce shuffle bytes = 6
Reduce input records = 5
Reduce output records = 5
Spilled Records = 10
Shuffled Maps = 2
Failed Shuffles = 0
Merged Map outputs = 2
GC time elapsed (ms) = 948
CPU time spent (ms) = 5160
Physical memory (bytes) snapshot = 47749120
Virtual memory (bytes) snapshot = 2899349504
Total committed heap usage (bytes) = 277684224
File Output Format Counters
Bytes Written = 40
8. Adım
Aşağıdaki komut, çıktı klasöründe ortaya çıkan dosyaları doğrulamak için kullanılır.
$HADOOP_HOME/bin/hadoop fs -ls output_dir/
9. Adım
Aşağıdaki komut, çıktıyı görmek için kullanılır. Part-00000 dosya. Bu dosya HDFS tarafından oluşturulmuştur.
$HADOOP_HOME/bin/hadoop fs -cat output_dir/part-00000
MapReduce programı tarafından üretilen çıktı aşağıdadır.
1981 34
1984 40
1985 45
10. adım
Aşağıdaki komut, çıktı klasörünü analiz için HDFS'den yerel dosya sistemine kopyalamak için kullanılır.
$HADOOP_HOME/bin/hadoop fs -cat output_dir/part-00000/bin/hadoop dfs get output_dir /home/hadoop
Önemli Komutlar
Tüm Hadoop komutları, $HADOOP_HOME/bin/hadoopkomut. Hadoop komut dosyasını herhangi bir bağımsız değişken olmadan çalıştırmak, tüm komutların açıklamasını yazdırır.
Usage - hadoop [--config confdir] KOMUT
Aşağıdaki tablo, mevcut seçenekleri ve açıklamalarını listeler.
Sr.No. | Seçenek ve Açıklama |
---|---|
1 | namenode -format DFS dosya sistemini biçimlendirir. |
2 | secondarynamenode DFS ikincil ad kodunu çalıştırır. |
3 | namenode DFS ad kodunu çalıştırır. |
4 | datanode DFS datanode çalıştırır. |
5 | dfsadmin Bir DFS yönetici istemcisi çalıştırır. |
6 | mradmin Map-Reduce yönetici istemcisi çalıştırır. |
7 | fsck Bir DFS dosya sistemi kontrol yardımcı programını çalıştırır. |
8 | fs Genel bir dosya sistemi kullanıcı istemcisi çalıştırır. |
9 | balancer Bir küme dengeleme yardımcı programı çalıştırır. |
10 | oiv Çevrimdışı fsimage görüntüleyiciyi bir resme uygular. |
11 | fetchdt NameNode'dan bir temsilci belirteci alır. |
12 | jobtracker MapReduce iş İzleyici düğümünü çalıştırır. |
13 | pipes Bir Pipes işi çalıştırır. |
14 | tasktracker MapReduce görev İzleyici düğümünü çalıştırır. |
15 | historyserver İş geçmişi sunucularını bağımsız bir arka plan programı olarak çalıştırır. |
16 | job MapReduce işlerini yönetir. |
17 | queue JobQueues ile ilgili bilgileri alır. |
18 | version Sürümü yazdırır. |
19 | jar <jar> Bir jar dosyası çalıştırır. |
20 | distcp <srcurl> <desturl> Dosya veya dizinleri yinelemeli olarak kopyalar. |
21 | distcp2 <srcurl> <desturl> DistCp sürüm 2. |
22 | archive -archiveName NAME -p <parent path> <src>* <dest> Hadoop arşivi oluşturur. |
23 | classpath Hadoop kavanozunu ve gerekli kitaplıkları almak için gereken sınıf yolunu yazdırır. |
24 | daemonlog Her arka plan programı için günlük düzeyini alın / ayarlayın |
MapReduce İşleri ile Nasıl Etkileşimde Bulunulur
Kullanım - hadoop işi [GENERIC_OPTIONS]
Aşağıdakiler, bir Hadoop işinde kullanılabilen Genel Seçeneklerdir.
Sr.No. | GENERIC_OPTION & Açıklama |
---|---|
1 | -submit <job-file> İşi gönderir. |
2 | -status <job-id> Haritayı yazdırır ve tamamlanma yüzdesini ve tüm iş sayaçlarını azaltır. |
3 | -counter <job-id> <group-name> <countername> Sayaç değerini yazdırır. |
4 | -kill <job-id> İşi öldürür. |
5 | -events <job-id> <fromevent-#> <#-of-events> Verilen aralık için jobtracker tarafından alınan olayların ayrıntılarını yazdırır. |
6 | -history [all] <jobOutputDir> - history < jobOutputDir> İş ayrıntılarını, başarısız ve iptal edilen ipucu ayrıntılarını yazdırır. Başarılı görevler ve her görev için yapılan görev denemeleri gibi iş hakkında daha fazla ayrıntı, [tümü] seçeneği belirtilerek görüntülenebilir. |
7 | -list[all] Tüm işleri görüntüler. -list yalnızca henüz tamamlanmamış işleri görüntüler. |
8 | -kill-task <task-id> Görevi öldürür. Öldürülen görevler, başarısız girişimlere karşı SAYILMAZ. |
9 | -fail-task <task-id> Görevi başarısız olur. Başarısız görevler, başarısız girişimlere sayılır. |
10 | -set-priority <job-id> <priority> İşin önceliğini değiştirir. İzin verilen öncelik değerleri: VERY_HIGH, HIGH, NORMAL, LOW, VERY_LOW |
İşin durumunu görmek için
$ $HADOOP_HOME/bin/hadoop job -status <JOB-ID> e.g. $ $HADOOP_HOME/bin/hadoop job -status job_201310191043_0004
İşin geçmişini görmek için output-dir
$ $HADOOP_HOME/bin/hadoop job -history <DIR-NAME> e.g. $ $HADOOP_HOME/bin/hadoop job -history /user/expert/output
İşi öldürmek için
$ $HADOOP_HOME/bin/hadoop job -kill <JOB-ID> e.g. $ $HADOOP_HOME/bin/hadoop job -kill job_201310191043_0004
Hadoop akışı, Hadoop dağıtımıyla birlikte gelen bir yardımcı programdır. Bu yardımcı program, eşleyici ve / veya indirgeyici olarak herhangi bir yürütülebilir dosya veya komut dosyasıyla Harita / Azaltma işleri oluşturmanıza ve çalıştırmanıza olanak tanır.
Python Kullanan Örnek
Hadoop akışı için, kelime sayısı problemini düşünüyoruz. Hadoop'taki herhangi bir işin iki aşaması olmalıdır: eşleyici ve indirgeyici. Hadoop altında çalıştırmak için eşleyici ve indirgeyici için python betiğinde kodlar yazdık. Aynı şeyi Perl ve Ruby'de de yazabilirsiniz.
Eşleştirici Faz Kodu
!/usr/bin/python
import sys
# Input takes from standard input for myline in sys.stdin:
# Remove whitespace either side
myline = myline.strip()
# Break the line into words
words = myline.split()
# Iterate the words list
for myword in words:
# Write the results to standard output
print '%s\t%s' % (myword, 1)
Bu dosyanın yürütme iznine sahip olduğundan emin olun (chmod + x / home / expert / hadoop-1.2.1 / mapper.py).
Redüktör Faz Kodu
#!/usr/bin/python
from operator import itemgetter
import sys
current_word = ""
current_count = 0
word = ""
# Input takes from standard input for myline in sys.stdin:
# Remove whitespace either side
myline = myline.strip()
# Split the input we got from mapper.py word,
count = myline.split('\t', 1)
# Convert count variable to integer
try:
count = int(count)
except ValueError:
# Count was not a number, so silently ignore this line continue
if current_word == word:
current_count += count
else:
if current_word:
# Write result to standard output print '%s\t%s' % (current_word, current_count)
current_count = count
current_word = word
# Do not forget to output the last word if needed!
if current_word == word:
print '%s\t%s' % (current_word, current_count)
Eşleştirici ve indirgeyici kodlarını mapper.py ve redüktör.py Hadoop ana dizinine kaydedin. Bu dosyaların yürütme iznine sahip olduğundan emin olun (chmod + x mapper.py ve chmod + x indirimli.py). Python girintiye duyarlı olduğundan, aynı kod aşağıdaki bağlantıdan indirilebilir.
WordCount Programının Yürütülmesi
$ $HADOOP_HOME/bin/hadoop jar contrib/streaming/hadoop-streaming-1.
2.1.jar \
-input input_dirs \
-output output_dir \
-mapper <path/mapper.py \
-reducer <path/reducer.py
Net okunabilirlik için satırın devamı için "\" kullanılır.
Örneğin,
./bin/hadoop jar contrib/streaming/hadoop-streaming-1.2.1.jar -input myinput -output myoutput -mapper /home/expert/hadoop-1.2.1/mapper.py -reducer /home/expert/hadoop-1.2.1/reducer.py
Akış Nasıl Çalışır?
Yukarıdaki örnekte, hem eşleyici hem de indirgeyici, girdiyi standart girdiden okuyan ve çıktıyı standart çıktıya yayınlayan python komut dosyalarıdır. Yardımcı program bir Harita / Azaltma işi oluşturacak, işi uygun bir kümeye gönderecek ve tamamlanana kadar işin ilerlemesini izleyecektir.
Eşleştiriciler için bir betik belirtildiğinde, her eşleyici görevi, eşleyici başlatıldığında komut dosyasını ayrı bir işlem olarak başlatır. Eşleştirici görevi çalışırken, girdilerini satırlara dönüştürür ve satırları işlemin standart girdisine (STDIN) besler. Bu arada, eşleştirici, işlemin standart çıktısından (STDOUT) satır yönelimli çıktıları toplar ve her satırı eşleyicinin çıktısı olarak toplanan bir anahtar / değer çiftine dönüştürür. Varsayılan olarak, ilk sekme karakterine kadar olan bir satırın öneki anahtardır ve satırın geri kalanı (sekme karakteri hariç) değer olacaktır. Satırda sekme karakteri yoksa, tüm satır anahtar olarak kabul edilir ve değer boştur. Ancak bu, bir ihtiyaca göre özelleştirilebilir.
İndirgeyiciler için bir betik belirlendiğinde, her indirgeyici görevi komut dosyasını ayrı bir işlem olarak başlatır, ardından indirgeyici başlatılır. İndirgeyici görevi çalışırken, giriş anahtar / değer çiftlerini satırlara dönüştürür ve satırları işlemin standart girişine (STDIN) besler. Bu arada redüktör, prosesin standart çıktısından (STDOUT) gelen hat yönelimli çıktıları toplar, her satırı redüktörün çıktısı olarak toplanan bir anahtar / değer çiftine dönüştürür. Varsayılan olarak, ilk sekme karakterine kadar olan bir satırın öneki anahtardır ve satırın geri kalanı (sekme karakteri hariç) değerdir. Ancak bu, belirli gereksinimlere göre özelleştirilebilir.
Önemli Komutlar
Parametreler | Seçenekler | Açıklama |
---|---|---|
-girdi dizini / dosya-adı | gereklidir | Eşleştirici için giriş konumu. |
-çıktı dizini-adı | gereklidir | Redüktör için çıkış yeri. |
-mapper yürütülebilir veya komut dosyası veya JavaClassName | gereklidir | Mapper yürütülebilir. |
-reducer çalıştırılabilir veya komut dosyası veya JavaClassName | gereklidir | Redüktör çalıştırılabilir. |
-dosya dosya-adı | İsteğe bağlı | Eşleştiriciyi, azaltıcıyı veya birleştiriciyi hesaplama düğümlerinde yerel olarak kullanılabilir hale getirir. |
-inputformat JavaClassName | İsteğe bağlı | Sağladığınız sınıf, Text sınıfının anahtar / değer çiftlerini döndürmelidir. Belirtilmezse, TextInputFormat varsayılan olarak kullanılır. |
-outputformat JavaClassName | İsteğe bağlı | Sağladığınız sınıf, Text sınıfının anahtar / değer çiftlerini almalıdır. Belirtilmezse, TextOutputformat varsayılan olarak kullanılır. |
-partitioner JavaClassName | İsteğe bağlı | Anahtarın hangi indirgeme gönderileceğini belirleyen sınıf. |
-combiner streamingCommand veya JavaClassName | İsteğe bağlı | Harita çıktısı için çalıştırılabilir birleştirici. |
-cmdenv adı = değer | İsteğe bağlı | Ortam değişkenini akış komutlarına aktarır. |
giriş okuyucusu | İsteğe bağlı | Geriye dönük uyumluluk için: bir kayıt okuyucu sınıfını belirtir (bir girdi biçimi sınıfı yerine). |
-verbose | İsteğe bağlı | Ayrıntılı çıktı. |
-lazyOutput | İsteğe bağlı | Tembel olarak çıktı oluşturur. Örneğin, çıktı biçimi FileOutputFormat'a dayanıyorsa, çıktı dosyası yalnızca output.collect (veya Context.write) için yapılan ilk çağrıda oluşturulur. |
-numReduceTasks | İsteğe bağlı | Redüktör sayısını belirtir. |
-mapdebug | İsteğe bağlı | Harita görevi başarısız olduğunda çağırmak için komut dosyası. |
azaltılmış hata | İsteğe bağlı | Azaltma görevi başarısız olduğunda çağırılacak komut dosyası. |
Bu bölüm, dağıtılmış bir ortamda Hadoop Multi-Node kümesinin kurulumunu açıklamaktadır.
Tüm küme gösterilemediğinden, Hadoop küme ortamını üç sistem (bir ana ve iki yardımcı) kullanarak açıklıyoruz; IP adresleri aşağıda verilmiştir.
- Hadoop Master: 192.168.1.15 (hadoop-master)
- Hadoop Slave: 192.168.1.16 (hadoop-slave-1)
- Hadoop Slave: 192.168.1.17 (hadoop-slave-2)
Hadoop Multi-Node küme kurulumuna sahip olmak için aşağıda verilen adımları izleyin.
Java yükleme
Java, Hadoop'un temel ön koşuludur. Öncelikle sisteminizde java varlığını “java-sürümü” kullanarak doğrulamalısınız. Java sürüm komutunun sözdizimi aşağıda verilmiştir.
$ java -version
Her şey yolunda giderse, size aşağıdaki çıktıyı verecektir.
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b13)
Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode)
Sisteminizde java yüklü değilse, java yüklemek için verilen adımları izleyin.
Aşama 1
Aşağıdaki bağlantıyı www.oracle.com ziyaret ederek java'yı (JDK <en son sürüm> - X64.tar.gz) indirin
Sonra jdk-7u71-linux-x64.tar.gz sisteminize indirilecektir.
Adım 2
Genellikle indirilen java dosyasını İndirilenler klasöründe bulacaksınız. Doğrulayın vejdk-7u71-linux-x64.gz aşağıdaki komutları kullanarak dosya.
$ cd Downloads/ $ ls
jdk-7u71-Linux-x64.gz
$ tar zxf jdk-7u71-Linux-x64.gz $ ls
jdk1.7.0_71 jdk-7u71-Linux-x64.gz
Aşama 3
Java'yı tüm kullanıcıların kullanımına açmak için, onu "/ usr / local /" konumuna taşımalısınız. Kökü açın ve aşağıdaki komutları yazın.
$ su
password:
# mv jdk1.7.0_71 /usr/local/
# exit
4. adım
Kurulum için PATH ve JAVA_HOME değişkenler, aşağıdaki komutları ekleyin ~/.bashrc dosya.
export JAVA_HOME=/usr/local/jdk1.7.0_71
export PATH=PATH:$JAVA_HOME/bin
Şimdi doğrulayın java -versionterminalden komut yukarıda açıklandığı gibi. Yukarıdaki işlemi takip edin ve tüm küme düğümlerinize java yükleyin.
Kullanıcı Hesabı Oluşturma
Hadoop kurulumunu kullanmak için hem ana hem de bağımlı sistemlerde bir sistem kullanıcı hesabı oluşturun.
# useradd hadoop
# passwd hadoop
Düğümleri haritalama
Düzenlemelisin hosts dosyasında /etc/ tüm düğümlerdeki klasörler, her sistemin IP adresini ve ardından ana bilgisayar adlarını belirtin.
# vi /etc/hosts
enter the following lines in the /etc/hosts file.
192.168.1.109 hadoop-master
192.168.1.145 hadoop-slave-1
192.168.56.1 hadoop-slave-2
Anahtar Tabanlı Oturum Açmayı Yapılandırma
Her düğümde ssh'yi, herhangi bir parola istemeden birbirleriyle iletişim kurabilecekleri şekilde kurun.
# su hadoop
$ ssh-keygen -t rsa $ ssh-copy-id -i ~/.ssh/id_rsa.pub tutorialspoint@hadoop-master
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop_tp1@hadoop-slave-1 $ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop_tp2@hadoop-slave-2
$ chmod 0600 ~/.ssh/authorized_keys $ exit
Hadoop'u Yükleme
Ana sunucuda, aşağıdaki komutları kullanarak Hadoop'u indirin ve kurun.
# mkdir /opt/hadoop
# cd /opt/hadoop/
# wget http://apache.mesi.com.ar/hadoop/common/hadoop-1.2.1/hadoop-1.2.0.tar.gz
# tar -xzf hadoop-1.2.0.tar.gz
# mv hadoop-1.2.0 hadoop
# chown -R hadoop /opt/hadoop
# cd /opt/hadoop/hadoop/
Hadoop'u Yapılandırma
Aşağıdaki değişiklikleri yaparak Hadoop sunucusunu yapılandırmanız gerekmektedir.
core-site.xml
Aç core-site.xml dosyasını açın ve aşağıda gösterildiği gibi düzenleyin.
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop-master:9000/</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
hdfs-site.xml
Aç hdfs-site.xml dosyasını açın ve aşağıda gösterildiği gibi düzenleyin.
<configuration>
<property>
<name>dfs.data.dir</name>
<value>/opt/hadoop/hadoop/dfs/name/data</value>
<final>true</final>
</property>
<property>
<name>dfs.name.dir</name>
<value>/opt/hadoop/hadoop/dfs/name</value>
<final>true</final>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
mapred-site.xml
Aç mapred-site.xml dosyasını açın ve aşağıda gösterildiği gibi düzenleyin.
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>hadoop-master:9001</value>
</property>
</configuration>
hadoop-env.sh
Aç hadoop-env.sh JAVA_HOME, HADOOP_CONF_DIR ve HADOOP_OPTS dosyasını aşağıda gösterildiği gibi düzenleyin ve düzenleyin.
Note - JAVA_HOME'u sistem yapılandırmanıza göre ayarlayın.
export JAVA_HOME=/opt/jdk1.7.0_17
export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true
export HADOOP_CONF_DIR=/opt/hadoop/hadoop/conf
Hadoop'u Bağımlı Sunuculara Kurma
Verilen komutları izleyerek Hadoop'u tüm bağımlı sunuculara kurun.
# su hadoop
$ cd /opt/hadoop $ scp -r hadoop hadoop-slave-1:/opt/hadoop
$ scp -r hadoop hadoop-slave-2:/opt/hadoop
Ana Sunucuda Hadoop'u Yapılandırma
Ana sunucuyu açın ve verilen komutları izleyerek yapılandırın.
# su hadoop
$ cd /opt/hadoop/hadoop
Ana Düğümü Yapılandırma
$ vi etc/hadoop/masters
hadoop-master
Slave Düğümünü Yapılandırma
$ vi etc/hadoop/slaves
hadoop-slave-1
hadoop-slave-2
Hadoop Master'da Ad Düğümünü Biçimlendir
# su hadoop
$ cd /opt/hadoop/hadoop $ bin/hadoop namenode –format
11/10/14 10:58:07 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = hadoop-master/192.168.1.109
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 1.2.0
STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1479473;
compiled by 'hortonfo' on Mon May 6 06:59:37 UTC 2013
STARTUP_MSG: java = 1.7.0_71
************************************************************/
11/10/14 10:58:08 INFO util.GSet: Computing capacity for map BlocksMap
editlog=/opt/hadoop/hadoop/dfs/name/current/edits
………………………………………………….
………………………………………………….
………………………………………………….
11/10/14 10:58:08 INFO common.Storage: Storage directory
/opt/hadoop/hadoop/dfs/name has been successfully formatted.
11/10/14 10:58:08 INFO namenode.NameNode:
SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop-master/192.168.1.15
************************************************************/
Hadoop Hizmetlerini Başlatma
Aşağıdaki komut, Hadoop-Master üzerindeki tüm Hadoop hizmetlerini başlatmaktır.
$ cd $HADOOP_HOME/sbin
$ start-all.sh
Hadoop Kümesine Yeni Bir Veri Düğümü Ekleme
Aşağıda bir Hadoop kümesine yeni düğümler eklemek için izlenecek adımlar verilmiştir.
Ağ oluşturma
Bazı uygun ağ yapılandırmasıyla mevcut bir Hadoop kümesine yeni düğümler ekleyin. Aşağıdaki ağ yapılandırmasını varsayın.
Yeni düğüm Yapılandırması için -
IP address : 192.168.1.103
netmask : 255.255.255.0
hostname : slave3.in
Kullanıcı ve SSH Erişimi Ekleme
Kullanıcı Ekle
Yeni bir düğümde, "hadoop" kullanıcısını ekleyin ve aşağıdaki komutları kullanarak Hadoop kullanıcısının şifresini "hadoop123" veya istediğiniz herhangi bir şeye ayarlayın.
useradd hadoop
passwd hadoop
Master'dan yeni slave'e şifresiz bağlantı kurun.
Master üzerinde aşağıdakileri yürütün
mkdir -p $HOME/.ssh
chmod 700 $HOME/.ssh ssh-keygen -t rsa -P '' -f $HOME/.ssh/id_rsa
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
chmod 644 $HOME/.ssh/authorized_keys Copy the public key to new slave node in hadoop user $HOME directory
scp $HOME/.ssh/id_rsa.pub [email protected]:/home/hadoop/
Kölelerde aşağıdakileri yürütün
Hadoop'a giriş yapın. Değilse, hadoop kullanıcısına giriş yapın.
su hadoop ssh -X [email protected]
Genel anahtarın içeriğini dosyaya kopyalayın "$HOME/.ssh/authorized_keys" ve ardından aşağıdaki komutları uygulayarak bunun iznini değiştirin.
cd $HOME mkdir -p $HOME/.ssh
chmod 700 $HOME/.ssh cat id_rsa.pub >>$HOME/.ssh/authorized_keys
chmod 644 $HOME/.ssh/authorized_keys
Ana makineden ssh oturumunu kontrol edin. Şimdi, ana düğümden bir şifre olmadan yeni düğüme ssh yapıp yapamayacağınızı kontrol edin.
ssh [email protected] or hadoop@slave3
Yeni Düğümün Ana Bilgisayar Adını Ayarlayın
Ana bilgisayar adını dosyada ayarlayabilirsiniz /etc/sysconfig/network
On new slave3 machine
NETWORKING = yes
HOSTNAME = slave3.in
Değişiklikleri etkili kılmak için, ya makineyi yeniden başlatın ya da ana bilgisayar adı komutunu ilgili ana bilgisayar adına sahip yeni bir makinede çalıştırın (yeniden başlatma iyi bir seçenektir).
Slave3 düğüm makinesinde -
hostname slave3.in
Güncelleme /etc/hosts aşağıdaki satırlara sahip kümenin tüm makinelerinde -
192.168.1.102 slave3.in slave3
Şimdi IP'ye çözülüp çözülmediğini kontrol etmek için makineye ana bilgisayar adlarıyla ping atmayı deneyin.
Yeni düğüm makinesinde -
ping master.in
DataNode'u Yeni Düğümde Başlatın
Datanode arka planını manuel olarak başlatın. $HADOOP_HOME/bin/hadoop-daemon.sh script. Otomatik olarak ana sunucuya (NameNode) ulaşacak ve kümeye katılacaktır. Yeni düğümü ana sunucudaki conf / slaves dosyasına da eklemeliyiz. Komut dosyası tabanlı komutlar yeni düğümü tanıyacaktır.
Yeni düğümde oturum açın
su hadoop or ssh -X [email protected]
Aşağıdaki komutu kullanarak yeni eklenen bir bağımlı düğümde HDFS'yi başlatın
./bin/hadoop-daemon.sh start datanode
Yeni bir düğümde jps komutunun çıktısını kontrol edin. Aşağıdaki gibi görünüyor.
$ jps
7141 DataNode
10312 Jps
DataNode'u Hadoop Kümesinden Kaldırma
Herhangi bir veri kaybı olmadan, çalışırken bir kümeden bir düğümü anında kaldırabiliriz. HDFS, bir düğümü kaldırmanın güvenli bir şekilde gerçekleştirilmesini sağlayan bir hizmet dışı bırakma özelliği sağlar. Kullanmak için aşağıda verilen adımları izleyin -
Adım 1 - Master için oturum açın
Hadoop'un kurulu olduğu ana makine kullanıcısında oturum açın.
$ su hadoop
Adım 2 - Küme yapılandırmasını değiştirin
Kümeyi başlatmadan önce bir dışlama dosyası yapılandırılmalıdır. Dfs.hosts.exclude adlı bir anahtar ekleyin.$HADOOP_HOME/etc/hadoop/hdfs-site.xmldosya. Bu anahtarla ilişkilendirilen değer, HDFS'ye bağlanmasına izin verilmeyen makinelerin bir listesini içeren NameNode'un yerel dosya sistemindeki bir dosyanın tam yolunu sağlar.
Örneğin, bu satırları etc/hadoop/hdfs-site.xml dosya.
<property>
<name>dfs.hosts.exclude</name>
<value>/home/hadoop/hadoop-1.2.1/hdfs_exclude.txt</value>
<description>DFS exclude</description>
</property>
Adım 3 - Hizmetten çıkarılacak ana bilgisayarları belirleyin
Hizmetten çıkarılacak her makine, her satırda bir alan adı olacak şekilde hdfs_exclude.txt ile tanımlanan dosyaya eklenmelidir. Bu onların NameNode'a bağlanmasını engelleyecektir. İçeriği"/home/hadoop/hadoop-1.2.1/hdfs_exclude.txt" DataNode2 dosyasını kaldırmak istiyorsanız, aşağıda gösterilmektedir.
slave2.in
Adım 4 - Yapılandırmayı yeniden yüklemeye zorlayın
Komutu çalıştırın "$HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes" tırnak işaretleri olmadan.
$ $HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes
Bu, NameNode'u, yeni güncellenen 'dışlananlar' dosyası da dahil olmak üzere yapılandırmasını yeniden okumaya zorlar. Belirli bir süre boyunca düğümleri devre dışı bırakarak, her düğümün bloklarının etkin kalması planlanan makinelere kopyalanması için süre tanır.
Açık slave2.injps komut çıktısını kontrol edin. Bir süre sonra DataNode işleminin otomatik olarak kapatıldığını göreceksiniz.
Adım 5 - Düğümleri kapatın
Hizmet dışı bırakma işlemi tamamlandıktan sonra, hizmet dışı bırakılan donanım bakım için güvenli bir şekilde kapatılabilir. Devre dışı bırakma durumunu kontrol etmek için dfsadmin'e rapor komutunu çalıştırın. Aşağıdaki komut, devreden çıkarma düğümünün ve kümeye bağlı düğümlerin durumunu açıklayacaktır.
$ $HADOOP_HOME/bin/hadoop dfsadmin -report
Adım 6 - Düzenleme, dosyayı tekrar dışlar
Makineler kullanımdan kaldırıldıktan sonra, 'dışlananlar' dosyasından kaldırılabilirler. Koşu"$HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes"tekrar dışlananlar dosyasını tekrar Ad Düğümüne okuyacaktır; Bakım tamamlandıktan sonra DataNode'ların kümeye yeniden katılmasına izin verme veya kümede yeniden ek kapasite gerekli, vb.
Special Note- Yukarıdaki işlem izleniyorsa ve görev izleyici işlemi düğümde hala çalışıyorsa, kapatılması gerekir. Bir yol, yukarıdaki adımlarda yaptığımız gibi makinenin bağlantısını kesmektir. Kaptan süreci otomatik olarak tanıyacak ve öldüğünü ilan edecek. Görev izleyiciyi kaldırmak için aynı işlemi izlemeye gerek yoktur çünkü DataNode ile karşılaştırıldığında çok önemli DEĞİLDİR. DataNode, herhangi bir veri kaybı olmadan güvenle kaldırmak istediğiniz verileri içerir.
Görev izleyici, herhangi bir zamanda aşağıdaki komutla anında çalıştırılabilir / kapatılabilir.
$ $HADOOP_HOME/bin/hadoop-daemon.sh stop tasktracker $HADOOP_HOME/bin/hadoop-daemon.sh start tasktracker