Wednesday, July 10, 2013

Sqoop – basic data import/export

As I was exploring the Hadoop eco-system, I came across this tool called ‘Sqoop’. It is termed as ‘Sqoop’ to denote ‘SQL to Hadoop’ functionality. Sqoop is a wonderful tool to transport data from Hadoop ecosystem such as HDFS/Hive to Relational databases and vice-versa.
I just wanted to blog about it mentioning its basic import and export functionality. I shall try to show an example in which a table is imported to HDFS from a relational database and export it back on to the database. To demonstrate this, the following are used:
Relational database – MySQL
Linux distro – Red Hat Enterprise Linux Server release 5.3 (Tikanga)
Hadoop ecosystem – Cloudera CDH3u3
IMPORT DATA FROM A RELATIONAL TABLE TO HDFS
Firstly, let us create a table on MySQL database.
1. Create a database.
mysql> create database sqoop_tutorial;
Query OK, 1 row affected (0.00 sec)
2. Create a table.
mysql> use sqoop_tutorial;
Database changed
mysql> CREATE TABLE employee (id INT, name VARCHAR(20));
Query OK, 0 rows affected (0.12 sec)
mysql> show tables;
+————————–+
| Tables_in_sqoop_tutorial |
+————————–+
| employee                 |
+————————–+
1 row in set (0.00 sec)
3. Insert values into the table.
mysql> INSERT INTO employee(id,name) VALUES(1,”employee1″);
Query OK, 1 row affected (0.04 sec)
mysql> INSERT INTO employee(id,name) VALUES(2,”employee2″);
Query OK, 1 row affected (0.02 sec)
mysql> INSERT INTO employee(id,name) VALUES(3,”employee3″);
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO employee(id,name) VALUES(4,”employee4″);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO employee(id,name) VALUES(5,”employee5″);
Query OK, 1 row affected (0.03 sec)
mysql> select * from employee;
+——+———–+
| id   | name      |
+——+———–+
|    1 | employee1 |
|    2 | employee2 |
|    3 | employee3 |
|    4 | employee4 |
|    5 | employee5 |
+——+———–+
5 rows in set (0.00 sec)
4. Now let us import this table ‘employee’ on to HDFS.
We need to run the following command.
bash [~]$ sqoop import –connect jdbc:mysql://localhost/<database> –table <table_name> –username <username> -P –target-dir <HDFS_Location> -m 1
Our command would be as follows:
bash [~]$ sqoop import –connect jdbc:mysql://localhost/sqoop_tutorial –table employee –username devbld -P –target-dir /usr/devbld/employee -m 1
After we run this, we may face the following error.
Unable to load com.mysql.jdbc.Driver
To workaround this, download the jar from http://www.mysql.com/downloads/connector/j/ and copy it to your ‘lib’ of sqoop (say, /usr/lib/sqoop/lib/).
Run the command again, this should solve the problem.
That creates a file on HDFS with data from the table. We can see the content of the tables in the file.
bash [~]$ hadoop fs -ls /usr/devbld/employee
Found 3 items
-rw-r–r–   1 devbld supergroup          0 2012-08-18 13:23 /usr/devbld/employee/_SUCCESS
drwxr-xr-x   – devbld supergroup          0 2012-08-18 13:23 /usr/devbld/employee/_logs
-rw-r–r–   1 devbld supergroup         60 2012-08-18 13:23 /usr/devbld/employee/part-m-00000
bash [~]$ hadoop fs -cat /usr/devbld/employee/part-m-00000
1,employee1
2,employee2
3,employee3
4,employee4
5,employee5
EXPORT DATA FROM HDFS TO RELATIONAL TABLE
1. Let us create a table on the database into which we want our data to be exported. Let us name it ‘employee_exported’.
mysql> CREATE TABLE employee_exported (id INT, name VARCHAR(20));
Query OK, 0 rows affected (0.01 sec)
2. Run the following command to export the data.
bash [~]$ sqoop export –connect jdbc:mysql://localhost/sqoop_tutorial –table employee_exported –export-dir /usr/devbld/employee –username devbld -P -m 1
3. Now, we see the contents of the table to find the data exported from HDFS.
mysql> select * from employee_exported;
+——+———–+
| id   | name      |
+——+———–+
|    1 | employee1 |
|    2 | employee2 |
|    3 | employee3 |
|    4 | employee4 |
|    5 | employee5 |
+——+———–+
5 rows in set (0.00 sec)

