HBase shell操作及Java API

创建表
>create 'users','user_id','address','info'
表users,有三个列族user_id,address,info
列出全部表
>list
得到表的描述
>describe 'users'

创建表
>create 'users_tmp','user_id','address','info'
删除表
>disable 'users_tmp'
>drop 'users_tmp'

新增测试数据:

put 'users','xiaoming','info:age','24';
put 'users','xiaoming','info:birthday','1987-06-17';
put 'users','xiaoming','info:company','alibaba';
put 'users','xiaoming','address:contry','china';
put 'users','xiaoming','address:province','zhejiang';
put 'users','xiaoming','address:city','hangzhou';
put 'users','zhangyifei','info:birthday','1987-4-17';
put 'users','zhangyifei','info:favorite','movie';
put 'users','zhangyifei','info:company','alibaba';
put 'users','zhangyifei','address:contry','china';
put 'users','zhangyifei','address:province','guangdong';
put 'users','zhangyifei','address:city','jieyang';
put 'users','zhangyifei','address:town','xianqiao';

获取一条记录
1.取得一个id的所有数据
>get 'users','xiaoming'

2.获取一个id,一个列族的所有数据
>get 'users','xiaoming','info'

3.获取一个id,一个列族中一个列的
所有数据
get 'users','xiaoming','info:age'


更新记录
>put 'users','xiaoming','info:age' ,'29'
>get 'users','xiaoming','info:age'
>put 'users','xiaoming','info:age' ,'30'
>get 'users','xiaoming','info:age'
获取单元格数据的版本数据
>get 'users','xiaoming',{COLUMN=>'info:age',VERSIONS=>1}
>get 'users','xiaoming',{COLUMN=>'info:age',VERSIONS=>2}
>get 'users','xiaoming',{COLUMN=>'info:age',VERSIONS=>3}
获取单元格数据的某个版本数据
〉get 'users','xiaoming',{COLUMN=>'info:age',TIMESTAMP=>1364874937056}
全表扫描
>scan 'users'


删除xiaoming值的'info:age'字段
>delete 'users','xiaoming','info:age'
>get 'users','xiaoming'
删除整行
>deleteall 'users','xiaoming'
统计表的行数
>count 'users'
清空表
>truncate 'users'


JAVA API

//hbase操作必备
    private static Configuration getConfiguration() {
        Configuration conf = HBaseConfiguration.create();
        conf.set("hbase.rootdir", "hdfs://hadoop0:9000/hbase");
        //使用eclipse时必须添加这个,否则无法定位
        conf.set("hbase.zookeeper.quorum", "hadoop0");
        return conf;
    }

//创建一张表
public static void create(String tableName, String columnFamily) throws IOException{
	HBaseAdmin admin = new HBaseAdmin(getConfiguration());
	if (admin.tableExists(tableName)) {
		System.out.println("table exists!");
	}else{
		HTableDescriptor tableDesc = new HTableDescriptor(tableName);
		tableDesc.addFamily(new HColumnDescriptor(columnFamily));
		admin.createTable(tableDesc);
		System.out.println("create table success!");
	}
}

//添加一条记录
public static void put(String tableName, String row, String columnFamily, String column, String data) throws IOException{
	HTable table = new HTable(getConfiguration(), tableName);
	Put p1 = new Put(Bytes.toBytes(row));
	p1.add(Bytes.toBytes(columnFamily), Bytes.toBytes(column), 	Bytes.toBytes(data));
	table.put(p1);
	System.out.println("put'"+row+"',"+columnFamily+":"+column+"','"+data+"'");
}

//读取一条记录
public static void get(String tableName, String row) throws IOException{
	HTable table = new HTable(getConfiguration(), tableName);
	Get get = new Get(Bytes.toBytes(row));
	Result result = table.get(get);
	System.out.println("Get: "+result);
}

//显示所有数据
public static void scan(String tableName) throws IOException{
	HTable table = new HTable(getConfiguration(), tableName);
	Scan scan = new Scan();
	ResultScanner scanner = table.getScanner(scan);
	for (Result result : scanner) {
		System.out.println("Scan: "+result);
	}
}

//删除表
public static void delete(String tableName) throws IOException{
	HBaseAdmin admin = new HBaseAdmin(getConfiguration());
	if(admin.tableExists(tableName)){
		try {
		  admin.disableTable(tableName);
		  admin.deleteTable(tableName);
		} catch (IOException e) {
		  e.printStackTrace();
		  System.out.println("Delete "+tableName+" 失败");
		}
	}
	System.out.println("Delete "+tableName+" 成功");
}

public static void main(String[] args) throws IOException {
	String tableName="hbase_tb";
	String columnFamily="cf";
	
	HBaseTestCase.create(tableName, columnFamily);
	HBaseTestCase.put(tableName, "row1", columnFamily, "cl1", "data");
	HBaseTestCase.get(tableName, "row1");
	HBaseTestCase.scan(tableName);
	HBaseTestCase.delete(tableName);
}

HBASE结合MapReduce批量导入

static class BatchImportMapper extends Mapper<LongWritable, Text, LongWritable, Text>{
	SimpleDateFormat dateformat1=new SimpleDateFormat("yyyyMMddHHmmss");
	Text v2 = new Text();
	
	protected void map(LongWritable key, Text value, Context context) throws java.io.IOException ,InterruptedException {
		final String[] splited = value.toString().split("\t");
		try {
			final Date date = new Date(Long.parseLong(splited[0].trim()));
			final String dateFormat = dateformat1.format(date);
			String rowKey = splited[1]+":"+dateFormat;
			v2.set(rowKey+"\t"+value.toString());
			context.write(key, v2);
		} catch (NumberFormatException e) {
			final Counter counter = context.getCounter("BatchImport", "ErrorFormat");
			counter.increment(1L);
			System.out.println("出错了"+splited[0]+" "+e.getMessage());
		}
	};
}

reduce函数

static class BatchImportReducer extends TableReducer<LongWritable, Text, NullWritable>{
	protected void reduce(LongWritable key, java.lang.Iterable<Text> values, 	Context context) throws java.io.IOException ,InterruptedException {
		for (Text text : values) {
			final String[] splited = text.toString().split("\t");
			
			final Put put = new Put(Bytes.toBytes(splited[0]));
			put.add(Bytes.toBytes("cf"), Bytes.toBytes("date"), Bytes.toBytes(splited[1]));
			//省略其他字段,调用put.add(....)即可
			context.write(NullWritable.get(), put);
		}
	};
}

public static void main(String[] args) throws Exception {
		final Configuration configuration = new Configuration();
		//设置zookeeper
		configuration.set("hbase.zookeeper.quorum", "hadoop0");
		//设置hbase表名称
		configuration.set(TableOutputFormat.OUTPUT_TABLE, "wlan_log");
		//将该值改大,防止hbase超时退出
		configuration.set("dfs.socket.timeout", "180000");
		
		final Job job = new Job(configuration, "HBaseBatchImport");
		
		job.setMapperClass(BatchImportMapper.class);
		job.setReducerClass(BatchImportReducer.class);
		//设置map的输出,不设置reduce的输出类型
		job.setMapOutputKeyClass(LongWritable.class);
		job.setMapOutputValueClass(Text.class);
		
		job.setInputFormatClass(TextInputFormat.class);
		//不再设置输出路径,而是设置输出格式类型
		job.setOutputFormatClass(TableOutputFormat.class);
		
		FileInputFormat.setInputPaths(job, "hdfs://hadoop0:9000/input");
		
		job.waitForCompletion(true);
	}








  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值