Thursday, June 18, 2009

Using HDFS in java (0.20.0)

Below is a code sample of how to read from and write to HDFS in java.

1. Creating a configuration object: To be able to read from or write to HDFS, you need to create a Configuration object and pass configuration parameter to it using hadoop configuration files.
 
    // Conf object will read the HDFS configuration parameters from these XML
    // files. You may specify the parameters for your own if you want.


    Configuration conf = new Configuration();
    conf.addResource(new Path("/opt/hadoop-0.20.0/conf/core-site.xml"));
    conf.addResource(new Path("/opt/hadoop-0.20.0/conf/hdfs-site.xml"));

    If you do not assign the configurations to conf object (using hadoop xml file) your HDFS operation will be performed on the local file system and not on the HDFS.

2. Adding file to HDFS:
Create a FileSystem object and use a file stream to add a file.

    FileSystem fileSystem = FileSystem.get(conf);
   
    // Check if the file already exists

    Path path = new Path("/path/to/file.ext");
    if (fileSystem.exists(path)) {
        System.out.println("File " + dest + " already exists");
        return;
    }

    // Create a new file and write data to it.
    FSDataOutputStream out = fileSystem.create(path);
    InputStream in = new BufferedInputStream(new FileInputStream(
        new File(source)));


    byte[] b = new byte[1024];
    int numBytes = 0;
    while ((numBytes = in.read(b)) > 0) {
        out.write(b, 0, numBytes);
    }

    // Close all the file descripters
    in.close();
    out.close();
    fileSystem.close();

3. Reading file from HDFS: Create a file stream object to a file in HDFS and read it.

    FileSystem fileSystem = FileSystem.get(conf);

    Path path = new Path("/path/to/file.ext");

    if (!fileSystem.exists(path)) {
        System.out.println("File does not exists");
        return;
    }

    FSDataInputStream in = fileSystem.open(path);


    String filename = file.substring(file.lastIndexOf('/') + 1,
        file.length());


    OutputStream out = new BufferedOutputStream(new FileOutputStream(
        new File(filename)));


    byte[] b = new byte[1024];
    int numBytes = 0;
    while ((numBytes = in.read(b)) > 0) {
        out.write(b, 0, numBytes);
    }

    in.close();
    out.close();
    fileSystem.close();

3. Deleting file from HDFS: Create a file stream object to a file in HDFS and delete it.

    FileSystem fileSystem = FileSystem.get(conf);

    Path path = new Path("/path/to/file.ext");
    if (!fileSystem.exists(path)) {
        System.out.println("File does not exists");
        return;
    }

    // Delete file
    fileSystem.delete(new Path(file), true);


    fileSystem.close();

3. Create dir in HDFS: Create a file stream object to a file in HDFS and read it.

    FileSystem fileSystem = FileSystem.get(conf);

    Path path = new Path(dir);
    if (fileSystem.exists(path)) {
        System.out.println("Dir " + dir + " already not exists");
        return;
    }

    // Create directories
    fileSystem.mkdirs(path);


    fileSystem.close();