References:

Wednesday, June 26, 2013

hadoop


Open the Two files and paste the below two lines.
deb http://ppa.launchpad.net/webupd8team/java/ubuntu quantal main
deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu quantal main

Now Follow from the Step 7

The Below link for setup a Apache Hadoop in Multi Node Cluster (Apache Hadoop Version is 1.0.4)
http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-multi-node-cluster/

Finally, i didnt tried HBase so you get it from the hbase.apache.org or cloudera sites.

Thursday, June 20, 2013

String Function in Java


Java: Trim an string

Find a way to trim the last character of a StringBuilder or a String for that matter.

If you have a String called 's'
Code:
s.substring(0, s.length()-1);
If you have a StringBuilder 'sb'
Code:
sb.deleteCharAt(sb.length()-1);

Java: Sort an array

Description

The java.util.Arrays.sort(int[]) method sorts the specified array of ints into ascending numerical order.

Declaration

Following is the declaration for java.util.Arrays.sort() method
public static void sort(int[] a)

Parameters

  • a -- This is the array to be sorted.

Return Value

This method does not return any value.

Example:

int[] array = new int[10];
Random rand = new Random();
for (int i = 0; i < array.length; i++)
    array[i] = rand.nextInt(100) + 1;
Arrays.sort(array);
System.out.println(Arrays.toString(array));
// in reverse order
for (int i = array.length - 1; i >= 0; i--)
    System.out.print(array[i] + " ");
System.out.println();

Java: substring an String

Description:

This method has two variants and returns a new string that is a substring of this string. The substring begins with the character at the specified index and extends to the end of this string or upto endIndex - 1 if second argument is given.

Syntax:

Here is the syntax of this method:
public String substring(int beginIndex)

or

public String substring(int beginIndex, int endIndex)

Parameters:

Here is the detail of parameters:
  • beginIndex -- the begin index, inclusive.
  • endIndex -- the end index, exclusive.

Return Value :

  • The specified substring.

Example:

import java.io.*;

public class Test{
   public static void main(String args[]){
      String Str = new String("Welcome to Tutorialspoint.com");

      System.out.print("Return Value :" );
      System.out.println(Str.substring(10) );

      System.out.print("Return Value :" );
      System.out.println(Str.substring(10, 15) );
   }
}
This produces following result:
Return Value : Tutorialspoint.com
Return Value : Tuto


Wednesday, May 15, 2013

How To Install TeamViewer In Linux


April 25th 2013,TeamViewer 8.0 is released for Linux Users makes it working in all the platform including Windows, Android, iOS and MAC OS X. TeamViewer is one of the popular Remote Desktop Client tool in Windows operating system and now you can install it in your Linux Machine too. TeamViewer can be used for remote control, desktop sharing, online meetings, web conferencing and file transfer between computers. To install TeamViewer administrator access is required, but once installed it can be run by any user.

How To Install TeamViewer in Linux (Ubuntu 13.04/Mint 14/Kubuntu 13/04/Lubuntu 13.04) [Graphical Installation]

For Debian, Mint, Ubuntu, Kubuntu, Xubuntu…download TeamViewer Debian Package 32bit version from  here and 64bit version from here.

how to install teamviewer in linux
Save the File TeamViewer._Linux.deb and open it using software Center (Ubuntu Software Center).
Click Install Button to proceed.
Team Viewer for Linux
An Authentication windows appear to put Root password
team viewer 8.0 for Linux
Click on Authenticate button to proceed.
Click on Accept License Agreement
team viewer 8.0
after Accepting the agreement the following windows appear.
run teamviewer in ubuntu 13.04
Put Partner ID  asking by your friend where the Same version of team viewer is installed same as mine shown in above image. After putting Parter ID TeamViewer asks for password of your friend system and you are done.
Enjoy Remote access using TeamViewer in Linux operating System. You can also Transfer files but the speed is not so good when it comes to transfer the files.

