Packt has $5 ebooks and videos today! http://bit.ly/1xaUtKh
Worth checking it out!
Packt has $5 ebooks and videos today! http://bit.ly/1xaUtKh
Worth checking it out!
It feels so good when girls go gaga when you say your a Masters student. And then more drooling when you say you are from the computer engineering department. No, I am not making up this stuff. Apparently they think about us making the next big Facebook. Aaah. That explains doesn’t it? They ask me “So you’ll get rich pretty soon right?” I don’t have the heart to say otherwise. Basically, I do love all the attention. 😛
Anyways, I was wondering. Why not make it big? I can’t own a Ferrari if I end up working in some company. Its true. But not everyone ends up with a successful start up either. But ya, who cares? I mean, people, we should just go for it. I loved this video. Inspires to learn coding. I’m putting it up on my wall. Because guys, programming is important.
 Strategy pattern defines a family of algorithms, encapsulates each one, and makes them interchangeable. It lets the algorithm vary independently from clients that use it.
Abstract Class: Duck.java
We create objects after sub classing it into a concrete class from an abstract type. In our case, is the Duck Class. This provides the basis for all the XxxDuck objects that are created. Two things to be mentioned;
package com.npk.strategy; public abstract class Duck { FlyBehavior flyBehavior; QuackBehavior quackBehavior; public abstract void display(); public void setFlyBehavior(FlyBehavior flyBehavior){ this.flyBehavior = flyBehavior; } public void setQuackBehavior(QuackBehavior quackBehavior){ this.quackBehavior = quackBehavior; } public void performFly(){ flyBehavior.fly(); } public void performQuack(){ quackBehavior.quack(); } public void performSwim(){ System.out.println("All ducks can swim!"); } }
Interface: FlyBehavior.java and QuackBehavior.java
Any variable behavior of an object are to be programmed to an interface.
This way, you get two things:
Both of which are good OO Designs aspects.
package com.npk.strategy; public interface FlyBehavior { public void fly(); } package com.npk.strategy; public interface QuackBehavior { public void quack(); }
Concrete Implementation: DummyDuck.java
We subclass the abstract Duck class to get a concrete DummyDuck class where we can set the behavior in the class constructor ( optional )
package com.npk.strategy; public class DummyDuck extends Duck { public DummyDuck(){ this.setFlyBehavior(new FlyNoWay()); this.setQuackBehavior(new SquekQuack()); } @Override public void display() { System.out.println("This is a dummy duck."); } }
Concrete classes: FlyNoWay.java and SquekQuack.java
These form the actual implementation of the FlyBehavior and the QuackBehavior interfaces respectively.
package com.npk.strategy; public class FlyNoWay implements FlyBehavior { @Override public void fly() { System.out.println("Cannot fly."); } } package com.npk.strategy; public class SquekQuack implements QuackBehavior { @Override public void quack() { System.out.println("Duck squeking."); } }
The Application Launcher We show two things here.
package com.npk.strategy; public class Launcher { public static void main(String[] args) { Duck duck = new DummyDuck(); duck.display(); duck.performFly(); duck.performQuack(); System.out.println("---------------------"); duck.setFlyBehavior(new FlyWithWings()); duck.setQuackBehavior(new MuteQuack()); duck.performFly(); duck.performQuack(); } }
The final output
This is a dummy duck. Cannot fly. Duck squeking. --------------------- Duck flying. Mute quack.
The craze for certifications. Does it prove anything at all? There are a couple of reasons why one may choose to certify.
“I need a job”
Of course, that is important. Maybe you are from a non Computer Science (CS) background and would like to jump in. Now, that’s a valid reason. And yes, the pay.
“I need to be good programmer”
Oooh oh! Okay, now we have a problem. There are a few things that cannot be replaced by hands on experience. I’ve been working for a year and a half now, and I will definitely not say something like that. Am I am better programmer now? Yes. This guy comes to me and says, “I am a kick ass Java programmer.”. I was amused actually. To feed his own ego, and out of devilish curiosity, I did ask him, “How come?”.
“I passed my SCJP exam. 96% \m/ “. Poor thing, I didn’t have the heart to tell him, “You are by no means, a good programmer. You are now an expert at Java syntax and a few important classes.”
“I know this is just a base certification, but this IS a requirement for higher certification from this company.”
Oh yes, of course. One of the saddest parts of certification. Why don’t they let you appear for the final thing? Commerialization. Don’t you think?
“I put in my time and money. It was a costly exam.”
Ya, this a good thing that prospective employers may like. That you are serious about your career and is putting that extra effort on your part.
“I just improved my overall knowledge about the subject”
The one thing I DO like about certifying. You know the stuff in and out now. And even those things you missed out at your workplace. Oh look, now you can apply your new found knowledge! 🙂
“What about the Comptia “plus” exams”
I have nothing against the company. Or their certifications. They are good. Yes. See this Top 10 2012 Techrepublic. But they are too basic and low level. If you are from a non CS background and have the money :P, please continue by all means.
“What about Sun..I mean Oracle certifications?”
Hmm..we did have a discussion on that. SCJP proves that you have good command over Java. That’s it. It can get a HR at a company to get you noticed. But yes, the ‘higher’ end certifications that require you to have ‘hands on’ or ‘practical stuff’, they are worthwhile. Again, you should have the time and money. I am not talking about the dedication, because you wouldn’t be reading this otherwise.
“I know RHCE is popular”
I know that. SO?
“It should be good, right?”
Depends on what you want to do. Yes, it is the most recognized Linux certification (industry). And more so because, it a hands on exam. But unfortunately, it doesn’t make you a good Admin with just the certification. And yes, I regret saying this, there are lot of corrupt practices going behind the scenes, esp between the testing center and the test taker. I hope its not the same everywhere. Like this guy trying to install (RHCE certified, ahem) tomcat on a Debian box. He goes, ” yum install tom..  “. Sigh.
“CCNA is good!”
Yes, always comes in the top IT certifications every year. But again, do you wish to go into the networking track?
“So, what then?”
Do a certification if you:
1. Wish to improve your knowledge base.
2. Change from a non IT background.
3. Specialize a certain subject.
4. Your employer is paying for your certification ( By all means, do it  )
5. Glorify your resume (Partly because there is nothing much on it)
6. Boost your ego (Have all those white papers hanging on the wall, show off)
7. Get your first job? (That’s what she said)
You might want to check out these before continuing:
https://linuxjunkies.wordpress.com/2010/11/18/data-structures-using-java-part-6-linked-lists-part-1/
ListNode Class
public class ListNode { Object data; ListNode nextNode; ListNode (Object object, ListNode node){ data = object; nextNode = node; } ListNode (Object object){ this(object,null); } Object getObject(){ return data; } ListNode getNext(){ return nextNode; } }
List Class
public class List { private ListNode firstNode; private ListNode lastNode; private String name; public List(){ this("list"); } public List(String listname){ name = listname; firstNode = lastNode = null; } public void insertAtFront(Object item){ if (isEmpty()) firstNode = lastNode = new ListNode(item); else firstNode = new ListNode(item, firstNode); } public void insertAtBack(Object item){ if (isEmpty()) firstNode = lastNode = new ListNode(item); else lastNode = lastNode.nextNode = new ListNode(item); } public Object removeFromFront() throws EmptyListException{ if (isEmpty()) throw new EmptyListException(name); Object removed = firstNode.data; if( firstNode == lastNode) firstNode = lastNode = null; else firstNode = firstNode.nextNode; return removed; } public Object removeFromBack() throws EmptyListException{ if (isEmpty()) throw new EmptyListException(name); Object removed = lastNode.data; if( firstNode == lastNode) firstNode = lastNode = null; else{ ListNode current = firstNode; while(current.nextNode != lastNode) current = current.nextNode; lastNode = current; current.nextNode = null; } return removed; } public boolean isEmpty(){ return firstNode == null; } public void print(){ if (isEmpty()){ System.out.println("List is empty"); return; } ListNode current = firstNode; while (current != null){ System.out.printf("%s --> ", current.data); current = current.nextNode; } System.out.println(); } public int length(){ int length = 0; if (isEmpty()){ return 0; } ListNode current = firstNode; while (current != null){ current = current.nextNode; length++; } return length; } public int recursiveSize(){ return recursiveLength(firstNode); } public int recursiveLength(ListNode current){ if (isEmpty()){ return 0; } if (current == null) return 0; return (1 + recursiveLength(current.nextNode)); } }
ListTest Class
public class ListTest { public static void main(String[] args){ List list = new List(); list.insertAtFront( "four" ); list.print(); list.insertAtFront( "two" ); list.print(); list.insertAtBack( "six" ); list.print(); list.insertAtBack( "nine" ); list.print(); System.out.printf("Length: %d%n", list.recursiveSize()); System.out.printf("Length: %d%n", list.length()); try{ System.out.printf( "%s removed\n", list.removeFromFront()); list.print(); System.out.printf( "%s removed\n", list.removeFromFront()); list.print(); System.out.printf( "%s removed\n", list.removeFromBack()); list.print(); System.out.printf( "%s removed\n", list.removeFromBack()); list.print(); }catch ( EmptyListException e ){ e.printStackTrace(); } System.out.printf("Length: %d%n", list.recursiveSize()); System.out.printf("Length: %d%n", list.length()); } }
This is what you get
four --> two --> four --> two --> four --> six --> two --> four --> six --> nine --> Length: 4 Length: 4 two removed four --> six --> nine --> four removed six --> nine --> nine removed six --> six removed List is empty Length: 0 Length: 0
Using StringBuffer Class
new StringBuffer(name).reverse().toString()
Using CharArray and StringBuilder
public static String charReverse(String data){ StringBuilder sb = new StringBuilder(); char[] ca = data.toCharArray(); for (int i=data.length()-1; i>=0;i--){ sb.append(ca[i]); } return sb.toString(); }
Using Recursion
public static String recursiveReverse(String data){ if (data.length() < 2) return data; return recursiveReverse(data.substring(1)) + data.charAt(0); }
StringReversal Class
public class StringReversal { public static void main (String[] args){ String name = "linuxjunkies"; System.out.println("StringBuffer: " + new StringBuffer(name).reverse().toString()); System.out.println("CharacterArray: " + charReverse(name)); System.out.println("Recursion: " + recursiveReverse(name)); } public static String charReverse(String data){ StringBuilder sb = new StringBuilder(); char[] ca = data.toCharArray(); for (int i=data.length()-1; i>=0;i--){ sb.append(ca[i]); } return sb.toString(); } public static String recursiveReverse(String data){ if (data.length() < 2) return data; return recursiveReverse(data.substring(1)) + data.charAt(0); } }
The Output
StringBuffer: seiknujxunil CharacterArray: seiknujxunil Recursion: seiknujxunil
TreeNode Class
public class TreeNode{ TreeNode leftNode; TreeNode rightNode; int data; public TreeNode(int value){ data = value; leftNode = rightNode = null; } public void insert(int value){ if (value < data){ if (leftNode == null) leftNode = new TreeNode(value); else leftNode.insert(value); } else if (value > data){ if (rightNode == null) rightNode = new TreeNode(value); else rightNode.insert(value); } } }
Preorder Traversal
preorder(node) if node = null then return print node.value preorder(node.left) preorder(node.right)
Postorder Traversal
postorder(node) if node = null then return postorder(node.left) postorder(node.right) print node.value
Inorder Traversal
inorder(node) if node = null then return inorder(node.left) print node.value inorder(node.right)
Queue based Level order Traversal
levelorder(root) q = empty queue q.enqueue(root) while not q.empty do node := q.dequeue() visit(node) if node.left ≠null q.enqueue(node.left) if node.right ≠null q.enqueue(node.right)
Tree Class
public class Tree { private TreeNode root; Queue queue = new Queue(); public Tree(){ root = null; } public void insertNode(int value){ if ( root == null) root = new TreeNode(value); else root.insert(value); } public void preorderTraversal(){ preorder(root); } public void inorderTraversal(){ inorder(root); } public void postorderTraversal(){ postorder(root); } public void levelorderTraversal(){ levelorder(root); } public void levelorder(TreeNode node){ if (node == null) return; if (node == root) queue.offer(node); if (node.leftNode != null) queue.offer(node.leftNode); if (node.rightNode != null) queue.offer(node.rightNode); System.out.printf("%d ", queue.poll().data); levelorder(queue.peek()); } public void preorder(TreeNode node){ if (node == null) return; System.out.printf("%d ", node.data); preorder(node.leftNode); preorder(node.rightNode); } public void postorder(TreeNode node){ if (node == null) return; postorder(node.leftNode); postorder(node.rightNode); System.out.printf("%d ", node.data); } public void inorder(TreeNode node){ if (node == null) return; inorder(node.leftNode); System.out.printf("%d ", node.data); inorder(node.rightNode); } }
TreeTest Class
import java.util.Random; public class TreeTest { public static void main(String[] args){ Tree tree = new Tree(); int value; Random random = new Random(); System.out.println("Inserting values"); for (int i=1; i<=10;i++){ value=random.nextInt(100); System.out.printf("%d ", value); tree.insertNode(value); } System.out.println(); System.out.println("Preorder"); tree.preorderTraversal(); System.out.println(); System.out.println("Postorder"); tree.postorderTraversal(); System.out.println(); System.out.println("Inorder"); tree.inorderTraversal(); System.out.println(); System.out.println("Levelorder"); tree.levelorderTraversal(); } }
Of course, you need the Queue DS for level order traversal.
import java.util.ArrayList; import java.util.List; public class Queue { private List qlist; public Queue(){ qlist = new ArrayList(); } public void offer(TreeNode o){ if (qlist.isEmpty()) qlist.add(0, o); else qlist.add(qlist.size(), o); } public TreeNode poll(){ if (qlist.isEmpty()) return null; else return qlist.remove(0); } public TreeNode peek(){ if (qlist.isEmpty()) return null; else return qlist.get(0); } }
And finally the output
Inserting values 87 77 81 89 4 26 23 27 57 1 Preorder 87 77 4 1 26 23 27 57 81 89 Postorder 1 23 57 27 26 4 81 77 89 87 Inorder 1 4 23 26 27 57 77 81 87 89 Levelorder 87 77 89 4 81 1 26 23 27 57
I have not given a formal introduction on HBase, but this post will help those who have already set up and have an active HBase installation. I will be dealing with the administrative work that can be done on HBase using the Java API. The API is vast and easy to use. I have explained the code wherever I find it necessary, but this
post is by all means incomplete. I have as usual, provided the full code at the end. Cheers. 🙂
If you want to follow along your better import all this, or if you are using an IDE like Eclipse, you’ll follow along just fine as it automatically fixes up your imports. The only thing you need to do is to set the class path to include all the jar files from the hadoop installation and/or hbase installation, especially the hadoop-0.*.*-core.jar and the jar files inside the lib folder. I’ll put in another post on that later.
import java.io.IOException; import java.util.Collection; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.ClusterStatus; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HServerInfo; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.MasterNotRunningException; import org.apache.hadoop.hbase.ZooKeeperConnectionException; import org.apache.hadoop.hbase.client.HBaseAdmin; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.util.Bytes;
1. Creating a table in HBase
public void createTable (String tablename, String familyname) throws IOException { Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); HTableDescriptor tabledescriptor = new HTableDescriptor(Bytes.toBytes(tablename)); tabledescriptor.addFamily(new HColumnDescriptor (familyname)); admin.createTable(tabledescriptor); }
2. Adding a column to an existing table
public void addColumn (String tablename, String colunmnname) throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); admin.addColumn(tablename, new HColumnDescriptor (colunmnname)); System.out.println("Added column : " + colunmnname + "to table " + tablename); }
3. Deleting a column to an existing table
public void delColumn (String tablename, String colunmnname) throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); admin.deleteColumn(tablename, colunmnname); System.out.println("Deleted column : " + colunmnname + "from table " + tablename); }
4. Check if your hbase cluster is running properly
public static void checkIfRunning() throws MasterNotRunningException, ZooKeeperConnectionException{ //Create the required configuration. Configuration conf = HBaseConfiguration.create(); //Check if Hbase is running try{ HBaseAdmin.checkHBaseAvailable(conf); }catch(Exception e){ System.err.println("Exception at " + e); System.exit(1); } }
5. Major compaction
public void majorCompact (String mytable) throws IOException{ //Create the required configuration. Configuration conf = HBaseConfiguration.create(); //Instantiate a new client. HTable table = new HTable(conf,mytable); HBaseAdmin admin = new HBaseAdmin(conf); String tablename = table.toString(); try{ admin.majorCompact(tablename); System.out.println("Compaction done!"); }catch(Exception e){ System.out.println(e); } }
6. Minor compaction
public void minorcompact(String trname) throws IOException, InterruptedException{ //Create the required configuration. Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); admin.compact(trname); }
7. Print out the cluster status.
public ClusterStatus getclusterstatus () throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); return admin.getClusterStatus(); }
8. Get all the cluster details.
public void printClusterDetails() throws IOException{ ClusterStatus status = getclusterstatus(); status.getServerInfo(); Collection serverinfo = status.getServerInfo(); for (HServerInfo s : serverinfo){ System.out.println("Servername " + s.getServerName()); System.out.println("Hostname " + s.getHostname()); System.out.println("Hostname:Port " + s.getHostnamePort()); System.out.println("Info port" + s.getInfoPort()); System.out.println("Server load " + s.getLoad().toString()); System.out.println(); } String version = status.getHBaseVersion(); System.out.println("Version " + version); int regioncounts = status.getRegionsCount(); System.out.println("Regioncounts :" + regioncounts); int servers = status.getServers(); System.out.println("Servers :" + servers); double averageload = status.getAverageLoad(); System.out.println("Average load: " + averageload); int deadservers = status.getDeadServers(); System.out.println("Deadservers : " + deadservers); Collection Servernames = status.getDeadServerNames(); for (String s : Servernames ){ System.out.println("Dead Servernames " + s); } }
9. Disable a table.
public void disabletable(String tablename) throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); admin.disableTable(tablename); }
10. Enable a table
public void enabletable(String tablename) throws IOException{ //Create the required configuration. Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); admin.enableTable(tablename); }
11. Delete a table.
public void deletetable(String tablename) throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); admin.deleteTable(tablename); }
12. Check if table is available
public void isTableAvailable(String tablename) throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); boolean result = admin.isTableAvailable(tablename); System.out.println("Table " + tablename + " available ?" + result); }
13. Check if table is enabled
public void isTableEnabled(String tablename) throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); boolean result = admin.isTableEnabled(tablename); System.out.println("Table " + tablename + " enabled ?" + result); }
14. Check if table is disabled
public void isTableDisabled(String tablename) throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); boolean result = admin.isTableDisabled(tablename); System.out.println("Table " + tablename + " disabled ?" + result); }
15. Check if table exists.
public void tableExists(String tablename) throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); boolean result = admin.tableExists(tablename); System.out.println("Table " + tablename + " exists ?" + result); }
16. List all tables
public void listTables () throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); admin.listTables(); }
17. Flush tables.
public void flush(String trname) throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); admin.disableTable(trname); }
18. Shutdown hbase.
public void shutdown() throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); System.out.println("Shutting down.."); admin.shutdown(); }
19. Modify column for a table.
@SuppressWarnings("deprecation") public void modifyColumn(String tablename, String columnname, String descriptor) throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); admin.modifyColumn(tablename, columnname, new HColumnDescriptor(descriptor)); }
20. Modify the avilable table.
public void modifyTable(String tablename, String newtablename) throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); admin.modifyTable(Bytes.toBytes(tablename), new HTableDescriptor(newtablename)); }
21. Split based on tablename.
public void split(String tablename) throws IOException, InterruptedException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); admin.split(tablename); }
22. Check if master is running.
public void isMasterRunning() throws MasterNotRunningException, ZooKeeperConnectionException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin administer = new HBaseAdmin(conf); System.out.println( "Master running ? "+ administer.isMasterRunning()); }
There are lots more, you can check the Java API for HBase and prepare more. I found all this necessary. And some well..
The full listing of the code:
/* * Hbase administration basic tools. * * */ import java.io.IOException; import java.util.Collection; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.ClusterStatus; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HServerInfo; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.MasterNotRunningException; import org.apache.hadoop.hbase.ZooKeeperConnectionException; import org.apache.hadoop.hbase.client.HBaseAdmin; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.util.Bytes; public class HbaseAdmin { public HbaseAdmin(){ } public void addColumn (String tablename, String colunmnname) throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); admin.addColumn(tablename, new HColumnDescriptor (colunmnname)); System.out.println("Added column : " + colunmnname + "to table " + tablename); } public void delColumn (String tablename, String colunmnname) throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); admin.deleteColumn(tablename, colunmnname); System.out.println("Deleted column : " + colunmnname + "from table " + tablename); } public void createTable (String tablename, String familyname) throws IOException { Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); HTableDescriptor tabledescriptor = new HTableDescriptor(Bytes.toBytes(tablename)); tabledescriptor.addFamily(new HColumnDescriptor (familyname)); admin.createTable(tabledescriptor); } public void majorCompact (String mytable) throws IOException{ //Create the required configuration. Configuration conf = HBaseConfiguration.create(); //Instantiate a new client. HTable table = new HTable(conf,mytable); HBaseAdmin admin = new HBaseAdmin(conf); String tablename = table.toString(); try{ admin.majorCompact(tablename); System.out.println("Compaction done!"); }catch(Exception e){ System.out.println(e); } } public static void checkIfRunning() throws MasterNotRunningException, ZooKeeperConnectionException{ //Create the required configuration. Configuration conf = HBaseConfiguration.create(); //Check if Hbase is running try{ HBaseAdmin.checkHBaseAvailable(conf); }catch(Exception e){ System.err.println("Exception at " + e); System.exit(1); } } public void minorcompact(String trname) throws IOException, InterruptedException{ //Create the required configuration. Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); admin.compact(trname); } public void deletetable(String tablename) throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); admin.deleteTable(tablename); } public void disabletable(String tablename) throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); admin.disableTable(tablename); } public void enabletable(String tablename) throws IOException{ //Create the required configuration. Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); admin.enableTable(tablename); } public void flush(String trname) throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); admin.disableTable(trname); } public ClusterStatus getclusterstatus () throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); return admin.getClusterStatus(); } public void printClusterDetails() throws IOException{ ClusterStatus status = getclusterstatus(); status.getServerInfo(); Collection serverinfo = status.getServerInfo(); for (HServerInfo s : serverinfo){ System.out.println("Servername " + s.getServerName()); System.out.println("Hostname " + s.getHostname()); System.out.println("Hostname:Port " + s.getHostnamePort()); System.out.println("Info port" + s.getInfoPort()); System.out.println("Server load " + s.getLoad().toString()); System.out.println(); } String version = status.getHBaseVersion(); System.out.println("Version " + version); int regioncounts = status.getRegionsCount(); System.out.println("Regioncounts :" + regioncounts); int servers = status.getServers(); System.out.println("Servers :" + servers); double averageload = status.getAverageLoad(); System.out.println("Average load: " + averageload); int deadservers = status.getDeadServers(); System.out.println("Deadservers : " + deadservers); Collection Servernames = status.getDeadServerNames(); for (String s : Servernames ){ System.out.println("Dead Servernames " + s); } } public void isTableAvailable(String tablename) throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); boolean result = admin.isTableAvailable(tablename); System.out.println("Table " + tablename + " available ?" + result); } public void isTableEnabled(String tablename) throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); boolean result = admin.isTableEnabled(tablename); System.out.println("Table " + tablename + " enabled ?" + result); } public void isTableDisabled(String tablename) throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); boolean result = admin.isTableDisabled(tablename); System.out.println("Table " + tablename + " disabled ?" + result); } public void tableExists(String tablename) throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); boolean result = admin.tableExists(tablename); System.out.println("Table " + tablename + " exists ?" + result); } public void shutdown() throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); System.out.println("Shutting down.."); admin.shutdown(); } public void listTables () throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); admin.listTables(); } @SuppressWarnings("deprecation") public void modifyColumn(String tablename, String columnname, String descriptor) throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); admin.modifyColumn(tablename, columnname, new HColumnDescriptor(descriptor)); } public void modifyTable(String tablename, String newtablename) throws IOException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); admin.modifyTable(Bytes.toBytes(tablename), new HTableDescriptor(newtablename)); } public void split(String tablename) throws IOException, InterruptedException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); admin.split(tablename); } public void isMasterRunning() throws MasterNotRunningException, ZooKeeperConnectionException{ Configuration conf = HBaseConfiguration.create(); HBaseAdmin administer = new HBaseAdmin(conf); System.out.println( "Master running ? "+ administer.isMasterRunning()); } public static void main (String[] args) throws IOException{ HbaseAdmin admin = new HbaseAdmin(); //Check if Hbase is running properly HbaseAdmin.checkIfRunning(); admin.printClusterDetails(); //other functions based on arguments. } }
And hey, I’ll update this post soon with more details especially about compaction and stuff! Till then Cheers! 🙂
You will definitely need to do some math sometime or the other on the shell. As always ‘expr’ was the most popular thing out there to do complicated mathematical expressions. I was looking at some other options as well when I came across the bc and dc tools. I will explain each one of them in this post.
expr
This is by far the most famous for doing some math on the bash shell. There are two kinds mainly. One on string expressions and then the usual numericals. I would be writing about the later.
expr 40 % 5 0 expr 40 / 5 8 expr 40 / 5 / 8 1 expr 40 / 5 / 8 + 1 2 expr 40 / 5 / 8 + 1 * 10 expr: syntax error
Of course, while doing multiplication you need to use the escaped character ‘\’ backslash. And thus,
expr 40 / 5 / 8 + 1 \* 10 11
The brackets, division, multiplication, addition and subtraction rules also govern here. Now lets look at the others.
bc
This is a language bc that supports arbitrary precision numbers with interactive execution of statements. It starts by processing code from all the files listed on the command line in the order listed. Now a neat way to calculate stuff is:
echo 2*30/3 | bc 20 echo "20 + 5 * 3" | bc 35
Again this follows the basic BODMAS rules.
dc
Stands for desk calculator. Its an interactive calculator on the shell. It supports the basic arithmetic and uses the standard + – / * symbols but entered after the digits. Once you enter the symbol, get the calculated output by passing ‘p’ similar to our ‘=’ symbol on the calculator. And you can keep going.
dc 98 9 * p 882 10 / p 88
If I find more useful tools, I’ll update this post. If you have better ideas to implement this, feel free to suggest!