Microsoft Azure Servisleri ile Advanced Data Analytics Çözümleri Kitabımız Yayınlandı!!!

Uzun zamandır Microsoft Azure çözümlerini kullanarak stream verilerinin analiz edilmesi ile ilgili yazılar paylaşmaktaydım. Hatta bu konuları kapsayacak şekilde blogumda Advanced Data Analytics isminde yeni bir kategori oluşturdum. Yazmış olduğum bütün bu alanla ilgili yazılarımı  bu kategori altında paylaşıyorum. Aynı zamanda Yüksek Lisans bitirme projem olan bu konular üzerine yaptığım çalışmaları bir kitap haline getirmeyi ve ücretsiz olarak faydalanmak isteyenler için pdf olarak paylaşmayı uzun zamandır planlıyordum. Sonunda bütün konuları kapsayacak şekilde ele aldığım ve güncellediğim kitabım yayınlanmaya hazır hale geldi.

Kitapta Advanced Data Analytics ve IoT Kavramlarına Giriş, İçerik Yönetim Sistemleri, Microsoft Azure Çözümleri ve Bu Alandaki Rakipleri (Apache Kafka, AWS Kinesis), Microsoft Azure Event Hubs, Microsoft Azure Stream Analytics, Microsoft Power BI ve Microsoft Azure SQL Database konuları ele alındı ve belirli senaryolar ile örnekler gerçekleştirilerek sonuçları paylaşıldı. Yazarken ben büyük keyif alarak yazdım. Umarım okurken sizler de aynı keyfi alırsınız.

Kitaba ait linki aşağıda paylaşıyorum. Keyifli okumalar…

Microsoft Azure Servisleri ile Advanced Data Analytics Çözümleri Kitabı

Kapak

 Yazar: Abdullah ALTINTAŞ

Stream Verinin Azure SQL Database’de Table Partitioning ile Tutulması (Demo)

Advanced Data Analytics başlığı altında daha önce, stream olarak gelen çok büyük miktarda verinin Microsoft Azure Event Hubs servisi ile nasıl elde edilebileceği, Microsoft Azure Stream Analytics servisi ile nasıl analiz edilebileceği ve Microsoft Power BI kullanılarak gerçek zamanlı olarak nasıl raporlanabileceğini ele almıştık. Aynı zamanda stream verinin daha sonra analizinin yapılması için Azure SQL Database‘de nasıl saklanabileceğini serinin önceki yazılarında göstermiştik. Bugünkü konumuza geçmeden önce göz atmak isteyenler için Advanced Data Analytics başlığı altındaki makale serisine aşağıdaki linkten erişebilirsiniz:

http://www.abdullahaltintas.com/index.php/real-time-click-stream-analizi-icin-microsoft-azure-cozumleri-serisi/

Günlük hayatımızda IoT kavramı odağımıza girdikçe üretilen verilerden anlamlı sonuçlar çıkartabilmek, çok büyük miktarlarda üretilen verileri hızlı ve doğru bir şekilde elde edip analizini yapabilmek özellikle veri bilimciler için çok önemli bir noktaya geldi. Internet of Things (IoT) cihazları, sensörler, akıllı çözümler, sistemlere ait loglar ve click stream verileri gibi saniyede milyonlarca veri üreten sistemlerden bu verileri almak ve işlemek için çeşitli yöntemler kullanılmakta ve bu ihtiyaçlar karşılanmaktadır. Microsoft teknolojileri açısından baktığımızda Azure Event Hubs, Azure Stream Analytics çözümleri ile bu veriler etkin bir şekilde elde edilebilmekte ve analizi yapılabilmektedir. Ardından analizi yapılan veriler ihtiyaca bağlı olarak farklı çıktılar üretebilmekte ve gerektiğinde tekrar analiz edilmek üzere saklanabilmektedir. Özellikle tekrar analiz edilmek üzere saklanmak istenilen bu büyük miktarda veriler Azure BLOB Storage gibi bir çözüm ile saklanabileceği gibi bazı durumlarda Microsoft’un bulut sistemlerdeki ilişkisel veritabanı çözümü olan Azure SQL Database hizmeti ile tablo yapısında da tutulabilmektedir. Ancak veri miktarı çok büyük olduğundan Azure SQL Database çözümünde bu veriler tek bir tabloda tutulmak istenildiğinde yönetilebilirlik ve ölçeklenebilirlik bakımından parçalı bir yapıda tutulması bizlere avantaj ve performans kazandıracaktır. Bu makalemizde stream olarak akan click-stream verisinin Azure Stream Analytics’ten çıktıktan sonra Azure SQL Database hizmetinde Table Partitioning yapısı kullanılarak nasıl tutulabileceğini ele alacağız.

Serinin önceki yazılarında kullanmış olduğumuz uygulamayı benzer şekilde devreye sokacağız. Uygulama üzerinde kullanıcıların oluşturduğu tıklamalardan meydana gelen click stream verisinin Azure Event Hubs ile nasıl elde edildiğini ve Azure Stream Analytics ile nasıl analizin yapıldığını linklerden öğrenebilirsiniz. Yapacağımız demoda bu aşamaya kadar olan süreci daha önce aktarmış olduğumuz için geçiyor ve direkt olarak Stream Analytics job’ının output kısmından anlatıma başlıyoruz. Senaryomuzda verileri saklamak için kullanacağımız Azure SQL Database‘i örneğimize başlarken oluşturmamız gerekiyor. Bunun için Azure portali üzerinde sol alt kısımda bulunan New sekmesine tıklayarak Data Services seçeneğini seçiyoruz. Devamında SQL Database servisini seçip Custom Create diyerek ilgili sayfaya erişiyoruz.

sqldbcreate

Yukarıdaki resimde olduğu gibi ilgili servis için gerekli olan kısımları doldurarak ilerliyoruz. Biz örneğimizde ilk kısımda veri tabanı adı olarak AltintasDb veriyoruz. Standart S0 seçeneği bizler için yeterli olacağından bu seçenekleri değiştirmiyoruz. Ardından daha önce oluşturulmuş bir server’ımız yoksa New SQL database server seçeneğini seçerek ilerliyoruz.

sqldbcreate2

Bir sonraki ekranda ilgili SQL DB server‘ına erişim için kullanacağımız yetkili bir kullanıcı için login ve password belirliyoruz. Datacenter için bölge seçimini yapıp aşağıda bulunan iki seçeneği de aktif hale getiriyoruz. Burada ilk seçenekte Azure’a ait kullanmış olduğumuz diğer servislerin bu database server’ına erişimi için yetki vermiş oluyoruz. İkinci seçenekte ise Azure SQL Database‘in en son versiyonu olan V12 versiyonu olacak şekilde database’i oluşturacağımızı seçiyoruz. Örneğimiz için bu seçenek oldukça önemli çünkü Azure SQL Database için Table Partitioning desteği V12 ile beraber gelen bir özellik olup daha önceki versiyonlarında bu özellik desteklenmemekteydi. Azure SQL Database V12 ile gelen yeniliklere göz atmak isterseniz daha önce yapmış olduğum bir webcast’e ait kayda  bu linkten erişebilirsiniz.

İlgili işlemleri tamamladığımızda Azure SQL Database server‘ı çok kısa bir sürede ayağa kalkacak ve kullanıma hazır hale gelecektir. Bu aşamadan sonra Azure SQL Database servisinde oluşturduğumuz AltintasDb adındaki veri tabanı üzerindeki işlemleri daha rahat yapabilmek için SQL Server Management Studio (SSMS) ile bu database server’ına bağlantı sağlıyoruz. ServerName olarak Azure SQL Database servisinin Dashboard ekranında bulunan servername’i, SQL Server Authentication kısmında ise kullanıcı adı ve şifre olarak az önce oluşturduğumuz yetkili kullanıcı adı ve şifresini giriyoruz. Burada bağlantı kısmında hata alınırsa Azure SQL Database‘e bağlantı için şu an kullanmakta olduğumuz pc’nin IP Adresi firewall rule olarak eklenmesi gerekmektedir. Bu işlem için de SSMS 2016 sürümünde çıkan pop-up ekranından veya Azure portal üzerinde bulunan SQL Database servisindeki Configure kısmından IP Adresimiz için rule tanımlayabilmekteyiz.

Bu aşamadan sonra artık Table Partitioning kullanarak her bir güne ait verilerin ayrı bir partition’da tutulmasını sağlayacak şekilde Partition Function, Partition Scheme ve tablomuzu oluşturuyoruz.

İlk olarak her bir güne ait verileri ayrı bir partition’da tutmak istediğimiz için her bir gün için bir partition oluşturacak şekilde pf_DayOfTheYear isminde bir partition function oluşturuyoruz. Bunun için gerekli olan kodu aşağıda bulabilirsiniz:

CREATE PARTITION FUNCTION [pf_DayOfTheYear](DATE) AS RANGE LEFT FOR VALUES 
(
'2016-01-01',
'2016-01-02',
'2016-01-03',
'2016-01-04',
'2016-01-05',
'2016-01-06',
'2016-01-07',
'2016-01-08',
'2016-01-09',
'2016-01-10',
'2016-01-11',
'2016-01-12',
'2016-01-13',
'2016-01-14',
'2016-01-15',
'2016-01-16',
'2016-01-17',
'2016-01-18',
'2016-01-19',
'2016-01-20',
'2016-01-21',
'2016-01-22',
'2016-01-23',
'2016-01-24',
'2016-01-25',
'2016-01-26',
'2016-01-27',
'2016-01-28',
'2016-01-29',
'2016-01-30',
'2016-01-31',
'2016-02-01',
'2016-02-02',
'2016-02-03',
'2016-02-04',
'2016-02-05',
'2016-02-06',
'2016-02-07',
'2016-02-08',
'2016-02-09',
'2016-02-10',
'2016-02-11',
'2016-02-12',
'2016-02-13',
'2016-02-14',
'2016-02-15',
'2016-02-16',
'2016-02-17',
'2016-02-18',
'2016-02-19',
'2016-02-20',
'2016-02-21',
'2016-02-22',
'2016-02-23',
'2016-02-24',
'2016-02-25',
'2016-02-26',
'2016-02-27',
'2016-02-28',
'2016-02-29',
'2016-03-01',
'2016-03-02',
'2016-03-03',
'2016-03-04',
'2016-03-05',
'2016-03-06',
'2016-03-07',
'2016-03-08',
'2016-03-09',
'2016-03-10',
'2016-03-11',
'2016-03-12',
'2016-03-13',
'2016-03-14',
'2016-03-15',
'2016-03-16',
'2016-03-17',
'2016-03-18',
'2016-03-19',
'2016-03-20',
'2016-03-21',
'2016-03-22',
'2016-03-23',
'2016-03-24',
'2016-03-25',
'2016-03-26',
'2016-03-27',
'2016-03-28',
'2016-03-29',
'2016-03-30',
'2016-03-31',
'2016-04-01',
'2016-04-02',
'2016-04-03',
'2016-04-04',
'2016-04-05',
'2016-04-06',
'2016-04-07',
'2016-04-08',
'2016-04-09',
'2016-04-10',
'2016-04-11',
'2016-04-12',
'2016-04-13',
'2016-04-14',
'2016-04-15',
'2016-04-16',
'2016-04-17',
'2016-04-18',
'2016-04-19',
'2016-04-20',
'2016-04-21',
'2016-04-22',
'2016-04-23',
'2016-04-24',
'2016-04-25',
'2016-04-26',
'2016-04-27',
'2016-04-28',
'2016-04-29',
'2016-04-30',
'2016-05-01',
'2016-05-02',
'2016-05-03',
'2016-05-04',
'2016-05-05',
'2016-05-06',
'2016-05-07',
'2016-05-08',
'2016-05-09',
'2016-05-10',
'2016-05-11',
'2016-05-12',
'2016-05-13',
'2016-05-14',
'2016-05-15',
'2016-05-16',
'2016-05-17',
'2016-05-18',
'2016-05-19',
'2016-05-20',
'2016-05-21',
'2016-05-22',
'2016-05-23',
'2016-05-24',
'2016-05-25',
'2016-05-26',
'2016-05-27',
'2016-05-28',
'2016-05-29',
'2016-05-30',
'2016-05-31',
'2016-06-01',
'2016-06-02',
'2016-06-03',
'2016-06-04',
'2016-06-05',
'2016-06-06',
'2016-06-07',
'2016-06-08',
'2016-06-09',
'2016-06-10',
'2016-06-11',
'2016-06-12',
'2016-06-13',
'2016-06-14',
'2016-06-15',
'2016-06-16',
'2016-06-17',
'2016-06-18',
'2016-06-19',
'2016-06-20',
'2016-06-21',
'2016-06-22',
'2016-06-23',
'2016-06-24',
'2016-06-25',
'2016-06-26',
'2016-06-27',
'2016-06-28',
'2016-06-29',
'2016-06-30',
'2016-07-01',
'2016-07-02',
'2016-07-03',
'2016-07-04',
'2016-07-05',
'2016-07-06',
'2016-07-07',
'2016-07-08',
'2016-07-09',
'2016-07-10',
'2016-07-11',
'2016-07-12',
'2016-07-13',
'2016-07-14',
'2016-07-15',
'2016-07-16',
'2016-07-17',
'2016-07-18',
'2016-07-19',
'2016-07-20',
'2016-07-21',
'2016-07-22',
'2016-07-23',
'2016-07-24',
'2016-07-25',
'2016-07-26',
'2016-07-27',
'2016-07-28',
'2016-07-29',
'2016-07-30',
'2016-07-31',
'2016-08-01',
'2016-08-02',
'2016-08-03',
'2016-08-04',
'2016-08-05',
'2016-08-06',
'2016-08-07',
'2016-08-08',
'2016-08-09',
'2016-08-10',
'2016-08-11',
'2016-08-12',
'2016-08-13',
'2016-08-14',
'2016-08-15',
'2016-08-16',
'2016-08-17',
'2016-08-18',
'2016-08-19',
'2016-08-20',
'2016-08-21',
'2016-08-22',
'2016-08-23',
'2016-08-24',
'2016-08-25',
'2016-08-26',
'2016-08-27',
'2016-08-28',
'2016-08-29',
'2016-08-30',
'2016-08-31',
'2016-09-01',
'2016-09-02',
'2016-09-03',
'2016-09-04',
'2016-09-05',
'2016-09-06',
'2016-09-07',
'2016-09-08',
'2016-09-09',
'2016-09-10',
'2016-09-11',
'2016-09-12',
'2016-09-13',
'2016-09-14',
'2016-09-15',
'2016-09-16',
'2016-09-17',
'2016-09-18',
'2016-09-19',
'2016-09-20',
'2016-09-21',
'2016-09-22',
'2016-09-23',
'2016-09-24',
'2016-09-25',
'2016-09-26',
'2016-09-27',
'2016-09-28',
'2016-09-29',
'2016-09-30',
'2016-10-01',
'2016-10-02',
'2016-10-03',
'2016-10-04',
'2016-10-05',
'2016-10-06',
'2016-10-07',
'2016-10-08',
'2016-10-09',
'2016-10-10',
'2016-10-11',
'2016-10-12',
'2016-10-13',
'2016-10-14',
'2016-10-15',
'2016-10-16',
'2016-10-17',
'2016-10-18',
'2016-10-19',
'2016-10-20',
'2016-10-21',
'2016-10-22',
'2016-10-23',
'2016-10-24',
'2016-10-25',
'2016-10-26',
'2016-10-27',
'2016-10-28',
'2016-10-29',
'2016-10-30',
'2016-10-31',
'2016-11-01',
'2016-11-02',
'2016-11-03',
'2016-11-04',
'2016-11-05',
'2016-11-06',
'2016-11-07',
'2016-11-08',
'2016-11-09',
'2016-11-10',
'2016-11-11',
'2016-11-12',
'2016-11-13',
'2016-11-14',
'2016-11-15',
'2016-11-16',
'2016-11-17',
'2016-11-18',
'2016-11-19',
'2016-11-20',
'2016-11-21',
'2016-11-22',
'2016-11-23',
'2016-11-24',
'2016-11-25',
'2016-11-26',
'2016-11-27',
'2016-11-28',
'2016-11-29',
'2016-11-30',
'2016-12-01',
'2016-12-02',
'2016-12-03',
'2016-12-04',
'2016-12-05',
'2016-12-06',
'2016-12-07',
'2016-12-08',
'2016-12-09',
'2016-12-10',
'2016-12-11',
'2016-12-12',
'2016-12-13',
'2016-12-14',
'2016-12-15',
'2016-12-16',
'2016-12-17',
'2016-12-18',
'2016-12-19',
'2016-12-20',
'2016-12-21',
'2016-12-22',
'2016-12-23',
'2016-12-24',
'2016-12-25',
'2016-12-26',
'2016-12-27',
'2016-12-28',
'2016-12-29',
'2016-12-30',
'2016-12-31'
)

Ardından bu function’ı kullanacak şekilde ps_DayOfTheYear isminde bir partition scheme oluşturuyoruz:

CREATE PARTITION SCHEME [ps_DayOfTheYear] AS PARTITION [pf_DayOfTheYear] ALL TO ([PRIMARY])

Bu işlemin ardından table partitioning yapacak şekilde oluşturduğumuz partition scheme’yı kullanan LogTable ismindeki tablomuzu aşağıdaki şekilde create ediyoruz:

CREATE TABLE dbo.LogTable
(
LogId int identity(1,1),
Ad nvarchar(50),
ResimAd nvarchar(50),
Zaman datetime,
X int,
Y int,
PartitionNo AS (CAST(Zaman as date)) PERSISTED
CONSTRAINT [PK_LogTable] PRIMARY KEY CLUSTERED 
(
	PartitionNo ASC,
	LogId ASC
)ON ps_DayOfTheYear (PartitionNo)
)

Tablomuzda LogId identity değer üreten bir kolon olup PartitionNo ile birlikte Primary Key oluşturmaktadır. Ad, ResimAd, Zaman, X ve Y kolonları uygulama tarafından gönderilen bilgileri tutmak için oluşturulmuştur. PartitionNo kolonu ise Persisted Computed Column olup, Zaman kolonunun değerini date veritipine dönüştürerek kalıcı olarak tutmaktadır. Aynı zamanda PartitionNo kolonu bizim partition scheme‘mız tarafından kullanılacak ve bu kolondaki değerlere göre farklı günler farklı partition’larda saklanacaktır.

Bu aşamadan sonra tablomuz da hazır olduğuna göre Azure Stream Analytics job‘ının output ekranına geri dönebiliriz. Burada output olarak Azure SQL Database tercihini yapıp server, veritabanı, kullanıcı adı, şifre vb. istenilen bilgileri doğru bir şekilde giriyoruz. Aynı zamanda tablo kısmına da AltintasDb altınta oluşturduğumuz LogTable ismini giriyoruz. İşlemler tamamlandığında output’u oluşturup job’ı sayfanın alt kısmından Start butonuna basarak başlatıyoruz.

Yapmış olduğumuz senaryomuzu test etmek için daha önceki yazılarda olduğu gibi uygulamamız üzerinden resimlere tıklayarak click stream verisinin Azure Event Hubs’a yönlendirilmesini sağlıyoruz. Ardından bu veriler Azure Stream Analytics ile analiz edilecek ve job’ın output seçeneğinde belirttiğimiz Azure SQL Database’de bulunan AltintasDb veritabanındaki LogTable adlı tablomuza insert edilecektir. Yalnız burada dikkat ederseniz standart tek bir partition’dan oluşan bir tablo kullanmak yerine ölçeklenebilirlik ve yönetilebilirlik açısından daha performanslı ve faydalı olması için LogTable tablomuzu her günü ayrı bir partition’da tutacak şekilde oluşturduk. Bu nedenle senaryomuz gereği farklı günlerde uygulamayı kullanarak click-stream verisinin tablomuza nasıl insert edildiğini görmek istiyoruz.

Farklı tarihlerde gerekli verinin gönderilmesinin ardından tablomuzdaki verileri sorgulamak için aşağıdaki sorgumuzu çalıştırıyoruz:

SELECT *
FROM dbo.LogTable

Sorgumuzu çalıştırdığımızda sonuçlar aşağıdaki gibi geliyor:

azuresqldbsonuc

Sonuçlardan gördüğümüz kadarıyla uygulamamız üzerinden click- stream olarak gelen veriler 4 Eylül, 5 Eylül, 6 Eylül ve ekranda görmesek de 7 Eylül tarihlerinde tabloya insert edilmiş. Toplamda 48 adet veri tablomuzda bulunmakta. Peki LogTable tablomuz için oluşturduğumuz partition’lar doğru bir şekilde çalışıyor mu onu da test edelim. Her güne ait veriler ayrı bir partition’da tutuluyor mu bakalım. Bunun için aşağıdaki kod bloğunu çalıştırmamız yeterli olacaktır:

SELECT o.name as TabloAdı,
		i.name as IndexAdı, 
		partition_id, 
		partition_number, 
		[rows] as SatırSayısı
FROM sys.partitions p
INNER JOIN sys.objects o ON o.object_id=p.object_id
INNER JOIN sys.indexes i ON i.object_id=p.object_id and p.index_id=i.index_id
WHERE 
	o.name LIKE '%LogTable%'
	AND [rows] > 0
ORDER BY o.name, i.name DESC, partition_number ASC

Bu sorguda LogTable tablomuzda bulunan partition’lar için her bir partition’da ne kadar veri tutulduğu gösterilmektedir. Sorgunun sonucu aşağıdaki gibidir:

partitionsonuc

Sonuçlardan da görülebileceği üzere LogTable tablomuzda şu ana kadar 4 ayrı partition bulunmaktadır. 248 nolu partition (4 Eylül tarihini tutan partition) 6 kayıt tutarken, 249 nolu partition (5 Eylül) 17, 250 nolu partition (6 Eylül) 21 ve 251 nolu partition (7 Eylül) 4 kayıt tutmaktadır. Görüleceği üzere her güne ait veriler ayrı partition’larda tutulmaktadır. Bu verilerin toplamı tablomuzda tutulan toplam satır sayısı olan 48’e eşittir.

Bu makalemizde çok yüksek miktarda veri üreten sistemlerden stream olarak gelen verilerin Azure SQL Database‘de daha performanslı, ölçeklenebilir ve yönetilebilir olmasını sağlamak için oluşturduğumuz Table Partitioning  yapısını kullanarak parçalı bir şekilde tutulmasını sağladığımız yapıyı ele aldık. Örnek demomuz üzerinde senaryomuzu test ettik ve sonuçları inceledik. Advanced Data Analytics başlığı altındaki diğer yazılarımızla yine karşınızda olacağız. Bir sonraki makalemizde tekrar görüşmek üzere…

Umarım faydalı olur… Keyifli okumalar…

Yazar: Abdullah ALTINTAŞ

Stream Analytics ile Analiz Edilen Verinin Azure SQL Database’de Depolanması (Demo)

Advanced Data Analytics konu başlığı altında daha önce ele aldığımız makalelerde stream olarak gelen, akan verilerin Microsoft Azure Event Hubs servisi ile elde edilebileceğini ve Microsoft Azure Stream Analytics servisi ile bu verilerin analiz edilebileceğini ele almıştık. Stream Analytics’ten çıkan bu verilerin de Microsoft Power BI ürünü ile bağdaştırılarak gerçek zamanlı olarak raporlanabileceğini göstermiştik. Bu konuda daha önce yazmış olduğumuz makalelere aşağıdaki linklerden erişebilirsiniz:

http://www.abdullahaltintas.com/index.php/real-time-click-stream-analizi-icin-microsoft-azure-cozumleri-serisi/

Stream olarak akan verinin analizi yapıldıktan sonra gerçek zamanlı olarak raporlanması ihtiyacının dışında, daha sonra tekrar ele alınabilmesi için bir veri tabanında depolanması ihtiyacı da karşımıza çıkabilir. Bu makalemizde stream olarak akan verinin Event Hubs ile elde edilmesi ve Stream Analytics ile analiz edilmesinin ardından Azure SQL Database‘de nasıl depolanabileceğini ele alacağız.

Serinin önceki yazılarında kullanmış olduğumuz uygulamayı kullanarak aynı şekilde click stream verisini üreteceğiz ve daha önceki makalemizde ele aldığımız üzere Azure Event Hubs ile bu veriyi elde edeceğiz.

Yine serinin önceki yazılarında ele aldığımız üzere Event Hubs ile elde edilen veriyi Stream Analytics ile analiz edeceğiz. Burada sadece farklı olarak Stream Analytics job’ının output kısmında Power BI yerine Azure SQL Database tercihini yapacağız. Böylelikle analiz edilen veriyi Azure SQL Database içinde oluşturulan tabloda depolayabileceğiz.

Verilerin Azure SQL Database hizmetinde tutulabilmesi için bu aşamada ya var olan hazır bir Azure SQL Database servisini kullanarak ya da yeni bir Azure SQL Database oluşturarak işlemlerimizi tamamlıyoruz. Yeni bir Azure SQL DB oluşturabilmek için Azure portal üzerinde alt tarafta bulunan New sekmesine tıklıyoruz ve Data Services altında bulunan SQL Database hizmetini seçiyoruz. Quick Create ile veya Custom olarak oluşturacağımız database’e bir isim veriyoruz. Örneğimizde biz “altintasdb” adını vermiş olduk. Ayrıca oluşturulma aşamasında yetkili bir kullanıcı adı ve şifreyi belirleyerek ilerliyoruz.

Azure SQL Database servisi oluşturulduktan sonra erişim için gerekli izinlerin ve firewall kurallarının oluşturulması gerekmektedir. Lokal bilgisayarımızda bulunan SQL Server Management Studio (SSMS) ile Azure SQL Database’e bağlanabilmek için kullanmakta olduğumuz IP adresine erişimi açmamız gerekmektedir. Bu işlemi Azure SQL Database sayfasında bulunan Server kısmındaki Configure tabına gelerek Ip Rule (Add rule diyerek) tanımlayabilirsiniz. Aynı zamanda Azure SQL Database’in diğer Azure servisleri tarafından kullanılabilmesi için de aynı sayfanın alt kısmında bulunan izin verme kısmında gerekli seçeneği Yes olarak işaretleyerek aktif hale getiriyoruz. İlgili değişiklikleri yaptıktan sonra sayfanın altında bulunan Save butonu ile değişiklikleri kaydediyoruz.

sqldb_configure

Bu aşamadan sonra Azure SQL Database hizmeti kullanıma hazır hale gelecektir. İlgili database’e daha rahat erişim için SSMS üzerinden gerekli connection’ı oluşturuyoruz. Burada server name kısmına Azure portal üzerinden database sekmesinde bulunan Server Name’i ([uniqueisim].database.windows.net şeklinde olacak) yazarak bağlanıyoruz. Ayrıca Azure SQL Database’e bağlantı için Windows Authentication desteklenmediği için SQL Authentication seçerek Azure SQL Database oluştururken girilen yetkili kullanıcı adı ve şifresini yazarak bağlantı sağlıyoruz.

sqldb_connection

Bağlantıyı oluşturduktan sonra Azure SQL Database’de bulunan altintasdb‘nin altında altintas_table isminde akan verilen tutulacağı bir tablo oluşturuyoruz. Tablonun create scripti aşağıdaki gibi olacaktır:

CREATE TABLE altintas_table
(
Ad nvarchar(50),
ResimAd nvarchar(50),
Zaman nvarchar(50) primary key,
X nvarchar(50),
Y nvarchar(50)
)
GO

Bu kodu çalıştırarak ilgili verilerin tutulacağı altintas_table oluşturulduktan sonra artık Azure Stream Analytics‘in output seçeneğini ayarlayabiliriz. Bunun için Azure portal üzerinde Stream Analytics servisinin output sekmesine geliyoruz ve aşağıdaki şekilde Azure SQL Databse seçeneğini seçiyoruz.

output_sqldb

Bir sonraki gelen ekranda output alias, database name, username, password ve table name alanlarını daha önce konfigure ettiğimiz şekilde girerek işlemi aşağıdaki şekilde tamamlıyoruz.

output_sqldb2

Bu aşamadan sonra artık ilgili Stream Analytics job’ını çalıştırarak akan verilerin output olarak database’e kaydedilmesini sağlayabiliriz. Serinin daha önceki yazılarında belirtildiği gibi job’ın bulunduğu sayfanın alt kısmında bulunan Start butonuna tıklayarak ilgili job’ı başlatabilirsiniz.

Buraya kadar yapılan işlemler başarılı bir şekilde tamamlandıysa ve Stream Analytics job’ı başarılı bir şekilde başlatılabildiyse uygulamamız üzerinde gerçekleştirilen click’ler anlık olarak Event Hubs tarafından toplanacak, Stream Analytics ile analiz edilecek ve ardından tanımlanan output ile Azure SQL Database’de bulunan altintas_table ismindeki tabloya kayıt edilecektir. Tablomuzu aşağıdaki gibi sorgulayıp verilerin geldiğinden emin olalım:

sql_query_out

Görmüş olduğunuz gibi uygulama üzerinde yapılan her bir tıklamaya ait veriler oluşturulan tabloya kaydedilmektedir. Tıklamayı geçekleştiren kullanıcının adı, tıklanan remin adı, tıklamanın gerçekleştiği zaman, tıklanan remin X ve Y koordinat bilgileri ilgili tabloya satır satır kaydedilmektedir.

Bu yazımızda Azure Event Hubs, Azure Stream Analytics ve Azure SQL Database çözümlerini kullanarak akan verinin analiz edilmesi ve ardından bir veritabanında saklanması için gereken çözümleri ele almış olduk. İlerleyen günlerde Advanced Data Analytics konu başlığı altında yeni yazılarımızla yine birlikte olmak üzere…

Keyifli okumalar…

Yazar: Abdullah ALTINTAŞ

Real-time Click Stream Analizi İçin Microsoft Azure Çözümleri Serisi

Real-time click stream verisinin analizi için kullanabileceğimiz yöntemleri ve Microsoft Azure Çözümleri ile bu isteklerin nasıl çözümlenebileceğini ele aldığım yazı serisi (en azından şimdilik) tamamlandı. Bu yazı serisi içinde Microsoft Azure Event Hubs Servisi, Microsoft Azure Stream Analytics Servisi ve Power BI ürününü entegre ederek uçtan uca bir çözüm örneği gerçekleştirilmiş oldu. Serinin her bir parçası için bir makale yazdım, ancak toplu bir şekilde seriye ulaşmak isteyenler için de hepsini içeren bir yazı yazma gereği duydum. Umarım okurken keyif alır ve ihtiyacınıza göre faydalanırsınız.