Code:

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class HDFSClient {
    public HDFSClient() {

    }

    public void addFile(String source, String dest) throws IOException {
        Configuration conf = new Configuration();

        // Conf object will read the HDFS configuration parameters from these
        // XML files.
        conf.addResource(new Path("/opt/hadoop-0.20.0/conf/core-site.xml"));
        conf.addResource(new Path("/opt/hadoop-0.20.0/conf/hdfs-site.xml"));

        FileSystem fileSystem = FileSystem.get(conf);

        // Get the filename out of the file path
        String filename = source.substring(source.lastIndexOf('/') + 1,
            source.length());


        // Create the destination path including the filename.
        if (dest.charAt(dest.length() - 1) != '/') {
            dest = dest + "/" + filename;
        } else {
            dest = dest + filename;
        }

        // System.out.println("Adding file to " + destination);

        // Check if the file already exists
        Path path = new Path(dest);
        if (fileSystem.exists(path)) {
            System.out.println("File " + dest + " already exists");
            return;
        }

        // Create a new file and write data to it.
        FSDataOutputStream out = fileSystem.create(path);
        InputStream in = new BufferedInputStream(new FileInputStream(
            new File(source)));


        byte[] b = new byte[1024];
        int numBytes = 0;
        while ((numBytes = in.read(b)) > 0) {
            out.write(b, 0, numBytes);
        }

        // Close all the file descripters
        in.close();
        out.close();
        fileSystem.close();
    }

    public void readFile(String file) throws IOException {
        Configuration conf = new Configuration();
        conf.addResource(new Path("/opt/hadoop-0.20.0/conf/core-site.xml"));

        FileSystem fileSystem = FileSystem.get(conf);

        Path path = new Path(file);
        if (!fileSystem.exists(path)) {
            System.out.println("File " + file + " does not exists");
            return;
        }

        FSDataInputStream in = fileSystem.open(path);

        String filename = file.substring(file.lastIndexOf('/') + 1,
            file.length());


        OutputStream out = new BufferedOutputStream(new FileOutputStream(
            new File(filename)));


        byte[] b = new byte[1024];
        int numBytes = 0;
        while ((numBytes = in.read(b)) > 0) {
            out.write(b, 0, numBytes);
        }

        in.close();
        out.close();
        fileSystem.close();
    }

    public void deleteFile(String file) throws IOException {
        Configuration conf = new Configuration();
        conf.addResource(new Path("/opt/hadoop-0.20.0/conf/core-site.xml"));

        FileSystem fileSystem = FileSystem.get(conf);

        Path path = new Path(file);
        if (!fileSystem.exists(path)) {
            System.out.println("File " + file + " does not exists");
            return;
        }

        fileSystem.delete(new Path(file), true);

        fileSystem.close();
    }

    public void mkdir(String dir) throws IOException {
        Configuration conf = new Configuration();
        conf.addResource(new Path("/opt/hadoop-0.20.0/conf/core-site.xml"));

        FileSystem fileSystem = FileSystem.get(conf);

        Path path = new Path(dir);
        if (fileSystem.exists(path)) {
            System.out.println("Dir " + dir + " already not exists");
            return;
        }

        fileSystem.mkdirs(path);

        fileSystem.close();
    }

    public static void main(String[] args) throws IOException {

        if (args.length < 1) {
            System.out.println("Usage: hdfsclient add/read/delete/mkdir" +
                " [<local_path> <hdfs_path>]");

            System.exit(1);
        }

        HDFSClient client = new HDFSClient();
        if (args[0].equals("add")) {
            if (args.length < 3) {
                System.out.println("Usage: hdfsclient add <local_path> " +
                "<hdfs_path>");

                System.exit(1);
            }

            client.addFile(args[1], args[2]);
        } else if (args[0].equals("read")) {
            if (args.length < 2) {
                System.out.println("Usage: hdfsclient read <hdfs_path>");
                System.exit(1);
            }

            client.readFile(args[1]);
        } else if (args[0].equals("delete")) {
            if (args.length < 2) {
                System.out.println("Usage: hdfsclient delete <hdfs_path>");
                System.exit(1);
            }

            client.deleteFile(args[1]);
        } else if (args[0].equals("mkdir")) {
            if (args.length < 2) {
                System.out.println("Usage: hdfsclient mkdir <hdfs_path>");
                System.exit(1);
            }

            client.mkdir(args[1]);
        } else {  
            System.out.println("Usage: hdfsclient add/read/delete/mkdir" +
                " [<local_path> <hdfs_path>]");
            System.exit(1);

        }

        System.out.println("Done!");
    }
}

73 comments :

Anonymous said...

Very informative blog.

It would be useful to the configure the SyntaxHighlighter in your blogspot and then just use the pre tags to highlight the source code / bash scripts.

Would be very useful to read through realms of code / copy paste and try the same.

SATHISH said...

Hi,

Thanks for ur post .. How to listall the files available within a directory in hdfs using java ..


Regards,
Sathish

sadak rathod said...

Hello Rajeev,

Its a great thing that you have posted,just 1 doubt should be use only this java code to do file uploads or should we use map reduce as well,is map reduce needed to distribute the data in to blocks???

tiru said...

Hi,
I am trying to write and read a file from hdfs and before that i am trying to create a dir using java code.but it is not working and i am not able to create dir inside hdfs.can u please give some instuctions on that .

Arpith said...

Thanks,this helped lot for my project on query evaluation using MapReduce.

Anonymous said...

dude, lifesaver!! . thanks a lot. i wasn't putting in the core-site/hdfs-site xml files in the config and had been getting 'file doesn't exist' forever
- karthik -

