Batch Processing

Membina senibina berskala bagi Analitik Data Mesin

Written by Ashnik Team

| Mar 19, 2019

6 MIN READ

This is the Malay translation to the original blog – Building a scalable architecture for Machine Data Analytics
Dalam artikel ini, saya berkongsi satu senibina bagaimana untuk mendapat pemahaman daripada data mesin dan selanjutnya menganalisanya. Senibina ini boleh menjadi satu platform analitikal untuk penyelesaian berskala untuk menganalisa data mesin
Artikel ini dibahagikan kepada 2 bahagian. Bahagian 1 menjelaskan pemprosesan data masa-nyata menggunakan Spark dan Elasticsearch.  Manakala, Bahagian 2 pula menjelaskan pemprosesan data kelompok menggunakan Flume dan HDPS.
Pernyataan Masalah 
Dalam dunia mesin data, data mentah tidak memberi sebarang pemahaman, jadi adalah penting untuk menyediakan satu platform yang memberi keupayaan untuk mengumpul, memanipulasi dan menganalisa data tersebut untuk mendapat pemahaman yang bermakna. Apabila ianya berkaitan dengan data daripada sensor, terdapat banyak parameter terlibat seperti suhu, tekanan, kelembapan dan lain-lain.  Artikel ini mencadangkan satu senibina untuk membaca sebarang jenis data mesin dalam bentuk binari dan mengubahnya kepada data yang boleh dibaca. Data ini boleh disimpan dalam belbagai format seperti JSON/XML/CSV atau sebarang format lain mengikut keperluan.
Saya telah merangkumi senibina asas bagi pengumpulan data, pemprosesan data dan pengingesan data menggunakan Platform Big Data bersama dengan Elasticsearch yang boleh menyimpan dan menganalisa data masa nyata dengan sedikit sahaja kelewatan masa. Platform ini boleh digunakan untuk membaca sebarang jenis data daripada sensor dan mengubah data tersebut kepada format yang boleh dibaca dan kemudian menganalisanya. Pengguna perniagaan boleh mengguna penyelesaian ini sebagai platform kejuruteraan data bagi pemprosesan data mesin dalam kedua-dua mod masa nyata dan kelompok.
Dalam contoh di bawah, kita menggunakan Rasberry Pi untuk menjana sampel data mesin, mengubahnya ke bentuk JSON dan kemudian menggunakan data tersebut bagi pemprosesan masa nyata dan kelompok.
Kemungkinan Kegunaan

  • Mengawasi peranti telekomunikasi: data masa nyata daripada pelbagai peranti telekomunikasi boleh diawasi menggunakan senibina ini. Pengawasan pencarian adalah yang paling penting dengan pelbagai kata kunci yang dilakukan dengan sangat ketara menggunakan pencarian Elastic dan Kibana. Data masa nyata daripada telefon dan alat mudah alih boleh dikumpul dan diproses menggunakan pemprosesan selari Spark dan pencarian Elastic dan Kibana untuk pengawasan. Analisis Ramalan adalah satu lagi kriteria penting bagi industri telekomunikasi di mana mereka menganalisa jumlah data yang digunakan oleh pelanggan.  Ini boleh dilakukan dengan bahagian pemprosesan kelompok dalam senibina ini.
  • Pengawasan Trafik: Pengawasan dan pengawalan trafik dalam masa nyata adalah salah satu cabaran utama yang dihadapi oleh pelanggan. Senibina ini bukan sahaja membantu pengguna mengawasi trafik dalam masa nyata tetapi juga membantu mengawalnya. Di sini Spark berfungsi sebagai faktor utama bagi pemprosesan data dalam masa nyata.  Ia membantu menapis mengikut lokasi dengan memberi pemahaman mengenai trafik tersebut dan juga menghantar amaran melalui aplikasi kepada pengguna mengenai trafik.  Pemprosesan kelompok boleh digunakan untuk menganalisa trafik yang perlahan dan pantas dan memberi pengguna saranan tentang trafik setiap hari dan memberi pemahaman mengenai trafik di kawasan-kawasan tertentu.
  • Tempat Letak Kereta Automatik
  • Sistem Pengawasan Log di Bank, industri Peruncitan