How To Install TeamViewer In Linux Using Terminal [Command Line Installation]

If you don’t want to use Graphical method(which is recommended by TeamViewer website) then you can use command line method to install TeamViewer in Linux.

How To Install TeamViewer In Ubuntu/Kubuntu/Mint/Lubuntu/Debian Using Terminal

Open Terminal ( by Pressing “Ctrl+Alt+T”)
For the 32-bit package:
  • sudo dpkg -i teamviewer_linux.deb
For the 64-bit package:
  • sudo dpkg -i teamviewer_linux_x64.deb
In case “dpkg” indicates missing dependencies, complete the installation by executing the following command:
  • sudo apt-get install -f

How To Install TeamViewer In Linux (RedHat, CentOS, Fedora, SUSE) Using Terminal

  • yum install teamviewer_linux.rpm (recommended, as it will install missing dependencies)
  • rpm -i teamviewer_linux.rpm
In case “yum” is asking for a missing public key, you can download it here and import the key by using following command:
  • rpm --import TeamViewer_Linux_PubKey.asc
After importing the public key, please execute the “yum”-command again to install the TeamViewer rpm.

How secure is TeamViewer?

According to TeamViewer Developers
“All TeamViewer versions use full encryption. Encryption is based on 1024bit RSA private/public key exchange and 256 Bit AES session encoding. This uses the same security level as https/SSL and is considered completely safe by today’s standards. The key exchange also guarantees that the data channel is completely encoded from client to client and that any routers or servers in between (including our routers) are unable to read or analyze the data stream. Security and privacy have always been a top priority during development.”

Sunday, February 10, 2013

Install Virtual Box on Ubuntu 12.10

VirtualBox is a powerful x86 and AMD64/Intel64 virtualization product for enterprise as well as home use. Not only is VirtualBox an extremely feature rich, high performance product for enterprise customers, it is also the only professional solution that is freely available as Open SourceSoftware under the terms of the GNU General Public License (GPL) version 2.