Aşağıda sırayla yazılmış olan serinin her bir yazısını ve linkini paylaşıyorum:

  • Advanced Data Analytics Kavramına Giriş ve IoT (Internet of Things) Nedir

http://www.abdullahaltintas.com/index.php/advanced-data-analytics-kavramina-giris-ve-iot-internet-of-things-nedir/

 

  • Veri Edinme Seçenekleri (Azure Event Hubs, AWS Kinesis, Apache Kafka) 

http://www.abdullahaltintas.com/index.php/veri-edinme-secenekleri-azure-event-hubs-aws-kinesis-apache-kafka/

 

  • Microsoft Azure Event Hubs Servisi ile Veri Edinme

http://www.abdullahaltintas.com/index.php/microsoft-azure-event-hubs-servisi-ile-veri-edinme/

 

  • Microsoft Azure Stream Analytics Servisi

http://www.abdullahaltintas.com/index.php/microsoft-azure-stream-analytics-servisi/

 

  • Azure Event Hubs ve Stream Analytics ile Uçtan Uca Mimari Çözümü

http://www.abdullahaltintas.com/index.php/azure-event-hubs-ve-stream-analytics-ile-uctan-uca-mimari-cozumu/

 

  • Microsoft Azure Event Hubs Servisinin Ayağa Kaldırılması (Demo)

http://www.abdullahaltintas.com/index.php/microsoft-azure-event-hubs-servisinin-ayaga-kaldirilmasi-demo/

 

  • Microsoft Azure Stream Analytics Job’ının Oluşturulması (Demo)

http://www.abdullahaltintas.com/index.php/microsoft-azure-stream-analytics-jobinin-olusturulmasi-demo/

 

  • Microsoft Power BI ile Real-Time Click Stream Verisinin Görüntülenmesi (Demo)

http://www.abdullahaltintas.com/index.php/microsoft-power-bi-ile-real-time-click-stream-verisinin-goruntulenmesi-demo/

 

  • Microsoft Azure Stream Analytics Servisinin Konfigürasyonu ve Ölçeklendirilmesi

http://www.abdullahaltintas.com/index.php/microsoft-azure-stream-analytics-servisinin-konfigurasyonu-ve-olceklendirilmesi/

  • Stream Analytics ile Analiz Edilen Verinin Azure SQL Database’de Depolanması (Demo)

http://www.abdullahaltintas.com/index.php/stream-analytics-ile-analiz-edilen-verinin-azure-sql-databasede-depolanmasi-demo/

  • Stream Verinin Azure SQL Database’de Table Partitioning ile Tutulması (Demo)

http://www.abdullahaltintas.com/index.php/stream-verinin-azure-sql-databasede-table-partitioning-ile-tutulmasi-demo/

Keyifli okumalar dilerim…

Yazar: Abdullah ALTINTAŞ

Microsoft Azure Stream Analytics Servisinin Konfigürasyonu ve Ölçeklendirilmesi

Microsoft Azure Stream Analytics servisi kullanılarak gerçek zamanlı click stream verisinin analizi ve raporlanması ile ilgili çözümler en etkin bir şekilde geliştirilebilmektedir. Bunun yanında uygulamadan gelen verilerin boyutu gibi bilgileri gözlemlemek için Stream Analytics servisinde bulunan Dashborad ekranı kullanılabilmektedir. Bu ekranda uygulamadan gelen veriler Dashborad’a yansımaktadır.

stream analytics dashboard

Aynı zamanda Stream Analytics job’ı ile ilgili bilgi edinmek ve monitörlemek için de yine Stream Analytics bizlere Monitor ekranı sunmaktadır. Bu ekrandan kullanılan kaynaklar, hatalar, input ve output event bilgileri izlenebilmektedir.

stream analytics monitor

Stream Analytics servisi maliyet açısından da oldukça uygun bir servistir. Bu servisi kullanırken ödeyeceğiniz ücret miktarını iki ölçüt belirlemektedir. Bunlardan birisi input olarak alınan veri büyüklüğü, diğeri de gelen stream veriyi analiz etmek için kullanılan Streaming Unit birim değeridir. Streaming Unit değeri bu işlemleri gerçekleştirebilmek için kullanılan CPU, RAM, IO gibi işlemleri temsil eden bir değerdir ve bu değer ne kadar arttırılırsa analiz işlemi de o kadar hızlı yapılabilecektir. Tabi atanan Streaming Unit değeri arttıkça ödenen ücret de artacaktır. Streaming Unit değeri Azure portal üzerinde yer alan Scale tabından rahat bir şekilde değiştirilebilmektedir. Buradan sisteme yoğun bir veri akışı olan zamanlarda ihtiyacı karşılamak için Streaming Unit değerini arttırmak, ihtiyaç azaldığında maliyet açısından avantaj sağlamak için Streamin Unit değerinin azaltılmasını sağlamak mümkündür.

stream analytics olceklendirme

Bu şekilde ölçeklenebilir bir analiz sistemini kullanmak mümkün olabilmektedir. Azure portal üzerinde bulunan Stream Analytics servisi için kullanılabilen diğer bir seçenek de Configure tabıdır. Bu alanda stream olarak gelen olayların sıralamasıyla ilgili ayarlar, dil seçeneği ayarları ve log bilgileri için kullanılacak olan storage ayarı gibi bilgiler ayarlanabilmektedir.

StreamAnalytics20

Microsoft Azure servislerinden ele aldığımız Event Hubs ve Stream Analytics çözümlerini aktardığımız yazı dizisi burada tamamlanıyor. Tabi ki yenilikler geldikçe yeni yazılar yazmaya ve siz değerli okuyucularımızı bilgilendirmeye devam edip Türkçe kaynak sayısını arttırmaya devam edeceğiz.

Bir sonraki yazımızda şimdiye kadar seri boyunca ele aldığımız yazıları toplu bir şekilde size linkleriyle birlikte sunacağız. Böylece uçtan uca stream verisinin gerçek zamanlı olarak analiz edilmesine tek bir kaynaktan erişebileceksiniz. Umarım faydalı olur.

Bir sonraki yazımızda görüşmek üzere…

Yazar: Abdullah ALTINTAŞ

Microsoft Power BI ile Real-Time Click Stream Verisinin Görüntülenmesi (Demo)

Serinin daha önceki yazılarında Microsoft Azure Event Hubs ve Stream Analytics servisleri kullanılarak real-time olarak akan büyük miktardaki stream verilerinin elde edilmesini ve analiz edilmesini örnek üzerinde gerçekleştirmiştik. Bu yazımızda ise Stream Analytics servisinden output olarak Power BI‘a bağladığımız analiz edilen verinin anlık olarak gerçek zamanlı olarak Power BI portali üzerinde görüntülenmesini örnekleri ile ele alacağız.

Yazılan uygulama üzerinde kullanıcıların sayfada ilgili bölümlere tıklamalarıyla oluşan click stream verilerinin Event Hub ile elde edilmesi sağlanmış, oluşturulan Stream Analytics job’ı bu verileri Event Hub’dan input olarak almış ve yazılan sorgu ile analiz edilmiş ve son aşamada da Power BI output ile analiz edilen çıktılar Power BI hesabına çıktı olarak bağlanmıştır. Artık bu aşamada gerçek zamanlı olarak üretilen tıklama verileri Power BI portali üzerinden raporlanabilecek ve panolarda (Dashboard) anlık yenilenme ile click stream verileri güncel olarak gerçek zamanlı yansıtılabilecektir.

  • Microsoft Power BI Portaline Giriş:

Power BI portaline giriş yapabilmek için https://powerbi.microsoft.com/en-us/ linkine giriş yapılmalı ve kullanıcı adı ve şifre bilgileri girilmelidir.

power bi giris

Açılan sayfada Sign In butonuna tıklayarak giriş yapılmalı ve Azure Stream Analytics job’ının output kısmını oluştururken verilen kullanıcı adı ve şifre bilgileriyle giriş yapılmalıdır.

power bi ozellikler

  • Microsoft Power BI Portal Özellikleri:

Uygulama tarafında kullanıcılar sayfanın belirli bölümlerine tıkladıkça oluşan click stream verileri bu şekilde Event Hub’a aktarılacak ve Stream Analytics job’ı input olarak aldığı bu verileri yazılan sorgu ile analiz edecek ve son aşamada da Power BI ortamına rapor ve panolar oluşturulabilmesi için data set olarak aktarılacaktır. Power BI portaline giriş yapıldığında sol taraftaki menüde Çalışma Alanım (My Workspace), Panolar (Dashboards), Raporlar (Reports), Veri Kümeleri (Datasets) çıkmaktadır. Stream Analytics job’ı hatasız bir şekilde çalışıyor ve verileri Power BI’a aktarıyorsa Datasets kısmında oluşturulan output dataset otomatik olarak çıkacaktır. Örneğimizde Power BI output oluşturulurken verilen “altintasdataset” ismindeki veri kümesi otomatik olarak sol tarafta listelenmiştir.

  • Power BI ile Rapor ve Pano Oluşturma:

Power BI portalinin sağ tarafında ise oluşturulan tabloya (altintastable) ait kolonlar, rapor formatı seçebilmek için kullanabileceğimiz görsel öğeler ve raporlara filtre eklemek için kullanabileceğimiz filtreler kısımları bulunmaktadır. Power BI portalinde ortadaki kısım ise raporları oluşturabileceğimiz, sürükle bırak yöntemiyle hızlıca görselliği kuvvetli raporlar geliştirebileceğimiz çalışma alanımızdır.

Oluşturduğumuz Microsoft Azure Stream Analytics job’ı tarafından gelen veri setini kullanarak raporlar oluşturulabilmekte ve panoya sabitlenebilmektedir. Bu işlemler sadece bir kaç mouse tıklaması ve sürükle bırak yöntemiyle yapılabilmektedir. Örneğimizde tıklanan resme ait kaç adet tıklama yapıldığının sayısını elde etmek için bir sütun grafik oluşturulmuştur. Bu rapor hangi resme kaç kez tıklandığını göstermektedir.

power bi rapor

Raporun dizaynı tamamlandığında sağ üst kısmında bulunan iğneye tıklayarak raporu panoya (dashboard) sabitlemek (pinlemek) mümkün olabilmektedir. Bu iğneye tıklandığında Panoya Sabitle ekranı açılmakta ve bizlere var olan bir panoya mı yoksa yeni oluşturulan bir panoya mı pinlemek istediğimiz sorulmaktadır. Uygun olan seçenek seçilerek oluşturulan rapor panoya pinlenir.

