HDFS'den MinIO gibi modern nesne depolamaya geçiş yapmak isteyen bize gelen müşterilerin sayısı bizi hâlâ şaşırtıyor. Şu ana kadar herkesin geçiş yaptığını düşünüyorduk, ancak her hafta geçiş yapmaya karar veren büyük, son derece teknik bir kuruluşla görüşüyoruz.
Çoğu zaman bu tartışmalarda, geçişten sonra da altyapılarının korunmasını istedikleri unsurlar vardır. HDFS ekosisteminden çıkan, birçok geliştiricinin katılımına sahip olan ve modern veri yığınında hala yeri olan çerçeveler ve yazılımlar var. Aslında HDFS ekosisteminden pek çok iyi şeyin çıktığını sık sık söylüyoruz. Temel sorun, Büyük Veri çağından gelen araç ve hizmetlerle yakından bağlantılı olan depolama ve bilgi işlemdir.
Bu blog yazısı, değeri olan araç ve hizmetleri söküp değiştirmeden bu geçişi nasıl gerçekleştirebileceğinize odaklanacaktır. Gerçek şu ki, altyapınızı modernleştirmezseniz, kuruluşunuzun ihtiyaç duyduğu AI/ML'deki ilerlemeleri sağlayamazsınız, ancak oraya ulaşmak için her şeyi bir kenara atmanız da gerekmez.
Zaten bazı aşamalardan geçtik
İşlem Düğümleri: Kubernetes, işlem düğümlerindeki durum bilgisi olmayan Apache Spark ve Apache Hive kapsayıcılarını verimli bir şekilde yöneterek optimum kaynak kullanımı ve dinamik ölçeklendirme sağlar.
Depolama Katmanı: MinIO
Erişim Katmanı: MinIO nesne depolamasına tüm erişim, S3 API aracılığıyla birleştirilir ve depolanan verilerle etkileşim için kusursuz bir arayüz sağlanır.
Güvenlik Katmanı: Veri güvenliği çok önemlidir. MinIO, tüm verileri nesne başına anahtarlar kullanarak şifreleyerek yetkisiz erişime karşı güçlü koruma sağlar.
Kimlik Yönetimi: MinIO Enterprise, uygulamaların veya kullanıcıların kimlik doğrulamasına izin vermek için WSO2, Keycloak, Okta, Ping Identity gibi kimlik sağlayıcılarla tamamen entegre olur.
Kuruluşunuzun Hive, YARN ve modern veri yığınındaki hemen hemen her şey olan nesne depolamayla entegre olabilen diğer tüm Hadoop ekosistemi veri ürünlerini saklamasına olanak tanıyan, Hadoop'un tamamen modernize edilmiş bir alternatifi.
S3a, Hadoop ekosistemindeki çok çeşitli uygulamalarla uyumluluk sunan, Hadoop'tan uzaklaşmak isteyen uygulamalar için önemli bir uç noktadır. 2006 yılından bu yana, S3 uyumlu nesne depolama arka uçları, varsayılan bir özellik olarak Hadoop ekosistemindeki çok sayıda veri platformuna sorunsuz bir şekilde entegre edilmiştir. Bu entegrasyonun kökeni, S3 istemci uygulamasının gelişen teknolojilere dahil edilmesine kadar uzanıyor.
Hadoop ile ilgili tüm platformlarda hadoop-aws
modülünün ve aws-java-sdk-bundle
benimsenmesi standart bir uygulamadır ve S3 API için güçlü destek sağlar. Bu standartlaştırılmış yaklaşım, uygulamaların HDFS ve S3 depolama arka uçlarından sorunsuz geçişini kolaylaştırır. Geliştiriciler, yalnızca uygun protokolü belirleyerek uygulamaları Hadoop'tan modern nesne depolamaya zahmetsizce geçirebilirler. S3 için protokol şeması s3a:// ile gösterilirken HDFS için hdfs:// olarak gösterilir.
Hadoop'tan modern nesne depolamaya geçişin faydalarından uzun uzun bahsetmek mümkün. Bunu okuyorsanız, Hadoop gibi eski platformlardan geçiş yapılmadığı takdirde yapay zeka ve diğer modern veri ürünlerindeki gelişmelerin muhtemelen masadan kalkacağının büyük ölçüde farkındasınızdır. Bunun nedeni performansa ve ölçeğe indirgeniyor.
Modern iş yüklerinin, işlenen veri hacmi ve artık gerekli olan görevlerin karmaşıklığıyla rekabet edebilmek için olağanüstü performans gerektirdiğine kesinlikle şüphe yoktur. Performans sadece gösterişli kıyaslamayla ilgili olmayıp zorlu bir gereklilik olduğunda, Hadoop'un değiştirilmesi için yarışanların alanı ortaya çıkar.
Geçişleri ileriye taşıyan diğer unsur ise bulutta yerel ölçektir. Bulut kavramı fiziksel bir konumdan ziyade bir
Bu konseptin önemli bir kısmı, bir kuruluşun belirli iş yükleri için sınıfının en iyisi seçenekleri seçmesine olanak tanıyan satıcı bağımlılığının serbest bırakılmasından kaynaklanan ekonomik faydalardır. Ayrıca, verileri korumak için üç ayrı veri kopyasının tutulmasının artık geçmişte kaldığından bahsetmiyorum bile.
Mimarimizin ayrıntılarına dalmadan önce birkaç bileşeni çalışır duruma getirmeniz gerekecek. Hadoop'tan geçiş yapmak için, başlangıçta onu kurmuş olmanız gerekir. Bu deneyimi simüle etmek istiyorsanız Hadoop'un Hortonworks Dağıtımını buradan ayarlayarak bu eğitime başlayabilirsiniz.
Aksi takdirde aşağıdaki kurulum adımlarıyla başlayabilirsiniz:
Ambari'yi Ayarlama: Sonraki,
Apache Spark'ı yükleyin: Spark, büyük ölçekli verilerin işlenmesi için gereklidir. Takip et
MinIO'yu yükleyin : Ortamınıza bağlı olarak iki kurulum yaklaşımı arasında seçim yapabilirsiniz:
Bu öğeleri başarıyla yükledikten sonra Spark ve Hive'ı HDFS yerine MinIO kullanacak şekilde yapılandırabilirsiniz. Ambari kullanıcı arayüzüne http://<ambari-server>:8080/ gidin ve varsayılan kimlik bilgilerini kullanarak oturum açın: username: admin, password: admin
,
Ambari'de aşağıdaki ekran görüntüsündeki gibi hizmetlere, ardından HDFS'ye ve ardından Yapılandırmalar paneline gidin. Bu bölümde Ambari'yi HDFS yerine MinIO ile S3a kullanacak şekilde yapılandırıyorsunuz.
Aşağı kaydırın ve Custom core-site
gidin. Burası S3a'yı yapılandıracağınız yerdir.
sudo pip install yq alias kv-pairify='yq ".configuration[]" | jq ".[]" | jq -r ".name + \"=\" + .value"'
Buradan itibaren yapılandırmanız altyapınıza bağlı olacaktır. Ancak aşağıdakiler core-site.xml
dosyasının S3a'yı 12 düğümde ve 1.2TiB bellekte çalışan MinIO ile yapılandırmasının bir yolunu temsil edebilir.
cat ${HADOOP_CONF_DIR}/core-site.xml | kv-pairify | grep "mapred" mapred.maxthreads.generate.mapoutput=2 # Num threads to write map outputs mapred.maxthreads.partition.closer=0 # Asynchronous map flushers mapreduce.fileoutputcommitter.algorithm.version=2 # Use the latest committer version mapreduce.job.reduce.slowstart.completedmaps=0.99 # 99% map, then reduce mapreduce.reduce.shuffle.input.buffer.percent=0.9 # Min % buffer in RAM mapreduce.reduce.shuffle.merge.percent=0.9 # Minimum % merges in RAM mapreduce.reduce.speculative=false # Disable speculation for reducing mapreduce.task.io.sort.factor=999 # Threshold before writing to drive mapreduce.task.sort.spill.percent=0.9 # Minimum % before spilling to drive
Bu geçiş modeliyle ilgili belgelere göz atarak keşfedilebilecek pek çok optimizasyon var
Yapılandırmadan memnun olduğunuzda Tümünü yeniden başlatın.
Ayrıca Spark2 yapılandırma paneline gitmeniz gerekecektir.
Custom spark-defaults
ilerleyin ve MinIO ile yapılandırmak için aşağıdaki Özelliği ekleyin:
spark.hadoop.fs.s3a.access.key minio spark.hadoop.fs.s3a.secret.key minio123 spark.hadoop.fs.s3a.path.style.access true spark.hadoop.fs.s3a.block.size 512M spark.hadoop.fs.s3a.buffer.dir ${hadoop.tmp.dir}/s3a spark.hadoop.fs.s3a.committer.magic.enabled false spark.hadoop.fs.s3a.committer.name directory spark.hadoop.fs.s3a.committer.staging.abort.pending.uploads true spark.hadoop.fs.s3a.committer.staging.conflict-mode append spark.hadoop.fs.s3a.committer.staging.tmp.path /tmp/staging spark.hadoop.fs.s3a.committer.staging.unique-filenames true spark.hadoop.fs.s3a.committer.threads 2048 # number of threads writing to MinIO spark.hadoop.fs.s3a.connection.establish.timeout 5000 spark.hadoop.fs.s3a.connection.maximum 8192 # maximum number of concurrent conns spark.hadoop.fs.s3a.connection.ssl.enabled false spark.hadoop.fs.s3a.connection.timeout 200000 spark.hadoop.fs.s3a.endpoint http://minio:9000 spark.hadoop.fs.s3a.fast.upload.active.blocks 2048 # number of parallel uploads spark.hadoop.fs.s3a.fast.upload.buffer disk # use disk as the buffer for uploads spark.hadoop.fs.s3a.fast.upload true # turn on fast upload mode spark.hadoop.fs.s3a.impl org.apache.hadoop.spark.hadoop.fs.s3a.S3AFileSystem spark.hadoop.fs.s3a.max.total.tasks 2048 # maximum number of parallel tasks spark.hadoop.fs.s3a.multipart.size 512M # size of each multipart chunk spark.hadoop.fs.s3a.multipart.threshold 512M # size before using multipart uploads spark.hadoop.fs.s3a.socket.recv.buffer 65536 # read socket buffer hint spark.hadoop.fs.s3a.socket.send.buffer 65536 # write socket buffer hint spark.hadoop.fs.s3a.threads.max 2048 # maximum number of threads for S3A
Yapılandırma değişiklikleri uygulandıktan sonra hepsini yeniden başlatın.
Yapılandırmayı tamamlamak için Hive paneline gidin.
Custom hive-site
ilerleyin ve aşağıdaki Özelliği ekleyin:
hive.blobstore.use.blobstore.as.scratchdir=true hive.exec.input.listing.max.threads=50 hive.load.dynamic.partitions.thread=25 hive.metastore.fshandler.threads=50 hive.mv.files.threads=40 mapreduce.input.fileinputformat.list-status.num-threads=50
Daha fazla ince ayar yapılandırma bilgisi bulabilirsiniz
İşte bu kadar, artık entegrasyonunuzu test edebilirsiniz.
Bu blog gönderisi, mevcut sistemlerinizi tamamen elden geçirmenize gerek kalmadan Hadoop'tan geçişe yönelik modern bir yaklaşımın ana hatlarını çizdi. Kuruluşlar, Apache Spark ve Apache Hive'ı yönetmek için Kubernetes'ten yararlanarak ve durum bilgisi olan nesne depolama için MinIO'yu entegre ederek, dinamik ölçeklendirmeyi ve verimli kaynak kullanımını destekleyen dengeli bir mimari elde edebilir. Bu kurulum, veri işleme ortamlarınızın yeteneklerini yalnızca korumakla kalmaz, aynı zamanda geliştirerek onları daha sağlam ve geleceğe hazır hale getirir.
MinIO ile, ticari donanımlarda yüksek performans sunan, silme kodlaması yoluyla maliyetleri azaltan (Hadoop'un veri çoğaltmasındaki yedekliliği ortadan kaldıran) ve satıcıya bağlı kalma ve Cassandra tabanlı meta veri depolarına duyulan ihtiyaç gibi sınırlamaları aşan bir depolama çözümünden yararlanırsınız. Bu avantajlar, mevcut veri sistemlerinin temel öğelerini atmadan gelişmiş AI/ML iş yüklerinden yararlanmak isteyen kuruluşlar için çok önemlidir.
Bu geçiş stratejisini kuruluşunuzun benzersiz ihtiyaçlarını karşılayacak şekilde nasıl uyarlayabileceğiniz konusunda daha ayrıntılı tartışmalar veya özel rehberlik için bizimle iletişime geçmekten çekinmeyin. İster [email protected] adresine e-posta yoluyla, ister topluluğumuz üzerinden