Ayhan ARDA

Sqoop Nedir?

&NewLine;<h4 class&equals;"wp-block-heading"><strong>Sqoop Nedir&quest;<&sol;strong><&sol;h4>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Apache Sqoop&comma; ili&scedil;kisel veri tabanlar&inodot; ile hadoop aras&inodot;nda büyük verilerin aktar&inodot;m&inodot;n&inodot; sa&gbreve;layan java tabanl&inodot; bir yaz&inodot;l&inodot;md&inodot;r&period; Her iki yönde aktar&inodot;m yapabilmektedir&period; Veriyi ili&scedil;kisel veri taban&inodot;ndan okuyup &lpar;Oracle&comma; MySQL&comma; SQL Server&comma; Postgres&comma; Teradata vs&rpar; hadoop da&gbreve;&inodot;t&inodot;k dosya sistemine &lpar;HDFS&comma; Hive&comma; Hbase …&rpar; aktarabildi&gbreve;i gibi hadoop ortam&inodot;ndan okuyup ili&scedil;kisel veri tabanlar&inodot;na da yaz&inodot;labilmesini sa&gbreve;lar&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<figure class&equals;"wp-block-image size-full"><a href&equals;"https&colon;&sol;&sol;www&period;ayhanarda&period;com&sol;blog&sol;wp-content&sol;uploads&sol;2023&sol;03&sol;image-1&period;png"><img src&equals;"https&colon;&sol;&sol;www&period;ayhanarda&period;com&sol;blog&sol;wp-content&sol;uploads&sol;2023&sol;03&sol;image-1&period;png" alt&equals;"" class&equals;"wp-image-1547"&sol;><&sol;a><&sol;figure>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Sqoop&comma; &&num;8220&semi;SQL&&num;8217&semi;den Hadoop&&num;8217&semi;a ve Hadoop&&num;8217&semi;tan SQL&&num;8217&semi;e&&num;8221&semi; anlam&inodot;na gelir ve Cloudera taraf&inodot;ndan geli&scedil;tirilmi&scedil;tir&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Sqoop’un avantaj&inodot; ise veri aktar&inodot;m i&scedil;lemlerini MapReduce görevleri ile paralel olarak yaparak aktar&inodot;m&inodot; çok daha h&inodot;zl&inodot; tamamlamak&period; Ayr&inodot;ca MySQL ve PostgreSQL için JDBC kullanmadan &lpar;mysqldump gibi&rpar; daha dü&scedil;ük seviyeli ve performansl&inodot; veri aktar&inodot;m&inodot; da yap&inodot;labiliyor&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">&Idot;mport i&scedil;lemi s&inodot;ras&inodot;nda Sqoop basitçe meta verilerden faydalanarak tablonun birincil anahtar&inodot;n&inodot; bulup minimum ve maksimum de&gbreve;erlerini alarak e&scedil;it olarak Map say&inodot;s&inodot;na uygun olarak bölerek farkl&inodot; dü&gbreve;ümler üzerinde bu verileri paralel olarak aktar&inodot;r&period; Bu yüzden sonuç klasör içinde birden fazla dosyaya yaz&inodot;l&inodot;r&period; Aktar&inodot;m s&inodot;ras&inodot;nda veritaban&inodot;na yeni kay&inodot;t geliyorsa bunlar aktar&inodot;lmayabilir&comma; veri tutarl&inodot;l&inodot;&gbreve;&inodot;na dikkat etmek gerekir&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Export i&scedil;lemi s&inodot;ras&inodot;nda ise aksi belirtilmedi&gbreve;i sürece verileri binerli gruplar halinde veritaban&inodot;na INSERT ediyor&period; Bu i&scedil;lem de paralel olarak yap&inodot;ld&inodot;&gbreve;&inodot; için aktar&inodot;m s&inodot;ras&inodot;nda veritaban&inodot;nda yük olu&scedil;turabilir&period; Her bir grubun yaz&inodot;lmas&inodot; kendi ba&scedil;&inodot;na bir transaction oldu&gbreve;u için burada da veri tutarl&inodot;l&inodot;&gbreve;&inodot;na dikkat etmek gerekir&period; E&gbreve;er kay&inodot;tlar&inodot;n tamam&inodot; aktar&inodot;ld&inodot;ktan sonra aktif olmas&inodot; isteniyorsa ara tablo kullan&inodot;m&inodot;n&inodot; sa&gbreve;layan –staging-table parametresi kullan&inodot;labilir&period; Bu tablonun yarat&inodot;lmas&inodot; ve temizlenmesi de otomatik yap&inodot;lmaz&comma; elle yapmak gerekir&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<figure class&equals;"wp-block-image size-full"><a href&equals;"https&colon;&sol;&sol;www&period;ayhanarda&period;com&sol;blog&sol;wp-content&sol;uploads&sol;2023&sol;03&sol;image&period;png"><img src&equals;"https&colon;&sol;&sol;www&period;ayhanarda&period;com&sol;blog&sol;wp-content&sol;uploads&sol;2023&sol;03&sol;image&period;png" alt&equals;"" class&equals;"wp-image-1544"&sol;><&sol;a><figcaption class&equals;"wp-element-caption">Sqoop<&sol;figcaption><&sol;figure>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Hadoop geli&scedil;tiricisi için as&inodot;l olay veriler HDFS&&num;8217&semi;ye yüklendikten sonra ba&scedil;lar&period; HDFS&&num;8217&semi;de depolanan verilerde gizlenmi&scedil; çe&scedil;itli ön görüler elde etmek için bu veriler etraf&inodot;nda i&scedil;lemler yap&inodot;l&inodot;r&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Bu nedenle&comma; bu analiz için ili&scedil;kisel veri taban&inodot; yönetim sistemlerinde bulunan verilerin HDFS&&num;8217&semi;ye aktar&inodot;lmas&inodot; gerekir&period; &Idot;li&scedil;kisel veritaban&inodot;ndan HDFS&&num;8217&semi;ye veri almak ve vermek için MapReduce kodunu yazma görevi çok ilgi çekici de&gbreve;ildir ve s&inodot;k&inodot;c&inodot;d&inodot;r&period; Apache Sqoop&&num;8217&semi;un kurtarmaya geldi&gbreve;i ve ac&inodot;lar&inodot;n&inodot; dindirdi&gbreve;i yer buras&inodot;d&inodot;r&period; Verileri içe ve d&inodot;&scedil;a aktarma sürecini otomatikle&scedil;tirir&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Sqoop&comma; verileri içe ve d&inodot;&scedil;a aktarmak için CLI sa&gbreve;layarak geli&scedil;tiricilerin hayat&inodot;n&inodot; kolayla&scedil;t&inodot;r&inodot;r&period; Sadece veritaban&inodot; kimlik do&gbreve;rulamas&inodot;&comma; kaynak&comma; hedef&comma; i&scedil;lemler vb&period; gibi temel bilgileri sa&gbreve;lamalar&inodot; gerekir&period; Geri kalan k&inodot;sm&inodot; o halleder&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Sqoop&comma; komutu dahili olarak&comma; daha sonra HDFS üzerinden yürütülen MapReduce görevlerine dönü&scedil;türür&period; Paralellik üzerinde hata tolerans&inodot; sa&gbreve;layan verileri içe ve d&inodot;&scedil;a aktarmak için YARN çerçevesini kullan&inodot;r&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph"><strong>Sqoop Özellikleri<&sol;strong><&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<ol class&equals;"wp-block-list">&NewLine;<li>Sa&gbreve;laml&inodot;k&colon; Apache Sqoop do&gbreve;as&inodot; gere&gbreve;i oldukça sa&gbreve;lamd&inodot;r&period; Topluluk deste&gbreve;i ve katk&inodot;s&inodot; vard&inodot;r ve kolayca kullan&inodot;labilir&period;<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>Tam Yük&colon; Sqoop kullanarak&comma; tek bir Sqoop komutuyla tüm tabloyu yükleyebiliriz&period; Sqoop ayr&inodot;ca tek bir Sqoop komutu kullanarak veritaban&inodot;ndaki tüm tablolar&inodot; yüklememizi sa&gbreve;lar&period;<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>Art&inodot;ml&inodot; Yük&colon; Sqoop&comma; art&inodot;ml&inodot; yük i&scedil;levselli&gbreve;ini destekler&period; Sqoop&&num;8217&semi;u kullanarak&comma; güncellendi&gbreve;inde tablonun bölümlerini yükleyebiliriz&period;<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>Paralel içe&sol;d&inodot;&scedil;a aktarma&colon; Apache Sqoop&comma; verileri içe ve d&inodot;&scedil;a aktarmak için YARN çerçevesini kullan&inodot;r&period; Bu&comma; paralelli&gbreve;in üstünde hata tolerans&inodot; sa&gbreve;lar&period;<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>SQL sorgusunun sonuçlar&inodot;n&inodot; içe aktar&inodot;n&colon; Sqoop&comma; SQL sorgusundan döndürülen sonucu Hadoop Da&gbreve;&inodot;t&inodot;lm&inodot;&scedil; Dosya Sistemine içe aktarmam&inodot;za da izin verir&period;<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>S&inodot;k&inodot;&scedil;t&inodot;rma&colon; -compress argüman&inodot; ile deflate&lpar;gzip&rpar; algoritmas&inodot;n&inodot; kullanarak veya –compression-codec argüman&inodot;n&inodot; belirterek verilerimizi s&inodot;k&inodot;&scedil;t&inodot;rabiliriz&period; Apache Hive&&num;8217&semi;a s&inodot;k&inodot;&scedil;t&inodot;r&inodot;lm&inodot;&scedil; bir tablo yükleyebiliriz&period;<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>Tüm önemli RDBMS Veritabanlar&inodot; için konnektörler&colon; Sqoop&comma; çe&scedil;itli RDBMS veritabanlar&inodot; için neredeyse tüm ekosistemi kapsayan konnektörler sa&gbreve;lar&period;<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>Kerberos Güvenlik Entegrasyonu&colon; Temel olarak Kerberos&comma; güvenli olmayan a&gbreve; üzerinden ileti&scedil;im kuran dü&gbreve;ümlerin kimliklerini birbirlerine kan&inodot;tlamalar&inodot;na izin vermek için ticketlar temelinde çal&inodot;&scedil;an bilgisayar a&gbreve;&inodot; kimlik do&gbreve;rulama protokolüdür&period; Apache Sqoop&comma; Kerberos kimlik do&gbreve;rulamas&inodot;n&inodot; destekler&period;<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>Verileri do&gbreve;rudan HIVE&sol;HBase&&num;8217&semi;e yükleyin&colon; Sqoop&&num;8217&semi;u kullanarak&comma; veri analizi için verileri do&gbreve;rudan Hive&&num;8217&semi;a yükleyebiliriz&period; Verilerimizi HBase yani NoSQL veritaban&inodot;na da dump edebiliriz&period;<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>Accumulo Deste&gbreve;i&colon; Apache Sqoop&&num;8217&semi;a bir tabloyu HDFS&&num;8217&semi;deki bir dizine almak yerine Accumulo&&num;8217&semi;ya almas&inodot; talimat&inodot;n&inodot; verebiliriz&period;<&sol;li>&NewLine;<&sol;ol>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph"><strong>Sqoop&&num;8217&semi;un S&inodot;n&inodot;rlamalar&inodot;<&sol;strong><&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<ol class&equals;"wp-block-list">&NewLine;<li>Apache Sqoop&&num;8217&semi;u duraklatamaz ya da devam ettiremeyiz&period; atomik bir ad&inodot;md&inodot;r&period;<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>Sqoop Export&&num;8217&semi;un performans&inodot;&comma; RDBMS sunucusunun donan&inodot;m ya da config yap&inodot;land&inodot;rmas&inodot;na ba&gbreve;l&inodot;d&inodot;r&period;<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>Sqoop MapReduce paradigmas&inodot;n&inodot; kullan&inodot;r&period;<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>&Idot;mport ya da export s&inodot;ras&inodot;ndaki problemler için özel i&scedil;lem gerektirir&period;<&sol;li>&NewLine;&NewLine;&NewLine;&NewLine;<li>Her rdbms konnektörü ayn&inodot; de&gbreve;ildir &comma; baz&inodot; veritabanlar&inodot; için daha bulk i&scedil;lemler sa&gbreve;lar&period;<&sol;li>&NewLine;<&sol;ol>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph"><strong>Sqoop Argümanlar&inodot;<&sol;strong><&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<figure class&equals;"wp-block-table"><table><thead><tr><th>Argüman<&sol;th><th>Aç&inodot;klama<&sol;th><&sol;tr><&sol;thead><tbody><tr><td><code>--append<&sol;code><&sol;td><td>Import edilen veriyi HDFS’deki mevcut veriye ekler<&sol;td><&sol;tr><tr><td><code>--as-avrodatafile<&sol;code><&sol;td><td>Veriyi Avro Data Files olarak import eder<&sol;td><&sol;tr><tr><td><code>--as-sequencefile<&sol;code><&sol;td><td>Veriyi SequenceFiles olarak import eder<&sol;td><&sol;tr><tr><td><code>--as-textfile<&sol;code><&sol;td><td>Veriyi plain text olarak import eder&period; Varsay&inodot;lan format budur&period;<&sol;td><&sol;tr><tr><td><code>--as-parquetfile<&sol;code><&sol;td><td>Veriyi Parquet Files olarak import eder<&sol;td><&sol;tr><tr><td><code>--boundary-query &lt&semi;statement&gt&semi;<&sol;code><&sol;td><td>Sorguya kullan&inodot;c&inodot; taraf&inodot;ndan konan s&inodot;n&inodot;rd&inodot;r&period;<&sol;td><&sol;tr><tr><td><code>--columns &lt&semi;col&comma;col&comma;col…&gt&semi;<&sol;code><&sol;td><td>Tablonun hangi sütunlar&inodot;n&inodot; seçece&gbreve;imizi bildiririz&period;<&sol;td><&sol;tr><tr><td><code>--delete-target-dir<&sol;code><&sol;td><td>E&gbreve;er hedefte böyle bir dizin varsa onu siler&period;<&sol;td><&sol;tr><tr><td><code>--direct<&sol;code><&sol;td><td>Veri taban&inodot; için varsa do&gbreve;rudan ba&gbreve;lant&inodot; kullan&inodot;r&period;<&sol;td><&sol;tr><tr><td><code>--fetch-size &lt&semi;n&gt&semi;<&sol;code><&sol;td><td>Ça&gbreve;r&inodot;lacak sat&inodot;r say&inodot;s&inodot;na s&inodot;n&inodot;r koyulur&period; 50 sat&inodot;r getir gibi&period;<&sol;td><&sol;tr><tr><td><code>--inline-lob-limit &lt&semi;n&gt&semi;<&sol;code><&sol;td><td>Bir sat&inodot;rda bulunacak maksimum LOB geni&scedil;li&gbreve;i&period;<&sol;td><&sol;tr><tr><td><code>-m&comma;--num-mappers &lt&semi;n&gt&semi;<&sol;code><&sol;td><td>Kaç tane paralel map görevinin paralel çal&inodot;&scedil;aca&gbreve;&inodot;n&inodot; belirten rakamd&inodot;r&period;<&sol;td><&sol;tr><tr><td><code>-e&comma;--query &lt&semi;statement&gt&semi;<&sol;code><&sol;td><td>Import the results of&nbsp&semi;<em><code>statement<&sol;code><&sol;em>&period;<&sol;td><&sol;tr><tr><td><code>--split-by &lt&semi;column-name&gt&semi;<&sol;code><&sol;td><td>Tablonun hangi sütun baz al&inodot;narak bölünece&gbreve;ini belirtir&period; &nbsp&semi;<code>--autoreset-to-one-mapper<&sol;code>&nbsp&semi;ile ayn&inodot; anda kullan&inodot;lamaz&period;<&sol;td><&sol;tr><tr><td><code>--autoreset-to-one-mapper<&sol;code><&sol;td><td>E&gbreve;er tabloda primary key yok ise ve bölünecek sütun da belirtilmemi&scedil;se tek bir mapper kullan&inodot;l&inodot;r&period; &nbsp&semi;Ayn&inodot; anda&nbsp&semi;<code>--split-by &lt&semi;col&gt&semi;<&sol;code>&nbsp&semi;seçene&gbreve;i ile kullan&inodot;lamaz&period;<&sol;td><&sol;tr><tr><td><code>--table &lt&semi;table-name&gt&semi;<&sol;code><&sol;td><td>Okunmak istenen hedef tablonun ismi<&sol;td><&sol;tr><tr><td><code>--target-dir &lt&semi;dir&gt&semi;<&sol;code><&sol;td><td>Hedef HDFS dizini<&sol;td><&sol;tr><tr><td><code>--warehouse-dir &lt&semi;dir&gt&semi;<&sol;code><&sol;td><td>HDFS parent for table destination<&sol;td><&sol;tr><tr><td><code>--where &lt&semi;where clause&gt&semi;<&sol;code><&sol;td><td>E&gbreve;er import esnas&inodot;nda WHERE &nbsp&semi;ko&scedil;ulu kullanmak istiyorsak&period;<&sol;td><&sol;tr><tr><td><code>-z&comma;--compress<&sol;code><&sol;td><td>S&inodot;k&inodot;&scedil;t&inodot;rmay&inodot; açmak istiyorsak<&sol;td><&sol;tr><tr><td><code>--compression-codec &lt&semi;c&gt&semi;<&sol;code><&sol;td><td>Hadoop codec kullan&inodot;m&inodot; &lpar;varsay&inodot;lan gzip&rpar;<&sol;td><&sol;tr><tr><td><code>--null-string &lt&semi;null-string&gt&semi;<&sol;code><&sol;td><td>Sütun string ise ve null ise bunun yerine yaz&inodot;lacak string&period; Örne&gbreve;in null geldininde &OpenCurlyDoubleQuote;Bo&scedil;” yaz&inodot;lmas&inodot;n&inodot; istersek&period;<&sol;td><&sol;tr><tr><td><code>--null-non-string &lt&semi;null-string&gt&semi;<&sol;code><&sol;td><td>Sütun string de&gbreve;il ise null de&gbreve;erler için alacak de&gbreve;er<&sol;td><&sol;tr><&sol;tbody><&sol;table><figcaption class&equals;"wp-element-caption">Sqoop Argümanlar&inodot;<&sol;figcaption><&sol;figure>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph"><strong>Örnekler&semi;<&sol;strong><&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph"><strong>Mysql sunucusundaki personeller veritaban&inodot;ndaki tablolar&inodot; listeleyelim&period;<&sol;strong><&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code><strong>sqoop list-tables --connect jdbc&colon;mysql&colon;&sol;&sol;MYSQLDBADRESINIZ&colon;3306&sol;personel --username ayhanarda -P<&sol;strong>&NewLine;Enter password&colon;&NewLine;23&sol;03&sol;15 19&colon;59&colon;31 INFO manager&period;MySQLManager&colon; Preparing to use a MySQL streaming resultset&period;&NewLine;departmanlar&NewLine;departman&lowbar;calisanlari&NewLine;departman&lowbar;yoneticileri&NewLine;calisanlar&NewLine;unvanlar&NewLine;maaslar&NewLine;&NewLine;<strong>Çal&inodot;&scedil;anlar tablosunu HDFS üzerine aktaral&inodot;m&period;<&sol;strong>&NewLine;&NewLine;sqoop import --connect jdbc&colon;mysql&colon;&sol;&sol;<strong>MYSQLDBADRESINIZ<&sol;strong>&colon;3306&sol;personel --username ayhanarda -P --table calisanlar&NewLine;&NewLine;<strong>Personel veritaban&inodot;n&inodot; direkt Hive a alal&inodot;m&period;<&sol;strong>&NewLine;&NewLine;sqoop import-all-tables --connect jdbc&colon;mysql&colon;&sol;&sol;<strong>MYSQLDBADRESINIZ<&sol;strong>&colon;3306&sol;personel --username ayhanarda -P --direct --hive-import&NewLine;&NewLine;Bu aktar&inodot;m i&scedil;lemini –direct parametresi ile de yapabilirdik&period;Bu durumda jdbc konnektörü yerine mysql dump kullan&inodot;rd&inodot; ve süre de&gbreve;i&scedil;irdi&period;&NewLine;&NewLine;Sqoop ile tablonun tamam&inodot;n&inodot; da aktarmak zorunda de&gbreve;iliz&comma; -query parametresi ile sadece verdi&gbreve;imiz sorgu sonucunun aktar&inodot;lmas&inodot;n&inodot; sa&gbreve;layabiliriz&period; Bunun d&inodot;&scedil;&inodot;nda varsay&inodot;lan olarak metin dosyas&inodot; haline aktar&inodot;lan verilerin alan ve sat&inodot;r ayraçlar&inodot;n&inodot; belirleyebiliriz&comma; metin dosyalar&inodot; d&inodot;&scedil;&inodot;nda Hadoop’un binary format&inodot; olan SequenceFile veya Avro format&inodot;nda da veriler aktar&inodot;labiliriz&period;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph"><a href&equals;"https&colon;&sol;&sol;sqoop&period;apache&period;org&sol;docs&sol;1&period;4&period;6&sol;SqoopUserGuide&period;html" target&equals;"&lowbar;blank" rel&equals;"noopener" title&equals;"">Apache Sqoop Kullan&inodot;c&inodot; Rehberi<&sol;a>ne eri&scedil;mek için t&inodot;klay&inodot;n&inodot;z&period;<br><a href&equals;"https&colon;&sol;&sol;docs&period;cloudera&period;com&sol;sqoop&sol;1&period;4&period;7&period;7&period;1&period;6&period;0&sol;user-guide&sol;index&period;html" target&equals;"&lowbar;blank" rel&equals;"noopener" title&equals;"">Cloudera Sqoop Rehberi<&sol;a>ne eri&scedil;mek için t&inodot;klay&inodot;n&inodot;z&period;<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">Ayhan ARDA<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph"><&sol;p>&NewLine;&NewLine;

Mobil sürümden çık