power bi pano

Power BI portalının sol tarafında yer alan Panolar kısmının altında oluşturduğumuz “pano” görünmektedir. Bu panoya tıklandığında raporun bu pano üzerine sabitlendiği görünebilmektedir. Bu şekilde oluşturulan raporlar panolara sabitlenerek tek bir yerden bütün ilgili raporların takip edilmesi sağlanabilmektedir. Üstelik bir yandan kullanılmaya devam eden uygulamadan üretilen click stream verileri de anlık olarak gerçek zamanlı bir şekilde panodaki raporlara yansımakta ve otomatik refresh özelliği ile veriler anlık olarak ekrana yansıtılmaktadır.

Power BI portal kullanılarak hızlı bir şekilde raporlar oluşturulabilmekte ve istenilen raporlar panolara sabitlenebilmektedir. Bunun için yapılması gereken tek şey ilgili dataset üzerine gelerek ilgili tablo üzerindeki alanlardan seçim yapmak, seçilen kolonlardaki değerleri hangi rapor formatında sunmak istediğinizi seçmek yetmektedir. Ardından oluşturulan raporlar içinden panoya sabitlemek istenilen raporlar için pin tuşuna tıklayarak raporları panoya pinleyebilmek mümkün olmaktadır.

Power BI portalinin en göze çarpıcı, etkileyici özelliklerinden birisi de “soru sorma” kısmıdır. Pano üzerinde üst kısımda yer alan soru sorma alanında belirli anahtar kelimeleri ve kolon adlarını kullanarak pratik, hazır raporlar oluşturabilmek mümkündür. İngilizce belirli anahtar kelimeler kullanarak bir nevi soru sorarak hazır raporlar üretmek çok basit ve eğlenceli bir şekilde yapılabilmektedir.

power bi soru sorma

Üstelik soru sorma kısmında yazılar yazılırken otomatik tamamlama (intellisense) desteği de sağlanarak rapor için yazacağınız soruda sizlere kolaylık sağlanmaktadır. Örneğimizde resimlere tıklanma adetini pasta grafik olarak getirmek üzere yazılmakta olan bir soru görünmektedir. Soru yazılmaya devam ettikçe alt kısımda rapor kendiliğinden oluşmaktadır.

power bi soru sorma2

Başka bir örnekte ise zaman kolonunun adet bilgisini almak için yazılan bir soru bulunmaktadır. Toplam tıklanma sayısını verecek olan bu soru tamamlandığında ve oluşan rapor panoya sabitlenmek istenildiğinde soru sorma kısmının sağ tarafında bulunan pin tuşuna tıklanarak panoya sabitleme işlemi gerçekleştirilebilmektedir.

power bi pano2

Bütün raporlar oluşturulduktan sonra, istenilen raporlar panoya sabitlenerek görsel açıdan kuvvetli, istenilen bilgileri tek bir ekranda farklı raporlar aracılığıyla gösterilebilecek bir pano oluşturmak mümkündür. Örneğimizde, resim adlarına göre kaç adet tıklandığını gösteren bir sütun grafik, resimlerin sayfa koordinat düzenine göre neresine tıklandığını gösteren bir XY-Dağılım grafiği, resimlerin tıklanma adetlerini gösteren bir pasta grafiği büyük olarak panomuzda yer almaktadır. Ayrıca daha küçük bir formatta olacak şekilde resim adlarına göre dağılımı veren bir huni grafiği, tıklanma sayısını veren bir ölçek grafiği, resim adlarına göre dağılımı veren halka grafiği ve toplam tıklanma sayısını gösteren bir kart grafiği panoda sabitlenmiştir. İstenilen raporlar kenarından tutup sürüklenerek boyut olarak küçültülüp büyültülebilmektedir.  Böylelikle istenilen raporlar istenilen formatta panolarda yer alabilmektedir.

  • Raporların Güncellenmesi ve Gerçek Zamanlı Verinin Gösterilmesi:

Power BI portali kullanılarak oluşturulan bu panolar ve raporlar anlık olarak uygulamadan gelen click stream verilerini gerçek zamanlı olarak refresh ederek sunmaktadırlar. Bu sayede oluşturulan panolar ile gerçek zamanlı veri takibi rahatça yapılabilmektedir. Uygulama kullanılmaya devam ettiğinden gelmeye devam eden veriler panolardaki raporlarda anlık olarak değişecek ve ekranda değişiklikler gözlemlenebilecektir.

power bi pano refresh

Bu yazımızda anlık olarak akan stream verinin gerçek zamanlı olarak Power BI portali üzerinde dashboard’lar ile görüntülenmesini uygulamalı olarak ele aldık. Event Hubs, Stream Analytics ve Power BI kısmını anlattığımız bu yazı serisindeki ilgili makaleleri sırayla bir sonraki yazımda sizlerle paylaşacağım.

Keyifli okumalar…

Yazar: Abdullah ALTINTAŞ

Microsoft Azure Stream Analytics Job’ının Oluşturulması (Demo)

Bir önceki yazımızda Microsoft Azure Event Hubs servisi ile uygulama tarafından tıklamalar ile gelen verilerin elde edilmesi kısmını ele almıştık. Uygulamamızın devamında Microsoft Azure Event Hubs ile alınan verilerin nasıl anlık olarak analiz edilebileceğini göreceğiz.

Bu aşamaya kadar uygulamadan gelen verileri artık JSON formatında Event Hub’da topladığımıza göre artık gelen verileri analiz etmek için Microsoft Azure Stream Analytics servisini ayağa kaldırabiliriz. Stream Analytics servisini oluşturmak için Azure portal üzerinde sayfanın alt kısmında bulunan New sekmesine tıklayarak Data Services butonuna tıklanır. Açılan sekmeden Stream Analytics seçilerek ve Quick Create kısmında ilgili servisi oluşturmak için bir job tanımlanır. Burada “Job Name” kısmında ilgili Stream Analytics job’ına bir isim verilir. Ardından bu job’ın hangi bölgede çalıştırılacağı seçilir. Burada dikkat edilmesi gereken noktalardan birisi stream olarak akan veriyi tutmak için oluşturduğumuz Event Hub ile bunu analiz etmek için oluşturduğumuz Stream Analytics servislerinin aynı bölgede oluşturulması bize avantaj sağlayacaktır. Farklı bölgelerde oluşturulan servisler için bölgeler arası veri transferi için ek ücret ödemesi gerekeceği unutulmamalıdır.

Bu kısımda oluşturulan Stream Analytics job’ını monitör etmek için saklanması gereken log bilgilerini saklayabileceğimiz bir storage bilgisi girmemiz gerekmektedir. Daha önce tanımlı olan bir Blob Storage hesabı yoksa burada yeni bir storage account’u da oluşturulabilir. Oluşturulan Azure Blob Storage hesabına bir isim girilir.

stream analytics job olusturma

Gerekli bilgiler sağlandıktan sonra sayfanın sağ alt köşesinde bulunan “Create Stream Analytics Job” butonuna tıklanarak ilgili job oluşturulmuş olur. Oluşturulan job’ı başlatmak için sayfanın altında bulunan Start butonu bu aşamada disabled olarak gelmektedir. Bunun nedeni, henüz oluşturulan job için verileri nereden alacağımızı belirteceğimiz input, gelen veri üzerinde işlem yapmamızı sağlayacak Query ve sorgunun sonucunda üretilecek olan verileri aktaracağımız output seçeneklerini set etmemiş olmamızdır.

Oluşturulan job üzerine tıklatıldığında veri akışını izleyebileceğimiz Dashborad, operasyonel logları izleyebileceğimiz Monitor, veri girişini sağlayabileceğimiz Input, gelen verileri sorgulayabileceğimiz Query, Azure Machine Learning ile entegre edebileceğimiz Functions (yazım aşamasında henüz preview konumunda bulunmaktadır), çıktıları göndermek istediğimiz seçenekleri belirleyebileceğimiz Output, Stream Analytics servisinin ölçeklendirilebileceği Scale ve gerekli ayarların yapılabileceği Configure tabları bulunmaktadır. Ayrıca sayfanın sağ tarafında da yine job’a ait temel bilgiler yer almaktadır.

  • Input Oluşturma:

Oluşturulan Stream Analytics job’ı için verilerin nereden geleceğini set etmek için Input sekmesine tıklayarak “Add an Input” seçeneği seçilir. Burada gelen verinin stream olarak akan bir veri mi olduğu yoksa referans bir veri mi olduğu seçilebilir.

stream analytics job input

Bizim örneğimizde uygulamadan stream olarak gelecek olan akan bir veri olduğu için Data Stream seçeneği seçilir. Ardından stream olarak gelen veri için hangi kaynaktan veri geldiği seçilecektir. Event Hub, Blob Storage ve IoT Hub (Henüz preview modunda) buradaki seçeneklerdir.

stream analytics job input2

Bizim uygulamamızdan üretilen stream veri Event Hub’da toplandığından burada Event Hub seçeneğini işaretleyerek bir sonraki aşamaya geçilir.

stream analytics job input3

Gelen ekranda sorgulamak için kullanacağımız tabloya ait isim olacak olan Input Alias kısmına akılda kalıcı bir isim verilmelidir. Query kısmında SQL sorgusu yazılırken buradaki verilen isim tablo adı yerine kullanılacaktır. Örneğimizde appdata ismi verilmiştir. Burada ayrıca kullanılan hesap için Subscription, Namespace, Event Hub Name, Policy Name ve Consumer Group seçenekleri de uygun şekilde seçilmelidir.

stream analytics job input4

Input oluşturmak için son aşamada da Event Hub’dan gelen verinin hangi formatta serialize edileceği (JSON, AVRO, CSV) ve Encoding olarak hangi formatın seçileceği set edilecektir. Örneğimizde JSON ve UTF8 seçenekleri seçilmektedir.

  • Query Oluşturma:

Bu aşamaya kadar Event Hub ile alınan gerçek zamanlı click stream verisinin toplanması gerçekleştirilmiş oldu. Oluşturulan Stream Analytics job’ı için input tanımlandı ve Event Hub’dan gelen verinin job için veri kaynağı olacağı set edildi. Şimdiki aşamada ise input olarak gelen verinin Query kısmında yazılan SQL sorguları ile analiz edilmesi gerekmektedir. Bunu gerçekleştirebilmek için Stream Analytics job’ında Input seçeneğinin yanında yer alan Query tabına tıklayarak sorgu yazılabilecek olan sayfa açılmalıdır.