DJ said...

Very useful.. thanks :)

akanksha said...

u r blog turned out to very useful for me...
can u also tell how to compile and run this code because i have tried out everything like including hadoop jar during compilation still i m getting error NoClassDefFoundError please help

Laxmikant said...

Hi Rajiv,
I am trying o read images from hdfs & pass them to map reduce.I worte the code but not working.Can anyone please help me in the code? How images can be read from hdfs? Link- http://stackoverflow.com/questions/10885039/reading-images-from-hdfs-using-mapreduce

Anonymous said...

I was trying to extend your program and trying to do append. I got an exception

org.apache.hadoop.ipc.RemoteException: java.io.IOException: Append to hdfs not supported. Please refer to dfs.support.append configuration parameter.
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.appendFile(FSNamesystem.java:1153)


How to fix these

mohitgoyal said...

How to know whether hdfs cluster is up and not in safemode inside java code

Unknown said...

Hello Rajeev Sharma, i m getting the following error, plz help me.



Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at org.apache.hadoop.conf.Configuration.(Configuration.java:153)
at pkgHdfs.HDFSClient.main(HDFSClient.java:192)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 2 more
Java Result: 1

Ankur Shanbhag said...

Very nice blog. Had some doubts with configurations. Would like to know other options for adding configuration parameters to the Configuration object like (core-site.xml). How can we make them relative by not specifying the complete path. As my program may be deloyed on other machine where hadoop is at different location.

Hiranya Jayathilaka said...

Thanks Rajeev. It was very useful

Unknown said...

Hi,

I am trying to do the same but from a java prog running in a different machine in a different platform (windows). My hadoop/MapReduce installation is in linux machine. I think I need to remotely login to the linux box (using ssh?) from within my java code, Should i?. Any idea how to do this?

Thanks Rohana

Unknown said...

Sir,
plz upload the steps to run a java program in hadoop... i don no how to run these programs....

doubter said...

Very informative. Is it possible to delete multiple files by pattern?

doubter said...
This comment has been removed by the author.
Anonymous said...

Hi, this is with ref to the below query "trying to do append an existing file", request you to let me know if this is possible. I have a file already uploaded on HDFS. After the upload the file on my local system got updated and the same I want to update on the copy that is uploaded in HDFS. Is that possible and if yes how?

Tom frnd of jerry said...

Can we manually create regions after creating tables in hbase . And how to add newly created region to meta table

am using java api for hbase

Unknown said...

Hi,

can anyone help me on how to move files from Hue to Hdfs every hour using oozie coordination.

i currently know how to create a working oozie coordination. my main problem is to move files/data from Hue to hdfs.


Thanks.

velraj said...

I love this!!The blog is very nice to me. Im always keeping this idea in mind. I will appreciate your help once again. Thanks in advance.
core java training in chennai
core java course
core java Training in Adyar
clinical sas training in chennai
Spring Training in Chennai
QTP Training in Chennai
Manual Testing Training in Chennai
JMeter Training in Chennai

Chris Hemsworth said...

The article is so informative. This is more helpful for our
best software testing training in chennai
best software testing training institute in chennai with placement
software testing training
courses

software testing training and placement
software testing training online
software testing class
software testing classes in chennai
best software testing courses in chennai
automation testing courses in chennai
Thanks for sharing.

Naveen S said...

This is the first & best article to make me satisfied by presenting good content. I feel so happy and delighted. Thank you so much for this article.

Learn Best Digital Marketing Course in Chennai

Digital Marketing Course Training with Placement in Chennai

Learn Digital Marketing Course Training in Chennai

Digital Marketing Training with Placement Institute in Chennai

zuan said...

Thanks for sharing an informative blog keep rocking bring more details.I like the helpful info you provide in your articles. I’ll bookmark your weblog and check again here regularly. I am quite sure I will learn much new stuff right here! Good luck for the next!
Web Designing Training Institute in Chennai | web design training class in chennai | web designing course in chennai with placement
Mobile Application Development Courses in chennai
Data Science Training in Chennai | Data Science courses in Chennai
Professional packers and movers in chennai | PDY Packers | Household Goods Shifting
Web Designing Training Institute in Chennai | Web Designing courses in Chennai
Google ads services | Google Ads Management agency
Web Designing Course in Chennai | Web Designing Training in Chennai

mindreader said...

