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Ş

Microsoft Açık Akademi Yaz Okulu – Microsoft Azure Stream Analytics Sunumu

Her yıl Microsoft Türkiye lokasyonunda düzenlenen ve Türkiye’nin çeşitli üniversitelerinden öğrencilerin katılımıyla gerçekleştirilen Microsoft Açık Akademi Yaz Okulu etkinliğinde bu yıl da sunumlarımızla katılımcılara güncel teknolojiler hakkında bilgi aktardık. Microsoft’un bulut çözümleri platformu olan Microsoft Azure üzerinde veri çözümlerinin neler olduğu ile ilgili katılımcılara sunumlar gerçekleştirdik.

acikakademi foto.jpg-large

Geçtiğimiz hafta gerçekleştirdiğimiz sunumda öncelikle Data Platform MVP’lerinden Koray Kocabaş hocamız Big Data kavramlarından bahsetti ve Big Data konsepti içerisinde neler olduğunu katılımcılara çok güzel örneklerle aktardı. Devamında bana devrettiği sunum kısmında katılımcılara Big Data ve Data Analytics kapsamında önemli bir yer tutan stream olarak gelen verinin ele alınması konusunda Microsoft’un çözümleri olan Azure Event Hubs ve Azure Stream Analytics servisleri ile ilgili katılımcılara bilgiler verdik.

Sunum esnasında 2 farklı senaryo ele aldık ve bunlarla ilgili demo gerçekleştirdik. İlk olarak stream olarak akan verinin analizinin yapılmasının ardından anlık olarak dashboard’larda gerçek zamanlı olarak nasıl raporlanabileceği Microsoft Power BI kullanarak gerçekleştirildi. İkinci case altında ise analizi yapılan verinin Azure SQL Database hizmetinde nasıl depolanabileceği gösterildi. Günün devamında yine Koray Kocabaş hocamız bu depolanan verinin Microsoft Big Data çözümleri ile nasıl yönetilebileceğini gösteren sunumlar ve örneklerle günü tamamladı.

Böyle bir organizasyonda yer almak ve öğrencilere sunum yapmak benim açımdan çok keyifliydi. Öncelikle bu organizasyonun düzenlenmesinde emeği geçenler olmak üzere sunuma katılan ve bir şeyler öğrenmek için can atan bütün katılımcılara çok teşekkür ederim. Benzer etkinliklerde tekrar görüşmek dileğiyle…

acikakademisinif

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 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 Servisi ile Veri Edinme

Bir önceki yazımızda stream olarak gelen verinin elde edilmesi için kullanılabilecek olan yaygın seçeneklerden bahsetmiştik. Bu seçenekler içinde hem kullanım kolaylığı bakımından hem de tutulan verinin daha sonra analizini gerçekleştirileceği servislere entegre olması avantajı bakımından Microsoft Azure Event Hubs servisi bir adım öne çıkmaktadır. Bu yazımızda Microsoft Azure Event Hubs servisinin özelliklerini ve kullanımını ele alacağız.

AzureEventHubsOverview

Stream olarak gelen verinin analiz edilmesi için en kolay ve uygulanabilir çözümlerden biri de Microsoft Azure Event Hubs ve Microsoft Azure Stream Analytics servisleridir. Uzun yıllardır kullanıcı dostu tasarımlar yapan, ürettiği çözümlerde her zaman kullanım kolaylığını ön plana çıkaran Microsoft, bulut çözümü olan Microsoft Azure Servisleri ile de yine kullanımı kolay bulut hizmetleri çözümü sunmaktadır. Microsoft Azure Servisleri, SaaS (Software as a Service), PaaS (Platform as a Service) ve IaaS ( Infrastructure as a Service) olmak üzere üç farklı bölüme ayrılmaktadır. Burada Microsoft altyapı hizmetlerini çözüm olarak sunarak fiziksel bir müdahaleye gerek kalmadan sadece mantıksal (logical) yönetim hizmetini sunmaktadır. Ayrıca yazılım servisleri, veri servisleri ve platform olarak sunulan servisler ile de kullanımı kolay çözümlerini bizlere sunmaktadır.

Başta IoT (Internet of Things) nesneleri olmak üzere yüklü miktarda veri üreten birçok ortam bulunmaktadır. IoT cihazları gibi bir web sitesinin click stream verisi de çok yüklü miktarda veri üretmektedir. Saniyede milyonlarca event’in oluşturduğu bu verileri ilişkisel veri tabanlarında tutmak mümkün olmadığı için Microsoft Azure servislerinden Event Hubs servisi ile verileri elde etmek mümkün olabilmektedir. Event Hubs kullanılarak, stream olarak gelen yüklü miktarda veriyi uygulamalarda tanımladığımız endpoint’ler ve gateway’ler vasıtasıyla geçici bir ortamda tutmamıza olanak tanımaktadır. Event Hubs ile web sitesi üzerinde click stream ile oluşturulan kullanıcı verileri JSON, CSV veya AVRO formatlarında elde edilebilmektedir. Özellikle yazılım dillerinde sıklıkla kullanılan JSON formatı entegrasyon sistemleri için de kullanılan yaygın bir formattır. Web sitesi üzerinde oluşan tıklama ile gelen JSON formatındaki veriler uygulama tarafından Event Hubs’a gönderilmektedir. Uygulamadan gelen veriler ise Event Hubs servisinde belirlenen ayarlara göre geçici olarak tutulmaktadır. Event Hub servisi geçici bir veri ambarı gibi düşünülebilir. Microsoft Azure portalı üzerinden yapılabilen retention ayarı ile uygulamadan gelen verilerin ne kadar süre ile burada saklanacağı belirlenebilmektedir. En çok 30 güne kadar belirlenebilen bu ayar ile geçmişe dönük olarak da veriler saklanabilmektedir.

