大数据Hbase入门
目的
-
熟练使用HBase操作常用的Shell命令;
-
熟悉HBase操作常用的Java API。
平台
操作系统:Linux
Hadoop版本:2.6.0或以上版本
HBase版本:1.1.2或以上版本
JDK版本:1.6或以上版本
Java IDE:Eclipse
内容和要求
Hbase数据库练习
Shell练习
根据下面给出的表格,用Hbase Shell模式设计学生表格,表名用自己姓名全拼。
name | score | ||
---|---|---|---|
English | Math | Computer | |
zhangsan | 69 | 86 | 77 |
lisi | 55 | 100 | 88 |
首先设计表格
<1>设计完后,用scan指令浏览表的相关信息,给出截图。
<2>查询行键为zhangsan的各科成绩信息。给出截图。
<3>查询zhangsan 的Computer成绩。给出截图。
<4>插入一条新的学生数据(wangwu,100,90,90)
<5>修改lisi的Math成绩,改为95。给出截图。
<6>删除zhangsan的信息。给出截图。
Java API编程实例
基于Hbase shell进阶练习中已经设计出的学生表的基础上,用Hbase API编程完成下列两问。
<1>添加数据:Json,English:45 Math:89 Computer:100
name | score | ||
---|---|---|---|
English | Math | Computer | |
Json | 45 | 89 | 100 |
代码如下:
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
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.client.Put;
import org.apache.hadoop.hbase.client.Table;
public class ExampleForHbase {
/**
* @lizhuolang
*/
//三个静态成员对象
public static Configuration configuration;//管理HBase的配置信息
public static Connection connection;//管理HBase的连接
public static Admin admin; //管理HBase数据库的表信息
public static void main(String[] args) {
// TODO Auto-generated method stub
configuration = HBaseConfiguration.create();//使用默认的HBase配置文件创建configuration configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");//连接hbase
try{
connection = ConnectionFactory.createConnection(configuration);
admin = connection.getAdmin();
}catch (IOException e){
e.printStackTrace();
}
try {//插入的信息
insertRow("lizhuolang","Json","score","English","45");
insertRow("lizhuolang","Json","score","Math","89");
insertRow("lizhuolang","Json","score","Computer","100");
} catch (IOException e) {//异常处理
// TODO Auto-generated catch block
e.printStackTrace();
}
close();
}
public static void insertRow(String tableName,String rowKey,String colFamily,
String col,String val) throws IOException {
Table table = connection.getTable(TableName.valueOf(tableName));
Put put = new Put(rowKey.getBytes());
put.addColumn(colFamily.getBytes(), col.getBytes(), val.getBytes());
table.put(put);
table.close();
}
//关闭连接
public static void close(){
try{
if(admin != null){
admin.close();
}
if(null != connection){
connection.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
}
查看数据表的变化
<2>取Json的English成绩信息
代码如下:
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
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.client.Get;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Table;
public class hbase_query {
/**
* @lizhuolang
*/
//三个静态成员对象
public static Configuration configuration;//管理HBase的配置信息
public static Connection connection;//管理HBase的连接
public static Admin admin; //管理HBase数据库的表信息
public static void main(String[] args) {
// TODO Auto-generated method stub
configuration = HBaseConfiguration.create();//使用默认的HBase配置文件创建configuration
configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");//连接hbase
try{
connection = ConnectionFactory.createConnection(configuration);//连接hbase
admin = connection.getAdmin();
}catch (IOException e){
e.printStackTrace();
}
try {
getData("lizhuolang","Json","score","English");//获取scofield的English成绩信息
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
close();
}
public static void getData(String tableName,String rowKey,String colFamily,
String col)throws IOException{
Table table = connection.getTable(TableName.valueOf(tableName));
Get get = new Get(rowKey.getBytes());
get.addColumn(colFamily.getBytes(),col.getBytes());
Result result = table.get(get);//从指定的行的某些单元格中取出相应的值
showCell(result);
table.close();
}
public static void showCell(Result result){//显示结果信息函数
Cell[] cells = result.rawCells();
for(Cell cell:cells){
System.out.println("RowName:"+new String(CellUtil.cloneRow(cell))+" ");
System.out.println("Timetamp:"+cell.getTimestamp()+" ");
System.out.println("column Family:"+new String(CellUtil.cloneFamily(cell))+" ");
System.out.println("row Name:"+new String(CellUtil.cloneQualifier(cell))+" ");
System.out.println("value:"+new String(CellUtil.cloneValue(cell))+" ");
}
}
//关闭连接
public static void close(){
try{
if(admin != null){
admin.close();
}
if(null != connection){
connection.close(); }
}catch (IOException e){
e.printStackTrace();
}
}
}
结果如下:
Hbase创建表失败
今天创建table的时候总是报以下错误:
从网上找到几种方法:
<1>
停止hbase、hadoop;
删除datanode节点中的临时文件,;重新格式化namenode;
重起hadoop、hbase集群;
<2>
修改hbase配置文件hbase-site.xml,hbase.rootdir改成了hbase.root.dir
<3>
底层采用的不是hdfs协议,这个可以通过查看hbase-site.xml中参数hbase.rootdir的值来群定,一些其它的协议比如file协议等等,HBase也是支持的
<4>
用date命令看一下每个机器 如果时间差距大 说明确实有问题
<5>
先启动regionserver,在启动HMaster。
在regionServer上./hbase-daemon.sh start regionserver
在master上执行:./bin/hbase-daemon.sh start master
最后前四种方法都还是报错,只有最后一种成功
解决问题!
- 点赞
- 收藏
- 关注作者
评论(0)