What is new in virtualbox 4.2.4
This is a maintenance release. The following items were fixed and/or added:
GUI: fixed validation warning on global settings / proxy page (4.2.2 regression, bug #11089)
GUI: fixed crash with multiple guest screens on certain conditions (OS X hosts only)
VBoxBalloonCtrl: fixed command line argument handling of ballooning module
VRDP: fixed occasional crash during a video playback in the guest (bug #11082)
BIOS: fixed broken DMI information (4.2 regression)
BIOS: workaround for booting from Windows 2000 floppy disks
EFI: fixed video mode selection loss on VM reboot (#10983)
Parallel: fixed parallel port printing failure/ paper queue empty error (Windows hosts only; bug #2226)
NAT: fixed crash on alias-less DNS responses when host-resolver is used
Storage: fixed hang under rare circumstances
Install VirtualBox 4.2.4 in ubuntu 12.10/12.04
Open the terminal and run the following commands
You need to edit /etc/apt/sources.list
gksudo gedit /etc/apt/sources.list
Add the following line
deb http://download.virtualbox.org/virtualbox/debian precise contrib
If you are running ubuntu 11.10 add the following line
deb http://download.virtualbox.org/virtualbox/debian oneiric contrib
Save and exit the file
Now install PGP key using the following command
wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -
Update source list
sudo apt-get update
Install virtualbox
sudo apt-get install virtualbox-4.2
If you have problem with the above PPA you can download .deb package from here.Once you have deb package you can double click on it to install this package.

Tuesday, February 5, 2013

Install RPM Package in Ubuntu

Some time you might find some applications are having only .rpm files but you want a .deb package for your debian,Ubuntu and other debian derived ditributions.If you can't find .deb debian package in any of the debian,ubuntu repositories or elsewhere, you can use the alien package converter to install the .rpm file.
Alien is a program that converts between the rpm, dpkg, stampede slp, and slackware tgz file formats. If you want to use a package from another distribution than the one you have installed on your system, you can use alien to convert it to your preferred package format and install it.
Despite the large version number, alien is still (and will probably always be) rather experimental software. It has been used by many people for many years, but there are still many bugs and limitations.
Alien should not be used to replace important system packages, like sysvinit, shared libraries, or other things that are essential for the functioning of your system. Many of these packages are set up differently by Debian and Red Hat, and packages from the different distributions cannot be used interchangably. In general, if you can't uninstall the package without breaking your system, don't try to replace it with an alien version.
Install alien in Ubuntu
sudo apt-get install alien
This will install all the required packages.Now you can start converting your .rpm files to .deb packages.
Available Options for alien
Convert the package.rpm into a package.deb
sudo alien -d package-name.rpm
Convert the package.rpm into a package.deb, and install the generated package.
sudo alien -i package-name.rpm
If you want to keeps alien from changing the version number use the following command
sudo alien -k rpm-package-file.rpm
Example
Suppose we have a avg antivirus avg71lms-r30-a0782.i386.rpm file
To convert .rpm to debian
sudo alien -k avg71lms-r30-a0782.i386.rpm
Now you should be having avg71lms-r30-a0782.i386.deb file
To install .deb file
sudo dpkg -i avg71lms-r30-a0782.i386.deb
If you don't use -k option you should see avg71lms_r30-1_i386.deb file the difference is it will add 1
If you want more available options for alien check alien man page

Wednesday, January 23, 2013

Hadoop Performance tuning (Hadoop-Hive) Part 2



[Note: This post is second part of Hadoop performance tuning, if you directly reached this page, please click here for part 1.]

I am testing these parameters with Hadoop and Hive framework from sql based queries. For checking performance improvement with configuration parameters, I use sample data of 100 million records and running some complex queries in Hive interface in top of Hadoop. In this part 2 we will see few more Hadoop configuration parameter to get maximum performance improvement in Hadoop cluster. 

Map Output compression ( mapred.compress.map.output )
By default this value set to false, its recommend to set this parameter to true for cluster with large amount of input data to be processed.  Because of compression data transfer between nodes are fast. Map output will not directly move to reducer, intermediately it will write to disk. So this setting helps to save disk space and fast disk read/write. And it’s not recommended to set this parameter to true for small amount of input data to be processed, because it will increase the processing time for compressing and decompressing data. But for Big data compressing and decompression time is considerably small when compare to time its saves in transferring and disk read/write. 

Once we set above configuration parameter to true, other dependent parameter will be active such as setting compression technique (codec) and compression type.  

Compression method or technique orcodec (mapred.map.output.compression.codec )
Default value for this parameter is org.apache.hadoop.io.compress.DefaultCodec. Other available codec are org.apache.hadoop.io.compress.GzipCodec. DefaultCodec will take more time but more compression. In LZO method it will take less time for compression amount of compression is less. Our own codec also can be added. Add codec or compression library which is suitable (best) for your input data type. 

mapred.map.output.compression.type parameter help to identify in which basis data should be compressed. User can set either RECORD or BLOCK. Record type is default type in which each individual value is compressed, means it will compress whole data block as it is. Block type is recommended one, in which data compressed based on data block key-value pairs, so it helps for sorting data in reducer side. In Cloudera Hadoop, default type is set to Block for better performance.

Three more configuration parameters are there 

1. mapred.output.compress
2. mapred.output.compression.type 
3. mapred.output.compression.codec

Same above rules apply here, but this parameter meant for MapReduce job output, first three parameters specify compressed output for map output alone. These three configuration parameter specify for all job output which should be compressed or not and in which type and codec.

Above suggestions are observed with Hadoop cluster with Hive querying, please leave a comment and recommend this post by clicking  Facebook ‘Like’ button and ‘+1’ at bottom of this page.