ic759858

Microsoft Azure Event Hubs servisinin bir başka avantajı da partiton’lara bölünebilmesidir. Bu şekilde aynı anda farklı partition’lara veriyi yazarak çok daha hızlı ve büyük miktarda veri işlenebilmektedir. Event Hubs ile 1 partition’dan başlayarak istenilen kadar partition oluşturulabilmektedir. Microsoft Azure portal üzerinden seçilebilecek maksimum partition değerinden daha fazla partition almak istenilirse Azure support ile iletişime geçilerek istenilen partition değeri talep edilebilir. Tabi ne kadar çok parititon değeri artarsa Event Hubs servisinin kullanım maliyeti de o derecede artacaktır. Ayrıca Event Hubs servisi için her bir partition 1 MB/sec veri akışına izin verebilmektedir. Ayrıca her bir Event Hub, Consumer Group içinde oluşturulmaktadır. Her bir Event Hub çözümünün ayrı bir Consumer Group altında oluşturulması tavsiye edilmektedir.

Yazıyı çok uzun tutup okunabilir bir halden çıkmasını önlemek için şimdilik genel özelliklerinden bahsettiğimiz Microsoft Azure Event Hubs servisini burada tanıtma kısmını tamamlıyoruz. Ancak yazı serisinin devamında Azure Event Hubs servisinin nasıl ayağa kaldırılacağı ile ilgili ayrıca makalelerimiz olacak. Şimdilik bu kadar yeterli 🙂

Serinin devamında 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.

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

Bir önceki yazımızda Advanced Data Analytics kavramından ve stream olarak gelen büyük verinin analiz edilmesinin gerekliliğinden bahsetmiştik. Özellikle Internet of Things (IoT) cihazları başta olmak üzere saniyede milyonlarca veri üretebilen sistemler günümüzde hiç de az değil. Üstelik bu kadar kısa sürede üretilen bu kadar büyük verileri bir yerde depolamak ve ardından standart iş zekası çözümleri ile analizini yapmak pek mümkün de olmamaktadır. Saniyede milyonlarca veri üreten bir sistemin verilerini ilişkisel bir veritabanı sisteminde tutmak şu anda mümkün değildir. Böyle senaryolar için stream olarak üretilen büyük miktarda verinin elde edilmesi ve gerekli analizlerin yapılması için geçici bir ortamda tutulabilmesi gerekmektedir.

Stream_3

Teknoloji firmaları bu gibi ihtiyaçları karşılayabilmek için çeşitli çözümler üretip şirketlerin kullanımına sunmaktadır. Bunlara örnek olarak en başta Microsoft’un Azure portali üzerindeki çözümlerinden olan Azure Event Hubs verilebilir. Yine aynı şekilde yüklü miktarda veriyi elde etmek için Amazon Web Services (AWS) Kinesis ve Apache Kafka gibi sistemler çözüm olarak sunulabilecek diğer örneklerdendir. Bunların dışında da kullanılabilecek başka çözümler ve custom geliştirmeler olabileceği gibi, şu anda en yaygın kullanımı olan, kullanımı en kolay yöntemler olarak bu servisleri sayabilmekteyiz. Aşağıdaki şekilde farklı kaynaklardan stream verinin elde edilmesi ve ardından bu verilerin analiz aşamasına yönlendirilmesi konusundaki mimari yer almaktadır. Event Hub ve Stream Analytics servislerinin yapısını aktaran bu mimari şemaya ait detayları ilerleyen yazılarımızda ayrıca ele alacağız.

6327.image_thumb_5D0180F9

Microsoft Azure Event Hubs dışında diğer yaygın kullanımlardan olan Amazon Web Services (AWS) Kinesis‘e ait benzer çalışma metodolijisine ait yapıyı da aşağıda bulabilirsiniz.

awskinesis

Benzer şekilde stream olarak akan verinin elde edilmesi açısından kullanılabilecek üçüncü bir çözüm olarak Apache Kafka da kullanılabilmektedir. Kafka ürününde de veri elde etme açısından avantaj sağlayacak noktalar bulunmaktadır. Aşağıda genel olarak benzer bir işlem olan çözümü görebilirsiniz.

current-and-future-of-apache-kafka-9-638

Her üç seçenek de aslında benzer amaçla kullanılabilmektedir. Genel amacımız stream olarak üretilen çok büyük miktardaki verilerin anlık olarak analizlerinin yapılabilmesi için verilerin tutulabileceği geçici bir ortam sağlamalarıdır. Elde edilen ve burada geçici olarak tutulan veri daha sonra veri analizi için kullanılabilecek servislere veri kaynağı görevi görecektir. Örneğin Microsoft Azure çözümleri ele alındığında Azure Event Hubs ile elde edilen veriler analiz edilmek için Azure Stream Analytics servisine aktarılacak ve burada analizi yapılarak istenilen işlemler gerçekleştirilebilecektir.

Bu üç servis çözümü için daha detaylı bilgileri ve özellikle Microsoft Azure Event Hubs çözümünün detaylı bilgileri ve uygulanması ile ilgili ilerleyen yazılarda bilgi vereceğim. Devamı gelecek… 🙂

Faydalı olması dileğiyle…

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.