Eclipse增大Java源代码文件字体大小:
打开菜单【window】-》【Perference】,在弹出的Perference对话框的左边栏中,选择General->Appearance->Colors and Fonts,
再点击右边栏的Java->Java Editor Text Fonts,再点击右边【Edit】按钮,弹出字体对话框,选择字体为小四后点【确定】
HBase Java API编程涉及到的Java语法点:
0) 一切都是对象,把事物、东西、操作、动作、名词、动词都可以抽象成一个类;面向对象的四大特性:抽象、封装、继承、多态
1)Java包package,import导入包
2)java类class,访问控制级别puclic,protect,private
3)static定义类的静态成员变量, 类名.成员变量名
public static Configuration configuration;
isTableExist.configuration
4)静态代码块:static {} 定义一个静态代码块,语句只会在类初始化的时候执行一次,可用于初始化类的静态成员变量
非静态代码块
5)类的静态成员方法,属于整个类,类名.方法名()
6)父类、子类,extends类的继承:HBaseConfiguration extends Configuration
父类指向其子类的对象
代码示例:
package testHBase;
class A
{
void m()
{
System.out.println("m() of class A is called");
}
}
class B extends A
{
void m()
{
System.out.println("m() of class B is called");
}
}
class C extends A
{
void m()
{
System.out.println("m() of class C is called");
}
}
public class testSubClass
{
public static void main(String[] args)
{
// A a = new A();
// B b = new B();
// C c = new C();
// a.m();
// b.m();
// c.m();
A a = new B();
a.m();
a = new C();
a.m();
}
}
//多态性的体现
Java多态性的体现
7)Java设计模式:工厂模式 ConnetionFactory
8)Java接口Interface,类implement继承一个接口,接口是不允许实例化,接口方法都只有声明没有实现,在其实现类中实现接口方法
接口vs抽象类 对比
interface Connection
9)Java接口类型的变量可以引用其实现类的对象 HConnectionImplementation连接实现类,间接的实现了Coonecion接口
HConnectionImplementation implements ClusterConnection
ClusterConnection extends HConnection
HConnection extends Connection
Connection connection = ConnectionFactory.createConnection(configuration);
HBaseAdmin implements Admin
Admin admin = new HBaseAdmin(this);
admin.tableExists();
面向接口编程的好处,能消除对象引用和方法调用的耦合性,降低耦合性,Java多态性的体现
9)Java接口也存在继承关系,接口的继承HConnection extends Connection
10)Java内部类:类A里包含另一个类B,HConnectionImplementation类是ConnectionManager类的内部类
11) setClassLoader 类加载器 Java反射机制
12)Java类中的方法名不能和类名相同(方法名和类名相同的方法是构造方法)
13) 方法的重载,类中定义多个同名方法,但是方法的参数不同,方法的功能也不相同
HBase Java API 编程实验:
运行第1个HBase Java API程序:
1)启动VirtualBox虚拟机HBaes伪分布式,依次执行执行start-dfs.sh 脚本启动HDFS,再执行start-hbase.sh 脚本启动HBase
2)打开桌面图标"eclipse.exe",启动Java IDE(集成开发环境)Eclipse,查看Eclipse界面的左边栏,已经存在一个项目testHBase
3)Linux终端执行hbase shell命令,进入HBase Shell命令行终端,执行list命令,查看当前的数据表,应该有一张students表
如果students表不存在,在HBase Shell命令行终端执行create 'students', 'info', 'score'创建studets表
4)Linux终端执行hostname命令,查看主机名称,应该是master
5) 打开testHBase.java源代码文件,检查以下两行代码:
configuration.set("hbase.zookeeper.quorum", "hadoop"); //第2个参数是当前的主机名称,应该是maser
TableName tableName = TableName.valueOf("students"); //students应该是HBase已经存在的表
6)点击Eclipse上面的绿色按钮,运行testHBase项目,等待运行结果
7)查看下面Console栏中的输出,应该输出Table exists
8)修改代码为 TableName tableName = TableName.valueOf("students1"); //students1是HBase不存在的表
9)重复执行6)和7)步骤,查看下面Console栏中的输出,应该输出Table dose not exists
运行第2个HBase Java API程序:
1)鼠标右键点击Eclise左边的项目testHBase,右键菜单选择【new】-》【class】,会弹出一个"New Java Class'对话框
2)在对话框的Name文本框中,输入Java Class类名isTableExist,点击【Finish按钮】
3)将以下代码小心复制粘贴到isTableExist.java源码文件中,完全覆盖掉原来的代码
4)记得修改代码行 configuration.set("hbase.zookeeper.quorum", "master"); 的主机名为master
5)点击Eclipse上面的绿色按钮,运行testHBase项目,等待运行结果
6)查看下面Console栏中的输出,应该输出Table exists
7)修改代码行 boolean isExists = isTableExist("students1"); 应该输出Table dose not exists
package testHBase;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.TableName;
public class isTableExist
{
//定义一个类的静态成员类对象Configuration
public static Configuration configuration;//static是静态变量,类的变量,可以通过“类名.静态变量:名来使用
//不带static是对象的成员变量,,可以通过“类的对象名.成员变量名:名来使用
//使用HBaseConfiguration的静态方法创建一个Configuration类的对象,并设置关键配置参数ZooKeeper
static //static代码块的语句,不需要在对类实例化的时候每次都执行
{
configuration = HBaseConfiguration.create(); //HBaseConfiguration类继承了Configuration类,调用子类HBaseConfiguration的create静态方法,创建一个拥有HBase资源的父类对象
configuration.set("hbase.zookeeper.quorum", "hadoop");
}
// static void init()
// {
// configuration = HBaseConfiguration.create();
// configuration.set("hbase.zookeeper.quorum", "hadoop");
// }
//实现判断表是否存在的方法,输入参数是表名
public static boolean TableExist(String tableName) throws IOException
{
// Connection connection = new Connection();
Connection connection = ConnectionFactory.createConnection(configuration);
// System.out.println(connection.getClass().getName());
// Admin admin = new Admin();
Admin admin = connection.getAdmin();//实质相当于执行Admin admin = new HBaseAdmin();
TableName tableNameObj = TableName.valueOf(tableName);
boolean isExists = admin.tableExists(tableNameObj);
return isExists;
}
public static void main(String[] args) throws IOException
{
// isTableExists.init();
boolean isExists = TableExist("students");
// boolean isExists = TableExist("students1");
if(isExists)
{
System.out.println("Table exists");
}
else
{
System.out.println("Table dose not exists");
}
}
}
运行第3个HBase Java API程序:
1)鼠标右键点击Eclise左边的项目testHBase,右键菜单选择【new】-》【class】,会弹出一个"New Java Class'对话框
2)在对话框的Name文本框中,输入Java Class类名createTable,点击【Finish按钮】
3)将以下代码小心复制粘贴到createTable.java源码文件中,完全覆盖掉原来的代码
4)记得修改代码行 configuration.set("hbase.zookeeper.quorum", "master"); 的主机名为master
5)点击Eclipse上面的绿色按钮,运行testHBase项目,等待运行结果
6)在HBase Shell命令行终端,执行list命令,查看当前的数据表,应该新增加一张testTable表
代码如下:
package testHBase;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.TableName;
public class createTable
{
//定义类的静态成员类对象
public static Configuration configuration;
public static Connection connection;
public static Admin admin;
//将创建配置类和连接类的代码重构为静态代码块,有利于代码的复用
//使用 HBaseConfiguration 的静态方法创建一个Configuration类的对象
static
{
configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum", "hadoop");
}
//使用 ConnectionFactory的静态方法创建一个Connection类的对象
static
{
try
{
connection = ConnectionFactory.createConnection(configuration);
admin = connection.getAdmin();
}
catch (IOException e)
{
e.printStackTrace();
}
}
//实现创建一张表的方法,输入参数是表名和列族名,创建只包含一个列族的表
public static void createATable(String tName, String cfName) throws IOException
{
TableName tableName = TableName.valueOf(tName);
HTableDescriptor tableDescriptor = new HTableDescriptor(tableName);
HColumnDescriptor columnDescriptor = new HColumnDescriptor(cfName);
tableDescriptor.addFamily(columnDescriptor);
admin.createTable(tableDescriptor);
}
//方法的重载,类中定义多个同名方法,但是方法的参数不同,方法的功能也不相同
public static void createATable(String strTableName, String[] strColumnFamilyNames) throws IOException
{
TableName tableName = TableName.valueOf(strTableName);
HTableDescriptor tableDescriptor = new HTableDescriptor(tableName);
for(String strColumnFamilyName:strColumnFamilyNames)
{
HColumnDescriptor columnDescriptor = new HColumnDescriptor(strColumnFamilyName);
tableDescriptor.addFamily(columnDescriptor);
}
admin.createTable(tableDescriptor);
}
public static void main(String[] args) throws IOException
{
// 执行创建一张新表的方法,只能指定一个列族
createATable("testTable", "f1");
//执行创建一张新表的方法,可指定多个列族
// String[] columnFamilies = new String[] {"columnFamily1", "columnFamily2", "columnFamily3"};
// createATable("testTable2", columnFamilies);
}
}
运行第4个HBase Java API程序:
1)鼠标右键点击Eclise左边的项目testHBase,右键菜单选择【new】-》【class】,会弹出一个"New Java Class'对话框
2)在对话框的Name文本框中,输入Java Class类名deleteTable,点击【Finish按钮】
3)将以下代码小心复制粘贴到deleteTable.java源码文件中,完全覆盖掉原来的代码
4)记得修改代码行 configuration.set("hbase.zookeeper.quorum", "master"); 的主机名为master
5)修改代码行:boolean isDeleted = deleteATable("t3"); 表名修改成要删除的表名,HBase Shell终端执行list命令查看已存在的表
6)点击Eclipse上面的绿色按钮,运行testHBase项目,等待运行结果
7)在HBase Shell命令行终端,执行list命令,查看当前的数据表,应该会删除指定的数据表
代码如下:
package testHBase;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.TableName;
public class deleteTable
{
//定义类的静态成员类对象
public static Configuration configuration;
public static Connection connection;
public static Admin admin;
//将创建配置类和连接类的代码重构为静态代码块,有利于代码的复用
//使用 HBaseConfiguration 的静态方法创建一个Configuration类的对象
static
{
configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum", "hadoop");
}
//使用 ConnectionFactory的静态方法创建一个Connection类的对象
static
{
try
{
connection = ConnectionFactory.createConnection(configuration);
admin = connection.getAdmin();
}
catch (IOException e)
{
e.printStackTrace();
}
}
//实现删除一张表的方法,输入参数是表名,返回是否删除成功
public static boolean deleteATable(String tName) throws IOException
{
if(!admin.tableExists(TableName.valueOf(tName))) //如果表不存在,不执行删除直接返回
{
System.out.println("Table dose not exists");
return