Thanks for the interesting blog that you have implemented here. Very helpful and innovative. Waiting for your next upcoming article.
Java training in chennai
Java training institute in chennai
Java course in chennai
Java training classes
Java training
Java programming classes
core java coure
<a

devasuresh121@gmail.com said...

Thanks for sharing an informative blog keep rocking bring more details.I like the helpful info you provide in your articles. I’ll bookmark your weblog and check again here regularly. I am quite sure I will learn much new stuff right here! Good luck for the next!

7 tips to start a career in digital marketing

“Digital marketing is the marketing of product or service using digital technologies, mainly on the Internet, but also including mobile phones, display advertising, and any other digital medium”. This is the definition that you would get when you search for the term “Digital marketing” in google. Let’s give out a simpler explanation by saying, “the form of marketing, using the internet and technologies like phones, computer etc”.

we have offered to the advanced syllabus course digital marketing for available join now

more details click the link now

https://www.webdschool.com/digital-marketing-course-in-chennai.html

devasuresh121@gmail.com said...

I love this!!The blog is very nice to me. I am always keeping this idea in mind. I will appreciate your help once again. Thanks in advance.

Web designing trends in 2020

When we look into the trends, everything which is ruling today’s world was once a start up and slowly begun getting into. But Now they have literally transformed our lives on a tremendous note. To name a few, Facebook, Whats App, Twitter can be a promising proof for such a transformation and have a true impact on the digital world.


we have offered to the advanced syllabus course web design and development for available join now

more details click the link now

https://www.webdschool.com/web-development-course-in-chennai.html

w3webschool said...

Nice post. Thanks for sharing! I want people to know just how good this information is in your article. It’s interesting content and Great work.
Digital Marketing Course In Kolkata
Web Design Course In Kolkata

Anurag Srivastava said...

Nice post.it is really interesting to read this article...Find latest Sarkari Job for freshers & experienced graduates across India & get free Naukri/Job alerts on recent & upcoming Sarkari jobs vacancies through Sarkari Job, as a jobs source we provides present and latest recruitment details for all Government/Sarkari Naukri across India.

Anand Shankar said...
This comment has been removed by the author.
w3webschool said...

Thanks for sharing this valuable information to our vision. You have posted a worthy blog keep sharing.
Digital Marketing Course In Kolkata
Web Design Course In Kolkata
SEO Course In Kolkata

Anurag Srivastava said...

It’s interesting content and Great work....Most of the part want to analyze their individual scores in the exam. In this process of checking your Exam Latest Result, We support you by giving the Result links to get you All India Sarkari Result in an easy way.

aj said...

Snapdeal Prize list and Snapdeal prize department. Here you can win the exciting prizes and the special offer just playing a game. For more information visit our website: Snapdeal lucky customer.
Snapdeal winner name 2020
Snapdeal lucky draw
Snapdeal lucky customer 2020
Snapdeal winner name list

sharan said...

I am looking for and I love to post a comment that "The content of your post is awesome" Great work!
Microsoft Windows Azure Training | Online Course | Certification in chennai | Microsoft Windows Azure Training | Online Course | Certification in bangalore | Microsoft Windows Azure Training | Online Course | Certification in hyderabad | Microsoft Windows Azure Training | Online Course | Certification in pune

Vale Co Xenia said...

Great Article
Cloud Computing Projects


Networking Projects

Final Year Projects for CSE


JavaScript Training in Chennai

JavaScript Training in Chennai

The Angular Training covers a wide range of topics including Components, Angular Directives, Angular Services, Pipes, security fundamentals, Routing, and Angular programmability. The new Angular TRaining will lay the foundation you need to specialise in Single Page Application developer. Angular Training

James Williams said...

Great post, thanks for sharing such a informative information.
Java Online Training
Java Online Training In Chennai
Core Java Online Training

raji said...

Thanks for sharing an informative blog keep rocking bring more details.I like the helpful info you provide in your articles.

Software Testing Training in Bangalore

Software Testing Training

Software Testing Online Training
<
Software Testing Training in Hyderabad

Software Testing Courses in Chennai

Software Testing Training in Coimbatore

raji said...


Software Testing Training in Bangalore

Software Testing Training

Software Testing Online Training
<
Software Testing Training in Hyderabad

Software Testing Courses in Chennai

Software Testing Training in Coimbatore

meritstep said...

I just loved your article on the beginners guide to starting a blog.If somebody take this blog article seriously
in their life, he/she can earn his living by doing blogging.Thank you for this article.
java online training

Nino Nurmadi , S.Kom said...

Nino Nurmadi, S.Kom
Nino Nurmadi, S.Kom
Nino Nurmadi, S.Kom
Nino Nurmadi, S.Kom
Nino Nurmadi, S.Kom
Nino Nurmadi, S.Kom
Nino Nurmadi, S.Kom
Nino Nurmadi, S.Kom
Nino Nurmadi, S.Kom

jhansi said...

SAP stands for Systems Applications and Products in Data Processing. SAP, by definition, is also the name of the ERP (Enterprise Resource Planning) software as well as the name of the company.
tally training in chennai

hadoop training in chennai

sap training in chennai

oracle training in chennai

angular js training in chennai

Maze Tech Inc said...

SEO for Dental
SEO for Pharma
SEO for Healthcare
SEO Company in Chennai
Digital Marketing Training in Chennai
SEO Consultant Chennai
Web Designing in Chennai

arshiya said...

Thanks for sharing this useful information, and I learned a lot and cleared all my doubts in this.. keep posting like this useful information.
effects of social media
social media marketing activities
application of artificial intelligence
php advantages and disadvantages
rpa developer
salesforce developer interview questions

Josh said...

education erp software
school erp system
smart school software
school fees management system

Franklin said...

Tube fittings
Manifold valves
Needle valve
Ball valve

Alia parker said...

I was surfing the net and luckily came over to this location and found exceptionally curiously stuff here. It's truly fun to examine. I delighted in it a parcel. Much obliged for sharing this superb data. We too give Advanced Showcasing Administrations SEO, SMM, Website Design & Development, and much more services. Jiva IT solution

Chartered Accountants in Bangalore said...

https://salsabeelahmedandco.com/
Very Informative and useful... Keep it up the great work. I really appreciate your post.

https://salsabeelahmedandco.com/company-registration-in-bangalore/
https://salsabeelahmedandco.com/ca-firms-in-bangalore/
https://salsabeelahmedandco.com/accounting-services-in-bangalore/
https://salsabeelahmedandco.com/gst-consultants-in-bangalore/
https://salsabeelahmedandco.com/public-limited-company/
https://salsabeelahmedandco.com/private-limited-company-in-india/
https://salsabeelahmedandco.com/one-person-company-in-india/
https://salsabeelahmedandco.com/partnership-firm-in-bangalore/
https://salsabeelahmedandco.com/limited-liability-partnership-llp/

Tutorials said...


Very informative and helpful. Thank You for sharing the blog.
JMeter training in chennai | JMeter course online

Jhonny said...

Thank you for your post, I look for such article along time. myself very happy to read it because it can give me more insight, thanks.. Visit my blog..thankyou

Joker88 Slot
Sbowin
Sbobet88
Bola338

Agus Salim said...

I just loved your article on the beginners guide to starting a blog.If somebody take this blog article seriously in their life, he/she can earn his living by doing blogging.

Sbobet
Judi Online 88
Hokibet77
Naga slot

Jamroni Sumardi said...

It’s really a great and helpful piece of information. I’m satisfied that you simply shared this useful info with us. Please keep us informed like this. Thank you for sharing.

Joker88 Asia
Qqslot88
Fafa slot
Fafaslot

Unknown said...

This list is so inspiring! and this is very good blog post website i never thought that this post is very much informatic and usefull to us.

Mpo Slot
Nowgoal Vip
Fafaslot
Playsbo

Unknown said...

Thanks for the sharing this blog with us. I like it very much. I have blog , can you visit my blog if you want to see my website, thankyou

Sbobet88 Mobile
Poker Play
Idn Poker
Idn 88

Juminto99 said...

Your File is Very Usefull File... Thanks For Uploading.... Please More File Uploading... Please Visit Our Website

Balak99
Bigslot777
Slot Deposit Pulsa
Joker88

Unknown said...

Thanks For Sharing Your article It is very useful us and amazing blog for the users who want to learn

Joker88 Slot
Slot Pulsa
Slot777
Megawin77

Sulaiman Sihombing said...

I got this web blog from my buddy who told me concerning this web blog and at the moment this time I am browsing this web page and reading very informative articles here.

Sbobet Slot
Sbobet Slot
Slot Joker123
Daftar Slot Pulsa