stream analytics job query

Açılan sayfada görülebileceği üzere Microsoft SQL Server için kullanılmakta olan T-SQL diline çok benzeyen hatta bu dilin birçok özelliğini destekleyen bir analiz sorgusu yazılabilmektedir. Burada FROM komutundan sonra yazılması gereken tablo adı yerine, bir önceki aşamada input oluştururken belirlenen “Input Alias” doğru bir şekilde yazılmalıdır.

stream analytics job query2

Örneğimizde Input Alias olarak belirlediğimiz “appdata” ifadesi tablo gibi görülecek ve Event Hub’dan gelen veriler bu şekilde sorgulanabilecektir. Yazılan sorgu istenilen şekilde tamamlandığında sayfanın alt kısmında bulunan Save butonu ile kaydedilmelidir. Bunun ardından eğer istenilirse yine sayfanın alt bölümünde yer alan Test butonu ile daha önceden elimizde bulunan veya elde edilebilecek JSON formatındaki uygulamanın ürettiği veri yazılan sorgu ile analiz edilerek test ekranında gelen veriler tablo formatında görüntülenebilecektir.

stream analytics job query test

Örnekte görülebileceği üzere, daha önce uygulama tarafından üretilen ve JSON formatında kaydedilen bir veri kümesi test edilmiş ve sorgu sonuçları test ekranında listelenmiştir.

Query ekranında gelen verilere ait bütün bilgiler SELECT * FROM appdata sorgusu ile beraber getirilebilirken, Stream Analytics sorgulama dilinde T-SQL dilinde olmayan bazı ek geliştirmeler de bizlere sunulmaktadır. Bunlardan en dikkat çekici olanlar “Windowing Concepts” adı verilen belirli bir zaman dilimi üzerinde ilgili sorgunun çalıştırılmasıdır. Stream Analytics sorgulama dilinde üç farklı windowing concept tanımlanabilmektedir. Bunlar; Tumbling Window, Hopping Window ve Sliding Window’dur.

Örneğimizde biz de Tumbling Window kullanarak uygulamadan gelen verileri “Resim Ad” kolonuna göre gruplayarak sadece son 60 saniye içinde tıklanan verilerin analiz edilmesini sağlamaktadır. Burada kullanılan sorguda yer alan TIMESTAMP BY komutu ise ilgili zaman bileşeninin uygulamada gerçekleşen zaman birimi mi yoksa Event Hub’a uygulamadan ilgili verinin geliş zamanını mı kullanılacağını belirtmek için kullanılabilmektedir.

stream analytics job query3

Yazılan yeni sorgu aynı örnek test datası kullanılarak tekrar test edilebilmekte ve çıktıları test ekranında görüntülenebilmektedir.

  • Output Oluşturma:

Yazılan uygulama tarafından üretilen gerçek zamanlı click stream verisi Event Hub’a aktarılmış ve oluşturulan Stream Analytics job’ına input olarak verilmiş, ardından yazılan Query ile akan stream verinin analizi yapılmıştı. Son aşamada ise analiz edilen veri çıktı (output) olarak bir yere aktarılacaktır.

stream analytics job output

Burada output seçeneklerinden hangisini tercih edeceğimiz ihtiyaca göre değişkenlik gösterebilmektedir. Örneğin analiz edilen veri kalıcı olarak bir yerde saklanmak isteniliyorsa Azure SQL Database kullanılarak ilişkisel bir veri tabanına aktarılabilir, daha sonra başka bir analizde kullanılmak için saklanmak isteniliyorsa istenilen formatta Azure Blob Storage üzerinde saklanabilir, ilişkisel olmayan bir veri tabanı yapısında tutulmak isteniliyorsa Azure DocumentDB veya key-value çiftleri olarak tutulmak isteniliyorsa Table Storage, başka uygulamalara tekrar analiz edilmek için gönderilmek isteniliyorsa Event Hub, Service Bus Queue, Service Bus Topic, gerçek zamanlı olarak raporlar halinde panolar oluşturularak görsel bir şekilde sunumu yapabilmek için de Power BI seçenekleri tercih edilebilir.

Örneğimizde gerçek zamanlı olarak uygulamaya tıklatılarak üretilen click stream verisinin analiz edilmesi sonucu oluşan çıktıyı gerçek zamanlı olarak raporlama ihtiyacımız olduğu için Power BI çıktı seçeneği bizler için output olarak seçilecektir.

stream analytics job output2

Power BI output seçeneği tercih edildiğinde karşımıza çıkacak olan ekranda var olan bir Power BI hesabımızın olup olmadığı sorulmaktadır. Eğer kurumsal bir domain üzerinde var olan bir Power BI hesabımız varsa “Existing Microsoft Power BI User” seçeneğini, henüz bir Power BI hesabına sahip değilseniz de hesap oluşturabilmek için “New User” seçeneğine tıklanmalıdır. Burada kullanılan Power BI hesabı Microsoft’a ait domainlerden (hotmail, outlook, windowslive vb) oluşturulduğunda kabul edilmemektedir. Bu nedenle şirket veya okul hesabınızı kullanarak Power BI hesabınızı oluşturmanız gerekmektedir.

stream analytics job output powrbi giris

Örneğimizde BilgeAdam domainine ait mail hesabımıza bağlı Power BI kullanıcı bilgileri girilerek bu işlem gerçekleştirilmektedir. İlgili hesap ile oturum açıldığında karşımıza output olarak girmemiz gerek bazı bilgi ekranları gelecektir.

stream analytics job output3

Output Alias”, “Dataset Name”, “Table Name” ve “Workspace” gibi bilgiler daha sonra kullanacağımızda anlamlı olması açısından uygun ifadeler ile isimlendirilmelidir. Bu bilgiler girildikten sonra işlem tamamlandığında stream verinin output tanımlanması tamamlanmış olacaktır.

stream analytics job output4

  • Stream Analytics Job’ının Çalıştırılması:

Output bilgisi de tanımlanan Stream Analytics job’ı için daha önce pasif durumda bulunan ve tıklanamayan sayfanın alt bölümündeki Start butonu artık aktif hale gelmiş durumdadır. Uygulama tarafından üretilen ve Event Hub’a aktarılan, orada toplana click stream verileri artık job’ın çalıştırılmasıyla birlikte Stream Analytics tarafından input olarak alınacak, analiz edilecek ve output olarak Power BI hesabına analiz sonuçları gönderilecektir.

Oluşturulan Stream Analytics job’ını çalıştırmak için sayfanın alt kısmında bulunan Start butonuna tıklandığında karşımıza hangi zaman diliminden itibaren gelen veriler ile bu job’ın çalıştırılacağı sorulan bir ekran gelmektedir.

stream analytics job execute

Burada ilgili job’ın başlatıldığı andan itibaren gelen verileri kullanarak analiz gerçekleştirebileceğimiz “Job Start Time” ve istenilen herhangi bir başlangıç zamanından itibaren gelen verilerin analiz edilebileceği “Custom Time” seçenekleri mevcuttur. Örneğimizde job’ın başlatıldığı andan itibaren gelen verileri analiz etmek istediğimiz için “Job Start Time” seçeneği seçilerek işlem tamamlanmış ve Stream Analytics job’ı başlatılmıştır.

stream analytics job execute2

Oluşturulan Stream Analytics job’ı için herhangi bir hata ile karşılaşılmadığında ilgili job başlatılabilecek ve Dashboard tabına tıklandığında verilerin geldiğini ve sayfanın sağ tarafında yer alan Status kısmında da ilgili job’ın başarılı bir şekilde çalıştığını belirten “Running” ifadesini görebilmekteyiz.

Bu yazımızda daha önce Event Hub servisi ile alınan stream verisinin Stream Analytics job’ına nasıl input olarak verildiği, yazılan sorgular ile nasıl analizinin yapılabildiği ve tanımlanan output ile analiz edilen verinin nasıl dışarıya aktarılacağını ele aldık. Bir sonraki yazımızda output olarak alınan verinin Power BI portali üzerinde nasıl anlık olarak dashboard’lar ile görüntülenebileceğini örnek uygulama ile ele alacağız.

Keyifli okumalar…

Yazar: Abdullah ALTINTAŞ

Microsoft Azure Event Hubs Servisinin Ayağa Kaldırılması (Demo)

Serinin daha önceki yazılarında stream olarak hızlı bir şekilde akan verinin elde edilmesi ve analizinin gerçekleştirilmesi için kullanabileceğimiz seçeneklerden ve genel mimariden bahsetmiştik. Microsoft Azure Event Hubs ve Microsoft Azure Stream Analytics servislerinin bu amaçla ne gibi çözümler sağladığını açıklamaya çalıştık. Bu yazımızda Microsoft Azure Event Hubs ile bir uygulamadan gelen click stream verilerinin nasıl elde edilebilineceğini örnek bir uygulama yaparak göstereceğiz.

Örnek uygulamada yazılan bir .Net uygulamasına belirli görsel fotoğraflar konulmuştur. Bu uygulama bir web sitesini simule ediyor gibi düşünülebilir. Kullanıcılar uygulamaya bağlandıklarında istedikleri yerlere tıklayarak işlemlerini gerçekleştirebilmektedir.  Bu tıklamalar örneğimiz için veri kaynağını oluşturmaktadır.

Uygulamada amacımız gelen verileri Event Hubs ile toplayarak Stream Analytics için veri input’u olmasını sağlamaktır. Stream Analytics ile alınan veriler analiz edilerek sorgular yazılabilecek ve buradan dönen sonuçlar output olarak Power BI’ya yönlendirilerek anlık olarak gerçek zamanlı tıklamalar raporlanabilecektir.

  • MICROSOFT AZURE HESABI OLUŞTURULMASI

Örneğimizde ilk olarak yazmış olduğumuz uygulamanın üreteceği verileri tutacak olan Microsoft Azure Event Hubs servisi kurulacaktır. Bunu için herhangi bir Microsoft kullanıcı hesabınız ile aylık ücretsiz 610 TL kullanım imkanı sunulan Microsoft Azure hesabı alabilmektesiniz. Ücretsiz Azure hesabı açmak için https://azure.microsoft.com/tr-tr/ adresine giderek yeni bir Azure hesabı oluşturabilmektesiniz. Yeni bir ücretsiz hesap açarken bile telefon numarası ve kredi kartı bilgileri girilmesi gerekmektedir. Kullanım süresi dolduğunda ücretli olarak kullanmaya devam etmeniz için onay vermeniz gerekmektedir. Onayınız olmadan kredi kartınızdan herhangi bir kesinti yapılmamaktadır.

  • MICROSOFT AZURE EVENT HUBS SERVİSİNİN OLUŞTURULMASI

