Month: January 2015

Export Data From Cassandra to CSV

Posted on Updated on

Karena kebutuhan untuk mindahin data Cassandra dari cluster lama ke cluster baru maka gue bikin tools untuk ngebantu diri gue sendiri untuk export data cassandra ke CSV.

Updated: The code is pushed to a Github.

Kenapa gue harus bikin tools ini?

Karena Cassandra yg versi gratisan ngga punya tools “bisa jalan” untuk backup data di dalam cassandra.
Well ada sih tools nya beberapa, tapi kalau data lu besar pasti tools tersebut ngadat, makanya kita harus bikin sendiri dengan meraba-raba library connection untuk cassandra dari datastax.

Berhubung skill java gue masih cetek, jadi sorry kalau misalkan agak culun codingan nya. Tapi gue udah test bisa narik tables dengan isi data puluhan GB dan jutaan rows ga ada masalah, so kalau ada yg butuh silahkan di compile aja sendiri pake library java untuk cassandra dari datastax ya.

package lemonade.dumpCassandra;

import java.text.SimpleDateFormat;
import java.util.Iterator;

import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.ColumnDefinitions.Definition;
import com.datastax.driver.core.DataType;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row;
import com.datastax.driver.core.Session;
import com.datastax.driver.core.SimpleStatement;
import com.datastax.driver.core.Statement;


/**
 * Dump Data from Cassandra to CSV
 * 2015/01/19
 * by sphinxid <firman.gautama@gmail.com>
 *
 */
public class CassExport
{
 public static void main( String[] args )
 {
 String keyspace = "YourKeyspace";
 String table = "TableName";
 String username = "username";
 String password = "password";
 String host = "127.0.0.1";


 Cluster.Builder clusterBuilder = Cluster.builder()
 .addContactPoints(host)
 .withCredentials(username, password);
 Cluster cluster = clusterBuilder.build();
 Session session = cluster.connect(keyspace);

 Statement stmt = new SimpleStatement("SELECT * FROM " + table);
 stmt.setFetchSize(1000);
 ResultSet rs = session.execute(stmt);
 Iterator<Row> iter = rs.iterator();

 while (!rs.isFullyFetched()) {
 rs.fetchMoreResults();
 Row row = iter.next();
 if (row != null)
 {
 StringBuilder line = new StringBuilder();
 for (Definition key : row.getColumnDefinitions().asList())
 {
 String val = myGetValue(key, row);
 line.append("\"");
 line.append(val);
 line.append("\"");
 line.append(",");
 }
 line.deleteCharAt(line.length()-1);
 System.out.println(line.toString());
 }
 }

 session.close();
 cluster.close();

 }

 public static String myGetValue(Definition key, Row row)
 {
 String str = "";

 if (key != null)
 {
 String col = key.getName();

 try
 {
 if (key.getType() == DataType.cdouble())
 {
 str = new Double(row.getDouble(col)).toString();
 }
 else if (key.getType() == DataType.cint())
 {
 str = new Integer(row.getInt(col)).toString();
 }
 else if (key.getType() == DataType.uuid())
 {
 str = row.getUUID(col).toString();
 }
 else if (key.getType() == DataType.cfloat())
 {
 str = new Float(row.getFloat(col)).toString();
 }
 else if (key.getType() == DataType.timestamp())
 {
 str = row.getDate(col).toString();

 SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ");
 str = fmt.format(row.getDate(col));


 }
 else
 {
 str = row.getString(col);
 }
 } catch (Exception e)
 {
 str = "";
 }
 }

 return str;
 }

}

or this is the pastebin.

#Update

#Benchmark Speed
22gb of data ~ 122mil rows. 
Extracted in 444m38.061s. 
- 1 host cassandra server (4core, 8gb ram, sata hdd).
- avg 4.5k of rows / second.
Advertisements

Script Auto Sundul Tokopedia – Auto Dink It Tokopedia

Posted on Updated on

tokopediabot

Yak gue emang telat banget, pasti lu semua udah pada bikin dan udah pada punya juga kan yang macem beginian.

BTW..

Baru2 ini bini gue bikin toko di tokopedia, terus gue ga tega and kasian lihatin bini gue nge klik “promo” tiap 1 jam sekali di website tokopedia untuk nyundul dagangan dia, Nah.. karena itu gue bikinin deh bot yg bisa bantu klik promo barang2-nya di tokopedia secara otomatis tiap satu jam sekali supaya dia kaga usah repot klik2 tiap satu jam sekali and bisa tetep fokus jaga anak di rumah 😉

