Apache Atlas, Hadoop clusterleri üzerinde data governance(veri yönetişimi) ve metadata yönetimi için araçtır. Metadataları toplamak, işlemek ve sürdürmek için tek başına bir çözümdür.

Ölçeklendirilebilir ve genişletilebilir bir hizmet setidir. Kullanıcıların, veri ekosistemindeki servislere ait metadataların tek bir yerden yönetmesini sağlar.

Atlas nasıl çalışır?

Apache Atlas, Hadoop ve veri ekosistemi içinde metadataları etkili bir şekilde aktarmak için tasarlanmıştır. Atlas’ın diğer servislerle beraber çalışabildiği için mevcut metadatalardan yararlanarak uyumluluk süresini azaltır.

Atlas ayrıca, şirketlerin metadataları kolayca dışarı aktarmalarını sağlar. Tüm metadatalar diğer bileşenlerden (Hive, Hbase vb.) toplanır ve Atlas’ta saklanır.

 

 

Şekil 1: Apache Atlas’ın Metadata toplaması[1]




Şekil 2: Apache Atlas’ın Bağlantı ve Ekosistemi[2]

Atlas bize ne sağlıyor ?

Data Lineage / Provenance : Entity’in başı, sonu tüm yaşam döngüsü ( Entity: Atlas’ta  her bir objeye verilen isim. Bu obje veriyolu, tablo, veritabanı olabilir, sütun olabilir. Entity Türkçe olarak varlık/obje kelimesine karşılık gelebilir ancak entity kelimesi Atlas konusunda global olarak kullanıldığından bu yazımda entity olarak kullanacağım).

Data Classification : “Entity”ler tag(etiket) kullanılarak sınıflandırılabilir. Örnek cep telefon numarası, kimlik numarası gibi verilere <hassasveri>, <personaldata> tagi eklenebilir. 

Metadata Catalog Search : Metadatalar üzerinde text search. Atlas’ın web arayüzünde kendi içinde bulundurduğu metadatalarla ilgili arama yapabilirsiniz.

Metadata Repository :  Atlas tarafından diğer bileşen ve servislerden toplanan tüm metadataların tutulduğu kısım.

Apache Atlas Mimarisi

Şekil 3: Apache Atlas Mimarisi[3]

Atlas’ın core(ana) kısmı aşağıdaki bileşenleri içerir:

Type System (Tür Sistemi): Atlas, kullanıcıların yönetmek istedikleri metadatalar için bir model tanımlamasına olanak tanır. Model, türler adı verilen tanımlardan oluşur. Türlerin örneklerine varlıklar(entities) adı verilir ve varlıklar, yönetilen gerçek metadata nesnelerini temsil eder. 

Ingest/Export: Ingest, metadataların Atlas’a dahil edilmesi, eklenmesine imkan sağlar. Eğer sistemimize ilk defa Atlas kurduysak Atlas’ın diğer bileşenlerden metadata alması buna örnek olarak verilebilir. Export ise metadatalarda tespit edilen değişikliklerin bize gösterilmesi konusunda destek sağlar.

Graph Engine: Atlas Graph Engine üzerinden metadataları yönetir ve metadatalar için indeksler oluşturur. Bu indeksler kullanılarak metadatalar üzerinde verimli bir şekilde arama yapılabilir.

Atlas Search

Entityleri aramak için Atlas Search kısmını kullanıyoruz.

İki farklı arama yöntemi var. Basic(Basit) ve Advanced(Detaylı). Basic yaklaşımda seçenekleri kendiniz elinizle seçip ayarlıyorsunuz. Advanced yaklaşımda ise DSL(Domain Specific Language) adı verilen yöntem ile sorgu şeklinde yazıp (örneğin name=‘customer’ gibi ) arama yaptırabiliyoruz. Arama yaparken bize yardımcı olan 4 adet arama türü var. Bu arama türleri beraber de kullanılabilir ayrı ayrı da. Yani tüm satırları doldurmak zorunda değiliz.

Search by Type (Türe göre arama): Aramak istediğiniz entityin türü. Bu türler hive veritabanı, hive tablosu, kafka topic, hdfs veriyolu, hbase veritabanı vb olabilir.

Search By Classification (Sınıflandırmaya göre arama):  Bazı entitiylere özel classificationlar(sınıflandırmalar) tanımlayabiliriz. Örnek: Kişisel veri (kimlik numarası, hesap numarası) içeren tablolara ‘ÖzelVeri’ olarak sınıflandırırsak özel veri içeren tabloları bu classification üzerinden yaptığımız aramayla bulabiliriz. 

Search By Term (Terime göre arama): Atlas Glossary(Atlas’ın sözlüğü gibi düşünülebilir) tarafında geçen bir ifadeye göre arama yapmak.

Search by Text (Metne göre arama): Entityin adında veya diğer bilgilerinde geçen kelimeye göre arayabiliriz. Örnek hive tablo adını hatırlıyorsanız Search by Type kısmından “hive_table” seçeneğini seçip bu kısma tablo adını yazabilirsiniz.

Şekil 4: Apache Atlas Search Ekranı

Favori search kısmında ise dsl ile sorgu yazarak (örnek dsl sorgusu city = ‘İstanbul’ şeklinde olabilir) veya yukarıda yaptığınız aramaları kaydedip daha sonra tekrar ihtiyacınız olduğunda kullanabilirsiniz. Bu, bizi uzun sorguları tekrar yazmaktan ve dolayısıyla zaman kaybından kurtaracaktır.

Data Lineage ve Propagate

 

