Yang Sering Berkunjung

Cari Blog Ini

Entri Populer

Tampilkan postingan dengan label Big Data. Tampilkan semua postingan
Tampilkan postingan dengan label Big Data. Tampilkan semua postingan

Senin, 02 Mei 2016

Perbandingan Twitter River VS Logstash pada Elasticsearch

Analisis media sosial Twitter dapat menunjukkan rating seseorang, layanan, atau suatu produk di mata pengguna Twitter. Sebagai salah satu media sosial dengan pengguna terbanyak di dunia, Twitter menyediakan API yang memudahkan pengambilan data Twitter secara real time. Analisis ini menjadi penting karena dapat dimanfaatkan sebagai dasar penarikan keputusan. Elasticsearch adalah tools yang mampu melakukan analisis big data; termasuk data Twitter yang realtime. Dari sekian banyak tools input yang dimilikinya, Elasticsearch memiliki dua tools yang dapat menginputkan data Twitter dari Twitter API ke Elasticsearch. Cara pertama adalah melalui Twiter River dan cara kedua adalah melalui Logstash. Faktor input adalah faktor yang sangat mempengaruhi output. Keakuratan data input serta efisiensi pengolahan serta penyimpanan data sangat penting dalam menunjang sebuah sistem yang menangani big data. Dalam rangka mengoptimalkan kinerja sistem analisis media sosial Twitter dengan Elasticsearch dan Kibana, diperlukan sebuah penelitian yang membandingkan kedua tools input tersebut.

Penelitian dilakukan dengan memonitor dua buah server HPC yang melakukan crawling data dari Twitter API secara bersamaan. Server HPC pertama adalah server Elasticsearch yang menggunakan input Logstash, sedangkan server HPC kedua menggunakan input Twitter River. Parameter pembanding yang digunakan adalah beban pemrosesan CPU, penggunaan RAM, penggunaan disk, jumlah data Twitter (twit) yang diinputkan, serta jumlah field yang diinputkan pada Elasticsearch.
 
Hasil penelitian menunjukkan bahwa Logstash menggunakan lebih banyak sumber daya dibandingkan Twitter River termasuk 0,99% beban pemrosesan CPU dan 7,2% penggunaaan RAM per hari, 112 MB penggunaan disk per minggu, dan 497 field lebih banyak per twit. Sebaliknya, Twitter River menginputkan 191 twit lebih banyak dibandingkan Logstash dalam satu minggu.

ElasticSearch adalah

ElasticSearch merupakan search engine full-text yang bisa diakses melalui RESTful API. Search engine ini berorientasi dokumen (hampir seperti MongoDB) artinya engine ini akan menyimpan objek atau dokumen daripada menyimpan data dengan representasi baris dan kolom. Dokumen yang disimpan tersebut akan di serialisasi sebagai JSON ketika diakses.
Artikel ini hanya akan mengenalkan sedikit dasar dasar dari ElasticSearch.

Instalasi

Download paket ElasticSearch di sini dan ekstrak. Kemudian jalankan dengan perintah
$ ./bin/elasticsearch
Deafult port search engine ini akan berjalan pada 9200. Test query bisa dilakukan meskipun data belum ada, yaitu dengan menjalankan perintah berikut untuk mengetahui informasi engine ElasticSearch yang sedang berjalan
$ curl localhost:9200
{
  "status" : 200,
  "name" : "Black Queen",
  "version" : {
    "number" : "1.1.0",
    "build_hash" : "2181e113dea80b4a9e31e58e9686658a2d46e363",
    "build_timestamp" : "2014-03-25T15:59:51Z",
    "build_snapshot" : false,
    "lucene_version" : "4.7"
  },
  "tagline" : "You Know, for Search"
}

Indexing

Proses memasukkan data ke dalam ElasticSearch dinamakan dengan indexing. Karena engine ini memakai RESTful API maka data-data yang akan di indexing dengan mudah bisa dimasukkan melalui curl dan operasi HTTP seperti GET, PUT, DELETE.
Di Elasticsearch, dokumen adalah termasuk tipe dan tipe tersebut termasuk dalam index. Secara paralel bisa dibandingkan dengan database relasional:
Relational DB ⇒ Database ⇒ Table ⇒ Baris ⇒ Kolom
Elasticsearch ⇒ Index ⇒ Tipe ⇒ Dokumen ⇒ Field
Sebagai contoh:
Untuk memasukkan data index film dengan tipe (kategori) action dan mempunyai id 1.
$ curl -XPUT http://localhost:9200/film/action/1 -d '
{   
    nama: "The Raid 2: Berandal", 
    tahun: "2014",rating:"8.9", 
    imdb: "http://www.imdb.com/title/tt2265171/", 
    storyline: "Only a short time after the first raid, Rama goes undercover with 
    the thugs of Jakarta and plans to bring down the syndicate and uncover the corruption 
    within his police force."
}'
Pada keluaran konsol mungkin akan seperti ini
{
    "_index":"film",
    "_type":"action",
    "_id":"1",
    "_version":1,
    "created":true
}
Nilai "created"=true bearti data baru dimasukkan. Jika anda memakai operasi PUT dengan id yang sama maka data akan terupdate dan "created"=false.
$ curl -XPUT http://localhost:9200/film/action/1 -d '
{
    judul: "The Raid 2: Berandal", 
    tahun:"2014",rating:"8.9", 
    imdb:"http://www.imdb.com/title/tt2265171/", 
    storyline:"Only a short time after the first raid, Rama goes undercover with 
    the thugs of Jakarta and plans to bring down the syndicate and uncover the corruption 
    within his police force."
}'