Jesica Salim said...

Nice post. I was checking constantly this blog and I am impressed! Extremely useful information specifically the last part �� I care for such information a lot. I was seeking this certain info for a very long time. Thank you and good luck.

Hokibet77

asdas said...

Thank you for your post, myself very happy to read it because it can give me more insight, thanks.. Visit my blog..thankyou

777slot
Judi Slot88

Unknown said...

this article is very helpful. thanks for sharing

slot
Warung Slot
https://95.111.197.237/
situs judi slot online terbaik
https://infoslot.biz/
https://slotdepomenu.com/
https://warungscore.com/
https://warung168alt.com/
link alternatif warung168/

EZaccounting said...

I am very happy to visit this website. Thanks for sharing the wonderful article to us.
Accounting Software Singapore
PSG Grant Accounting Software
E invoicing Singapore

Arwan Singgih said...

Thanks for sharing your thoughts. I really appreciate your efforts and I will be
waiting for your next post thank you once again.

Bigslot77
Daftar Fa Fa Slot
Daftar Live22 Slot
Daftar Poker77
Daftar Domino77

Arista Keano said...

I was more than happy to find this site. I need
to to thank you for ones time just for this fantastic read!!
I definitely really liked every little bit of it and I have you saved as a favorite to look at new things on your site. Thankyou for sharing.

Bola888
Spbo88
Mpo88 Slot
Mpo Slot Terbaru
Mpo303 Slot

Saveri Abel said...

This paragraph is genuinely a nice one it helps new net users, who are wishing
in favor of blogging. Thankyou for sharing.

Mpo338 Slot
Megajoker88 Slot
Sbobetasia88
Mpobola Slot
Hoki99 Slot

Reiki Savian said...

Every weekend i used to pay a visit this web page, because i want enjoyment, since
this this site conations actually fastidious funny
information too. Thankyou for sharing.

Mpo66 Slot
Mpo33 Slot
Mpo10 Slot
Gojek303
Mpo81 Slot

Falefi Jaasir said...

Asking questions are genuinely good thing if you are not understanding
anything completely, except this post gives nice understanding yet. Thankyou for sharing.

Mpo5000 Slot
Mpo005 Slot
Mpo222 Login
Joker88 Slot
Mpo168 Slot

Kenzo Julian said...

Heya i'm for the first time here. I found this board
and I find It truly useful & it helped me out a lot.
I hope to give something back and help others like you helped
Thankyou for sharing.

Mpo1 Slot
Daftar Mpo77 Win
Mpo8 Slot
Mpo99 Deposit Pulsa
Raja88 Casino

Danial Arsalan said...

Good article! We will be linking to this particularly great content on our website.
Keep up the great writing.
Thankyou for sharing.

Sbowin
Judi Dingdong Online
Dewa Slot
Mas88 Slot
Slot777

Kin Dhananjaya said...

Everything is very open with a precise explanation of the challenges.
It was truly informative. Your website is extremely helpful.
Thanks for sharing!

Dewa Hoki Slot
Sbobet Com
Bet88 Online
Bet88
Habanero Slot

Muhammad Kevlar said...

Incredible! This blog looks just like my old one! It's on a totally different subject but it has pretty much the same layout and design. Great choice of colors! Thankyou for sharing.

Joker77
Agen88
Indo338
Slot77
Bola77

Ruri Narendra said...

I really like your blog.. very nice colors & theme.
Did you create this website yourself or did you hire someone to do it for you?
Plz reply as I'm looking to construct my own blog and would like to
know where u got this from. thank you

Bola188
Bola365
Joker88 Live
Habanero Slot
Konami Slot

AdhitamaElvan said...

Oh my goodness! Impressive article dude! Thank you, However I am going through difficulties with your RSS. I don’t know the reason why I am unable to join it. Is there anybody else having the same RSS problems?
Anyone that knows the solution will you kindly respond? Thanks!!

Mpo123 Slot
Joker88 Slot
Slot Joker88
Raja Slot88
Joker88

Jumanto said...

"Oh my goodness! Impressive article dude! Thank you, However I am going through difficulties with your RSS. I don’t know the reason why I am unable to join it. Is there anybody else having the same RSS problems?
Anyone that knows the solution will you kindly respond? Thanks!!"

Mania 777
Main Slot
Mainslot777