Senibina Sistem

img201914

BAHAGIAN 1:- PEMPROSESAN MASA NYATA DATA MESIN MENGGUNAKAN RASPBERRY PI, Kafka, Spark, Elasticsearch & Kibana

Menjana Data Mesin menggunakan Raspberry Pi

Raspberry Pi digunakan untuk membaca data sensor dan mengubahnya kepada data yang boleh dibaca.  Di sini, kita tidak mengguna sebarang data sensor sebenar, tetapi kita menggunakan API data sensor yang terbina di dalam Raspberry Pi untuk menjana data tersebut dan kemudian mengubahnya ke format data JSON menggunakan API Java.
Pengehosan Raspberry Pi untuk menjana data
Di sini, kita menulis satu kod python dalam raspberry pi menggunalan API Flask Restful
from flask import Flask
from flask_restful import Resource, Api
import grovepi
app = Flask(__name__)
api = Api(app)
sensor = 7
class TempHum(Resource):
def get(self):
[temp,hum] = grovepi.dht(sensor,0)
return {‘temperature’ : temp,
‘humidity’ : hum }
api.add_resource(TempHum, ‘/’)
if __name__ = “__main__”:
app.run(host=’0.0.0.0′, port=80, debug=True)
Kemudian, jalankan fail python tadi, raspberry pi kini akan berperanan sebagai server. Taip:

hostname –I

untuk mendapat alamat IP bagi raspberry pi. Kemudian, apabila seseorang menghantar permintaan GET kepada alamat IP ini, ia akan mengembalikan satu bacaan suhu dan kelembapan dalam format JSON.

{ “humidity” : 44, “temperature” : 25 }

