Spark Scala ile Oracledan S3’e JPEG, PDF, PNG Dosyaları Taşıma
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()
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()
Kaynaklar: