4. Gündem
● Neden Hadoop?
● HDFS ve MapReduce
● Hadoop Dağıtımları
● Entegrasyonlar
● Pig
● Hive
● Impala
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. 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. 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
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. ● 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. ● 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. ● Ö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. ● Veri işleme amaçlı dağıtık uygulamalar
yazılmasını sağlayan bir platform ve açık
kaynaklı bir Apache projesidir
Hadoop
15. ● Neden Hadoop?
● HDFS ve MapReduce
● Hadoop Dağıtımları
● Entegrasyonlar
● Pig
● Hive
● Impala
Gündem
16. ● İki temel bileşenden oluşur
○ Hadoop Distributed File System (HDFS)
○ MapReduce
Hadoop
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
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
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
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. ● 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. ● 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. ● 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. $ 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. ● 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. ● 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
31. Gündem
● Neden Hadoop?
● HDFS ve MapReduce
● Hadoop Dağıtımları
● Entegrasyonlar
● Pig
● Hive
● Impala
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
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
38. Gündem
● Neden Hadoop?
● HDFS ve MapReduce
● Hadoop Dağıtımları
● Entegrasyonlar
● Pig
● Hive
● Impala
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. ● Apache Flume sunucular üzerinde çalışan
agent uygulamaları aracılığı ile topladığı
verileri Hadoop üzerine aktarmayı sağlayan
bir araçtır.
Flume
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. Sqoop
● Apache Sqoop (SQL to Hadoop) veritabanı
ile Hadoop arasında veri transferi amacıyla
geliştirilmiş bir araçtır.
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. 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)
49. Gündem
● Neden Hadoop?
● HDFS ve MapReduce
● Hadoop Dağıtımları
● Entegrasyonlar
● Pig
● Hive
● Impala
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. 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. 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. 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. Ş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. İfadeler
● load
● store
● dump
● foreach
● filter
● group/cogroup
● join
● cross
● order
● distinct
● union
● split
● limit
● stream
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. 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. Gündem
● Neden Hadoop?
● HDFS ve MapReduce
● Hadoop Dağıtımları
● Entegrasyonlar
● Pig
● Hive
● Impala
59. Hive
Apache Hive, SQL yardımıyla Hadoop üzerinde
sorgulama ve Veri Ambarı uygulamaları
geliştirmeyi sağlayan bir araçtır.
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. 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. 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. ● 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. ● 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. 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. 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)
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. 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. Gündem
● Neden Hadoop?
● HDFS ve MapReduce
● Hadoop Dağıtımları
● Entegrasyonlar
● Pig
● Hive
● Impala
71. Impala
● Cloudera Impala büyük veri analizi amacıyla
geliştirilmiş devasa paralel işlem (MPP) SQL
sorgu motorudur.
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. 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. ● 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