API JAVA untuk mengubah data binari ke Data JSON
Di sini, kita telah mengguna kod java untuk mendapat bacaan dalam Eclipse setiap 5 saat.  Penghurai JSON digunakan untuk menghurai hasil yang dikembalikan daripada raspberry pi.
public class Monitor {
public static HttpURLConnection con;
public static URL url;
public static String url_string = “http://192.168.1.114”;
public static void main(String[] args) {

List<Double> temperature = new ArrayList<>();
List<Double> humidity = new ArrayList<>();

for (int i = 0; i < 10; i++) {
try {
url = new URL(url_string);
con = (HttpURLConnection) url.openConnection();
con.setRequestMethod(“GET”);
con.connect();
InputStream is = con.getInputStream();
BufferedReader br = new BufferedReader(
new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
JSONObject obj = new JSONObject(sb.toString());
JSONParser parser = new JSONParser();
double[] readings = parser.parseReading(obj);
temperature.add(readings[0]);
humidity.add(readings[1]);
br.close();
Thread.sleep(5000);
} catch (MalformedURLException e) {
e.printStackTrace();
}

Lapisan Multi Broker Kafka

img201914-1
Kafka berperanan sebagai broker mesej yang menggunakan data dari API Java dan menghantarnya ke Spark untuk analisis masa nyata.  Ia juga menghantar data ke Flume untuk menyimpan data mentah dalam HDFS bagi Pemprosesan Kelompok.
Kafka berterusan mengumpul dan menginges data setiap 5 saat.
Sumber Pengumpulan Data:

  • Data Kelembapan: Ini adalah data yang dijana dan mengandungi maklumat berkaitan kelembapan pada cuaca
  • Data Suhu: Ini adalah data yang dijana dan mengandungi maklumat berkaitan variasi suhu pada mesin

Pengeluar-pengeluar:

  • Pengeluar 1: Akan menghantar data kelembapan kepada lapisan Kafka
  • Pengeluar 2: Akan menghantar data suhu kepada lapisan Kafka

Kluster Kafka:
Mengandungi 2 topik yang masing-masing membawa maklumat data kelembapan dan data suhu.
Kluster Multi-Broker:
Di sini kita mencipta 4 broker yang bermaksud 4 tika Kafka dijalankan dalam 4 port yang berperanan sebagai pengimbang muatan.
Kumpulan Pengguna

  • Kita membuat 2 kumpulan pengguna, 1 untuk data kelembapan dan 1 untuk data suhu.
  • Pengguna kemudian berterusan menghantar data kepada enjin Spark bagi pemprosesan data secara masa nyata.
  • Pengguna juga menghantar data mentah kepada flume yang tujuan asasnya adalah menyimpan data di dalam HDFS

Pemprosesan Masa Nyata dan Pengawasan Data

Spark -> Pemprosesan Masa Nyata untuk Data menggunakan Spark pada Java
img201914-2
Data JSON daripada Kafka disimpan di dalam Spark dalam bentuk Resilient Distribute Dataset (RDD).
Data di dalam RDD dibahagi kepada beberapa bahagian berdasarkan pada satu kunci. RDD adalah sangat lasak dan mudah pulih daripada sebarang jenis masalah seperti “server down” kerana setiap bahagian dibuat salinan merentasi beberapa nod executor, agar jika satu nod executor gagal, yang lain siap tersedia untuk menyediakan data. Setiap dataset dalam RDD dibahagi kepada pemetakan logikal, yang mana boleh dikomput pada nod berbeza pada kluster tersebut.
Kini, kita mendapat data dalam bentuk JSON.   Data JSON ini sekali lagi digabungkan dengan data Postgresssql untuk mendapat data master.  Kita mengguna sambungan PostgreSQL dalam Java untuk menetapkan sambungan JDBC dan kemudian mengeluarkan data master dari Postgres. Data ini kini digabungkan dalam API Java dengan data JSON untuk mendapat data sah yang ditapis.  Outputnya akan menjadi JSON yang telah ditapis dan distruktur semula.  Sila ambil perhatian bahawa enjin Spark menyimpan data di dalam memori dan tidak terdapat penyimpanan data sebenar.  Bagaimanapun, anda boleh menyimpan data menggunakan API Java File Write jika terdapat keperluan. Disebabkan ini ialah pengaliran data secara masa nyata, kita tidak menyimpan sebarang data.
Elasticsearch-> Data disimpan dalam bentuk indeks
Elasticsearch ialah sumber terbuka, RESTful, pencarian teragih dan enjin analitik terbina pada Apache Lucene. Kita boleh menghantar data dalam bentuk JSON ke elastic dan elastic akan menyimpannya dalam bentuk indeks.
Di sini, kita telah menggunakan struktur indeks lalai(default) dalam elastic dengan nombor lalai bagi replika dan syard.
Kita telah mengguna sokongan Elasticsearch-Hadoop Spark dalam Java melalui EsSpark org.elasticsearch.spark.rdd.api.java package.
Kita telah mengguna 3-nod kluster elastic. Senibina bagi penyepaduan Spark dengan Elasticsearch dan Kibana dipaparkan di bawah:
img201914-3
Kibana-> Pengawasan Masa Nyata pada data dengan Kibana and ES
Kibana ialah alatan pemvisualan yang membantu kita untuk menganalisa data elastic. Di sini, kita telah menggunakan Kibana kerana ia bergabung dengan baik dengan Elastic untuk menganalisa data masa nyata.  Kita telah membina papan pemuka (dashboard) dalam Kibana untuk menganalisa data suhu dan kelembapan.
Akhir kata, untuk merumuskan, senibina di atas memberi gambaran keseluruhan tentang fungsi bagi setiap komponen.  Saya akan menulis dengan terperinci mengenai pemprosesan kelompok bagi data mesin dalam artikel saya yang seterusnya.  Saksikan ruang ini nanti!


Go to Top