Microsoft Azure hesabını açtıktan sonra ilk olarak verileri geçici olarak tutmak için kullanacağımız Azure Event Hubs servisini oluşturmamız gerekmektedir. Event Hubs oluşturmak için Azure portali üzerinde altta bulunan New sekmesine tıklanarak açılan servislerden App Services kısmına tıklanır. Açılan servisler listesinden Service Bus seçilir. Ardından gelen ekranda Event Hub seçeneğine tıklanarak yan tarafta açılan Quick Create butonuna tıklanır. Gelen ekranda oluşturulacak olan Event Hub’a bir isim verilmelidir. Oluşturulmak istenilen Event Hub servisinin hangi bölgede olacağı seçildikten sonra, namespace kısmında verilen Event Hub ismine göre bir namespace otomatik olarak oluşturulacaktır. Bu işlemler tamamlandıktan sonra sayfanın en altında bulunan Create a New Event Hub kısmına tıklanarak Event Hub’ın oluşturulması sağlanır.

azure portal ana ekran

Bu aşamada arka tarafta yapılan işlemler ve işlemin hatasız bir şekilde tamamlanıp tamamlanmadığı bilgisini sayfanın altında bulunan kısımdan (ribbon) takip edebilirsiniz.

azure portal ana ekran2

Oluşturulan Event Hub’a ilgili uygulamalardan bağlanıp veri gönderebilmek için sayfada ilgili Event Hub ismine tıklanır. Gelen ekranda oluşturulan Event Hub için veri akışını izleyebileceğiniz Dashboard, Event Hub için gerekli ayarları yapabileceğiniz Configure ve her bir Event Hub’ın dahil edildiği Consumer Group ayarlarını yapabilmek için Consumer Group tabları bulunmaktadır. Ayrıca bu ekranın sağ tarafında oluşturulan Event Hub ile ilgili Status, Event Hub URL, Operation Logs, Retention, Partition Count ve Namespace bilgilerini bulabilmektesiniz.

azure portal ana ekran3

Oluşturulan Event Hub servisine dışarıdan bir uygulama bağlanacağı için gerekli yetkiye sahip olması gerekmektedir. Bu nedenle dışarıdan ilgili Event Hub’a erişim için Configure tabına gelerek “manage” ismini verdiğimiz bir shared access policy oluşturmamız gerekmektedir. İlgili tam yetkiye sahip olabilmek için Manage, sadece veri gönderimi için Send, gelen verileri dinlemek için Listen olarak gelen seçeneklerden uygulamamız için Manage yetkisini seçmekteyiz.

event hub config

Ayrıca bu sayfada Event Hub’ın verileri ne kadar geçmişe dönük olarak saklayacağı set edilebilmektedir. Default olarak 1 gün olarak gelen bu seçeneği 30 güne kadar çıkarmak mümkündür. Benzer şekilde Event Hub’ın aktif veya pasife çekilmesi yine bu ekrandan sağlanabilmektedir.

Microsoft Azure Event Hub, partition yapısına göre tasarlanmış bir çözümdür. Ne kadar çok veriyle çalışacaksak partition sayısının o kadar fazla olması gerekmektedir. Her bir partition 1MB/sec veri alabilmektedir. Default olarak 4 partition ile oluşturulan bir Event Hub için bu değer ihtiyaca göre artırılıp azaltılabilmektedir. Event Hub için partition sayısı ne kadar yüksek olursa paralel olarak alınabilecek veri miktarı da o kadar yüksek olacaktır. Tabi bu da diğer yandan kullanım ücretine yansıyacaktır.

Bu sayfada gerekli ayarlar yapıldıktan sonra sayfa altında bulunan Save butonuna tıklanarak gerekli değişiklikler kaydedilir. Bu aşamada ilgili Event Hub oluşturulması tamamlanmış durumdadır. Yapılması gereken sadece uygulamadan buraya bağlantı kurabilmemiz için gerekli olan bağlantı cümlesini (connection string) buradan almamız gerekmektedir. Bunun için de ilgili Event Hub için Dashboard tabına tıkladığımızda sağ tarafta bulunan View Connection String kısmına tıklayarak gerekli bilgiler alınabilir.

event hub yetki

Açılan sayfada oluşturulan “manage” ismindeki shared access policy için gelen connection string bilgisi kopyalanabilir.

  • UYGULAMA AYARLARININ YAPILMASI

Event Hub oluşturma işlemi tamamlandığına ve uygulamadan bağlanabilmek için gerekli olan izinler verilip connection string elde edildiğine göre yazılan uygulamamızda gerekli ayarları artık yapmamız gerekmektedir. Bunun için daha önce yazmış olduğumuz tıklama verilerini alacağımız uygulama içinde Event Hub için gerekli olan bağlantı bilgisi ilgili yere eklenir.

Yazılan uygulama içinde conneciton bilgisi ister direkt olarak kod içerisinde istenirse de appconfig dosyası içinde set edilerek alınabilir.

event hub kod1

Oluşturulan connection için Event Hub üzerinde oluşturulan ve kopyalanan connection string bilgisi burada kullanılır.

event hub kod2

Uygulamadan üretilen bilgiler (tıklanan noktaya ait X ve Y koordinatları, tıklayanın adı, tıklanan nesnenin adı, olay tarihi vb.) daha sonra Stream Analytics servisine gönderileceği için serialize edilmelidir. Bunun için geçerli olan daha önce de bahsedilen JSON, CSV ve AVRO seçenekleri mevcuttur. Örneğimizde üretilen datalar JSON formatına serialize edilmektedir.

event hub kod3

Uygulamada yazılan kodlar ile program çalıştırıldığında üzerine tıklanılan resim ile ilgili bilgiler JSON formatına serialize edilerek connection bilgisi girilen Event Hub’a gönderilmektedir.

Uygulamayı çalıştırdığımızda karşımıza çıkan ekranda “Event Hub Name” kısmına oluşturmuş olduğumuz Event Hub’ın adını giriyoruz. Bizim örneğimizde altintashub olarak belirlemiştik. Connection String kısmına da manage isminde tanımlamış olduğumuz shared access policy için kopyaladığımız connection string bilgisini girmemiz gerekiyor. Bu bilgileri az önce belirttiğimiz gibi appconfig dosyasında tanımlayıp böyle bir giriş ekranı tanımlamamıza gerek kalmadan da oluşturabilirdik. Bu işlemleri tamamlayıp Connect butonuna tıkladığımızda uygulamamız herhangi bir hata olmaması durumunda Microsoft Azure Event Hub servisine bağlanacak ve tıklama verileri Event Hub’a JSON formatında serialize edilerek gönderilecektir.

uygulama ekrani1

Bu aşamada artık uygulama üzerinde tıklama işlemleri ile veri oluşturabilir ve Event Hub’a gönderilmesini sağlayabiliriz. “Your Name” kısmına tıklayan kullanıcı adı olarak kendi adımızı yazabiliriz. Örneğimizde biz altintas olarak bu kısmı dolduruyoruz. Ardından ekran üzerinde istediğimiz bir bölüme tıklayarak veri oluşturulmasını sağlayabiliriz. Oluşturulan veriler JSON formatına göre serialize edilerek hem Event Hub’a gönderilecek hem de görmemiz için uygulamanın altında bulunan listede tıklandıkça JSON verisi listelenecektir.

uygulama ekrani2

Bu yazımızda Microsoft Azure hesabının açılması, Azure Event Hubs servisinin configure edilmesi ve son kısımda da yazılan uygulama ile bağlantısının yapılıp tıklama verilerinin Event Hub‘a aktarılmasını bir örnek üzerinde incelemiş olduk. Bir sonraki yazımızda Event Hub‘a gelen verilerin gerçek zamanlı olarak analizinin yapılmasını sağlayacak olan Azure Stream Analytics servisi üzerinde örneğimize devam edeceğiz.

Görüşmek dileğiyle…

Yazar: Abdullah ALTINTAŞ

Azure Event Hubs ve Stream Analytics ile Uçtan Uca Mimari Çözümü

Advanced Data Analytics serisindeki daha önceki yazılarımızda Azure Event Hubs ve Stream Analytics servislerini ayrı ayrı ele almıştık. Bu yazımızda ise uçtan uca çözüm amacı ile bu servislerin nasıl kullanılabileceğini ele alacağız. Çözüm ile ilgili örnek uygulamalara ise serinin devamındaki yazılarda yer vereceğiz.

Microsoft Azure Event Hubs ve Microsoft Azure Stream Analytics servislerini kullanarak uçtan uca bir stream veri akışı analizi çözümü kolaylıkla uygulanabilmektedir. Aşağıdaki şemada bu çözümlerde hangi aşamada verinin nasıl elde edilebileceği, nasıl analizinin yapılabileceği ve sonuçlarının nasıl çıktı olarak alınabileceği gösterilmektedir.

ASA-blog

Event Producers:

Bu kısımda daha önce de bahsedildiği gibi veri üreten mekanizmalardan verinin alınması için gerekli çalışmaların yapıldı bölümdür. Stream olarak akan ve analiz edilmek istenen bu verileri bir uygulama, bir web sitesi, IoT (Internet of Things) cihazları, diğer veri üreten cihazlar üretebilmektedir. Saniyede milyonlarca bilgi ve veri akışı sağlayabilen bu cihaz ve uygulamaların ürettiği veri yoğunluğu ancak anlık analiz yapabilen bir çözümle mümkün olabilmektedir.

Collection:

Bu kısımda veri üreten cihaz ve uygulamalardan gelen veriler tanımlanan gateway’ler yardımıyla toplanmaktadır. Bir bağlantı cümlesi (connection string) ile belirtilen hedefe veriler iletilecektir. Bu aşamada bizim kullanacağımız veri toplama çözümü Microsoft Azure Event Hub olacaktır.

Ingestor:

