Pig ve Hive ile Hadoop 端zerinde Veri AnaliziHakan Ilter
油
Hadoop 端zerinde Map Reduce programlar脹 yazmay脹 kolaylat脹ran Pig ve Hive projesi ile ilgili zg端r Yaz脹l脹m ve Linux G端nleri 2013 organizasyonunda yapt脹脹m sunum.
Verinin temsili, ilenmesi, saklanmas脹nda gelien ve deien
koullar ele al脹nd脹ktan sonra, b端y端k verinin ilenmesi konusu
ele al脹n脹yor.
Verinin anlamland脹r脹lmas脹 konusunda deien terimler, 端nvanlar, algoritmalar, kullan脹lan aletler konusunda deerlendirmeler payla脹ld脹.
sunumun videosuna aa脹daki adresten ulaabilirsiniz.
https://www.youtube.com/watch?v=pnvvMU8L-O0
B端y端k Veri, K端me Hesaplama, Da脹t脹k Dosya Sistemi, Y端ksek Performansl脹 K端meleme, Apache Spark ve Streaming Mod端l端n端 i巽eren bir sunum.
Apache Spark脹n k端me hesaplamalar脹 i巽in kullan脹m脹n脹n anlat脹ld脹脹 sunumda, Java API ile temel bir uygulama 旦姻稼艶庄 g旦steriliyor ve beraberinde gelen Streaming Mod端l端 ile Twitterdan canl脹 veri 巽ekerek ilenmesi anlat脹l脹yor.
Verinin temsili, ilenmesi, saklanmas脹nda gelien ve deien
koullar ele al脹nd脹ktan sonra, b端y端k verinin ilenmesi konusu
ele al脹n脹yor.
Verinin anlamland脹r脹lmas脹 konusunda deien terimler, 端nvanlar, algoritmalar, kullan脹lan aletler konusunda deerlendirmeler payla脹ld脹.
sunumun videosuna aa脹daki adresten ulaabilirsiniz.
https://www.youtube.com/watch?v=pnvvMU8L-O0
B端y端k Veri, K端me Hesaplama, Da脹t脹k Dosya Sistemi, Y端ksek Performansl脹 K端meleme, Apache Spark ve Streaming Mod端l端n端 i巽eren bir sunum.
Apache Spark脹n k端me hesaplamalar脹 i巽in kullan脹m脹n脹n anlat脹ld脹脹 sunumda, Java API ile temel bir uygulama 旦姻稼艶庄 g旦steriliyor ve beraberinde gelen Streaming Mod端l端 ile Twitterdan canl脹 veri 巽ekerek ilenmesi anlat脹l脹yor.
6. Dev Veri Nedir
Teknoloji > Internet > Sosyal Medya > Mobil > ...
D端nya'daki verilerin %90'l脹k k脹sm脹 son iki y脹lda topland脹
Yap脹land脹r脹lm脹 (structured) ve Yap脹land脹r脹lmam脹
(unstructured) verilerden meydana gelir
Yap脹land脹r脹lm脹 veriler: 端r端n, kategori, m端teri,
fatura, 旦deme...
Yap脹land脹r脹lmam脹 veriler: tweet, payla脹m, beeni
(like), e-posta, video, t脹klama...
%10 Yap脹land脹r脹lm脹, %90 Yap脹land脹r脹lmam脹
9. Dev Veri'nin nemi
Bu kadar veri tek ba脹na bir anlam ifade etmiyor
nemli olan Dev Veri i巽erisinde saklanm脹 olan
bilgiyi ortaya 巽脹kart脹p yapt脹脹m脹z ii daha iyi
anlamak, belki de gelecei tahmin etmeye
巽al脹mak
Bu ger巽ekletirildiinde;
Mutlu m端teriler
Daha fazla kazan巽
Doland脹r脹c脹l脹kta azalma
Daha sal脹kl脹 insanlar
...
10. Geleneksel Sistemlerin Problemleri
RDBMS
G旦receli olarak k端巽端k boyutta veri, yap脹land脹r脹lmam脹
verilere uygun deil
Donan脹m limitleri
Daha fazla CPU, daha fazla RAM, daha fazla Disk =
Daha fazla Maliyet
Yaz脹l脹msal karma脹kl脹k
Senkronizasyon, bant genilii, eriilebilirlik, hata
tolerans脹
11. Peki ya ger巽ek problem?
Ger巽ek problem: Veriyi ilemciye
ulat脹rabilmek!
100GB boyutundaki bir veriyi
tipik bir disk ile (~75 MB/sn) aktarmak
yakla脹k 22 dakika!
12. Yeni bir yakla脹m
l巽eklenebilir
Tutarl脹
Veri Garantili
Eriilebilir
13. Kim 巽旦zd端?
Google File System (2003)
MapReduce (2004)
Big Table (2006)
14. ve Hadoop!
Veri ileme ama巽l脹 da脹t脹k uygulamalar
yaz脹lmas脹n脹 salayan bir platform ve a巽脹k
kaynakl脹 bir Apache projesidir.
15. G端ndem
Big Data (Dev veri)
Hadoop
HDFS
MapReduce
Hadoop Kurulum
K端me Yap脹s脹
Hadoop Ekosistemi
16. Neden Hadoop
Esnek
Her t端rl端 veriyi saklay脹p analizini yapabilir
l巽eklenebilir
Binlerce d端端m bir araya getirilebilir
Ekonomik
A巽脹k kaynakl脹, "commodity" donan脹mda 巽al脹abilir
19. Gitti Gidiyor'da Hadoop
聴lgili dier aramalar
Nokkia arat脹lm脹 ama Nokia olarak
d端zeltilmi
Nokia
kelimesiyle
daha ilgili
olduu i巽in Cep
telefonu
kategorisi daha
端stte yer al脹yor
20. Gitti Gidiyor'da Hadoop
"Metallica" ile ilgili dier aramalar
Mobil uygulama ana sayfada
kiiselletirilmi 端r端n g旦sterimi
Autocomplete verisi
23. G端ndem
Big Data (Dev veri)
Hadoop
HDFS
MapReduce
Hadoop Kurulum
K端me Yap脹s脹
Hadoop Ekosistemi
24. HDFS
Verinin saklanmas脹ndan sorumludur
Da脹t脹k bir dosya sistemidir
Veriyi 64MB ya da 128MB'l脹k bloklar halinde saklar
Her blok k端me i巽erisinde farkl脹 d端端mlere da脹t脹l脹r
Her bloun varsay脹lan 3 kopyas脹 tutulur
Bu sayede verinin eriilebilirlii ve g端venilirlii
salanm脹 olur
Ayn脹 dosyaya ait bloklar farkl脹 d端端mlerde olabilir
25. HDFS
Normal dosya sistemi 端zerinde 巽al脹脹r: ext3, ext4, xfs
B端y端k miktarda veri i巽in yedekli depolama salar
D端端k maliyetli sunucular 端zerinde 巽al脹maya uygundur
K端巽端k 巽ok dosya yerine b端y端k daha az dosya tutulmal脹d脹r
Ortalama bir dosya 100MB civar脹 olmal脹d脹r
Rastlant脹sal eriim yoktur (write once)
B端y端k ve duraks脹z (streaming) veri eriimine g旦re
optimize edilmitir
28. G端ndem
Big Data (Dev veri)
Hadoop
HDFS
MapReduce
Hadoop Kurulum
K端me Yap脹s脹
Hadoop Ekosistemi
29. MapReduce
Veriyi ileme y旦ntemidir
Fonksiyonel programlamadan esinlenilmitir
Map ve Reduce birer fonksiyondur
Map fonksiyonu ile veri i巽erisinden istenilen veriler
anahtar-deer format脹nda se巽ilir
Reduce fonksiyonu ile de se巽ilen bu veriler
端zerinde ilem yap脹l脹r, sonu巽 yine anahtar-deer
olarak iletilir
Map ve Reduce aras脹nda Shuffle ve Sort aamalar脹
vard脹r
30. MapReduce
Daha kolay anla脹labilir olmas脹 i巽in SQL'e benzetmek
gerekirse;
WHERE ile yap脹lan filtreleme gibi Map aamas脹nda
sadece ihtiyac脹m脹z olan veriler se巽ilir
Reduce aamas脹nda ise SUM, COUNT, AVG gibi
birletirme ilemleri yap脹l脹r
31. MapReduce
Map aamas脹ndaki ilemler k端me 端zerinde paralel
olarak 巽al脹脹r
Bu sayede k端menin b端y端kl端端ne g旦re veriler h脹zl脹 bir
ekilde ilenebilir hale gelmi olur
Her i par巽ac脹脹 verinin belirli bir par巽as脹n脹 iler
聴 par巽ac脹klar脹 m端mk端nse 端zerinde 巽al脹t脹脹
d端端mdeki verileri iler. Buna Data Localization
denir
33. MapReduce
Uygulama gelitirilirken sadece Map ve Reduce
metodlar脹 yaz脹l脹r, geri kalan ileyi otomatik
ger巽ekleir
Hadoop tamamen Java ile gelitirildii i巽in
MapReduce uygulamalar脹 Java ile yaz脹l脹r, jar olarak
paketlenir
Streaming 旦zellii sayesinde Python, C++, Php gibi
farkl脹 dillerde de kullan脹labilir
34. Word Count
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));
}
}
35. Word Count
Reduce 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));
}
36. Word Count
Tool s脹n脹f脹 metodlar脹
public int run(String[] args) throws Exception
{
if (args.length != 2) {
System.err.printf("Usage: %s [generic options] <input> <output>n", getClass().getSimpleName());
ToolRunner.printGenericCommandUsage(System.err);
return -1;
}
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;
}
public static void main(String[] args) throws Exception {
int exitCode = ToolRunner.run(new WordCount(), args);
System.exit(exitCode);
}
37. Word Count
MapReduce program脹n脹 巽al脹t脹rma
$ 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
12/07/09 23:45:13 INFO mapred.JobClient: Data-local map tasks=1
12/07/09 23:45:13 INFO mapred.JobClient: SLOTS_MILLIS_REDUCES=10033
12/07/09 23:45:13 INFO mapred.JobClient: File Output Format Counters
12/07/09 23:45:13 INFO mapred.JobClient: Bytes Written=31
12/07/09 23:45:13 INFO mapred.JobClient: FileSystemCounters
12/07/09 23:45:13 INFO mapred.JobClient: FILE_BYTES_READ=61
...
38. G端ndem
Big Data (Dev veri)
Hadoop
HDFS
MapReduce
Hadoop Kurulum
K端me Yap脹s脹
Hadoop Ekosistemi
39. Hadoop Kurulumu
Apache s端r端m端 d脹脹nda Cloudera, Hortonworks gibi
firmalar脹n da脹t脹mlar脹 da kullan脹labilir
Farkl脹 s端r端mleri bulunuyor
1.0.X - current stable version, 1.0 release
1.1.X - current beta version, 1.1 release
2.X.X - current alpha version
0.23.X - simmilar to 2.X.X but missing NN HA.
0.22.X - does not include security
0.20.203.X - old legacy stable version
0.20.X - old legacy version
K端me olarak (full cluster) ya da tek sunucuya (pseudo-
distributed) kurulabilir
deb, rpm veya tarball olarak indirilip kurulabilir
43. rnek kurulum ad脹m 4
Apache sunucusundan son s端r端m indirilir
$ cd /usr/java/
$ wget "http://www.eu.apache.org/dist/hadoop/
common/hadoop-1.0.4/hadoop-1.0.4.tar.gz"
$ gzip -dc hadoop-1.0.4.tar.gz | tar xf -
$ ln -s /usr/java/hadoop-1.0.4 /usr/java/hadoop
44. rnek kurulum ad脹m 5
K端me ile ilgili genel ayarlar conf/core-site.xml
dosyas脹nda bulunur
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/java/hadoop-data</value>
</property>
</configuration>
45. rnek kurulum ad脹m 6
HDFS ile ilgili ayarlar conf/hdfs-site.xml dosyas脹
i巽erisinde bulunur
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
46. rnek kurulum ad脹m 7
MapReduce ile ilgili ayarlar conf/mapred-site.xml
dosyas脹 i巽erisinde bulunur
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>
47. rnek kurulum ad脹m 8
Hadoop ile ilgili ortam deikenleri conf/hadoop-env.
sh dosyas脹nda bulunur
export JAVA_HOME=/usr/java/jdk
export HADOOP_HEAPSIZE=512
export HADOOP_HOME_WARN_SUPPRESS="TRUE"
48. rnek kurulum ad脹m 9
.bash_profile ya da .bash_rc dosyalar脹nda $PATH
deikeni ayarlanmal脹d脹r
JAVA_HOME=/usr/java/jdk
PATH=$PATH:$JAVA_HOME/bin
HADOOP_HOME=/usr/java/hadoop
PATH=$PATH:$HADOOP_HOME/bin
49. rnek kurulum ad脹m 10
NameNode formatlanmal脹d脹r
$ hadoop namenode -format
12/09/05 00:07:06 INFO namenode.NameNode: STARTUP_MSG:
/
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = devveri-HP-ProBook-6540b/127.0.1.1
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 1.0.3
STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.0 -r 1335192; compiled by
'hortonfo' on Tue May 8 20:31:25 UTC 2012
/
12/09/05 00:07:06 INFO util.GSet: VM type = 32-bit
12/09/05 00:07:06 INFO util.GSet: 2% max memory = 9.1025 MB
12/09/05 00:07:06 INFO util.GSet: capacity = 2^21 = 2097152 entries
12/09/05 00:07:06 INFO util.GSet: recommended=2097152, actual=2097152
12/09/05 00:07:07 INFO namenode.FSNamesystem: fsOwner=devveri
12/09/05 00:07:07 INFO namenode.FSNamesystem: supergroup=supergroup
12/09/05 00:07:07 INFO namenode.FSNamesystem: isPermissionEnabled=true
12/09/05 00:07:07 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100
12/09/05 00:07:07 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s),
accessTokenLifetime=0 min(s)
12/09/05 00:07:07 INFO namenode.NameNode: Caching file names occuring more than 10 times
12/09/05 00:07:07 INFO common.Storage: Image file of size 111 saved in 0 seconds.
12/09/05 00:07:07 INFO common.Storage: Storage directory /usr/java/hadoop-data/dfs/name has been successfully formatted.
12/09/05 00:07:07 INFO namenode.NameNode: SHUTDOWN_MSG:
/
SHUTDOWN_MSG: Shutting down NameNode at devveri-HP-ProBook-6540b/127.0.1.1
/
50. G端ndem
Big Data (Dev veri)
Hadoop
HDFS
MapReduce
Hadoop Kurulum
K端me Yap脹s脹
Hadoop Ekosistemi
53. NameNode
Ana (master) d端端md端r
Hangi blok, hangi dosya nerededir takip eder
Her t端rl端 dosya ileminden sorumludur
Veri deil sadece metadata saklar
Her zaman ayakta olmak zorundad脹r
NameNode 巽al脹maz ise t端m k端me 巽al脹maz hale gelir
H脹zl脹 eriim a巽脹s脹ndan verileri haf脹zada tutar
旦kmeye kar脹 diske bilgileri senkronize eder
Bu verileri mutlaka yedeklenmelidir
55. DataNode
Verilerin bulunduu d端端md端r
Blok halinde dosyalar脹 saklar
Yedekli olduu i巽in kapanmas脹 halinde veri kayb脹
yaanmaz
Veriler bu d端端mlerde olduu i巽in analiz ilemleri
de bu d端端mler 端zerinde 巽al脹脹r
K端me i巽erisinde birden fazla olabilir (olmal脹d脹r)
4000+ d端端me kadar b端y端yebilir
Say脹s脹 artt脹k巽a performans脹 lineer olarak artar!
56. JobTracker
MapReduce ilerini takip eder
NameNode gibi tektir
聴stemciler MapReduce ilerini JobTracker'a
g旦nderir
聴leri dier d端端mlere da脹t脹r
聴 par巽ac脹klar脹n脹n durumunu takip eder
Bir i par巽ac脹脹nda sorun olursa bunu sonland脹rarak
yeni bir tekrar 巽al脹t脹r脹r
Baz脹 durumlarda ayn脹 ii yapan birden fazla i
par巽ac脹脹 巽al脹t脹rabilir
57. TaskTracker
MapReduce ilemlerini 巽al脹t脹r脹r
DataNode ile ayn脹 d端端mde bulunur
JobTracker taraf脹ndan g旦nderilen i
par巽ac脹klar脹ndan sorumludur
Map ve Reduce g旦revlerini 巽al脹t脹r脹p sonu巽lar脹n脹
JobTracker'a iletir
63. Hive
Facebook taraf脹ndan gelitirilmitir
SQL benzeri HiveQL dili ile Java kullanmadan
MapReduce uygulamalar脹 yaz脹lmas脹n脹 salar
ncelikle HDFS 端zerindeki dosyalar tablo olarak
tan脹t脹l脹r
create table member_visits (member_id string,
visit_count int) row format delimited fields
terminated by 't' stored as textfile;
load data inpath '/usr/hadoop/anyfile' into table
members;
Daha sonra bu sanal tablolar sorgulanabilir
select avg(visit_count) from member_visits where
visit_count > 0;
64. Pig
Yahoo taraf脹ndan gelitirilmitir
MapReduce yazmak i巽in "DataFlow" dili olarak
adland脹r脹lan, SQL'den farkl脹 kendine 旦zg端 PigLatin dili
kullan脹l脹r
Join destekler, daha kolay ve performansl脹
MapReduce programalar脹 yazmay脹 salar
A = LOAD 'companies.csv' USING PigStorage() AS
(productId:int, productName:chararray);
B = FILTER A BY productId > 3;
C = FOREACH B GENERATE *;
DUMP C;
65. HBase
Hadoop 端zerinde 巽al脹an NoSQL veritaban脹d脹r
Google Big Table 旦rnek al脹narak gelitirilmitir
Esnek ema yap脹s脹 ile binlerce kolon, petabyte'larca
sat脹rdan oluan veriyi saklayabilir
HDFS 端zerinde 巽al脹t脹脹ndan MapReduce destekler
Veriye eriiminde baz脹 k脹s脹tlar vard脹r
Verilere anahtar 端zerinden ya da partial table scan
ile eriilebilir
聴kincil indeks, karma脹k sorgu 巽al脹t脹rma destei
yoktur