Spark Scala ile Oracledan S3’e JPEG, PDF, PNG Dosyaları Taşıma

Samet Surmez
2 min readFeb 3, 2023

BLOB (Binary Large Object), ilişkisel veri tabanında büyük boyutlu resim, müzik, pdf gibi yapısal olmayan verileride depolamaya imkan sağlayan veri tipidir. Büyük veri teknolojileriyle beraber yapısal, yarı yapısal verilerle beraber yapısal olmayan verilerlede çalışmak, depolamak, proje geliştirmek daha kolay ve ucuzdur. Bu nedenlerden ötürü daha pahalı ve sınırlı depolama alanına sahip Oracle gibi ilişkisel veritabanında BLOB alanda jpeg, pdf formatta depolanan yapısal olmayan verileri daha ucuz olan S3 obcjectstorage’a taşıyıp sonrasında kullanabilmek için Spark Scala’yı kullanabiliriz. Ekstra farklı bir araç kullanmadan Spark Scala ile ojdbc Driver’ı kullanarak Oracle veritabanında depolanmış olan jpeg ve pdf dosyaları orijinal halleriyle S3’e taşıyabiliriz.

Spark Version : 2.4.7

Scala Version : 2.11.12

spark-shell — master local[*] — jars /ojdbc8.jar

Local’e yazmak için

scala>import java.sql._

scala>import java.io._

scala>val con=DriverManager.getConnection(“jdbc:oracle:thin:@localhost:1521:xe”,”system”,”oracle”)

scala>val sqlQuery = con.prepareStatement(“select c1,c2,c3,.. from TableName”)

scala>val rslt= sqlQuery.executeQuery()

scala>rslt.next() // ilk row’u okumak için

scala>val Blob=rslt.getBlob(1) //select c1,c2,c3,.. from TableName yapısındaki kolon sırası 1 “c1 ” karşılık gelmekte

scala>val blobArry= Blob.getBytes(1,Blob.length().toInt)// buradaki 1, okunan verideki birinci resim array e dönüştürülüyor

scala>val fileOUT=new FileOutputStream(“test.jpg”) //Local dizin dosya adı

scala>fileOUT.write(blobArry)

scala>con.close()

Export edilmiş olan resmin Local dizindeki görünümü(Sol Üsten İkinci)

S3'e yazmak için

scala>import org.apache.hadoop.fs._

scala>import org.apache.hadoop.conf.Configuration

scala>val conf = new Configuration()

scala>conf.set(“fs.s3a.endpoint”, “https://s3store:99999")

scala>conf.set(“fs.s3a.access.key”, “Access_Key”)

scala>conf.set(“fs.s3a.secret.key”, “Secret_Key”)

scala>val tgtS3= new Path(“s3a://smt/resim/test.jpg”) // yazılacak hedef dizin/dosya adi

scala>val fs = tgtS3.getFileSystem(conf)

scala>val out = fs.create(tgtS3, true)

scala>out.write(blobArry)

scala>out.close()

Export edilmiş olan resmin S3 dizindeki görünümü

Kaynaklar:

--

--