Uygulamalar, web siteleri veya IoT cihazlarından gelen veriler gateway’ler yardımıyla Microsoft Event Hub’a iletilmektedir. Burada tanımlı connection string ile bağlantı sağlanan Event Hub’a bilgiler serialize edilerek gönderilmektedir. Serialize edilmek istenilen format seçeneği JSON, AVRO veya CSV olabilmektedir. Yazılan kod yardımıyla bu seçenek set edilebilmektedir.

Transformation:

Bu aşamada Microsoft Azure Event Hub veya Azure Blob Sorage’dan gelen veriler alınarak gerekli dönüşüm işlemleri yapılabilmektedir. Microsoft SQL Server’dan aşina olduğunuz T-SQL diline çok benzeyen SQL komutları ile istenilen sorgular yazılarak JSON olarak gelen veri temel SQL bilgisiyle harmanlanarak çok hızlı ve pratik bir şekilde dönüştürülebilmektedir. Burada dönüştürülen veriler çıktı olarak bir sonraki adıma aktarılmaktadır.

Long-term Storage:

Uygulama veya IoT cihazlarından çekilen veriler Event Hub ile alınıp Stream Analytics ile analiz edildikten sonra ortaya çıkan sonuçlar kalıcı olarak saklanmak istenebilir. Bu gibi bir durumda Microsoft Azure Stream Analytics analiz edilen veriyi çıktı olarak saklamak için çeşitli seçenekler sunmaktadır. Bu seçenekler, Azure SQL Database, Azure Blob Storage, Azure Event Hub, Power BI, Azure Table Storage, Service Bus Queues, Service Bus Topics, Azure DocumentDB’dir. Bu seçeneklerden hangisini tercih edeceğimiz kullanmak istediğimiz senaryoya bağlı olarak değişiklik gösterebilmektedir. Örneğin stream verinin çıktısı ilişkisel bir veri tabanında saklanmak isteniliyorsa Azure SQL Database, ilişkisel olmayan bir yapıda saklanmak isteniliyorsa Microsoft Azure NoSQL çözümü olan DocumentDB veya key-value çiftleri olarak saklanmak isteniliyorsa Azure Table Storage tercih edilebilir. Bunun dışında analiz edilen veri Azure Service Bus hizmetinde Service Bus Queues, Service Bus Topics ve Event Hub’a gönderilebilir. Böylece analiz edilen stream verinin çıktısı başka bir analiz yapılabilmesi için tekrar bir yerde toplanmış olacaktır. Örneğin analizi yapılan stream verisi çıktı olarak tekrar Event Hub’a gönderilip buradan başka bir uygulama için veri kaynağı olabilir, Azure Machine Learning (AzureML) algoritmaları yardımıyla ileriye dönük tahmin etme çalışmaları, sınıflandırmalar vb. çalışmalar yapılabilir.

Presentation and Action:

Çıktı olarak elde edilen verinin uzun dönemli olarak kalıcı saklanmasının yanında bir de bu verinin anlık olarak analiz edilmesi ihtiyacı doğabilmektedir. Örneğin, bir web sitesinden stream olarak gelen tıklama verileri alınarak sitenin hangi bölümüne tıklandığı bilgisini koordinat sistemi sayesinde görsel bir rapor ile sunabilmekte, anlık olarak kaç kullanıcı, kaç tıklama yapıldığı gibi bilgilere erişilebilmektedir. Bu gibi senaryoları gerçekleştirebilmek için Excel ile raporlar oluşturulabileceği gibi canlı anlık stream verinin raporlanması için Microsoft Power BI ürünü de kullanılabilmektedir. Power BI ile alınan stream verinin çıktısı gerçek zamanlı olarak oluşturulan dashboard’larda raporlanabilmektedir. Böylece bu panolara bakılarak anlık olarak gerçek zamanlı veri analizi ile raporlar takip edilebilmektedir.

asa

Stream olarak gelen verinin analiz safhalarını özet olarak gösteren yukarıdaki görselde de uçtan uca mimariyi görebilmekteyiz. Burada veri kaynağı (data source) kısmında uygulama, IoT cihazları vb. kaynaklardan gelen büyük miktarda stream veri alınarak Event Hub’ta toplanmaktadır (collect). Bu aşamada daha önce bahsedildiği gibi referans veri kullanılmak isteniliyorsa Azure Blob Storage üzerinden bu veriler de input olarak alınabilmektedir. Toplanan verileri biçim değiştirme ve işlemek için Stream Analytics içinde proses edilirler (Process). Analiz edilen verinin çıktısı output olarak kalıcı saklanmak isteniliyorsa Azure SQL Database, Azure Blob Storage veya başka bir input olarak kullanılacaksa Azure Event Hub’a gönderilebilir (deliver). Çıktı olarak alınan veri anlık olarak raporlanmak isteniliyorsa Microsoft Power BI ile panolar oluşturularak raporlanabilir veya çıktılar Azure Machine Learning gibi başka bir uygulama tarafından alınarak istatistiksel algoritmalar vasıtasıyla tahmin etme çalışmaları yapılabilir (consume).

Bir sonraki yazımızda Event Hubs servisinin ayağa kaldırılması ile ilgili örnek bir demo gerçekleştireceğiz. Şimdilik görüşmek üzere…

Yazar: Abdullah ALTINTAŞ

Dipnot: Yazı içinde kullanılan görsel öğeler için Microsoft Azure Documentation sayfası ve çeşitli kaynaklardan faydalanılmıştır.

Microsoft Azure Stream Analytics Servisi

Bir önceki yazımızda Microsoft Azure Event Hubs ile verinin elde edilmesi kısmını ele almış ve bu servisin genel özelliklerini ve çalışma mekanizmasını açıklamıştık. Bu yazıda ise elde edilen stream verinin analizini gerçekleştirmek için kullanılacak olan Microsoft Azure Stream Analytics servisinin genel özelliklerini aktaracağız.

ASA-blog

Microsoft Azure Event Hubs servisi ile elde edilen veri Microsoft Azure Stream Analytics servisi ile işlenebilmekte ve çıktı üretebilmektedir. Microsoft Azure Stream Analytics servisi iki farklı veri türünü input olarak kabul edebilmektedir. Bunlar, Event Hubs’tan gelen input verisi ve Blob Storage’dan gelen input verisidir. Stream olarak akan büyük miktarda verileri Azure Event Hubs’tan alarak Stream Analytics servisine aktarabilmekteyiz. Diğer yandan statik olan veya çok az değişen referans veriler için ise Azure Stream Analytics bizlere Blob Storage kaynağını sunmaktadır. Referans veri bizler için aslında akan veriyi anlamlandıran lookup yapılabilecek statik verileri temsil eder. Örneğin otoyol veya köprülerde karşımıza çıkan gişeleri düşünelim. Gişelerden anlık olarak yüzlerce araç geçmektedir. Bu araçların bilgileri RFID benzeri sistemlerle okunarak Event Hubs ile elde edilebilir. Ancak araca ait detay bilgileri bu akan stream verisinde bulmamız pek mümkün olmayacaktır. Veriyi analiz ederken bu bilgileri de göstermek veya işlemek istiyorsak araç plakası vb. bir lookup ile referans dataya erişebilir ve ilgili aracın rengi, markası, modeli, varsa borcu, trafiğe çıkış tarihi gibi detay bilgilere de ulaşılabilir. Referans datanın Azure Blob Storage üzerinde tutulması ve gerekli sıklıklarla refresh edilmesi gerekebilir. Bunları da Azure üzerinde tanımlayabileceğimiz joblar yardımıyla elde edebilmekteyiz. Şu an için Azure Stream Analytics ile referans datayı sadece Blob Storage üzerinde tutabilmekte ve buradan alabilmekteyiz. Limit olarak da referans datayı alma işlemi için 50 MB üst limiti bulunmaktadır.

8637.103015_0303_EventHubsSt2

Azure Stream Analytics ile işlenmek istenilen stream verisini ve referans veriyi alırken hangi formatta serialize (serileştirme) edeceğimizi de seçebilmekteyiz. Bunlar daha önce de bahsedildiği gibi CSV, JSON ve AVRO formatlarıdır. Ayrıca seçilen seçeneğe göre Unicode seçeneği de seçilebilmektedir. Şu an için UTF-8 formatı desteklenmektedir.

maxresdefault

Microsoft Azure Stream Analytics servisi ile anlık veri analizi yapılabilmektedir. Ayrıca yüzde 99,9 SLA oranı ile devamlılığı garanti etmektedir. Microsoft Azure Stream Analytics servisi ile stream verilerini analiz edecek bir çözüm üretmek oldukça kolaydır, kullanımı oldukça basittir. Var olan sistemlerde bile oldukça hızlı bir şekilde geliştirilebilmektedir. Ayrıca bütün Microsoft Azure servislerinde olduğu gibi Microsoft Azure Stream Analytics servisinde de otomatik restore seçeneği mevcuttur. Bu şekilde olası bir felaket senaryosunda veri kaybı yaşanmamış ve sistem çok hızlı bir şekilde tekrar kullanıma alınabilmektedir.

perf

Microsoft Azure Stream Analytics servisini kullanarak altyapı maliyetine ve gerekli geliştirme karmaşıklığına hiç girmeden hızlı bir şekilde sadece servis hizmetini satın alarak kullandığınız kadar ücret ödeyebilirsiniz. Bu da ölçeklenebilir bir ödeme sistemi ve kullanım şekli avantajını bizlere sunmaktadır. Sahip olma konusunda başlangıç maliyeti ve fayda analizi yapıldığında Microsoft Azure Stream Analytics servisi oldukça ciddi bir avantaj sağlamaktadır. Yine ölçeklenebilir yapısı sayesinde ihtiyaç duyulan dönemlerde ölçeği arttırarak daha hızlı ve daha büyük verilerin analizini yapabilmekte, gerek duyulmadığında ise maliyet konusunda avantaj sağlayabilmek için sadece bir kaç tıklama ile ölçeği azaltarak sistemi daha efektif bir hale getirebilmekteyiz.

Bir sonraki yazımızda stream verinin elde edilmesi için kullanılan Event Hubs ve analizi için kullanılan Stream Analytics servisleri uçtan uca çözüm odaklı olarak nasıl kullanılabiliyor konusunu ele alacağız. Şimdilik görüşmek üzere…

Yazar: Abdullah ALTINTAŞ

Dipnot: Yazı içinde kullanılan görsel öğeler için Microsoft Azure Documentation sayfası ve çeşitli kaynaklardan faydalanılmıştır.