Query

Query data sangat mudah dilakukan dengan operasi sederhana GET. Misalnya untuk mencari film dengan judul kata mengandung kata "berandal"
curl -XGET http://localhost:9200/film/action/_search?q=judul:berandal

{
    "took":7,
    "timed_out":false,
    "_shards":{
        "total":5,
        "successful":5,
        "failed":0
    },
    "hits":{
        "total":1,
        "max_score":0.15342641,
        "hits":[{
            "_index":"film",
            "_type":"action",
            "_id":"1",
            "_score":0.15342641, 
            "_source" : {
                judul: "The Raid 2: Berandal", 
                tahun:"2014",rating:"8.9", 
                imdb:"http://www.imdb.com/title/tt2265171/", 
                storyline:"Only a short time after the first raid, 
                Rama goes undercover with the thugs of Jakarta 
                and plans to bring down the syndicate and uncover 
                the corruption within his police force."
            }
        }]
    }
}
Jenis query string diatas termasuk dalam Search Lite. Untuk query data yang lebih lanjut sebaiknya memakai Query DSL.

Query DSL

Query ini memakai format JSON sebagai parameter query. Sebagai contoh
$ curl -XGET http://localhost:9200/film/action/_search 
'{
    "query":{
                "match": {
                    "about":"raid"
                }
            }
 }'
Query match diatas merupakan full-text search yang akan mencari semua dokumen yang MENGANDUNG kata "raid". Query DSL lebih fleksibel jika diinginkan query data yang lebih kompleks seperti filter search, , phrase search & highlighting. Untuk lebih jelasnya silahkan lihat Guide Query DSL.

Cluster, Node & Shard

Oh ya salah satu kekuatan dari engine ini yaitu secara alami merupakan sistem terdistribusi artinya dengan mudah sistem engine ini bisa diperbesar maupun diperkecil jika ada penambahan server atau istilahnya horizontal scaling.
Cluster
ElasticSearch Cluster
Untuk mengetahui kesehatan kluster, indikatornya yaitu warna seperti lampu lalu lintas green, yellow atau red
curl -XGET http://localhost:9200/_cluster/health
Contoh hasil keluaran di konsol bisa seperti ini
{
"cluster_name":"elasticsearch",
"status":"yellow",
"timed_out":false,
"number_of_nodes":1,
"number_of_data_nodes":1,
"active_primary_shards":2,
"active_shards":2,
"relocating_shards":0,
"initializing_shards":0,
"unassigned_shards":2
}
yang perlu menjadi perhatian adalah key status. 3 kemungkinan warna ini mempunyai arti sebagai berikut green Semua shard primer dan replika aktif.
yellow Semua shard primer arktif tpi replika tidak.
red Tidak semua shard primer & sekunder aktif.
Node
Node yang dimaksud disini adalah instance dari ElasticSearch. Satu cluster mengandung beberapa node elasticsearch yang sama sama berbagi data dan beban kerja. Satu master node elastisearch diperlukan di dalam cluster untuk manajemen node yang lain seperti penambahan dan penghapusan node. Perlu diingat bahwa klien bisa mengakses node elasticsearch manapun dalam cluster.
Untuk penambahan node dengan nama Node-2 anda bisa memakai perintah berikut
$ ./bin/elasticsearch -Des.node.name=Node-2
Shard
Shard yang dimaksud disini adalah kontainer data yang merupakan instance dari Apache Lucene lengkap dengan search engine sendiri. Bisa dikatakan merupakan bagian unit kerja terkecil dari ElasticSearch. Shard terbagi dua yaitu Shard Primer dan Shard Replika. Shard Primer ukurannya terbatasi dengan perangkat keras, kompleksitas dokumen dll sedangkan Shard Replika merupakan copy dari Shard Primer.
Jika anda ingin lebih mendalami scaling secara horizontal silahkan kunjungi website ElasticSearch.
Ok. Cukup sekian dulu untuk hari ini...