6 Mart 2016 Pazar

HDFS İşlemlerini Map-Reduce Java ile Yapma

Merhaba,
Bugünkü yazımıza, hbase’e biraz ara verip artık java kodlaması ile bigdata ortamına nasıl erişim yapabildiğimize bakacağız. Yani kodlama işine başlıyoruz. Bigdata ortamını ve teknolojisini anlatırken önceki blog yazımda aşağıdaki yazıyı yazmıştım.
Bigdata öğrenmek isteyenlere şunu söylüyorum: Bigdata pek çok disiplini bir arada barındırıyor.Sistem bilginiz olması gerekiyor. Yani linux, kurulum, shell komutları vs. Database,veriambarı,veri, structered olmayan data vs. vs. bilginiz olması gerekir.
Programlama bilginiz olması gerekir. map-reduce komutları yazabilmek için başta java bilmeniz gerekiyor. Hadoop ve diğer tüm bileşenleri hive-pig-hbase-sqoop-flume vs. vs. hepsi java ile yazılmıştır. Klasik relational databaseden farklı bir ortam yer almaktadır burada.
Bugüne kadar hadoop-hdfs-hbase kurulumları yaparak sistem tarafına adım atmıştık. Peki yazılım tarafı?
Bu yazımızla birlikte map-reduce java yazımına hafiften girmiş olacağız. Sonra ki blog yazılarımda tekrar hbase ortamına geri dönüp java ile yani kodlama ile hbase tablo create etme, kayıt insert etme, silme, sorgulama vs. kısımlarını göstermek isterim.
Şunu şimdiden belirteyim. İlla ki java diliyle mi map-reduce kodlaması yapılabiliyor? Elbette hayır. Java, Python. diğer dillere çok girmek istemiyorum.
Önemli:
Aşağıdaki örnekleri anladıktan sonra kendinize ait bir hdfs explorer yazabilirsiniz. Tıpkı windows explorer gibi tree şiklinde klasörlerin ve dosyaların listelenmesi, silme, rename yapma, taşıma vs. işlemlerini gerçekleştiren bir uygulamayı yazması çok kolay olacaktır.
Açıkcası vakitsizlikten bu tür şeyleri yazamıyorum.
Bakın aşağıda bir örnek var.
http://bigdata.red-gate.com/hdfs-explorer.html
Hatırlatma:
Hdfs web ortamı için localhost:50070 giriş yapmanız yeterlidir. Böylece aşağıdaki program sonuçlarını daha iyi görebilirsiniz.
Yada bin/hadoop dfs -ls şeklinde shell komutlarını kullanabilirsiniz.
Ben kodlamaları eclipse ile yaptım. Hadoop yüklü klasörde yer alan lib klasöründeki tüm jar’ ları add external jars… seçeneği ile kodlamanızıa eklemeyi unutmayınız.
LOCAL’ den DOSYAYI HDFS’ e YAZMA
import java.io.*;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.util.*;
public class SAMPLE10 extends Configured implements Tool {
@Override
public int run(String[] args) throws Exception {
//parametreler aşağıdaki şekilde verilmelidir. birinci parametre local file olan yer ikincisi ise hdfs e yazılacak yer anlamındadır.
//args[0] =”/home/bigdata/Desktop/HRECB_SOURCE/weblog_entries.txt”;
//args[1] =”/data/CH2_HDFSWRITER”;
if( args.length<2)
{
System.out.println("parametreler kismini okuyunuz. eksik parametre var");
return 1;
}
//hadoop/conf klasöründe core-site.xml e bakarak aşağıdaki hdfs://localhost:54310 bulunabilir.
Configuration conf = new Configuration();
conf.set("fs.default.name","hdfs://localhost:54310");
FileSystem fs = FileSystem.get(conf);
String localInputPath = args[0];
Path outputPath = new Path(args[1]);
OutputStream os=fs.create(outputPath); //hdfs üzerinde ilgili dosya-dizin olmasa bile oluşturur
InputStream is = new BufferedInputStream(new FileInputStream(localInputPath));
org.apache.hadoop.io.IOUtils.copyBytes(is, os, conf);
return 0;
}
public static void main(String[] args) throws Exception {
System.out.println("Program basliyor");;
int returnCode = ToolRunner.run(new SAMPLE10(), args);
System.out.println(returnCode);
System.out.println("Program bitti");;
}
}
HDFS’ ten DOSYA OKUYUP LOCAL’ e YAZMA:
import java.io.*;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.*;
public class SAMPLE10B extends Configured implements Tool {
@Override
public int run(String[] args) throws Exception {
//parametreler aşağıdaki şekilde verilmelidir. birinci parametre hdfs’ ten okunan dosya ikinci ise okunan dosyanın yazıldığı local yerdir.
//args[0] =”/data/CH2_HDFSWRITER”;
//args[1] =”/home/bigdata/Desktop/HRECB_SOURCE/weblog_entries_READ.txt”;
if( args.length<2)
{
System.out.println("parametreler kismini okuyunuz. eksik parametre var");
return 1;
}
//hadoop/conf klasöründe core-site.xml e bakarak aşağıdaki hdfs://localhost:54310 bulunabilir.
Configuration conf = new Configuration();
conf.set("fs.default.name","hdfs://localhost:54310");
FileSystem fs = FileSystem.get(conf);
Path inputPath = new Path(args[0]);
String localOutputPath = args[1];
InputStream is = fs.open(inputPath);
OutputStream os=new BufferedOutputStream(new FileOutputStream(localOutputPath));
IOUtils.copyBytes(is, os, conf);
return 0;
}
public static void main(String[] args) throws Exception {
System.out.println("Program basliyor");;
int returnCode = ToolRunner.run(new SAMPLE10B(), args);
System.out.println(returnCode);
System.out.println("Program bitti");;
}
}
EK BİLGİLER:
Dosya var mı yok mu kontrolü için?: boolean exists = fs.exists(inputPath);
Geçerli bir dosyamı ?: boolean isFile = fs.isFile(inputPath);
Dosya Adı Nasıl Değiştirilir?: boolean renamed = fs.rename(inputPath, new Path(“old_file.txt”));
Daha fazla bilgi için aşağıdaki site incelenebilir.
http://myjavanotebook.blogspot.com.tr/2008/05/hadoop-file-system-tutorial.html
Bugünkü blog yazımız bu kadar.
Bir sonraki blog yazımda görüşmek dileğiyle.
Lütfen, yorumlarınızı bekliyorum.

mmetin

Hiç yorum yok:

Yorum Gönder