Şekil 5: Employee isimli Entity’in kendi ekranı

Properties : İlgili entityin sahibi, oluşturulma tarihi, son erişim tarihi, türü gibi bilgilerin yer aldığı kısım.

Data Lineage: Entity’in yaşam döngüsünü görebildiğimiz kısım.

Relationships : Entitye ait veriyolu, veritabanı gibi bilgilerin tutulduğu yerdir.

Classifications : Entitye ait bir tag(etiket) varsa bu tagi ve aynı tagin geçtiği diğer entityleri gösterir.

Audits : Bu entity üzerinde yapılan işlemlerin loglanması.

Schema: Entitye ait şema. Örnek: tablo için sütun bilgileri.

Örnek Data Lineage Şekil 6’da gösterilmiştir.

Şekil 6: Bir projenin Lineage’i [4] 

Tag Based Policy(Etiket tabanlı kural,şart) : Atlas üzerinde oluşturulan tag(etiket) kullanarak yapılan erişim şartnameleri, kurallarıdır.

Kaynak tabanlı kuraldan farkı bir tag birden fazla kaynağı etkileyebilir ama kaynak tabanlı kuralda her kaynak(hive, hdfs gibi) için ayrı policy(şartname) oluşturmak zorundasınız. Tagler ise her kaynağa eklenerek kural oluşturulurken tag belirterek “bu kural bu tagin olduğu her yerde geçerlidir” anlamını katıyoruz.

Classification

Buradaki Classification(sınıflandırma), belirli bir entityin kökenini yani en başını yakalamak içindir. Varlıklar birden fazla sınıflandırma ile ilişkilendirilebilir, böylece daha kolay keşif ve güvenlik uygulaması sağlanır. Sınıflandırmaların köken yoluyla yayılması sınıflandırmaların çeşitli işlemlerden geçerken verileri takip etmesini otomatik olarak sağlar.

Classification tagı oluşturmak için arayüzde classification kısmına gelerek create butonuna tıklıyoruz.

 

Şekil 8: Classification oluşturma kısmı

Daha sonra bir entitye eklemek için o entityin sayfasına gidip ‘Classifications: +’ işaretine tıklıyoruz.

 

Şekil 9: Employee isimli entityin özellikleri

 

Şekil 10: Classification ekleme ekranı

Propagate : Kalıtım özelliği. Örnek : X tablosunda gsm sütununa hassasveri tagini ekledik. Daha sonra gsm sütununu kullanarak join, create vs işlemler ile yeni bir tablo oluşturduğumuzda gsm sütunu yeni tabloda olacağı için hassasveri tagı da yeni tabloda olacaktır. Cluster boyunca tüm ana tablolardaki kişisel verilere hassasveri tagini eklerseniz eğer bu tablolar kullanılarak oluşturulan her tabloda görebilirsiniz bu tagleri. Varolan tablolarınıza da eklerseniz en uca kadar yine tag yayılır. Tablonun tagden önce oluşturulması önemli değildir.

Apache Ranger ve Atlas kullanarak Tag based Policy Oluşturma

Personal isimli bir tablom var. Tckn, gsm, name, surname, age, city bilgilerinden oluşmakta. Tckn ve gsm sütunları hassasveri isimli bir tage/classificationa sahip. 

Personalinfoholder isimli tablom ise üstteki tablodan oluşlutulmuş sadece tckn ve gsm içermekte. 

Bir column masking policy(sütun maskeleme politikası, kuralı) oluşturup hassasveri tagini göstereceğiz.

Şekil 11: Masking Policy ekleme ekranı

 



Şekil 12: Maskeleme ekranında kullanıcı ayarları kısmı

Admin kullanıcısı

Şekil 13: Admin kullanıcısıyla personal tablosuna gönderdiğimiz sorgunun sonucu

 


Şekil 14: Admin kullanıcısıyla personalinfoholder tablosuna gönderdiğimiz sorgunun sonucu

Hdfs kullanıcısı

Şekil 15: Hdfs kullanıcısıyla personal tablosuna gönderdiğimiz sorgunun sonucu

 


Şekil 16: Hdfs kullanıcısıyla personalinfoholder tablosuna gönderdiğimiz sorgunun sonucu

Apache Atlas Rest API

Apache Atlas’ın sağladığı Rest Api ile entitylere, türlere, lineagelere erişim imkanı elde ediyoruz.

 

Şekil 17: Atlas Rest Api kullanım alanları[5]

Guid kullanarak bir entityin yaşam döngüsünü(lineage) görmek için : 

curl -X GET -u admin:password  -H “Content-Type: application/json” http://127.0.0.1:31000/api/atlas/v2/lineage/08bbfe93-82b0-4eb5-b3b6-22e0d89d4bdf

Türü hive_table olan tüm entityleri bulmak için : 

curl -X GET -u admin:password.  -H “Content-Type: application/json” http://127.0.0.1:31000/api/atlas/v2/search/dsl?typeName=hive_table

Bu yazıda Apache Atlas’ın temel yapısını, neler içerdiğini ve projelerimizde nasıl kullanabileceğimizi gördük. Bir sonraki yazımda görüşmek üzere.

Kaynakça:

[1]: slideshare.net/HadoopSummit/apache-atlas-why-big-data-management-requires-hierarchical-taxonomies
[2]: slideshare.net/HadoopSummit/apache-atlas-governance-for-your-data
[3]: atlas.apache.org/#/Architecture
[4]: slideshare.net/HadoopSummit/apache-atlas-governance-for-your-data
[5]: http://atlas.apache.org/api/v2/index.html