Cell Phone Phreaking di Indonesia (Baca: Internet Gratisan)

Posted on Updated on

mobile-phone-security

 

Udah LAMA BANGET sebenernya nih gue lumayan penasaran sama yang namanya cell phone phreaking, khusus nya buat di Indonesia nih. Ada banyak orang yg bisa pake internet dengan nyaris tanpa harus bayar pulsa via koneksi modem 3G/HSDPA. Nah waktu itu gue sempet baca salah satu tutorial di internet, gue disuruh download software “Inject” untuk provider tertentu, so yaudah gue beli deh tuh simcard and gue colok ke samsung galaxy tab 2 gue. Dan Eng Ing Eeenggg.. pulsa gue kaga kurang sedikit pun.

Nah, semenjak dari situ gue penasaran banget itu gimana caranya bisa dapet IP proxy untuk jumping SSH nya. Terus kalau jaman sekarang makin susah lagi katanya ada yang harus generate fake”cookie” buat “pancingan”. Well.. whatever the trick is but It’s really interesting lhoo karena gue sangat penasaran dan pengen banget tau itu kenapa bisa sampe “internetan gratis”.

Gue juga denger2 ada komunitas phreaking lokal namanya Fornesia.com, gue udah masuk ke websitenya, ternyata adalah sebuah forum. Udah sempet browsing dan leeching2 pas mau register user eh ternyata udah ngga menerima pendaftaran.. mungkin banyak newbie kayak gue yang ga ngerti apa2 di dunia phreaking terus bikin repot momod2 disana makanya jadi tutup pendaftaran-nya wkwkkwkwkw.

Jadi.. buat om2 or tante2 yang baca post ini, kalau ada yang mau berbaik hati mau sharing ilmunya, boleh dong ajarin nubitol kyk kita gini hahahaha.. karena gue search di internet banyakan orang kasih tutorial cuma ngasih software, tapi kyknya hampir ga ada yang ngebahas teori nya itu sebenernya ada apa sih dibelakang software inject tersebut 😦

Sidekiq: Cara Untuk Utilisasi Sidekiq di Multiple CPU Core.

Posted on Updated on

sidekiq

Sidekiq itu naon?
Menurut yg bikin, sidekiq adalah:

Simple, efficient background processing for Ruby.

Sidekiq uses threads to handle many jobs at the same time in the same process. It does not require Rails but will integrate tightly with Rails 3/4 to make background processing dead simple.

Sidekiq is compatible with Resque. It uses the exact same message format as Resque so it can integrate into an existing Resque processing farm. You can have Sidekiq and Resque run side-by-side at the same time and use the Resque client to enqueue jobs in Redis to be processed by Sidekiq.

At the same time, Sidekiq uses multithreading so it is much more memory efficient than Resque (which forks a new process for every job). You’ll find that you might need 10 200MB resque processes to peg your CPU whereas one 300MB Sidekiq process will peg the same CPU and perform the same amount of work.

Intinya, sidekiq itu semacam library/tools untuk membuat ‘worker’ yang berjalan di background dan yang support multi-threading dan horizontal scaling.

Gue punya satu tips yang mungkin berguna buat lu pada, karena keterbatasan dari MRI Ruby (ini istilah dari Ruby versi standard), 1 process/instance sidekiq hanya bisa menggunakan 1 cpu core. Meskipun lu set untuk buka 100 thread, tapi tetep aja cuma bakalan pake 1 cpu core secara defaultnya.

Nah gimana caranya supaya Sidekiq bisa di-utilize di semua core server yang sedang berjalan? Nah, ada 2 cara yg gue tau, yaitu:

  1. MRI Ruby – Jalanin multiple sidekiq process. So kalau lu punya server 8 core. so, misalnya lu bisa deh jalanin 8 process sidekiq dengan masing2 16 thread.
  2. jRuby – Kalau lu pake jRuby environment, 1 process sidekiq bisa langsung utilize all the cpu core, karena behaviornya Java memang bisa utilize multiple cpu core, keren ya? 🙂

Terus dari 2 cara diatas kira2 yang mana yg performancenya lebih kenceng? Your mileage may vary kayaknya sih ;))

Happy New Year 2015 – Selamat Tahun Baru 2015

Posted on

Happy New Year 2015.

happy new year

I wish for everyone to have a better life in this new year.

Maybe a better job or increased in salary will be nice.
To have more day-off will be lovely as well, so we can stay with our family and loved one more often! 🙂

It’s a New year, a new challenge, a new resolution and possibly a new dream? ^_^