Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Büyük veri teknolojilerine giriş v1l

3.985 visualizaciones

Publicado el

Büyük veri teknolojilerine giriş

Publicado en: Software
  • Sé el primero en comentar

Büyük veri teknolojilerine giriş v1l

  1. 1. Haziran 2014 v1.0l Büyük Veri Teknolojilerine Giriş
  2. 2. Hakkımda ● Hakan İlter ○ Software Platform & Research Manager ○ GittiGidiyor / eBay ○ Marmara Üni. Elektronik ○ 14+ Yazılım 4+ Yöneticilik ○ Java, C, C++, C# ○ Linux! ○ Search, Big Data, NoSQL hilter@ebay.com twitter: hailter http://tr.linkedin.com/in/hakanilter/ http://github.com/hakanilter http://devveri.com
  3. 3. DevVeri.com
  4. 4. Gündem ● Neden Hadoop? ● HDFS ve MapReduce ● Hadoop Dağıtımları ● Entegrasyonlar ● Pig ● Hive ● Impala
  5. 5. ● Her zamankinden daha fazla veri üretiyoruz ○ Satış verileri ○ Kullanıcı bilgileri ○ Web sitesi hareketleri ○ Sosyal medya ○ E-Posta ○ Sunucu logları ○ Sensör verileri ○ Lokasyon bilgisi Veri Bombardımanı
  6. 6. Veri Bombardımanı ● Her zamankinden daha hızlı veri üretiyoruz ○ Twitter 143,199 TPS. ~500 milyon tweet ○ Google günde 5,922,000,000 arama ○ Facebook her 20dk da 3,000,000 mesaj ○ eBay dakikada 950+ alışveriş, 180+ mobilden ○ Amazon saniyede 426 ürün satışı ○ Apple dakikada 81 iPad, 925 iPhone satışı
  7. 7. Veri Bombardımanı ● Her zamankinden çok çeşitli veri üretiyoruz ○ Binary ○ Text, CSV ○ XML, JSON ○ Resim, Ses, Video ○ Sıkıştırılmış / Sıkıştırılmamış ● Yapılandırılmış / Yapılandırılmamış Veri ○ %90 veri yapılandırılmamış, sabit bir formatı yok
  8. 8. Büyük Veri
  9. 9. ● Büyük veri içerisinde çok değerli bilgiler var ○ Pazarlama analizi ○ Talep analizi ○ Müşteri segmentasyonu ○ Sahtecilik önleme ○ Gerçek zamanlı raporlama ○ Sunucu faaliyetlerini izleme ○ Ürün önerme (recommendation) ○ … ve daha fazlası Neler Yapılabilir?
  10. 10. ● Büyük veriyi saklamak ○ Sürekli büyüyen veri ○ Storage maliyetleri ○ Arşivleme zorunluluğu ● Büyük veriyi işlemek ○ Donanım limitlerine takılmamalı ○ 100 GB veriyi sadece okumak ~22 dk! ○ Ağ darboğazı Nasıl Yapılabilir?
  11. 11. ● RDBMS ○ Yapılandırılmamış veriye uygun değil ○ Ölçeklenme problemi ○ Lisans ücretleri ● Donanım Limitleri ○ CPU, RAM, Disk, Network ● Yazılımsal Karmaşıklık ○ Senkronizasyon, bant genişliği, erişilebilirlik, hata toleransı Geleneksel Yöntemlerin Problemleri
  12. 12. ● Ölçeklenebilir ○ İhtiyaç durumunda sistem genişleyebilmeli ● Tutarlı ○ Veri saklanırken bozulmamalı ● Veri Garantili ○ Veriler yedekli olmalı ● Erişilebilir ○ Sistem her durumda çalışabilir olmalı Yeni Bir Yaklaşım
  13. 13. ● Veri işleme amaçlı dağıtık uygulamalar yazılmasını sağlayan bir platform ve açık kaynaklı bir Apache projesidir Hadoop
  14. 14. Kimler Kullanıyor?
  15. 15. ● Neden Hadoop? ● HDFS ve MapReduce ● Hadoop Dağıtımları ● Entegrasyonlar ● Pig ● Hive ● Impala Gündem
  16. 16. ● İki temel bileşenden oluşur ○ Hadoop Distributed File System (HDFS) ○ MapReduce Hadoop
  17. 17. ● Google File System temel alınmıştır ● Verinin saklanmasından sorumludur ● Dağıtık bir dosya sistemidir ● Birden çok düğümün disklerini birleştirir ● Pahalı donanım gerektirmez ● Veriyi bloklar halinde saklar ● Bloklar varsayılan 64MB veya 128MB ● Her blok varsayılan 3 kopya olarak tutulur HDFS
  18. 18. ● Blokların yapısına örnek HDFS DataNode 1 blok 1 blok 2 blok 3 DataNode 2 blok 3 blok 2 blok 4 DataNode 3 blok 3 blok 1 blok 4 DataNode 4 blok 4 blok 2 blok 1
  19. 19. ● Normal dosya sistemleri üzerinde çalışır ○ ext3, ext4, xfs, ntfs? ● Büyük dosyalarla çalışmak için uygundur ○ Küçük dosyalar sistemin kaynaklarını tüketir ○ Büyük ve az sayıda dosya olmalıdır ○ 100 MB veya daha büyük dosyalar uygundur ● Dosyalara bir sefer yazılabilir (write-once) ○ Dosya kapatıldıktan sonra tekrar yazılamaz ● Rastlantısal erişim yoktur ○ Büyük duraksız (streaming) veri erişimi HDFS
  20. 20. ● Komut satırı üzerinden erişilebilir HDFS Komutları hadoop fs -ls -r <path> Dosyaları listeler (-r recursive) hadoop fs -mkdir <path> Klasör oluşturur hadoop fs -put <local> <target> Lokalden HDFS'e dosya kopyalar hadoop fs -get <source> <local> HDFS'den lokale dosya kopyalar hadoop fs -cat <filename> Dosya içeriğini konsola basar hadoop fs -rm -r <filename> Dosyayı siler (-r recursive) hadoop fs -mv <source> <target> Dosyayı taşır hadoop fs -cp <source> <target> Dosyayı kopyalar
  21. 21. ● MapReduce bir programlama modelidir ○ Platform ve dil bağımsızdır ○ Kayıt tabanlı veri işleme yöntemidir ○ Anahtar-değer ikilisi üzerinden çalışır ○ Görevlerin düğümler üzerine dağıtılmasını sağlar ● İki temel aşamadan oluşur ○ Map ○ Reduce ● Map ve Reduce birer fonksiyondur ○ Geliştirici sadece bu fonksiyonları yazar MapReduce
  22. 22. MapReduce
  23. 23. ● Map metodu public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString().toLowerCase(); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { Text word = new Text(tokenizer.nextToken()); context.write(word, new IntWritable(1)); } } MapReduce
  24. 24. ● Reducer metodu public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { int sum = 0; for (IntWritable value : values) { sum += value.get(); } context.write(key, new IntWritable(sum)); } MapReduce
  25. 25. ● Tool sınıfı public class WordCount extends Configured implements Tool { public static void main(String[] args) throws Exception { int exitCode = ToolRunner.run(new WordCount(), args); System.exit(exitCode); } public int run(String[] args) throws Exception { // … } } MapReduce
  26. 26. ● Tool sınıfı (devam) public int run(String[] args) throws Exception { Job job = new Job(); job.setJarByClass(WordCount.class); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); job.setMapperClass(WordCountMapper.class); job.setReducerClass(WordCountReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); return job.waitForCompletion(true) ? 0 : 1; } MapReduce
  27. 27. $ hadoop jar <jarfile> <classname> <args...> $ hadoop jar devveri-mapreduce-0.0.1-SNAPSHOT.jar com.devveri.hadoop.mapreduce.WordCount test.txt devveri 12/07/09 23:44:41 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same. 12/07/09 23:44:41 INFO input.FileInputFormat: Total input paths to process : 1 12/07/09 23:44:41 INFO mapred.JobClient: Running job: job_201204231254_5522 12/07/09 23:44:42 INFO mapred.JobClient: map 0% reduce 0% 12/07/09 23:44:56 INFO mapred.JobClient: map 100% reduce 0% 12/07/09 23:45:08 INFO mapred.JobClient: map 100% reduce 100% 12/07/09 23:45:13 INFO mapred.JobClient: Job complete: job_201204231254_5522 12/07/09 23:45:13 INFO mapred.JobClient: Counters: 29 12/07/09 23:45:13 INFO mapred.JobClient: Job Counters 12/07/09 23:45:13 INFO mapred.JobClient: Launched reduce tasks=1 12/07/09 23:45:13 INFO mapred.JobClient: SLOTS_MILLIS_MAPS=11984 12/07/09 23:45:13 INFO mapred.JobClient: Total time spent by all reduces waiting after reserving slots (ms)=0 12/07/09 23:45:13 INFO mapred.JobClient: Total time spent by all maps waiting after reserving slots (ms)=0 12/07/09 23:45:13 INFO mapred.JobClient: Launched map tasks=1 ... Uygulama Çalıştırma
  28. 28. ● Avantajları ○ Her dilde yazılabilir ○ Daha kolay geliştirme yapılabilir ○ Yeniden kullanılabilir kodlar yazılabilir ● Dezavantajları ○ Performans düşüktür ○ Daha ziyade Text dosyaları işlemek için kullanılır ○ Çok fazla RAM veya CPU tüketebilir ○ Bazı özellikler sadece Java ile mümkün Hadoop Streaming
  29. 29. ● Yet Another Resource Negotiator ○ MRv1 mimarisindeki problemlerin çözümü ○ Kaynak ve işlem süreçlerini ayırır ○ YARN sadece MR değil çok daha genel ■ Daha ölçeklenebilir ■ Mevcut MR uygulamaları desteklenir ■ Sadece MR değil, Storm, Spark, Hive vs. YARN
  30. 30. YARN
  31. 31. Gündem ● Neden Hadoop? ● HDFS ve MapReduce ● Hadoop Dağıtımları ● Entegrasyonlar ● Pig ● Hive ● Impala
  32. 32. Hadoop Dağıtımları ● Apache ○ Topluluk tarafından geliştiriliyor ○ En güncel sürüm 2.4.0 ○ Kurulumu, yönetimi zor ● Hortonworks ○ Hortonworks Data Platform 2.1 ○ Açık kaynağa, topluluğa daha yakın ● Cloudera ○ Cloudera Distribution Hadoop 5 ○ Kurumsal yaklaşım, 50 sunucuya kadar ücretsiz
  33. 33. Hortonworks Data Platform
  34. 34. Cloudera Distribution Hadoop
  35. 35. Cloudera Distribution Hadoop ● Cloudera Manager ○ Web tabanlı küme yönetim aracı ○ Sunucu ekleme/çıkartma ○ Servis ekleme/çıkartma/durdurma/başlatma ○ Monitörleme, Raporlama, Denetim ● Hue ○ Hadoop User Experience ○ Uygulamalar için web arayüzü ○ Açık kaynaklı ○ Konsol bağımlılığını kaldırır
  36. 36. Cloudera Manager
  37. 37. Hue
  38. 38. Gündem ● Neden Hadoop? ● HDFS ve MapReduce ● Hadoop Dağıtımları ● Entegrasyonlar ● Pig ● Hive ● Impala
  39. 39. Entegrasyonlar ● Flume : Gerçek zamanlı veri aktarımı ○ Agent'lar aracılığı ile veri toplama ● Sqoop : SQL to Hadoop ○ Veritabanından Hadoop'a ○ Hadoop'tan veritabanına aktarım
  40. 40. ● Apache Flume sunucular üzerinde çalışan agent uygulamaları aracılığı ile topladığı verileri Hadoop üzerine aktarmayı sağlayan bir araçtır. Flume
  41. 41. Flume ● Agent yapısı
  42. 42. Örnek Ayarlar # Define a memory channel called ch1 on agent1 agent1.channels.ch1.type = memory # Define an Avro source called avro-source1 on agent1 and tell it # to bind to 0.0.0.0:41414. Connect it to channel ch1. agent1.sources.avro-source1.channels = ch1 agent1.sources.avro-source1.type = avro agent1.sources.avro-source1.bind = 0.0.0.0 agent1.sources.avro-source1.port = 41414 # Define a logger sink that simply logs all events it receives # and connect it to the other end of the same channel. agent1.sinks.log-sink1.channel = ch1 agent1.sinks.log-sink1.type = logger # Finally, now that we've defined all of our components, tell # agent1 which ones we want to activate. agent1.channels = ch1 agent1.sources = avro-source1 agent1.sinks = log-sink1
  43. 43. Sqoop ● Apache Sqoop (SQL to Hadoop) veritabanı ile Hadoop arasında veri transferi amacıyla geliştirilmiş bir araçtır.
  44. 44. Sqoop ● Import, export işlemleri için kullanılır ● JDBC destekleyen her veritabanıyla çalışır ● Direkt aktarım kanallarını kullanabilir ○ MySQL (mysqldump) ○ PostgreSQL (sadece import) ○ Oracle (Quest Software yazılımı ile)
  45. 45. Sqoop ● MR kullanarak paralel çalışır ○ Varsayılan 4 mapper kullanır ○ Aktarım işlemi veritabanına yük getirebilir ● Tablo ya da DB aktarır ○ Tek bir tablo ○ Tüm tablolar ○ Tablonun bir kısmı (where, query) ○ Yeni gelen verilerin aktarımı (incremental)
  46. 46. Sqoop Import ● Text dosyası olarak import $ sqoop import --driver com.mysql.jdbc.Driver --connect jdbc:mysql://$DB_HOST/$DB_NAME --username $DB_USER --password $DB_PASS --table $TABLE_NAME --target-dir $TARGET_DIR --as-textfile
  47. 47. Sqoop Import ● Avro formatında import $ sqoop import --driver com.mysql.jdbc.Driver --connect jdbc:mysql://$DB_HOST/$DB_NAME --username $DB_USER --password $DB_PASS --as-textfile --table $TABLE_NAME --target-dir $TARGET_DIR --as-avrodatafile ● SequenceFile formatında import --as-sequencefile
  48. 48. Sqoop Import ● Hive tablosu olarak aktarmak $ sqoop import --driver com.mysql.jdbc.Driver --connect jdbc:mysql://$DB_HOST/$DB_NAME --username $DB_USER --password $DB_PASS --table $TABLE_NAME --target-dir $TARGET_DIR --hive-import --hive-table $TABLE_NAME --hive-overwrite
  49. 49. Gündem ● Neden Hadoop? ● HDFS ve MapReduce ● Hadoop Dağıtımları ● Entegrasyonlar ● Pig ● Hive ● Impala
  50. 50. Pig ● Apache Pig, Hadoop üzerindeki büyük verileri işlemek için geliştirilmiş, Pig Latin olarak isimlendirilen yüksek seviyeli bir dile sahip veri işleme aracıdır.
  51. 51. WordCount.pig -- hdfs://host/users/user/data.txt dosyasini yukle input = load 'data.txt' as (line); -- TOKENIZE ile her satirdaki verileri kelimelerine ayir -- flatten ile her bir kelimeyi bir satira donustur words = foreach input generate flatten(TOKENIZE(line)) as word; -- kelimeleri grupla ve say grpd = group words by word; cntd = foreach grpd generate group, COUNT(words); -- ekrana bas dump cntd;
  52. 52. Pig Özellikleri ● Map Reduce yazımını kolaylaştırır ● Basit dil, yeniden kullanılabilirlik ● Standart dosya formatlarını destekler ○ text, json, sequence, binary, avro… ● Esnek veri modeli ○ Basit tipler: int, long, float, double … ○ Kompleks tipler: Map, Tuple, Bag ● SQL benzeri ifadeler kullanılır ○ Filtreleme, Gruplama, Sıralama ...
  53. 53. Formatlar ● Her türlü format işlenebilir -- tab ile ayrilmis dosya tsv = load 'data.tsv' as (id, name, email); -- virgul ile ayrilmis dosya csv = load 'data.csv' using PigStorage(',') as (id, name, email); -- hcatalog uzerindeki tablo table = load 'tablename' using org.apache.hcatalog.pig.HCatLoader(); -- hbase uzerindeki tablo col = load 'hbase://SomeTableName' using org.apache.pig.backend.hadoop.hbase.HBaseStorage(...)
  54. 54. Şema Kullanımı ● Şema zorunlu değildir A = load 'data'; B = filter A by $1 > 100; ● Mevcut şemayı destekler ○ Tip kontrolü ve optimizasyonda kullanılır A = load 'data' as (customer:int, purchase:double); B = filter A by purchase > 100;
  55. 55. İfadeler ● load ● store ● dump ● foreach ● filter ● group/cogroup ● join ● cross ● order ● distinct ● union ● split ● limit ● stream
  56. 56. İfadelere Örnek ● Group A = load 'student' as (name:chararray, age:int, gpa:float); B = group A by age; C = foreach B generate age, COUNT($0); ● Join A1 = load 'products.csv' as (productId, productName); A2 = load 'companies.csv' as (productId, companyName); J = join A1 by productId, A2 BY productId; R = foreach J generate $0, $1, $3;
  57. 57. Pig Avantajları ● Pig kodları MapReduce kodlarına çevrilir ● Güçlü dil, ifadeler, fonksiyonlar, UDF ● Ölçeklenebilirlik ve Performans ● SQL benzeri, SQL'den daha anlaşılır ● Şema zorunlu değildir ● Yapılandırılmamış veriye çok uygundur ● ETL işleri için kullanılabilir
  58. 58. Gündem ● Neden Hadoop? ● HDFS ve MapReduce ● Hadoop Dağıtımları ● Entegrasyonlar ● Pig ● Hive ● Impala
  59. 59. Hive Apache Hive, SQL yardımıyla Hadoop üzerinde sorgulama ve Veri Ambarı uygulamaları geliştirmeyi sağlayan bir araçtır.
  60. 60. WordCount.sql /* docs tablosunu yarat */ CREATE TABLE docs (line STRING); /* docs dosyasini docs tablosu icerisine aktar */ LOAD DATA INPATH 'docs' OVERWRITE INTO TABLE docs; /* kelimeleri sayarak yeni bir tablo olustur */ CREATE TABLE word_counts AS SELECT word, count(1) AS count FROM (SELECT explode(split(line, 's')) AS word FROM docs) w GROUP BY word ORDER BY word;
  61. 61. Hive Özellikleri ● SQL ile MapReduce yazılmasını sağlar ○ SQL-92 standartlarına yakındır ○ Sorgular MapReduce'e dönüştürülür ● UPDATE ve DELETE desteklemez! ○ HIVE-5317 - Implement insert, update, and delete in Hive with full ACID support ● Veriler HDFS üzerinde saklanır ○ Dosyalar tablo gibi gösterilir ○ /user/hive/warehouse dizini varsayılandır ● Veri hakkındaki meta veriyi yönetir
  62. 62. Tablo Tanımlama CREATE TABLE employees ( name STRING, salary FLOAT, subordinates ARRAY<STRING>, deductions MAP<STRING, FLOAT>, address STRUCT<street:STRING, city:STRING, state:STRING, zip:INT> ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '001' COLLECTION ITEMS TERMINATED BY '002' MAP KEYS TERMINATED BY '003' LINES TERMINATED BY 'n' STORED AS TEXTFILE;
  63. 63. ● LOAD DATA komutu ○ HDFS üzerindeki dosyalar içeri aktarılır LOAD DATA INPATH 'data.csv' INTO TABLE employees PARTITION(field='value') ○ Lokal diskteki veriler de aktarılabilir LOAD DATA LOCAL INPATH '/path/data.csv' OVERWRITE INTO TABLE employees; ○ Dosya kopyalama ile aynı işlemi yapar $ hadoop fs -mv /path/data.csv /user/hive/warehouse/test Veri Girişi
  64. 64. ● External tablo kullanımı ○ Dosyalar taşınmak zorunda değildirdir ○ İstenilen dizin external tablo olarak kullanılabilir CREATE EXTERNAL TABLE customers ( id INT, email STRING ) ROW FORMAT DELIMITED STORED AS TEXTFILE LOCATION '/user/admin/userdata'; Veri Girişi
  65. 65. Sorgular ● Standart sorgular SELECT [ALL | DISTINCT] expr, expr, ... FROM table_reference [WHERE where_condition] [GROUP BY col_list] [LIMIT number] ● Karmaşık sorgular SELECT table3.col FROM ( SELECT a+b AS col FROM table1 UNION ALL SELECT c+d AS col FROM table2 ) table3
  66. 66. Sorgular ● JOIN örneği ○ Sadece eşitlik üzerinden bağ kurulabilir ■ a.id = b.id ○ INNER | LEFT | RIGHT | FULL OUTER JOIN ○ LEFT SEMI JOIN ○ Birden fazla tablo birbirine bağlanabilir SELECT a.val, b.val, c.val FROM a JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key1)
  67. 67. Fonksiyonlar ● Birçok fonksiyonu destekler ○ Matematiksel ■ round, floor, sqrt, abs, sin, exp, log, … ○ Tarih ■ year, month, date_add, datediff, unix_timestamp, … ○ String ■ length, concat, substr, upper, lower, trim, … ○ Kümeleme ■ sum, avg, min, max, percentile, stddev_pop, ...
  68. 68. Metastore ● Metadata'yı yönetir ○ Tablolar ile ilgili kolonların tipleri ○ HDFS üzerinde dosyaların konumu ○ Partitioning bilgisi ○ SerDe ayarları ○ İstatistik ● Datanucleus ORM kullanır ○ Derby, MySQL ve benzeri RDBMS kullanılabilir
  69. 69. Hive Avantajları ● SQL kolaylığı ○ Herkes SQL biliyor ● Ölçeklenebilirlik ve Performans ○ Küme üzerinde çalışır ● Anlık sorgular değil büyük sorgular ○ DWH sorguları ● Entegrasyon kolaylığı ○ Mevcut araçlarla olan entegrasyon
  70. 70. Gündem ● Neden Hadoop? ● HDFS ve MapReduce ● Hadoop Dağıtımları ● Entegrasyonlar ● Pig ● Hive ● Impala
  71. 71. Impala ● Cloudera Impala büyük veri analizi amacıyla geliştirilmiş devasa paralel işlem (MPP) SQL sorgu motorudur.
  72. 72. Impala ● MapReduce ○ Batch işlemler için tasarlanmış ○ Hive işleri uzun sürebilir ○ İhtiyacımız hız! ● Impala ○ Hive ile kıyaslanınca 4-35x daha hızlı ○ Dakikalar değil saniyeler
  73. 73. Impala ● Performans ○ MapReduce kullanmaz ○ Veriye direkt erişir ○ Yoğun biçimde RAM kullanır ■ Ara işlem verileri ■ Join işlemleri ○ C++ ile geliştirilmiştir ○ Çalışma anı kod oluşturma (LLVM)
  74. 74. ● Entegrasyon Kolaylığı ○ HDFS üzerindeki verilere erişir ○ Hive meta verisini kullanır ○ Hive ile aynı dili kullanır: HiveQL ○ Bilinen formatları (Text, Avro, vs) destekler ● Limitasyonlar ○ SerDe desteği henüz yok ○ Tüm sıkıştırma formatlarını desteklemez ○ RAM limitasyonu Impala
  75. 75. Impala
  76. 76. Hadoop Ekosistemi ● HCatalog (Metastore) ● HBase, Hypertable, Accumulo (NoSQL) ● Hama, Corona (~MapReduce) ● Chukwa, Kafka, Scribe (~Flume) ● Mahout (Machine Learning) ● Oozie, Azkaban (Scheduler) ● Zookeeper (Cluster Management) ● Stinger, Drill, Shark, Presto, Tajo, Phoenix (~Impala) ● Spark, Storm (~Hadoop) ● Mesos, Whirr (Cluster Manager) ● Tachyon (~HDFS) ● Nutch (Crawler)
  77. 77. Teşekkürler!

×