最近用java从hbase中 做spark清洗,由于需要根据key模糊查询,便在网上找了各种资料,凑合一块儿给弄出来了。
1、获取spark上下文,其中的 PropertiesUtils 是一个工具类,可以自己去写,就是加载spark的配置文件
public static JavaSparkContext getSparkConf() {
SparkConf sparkConf = new SparkConf();
Properties properties = PropertiesUtils.loadProperties("spark.properties");
Set
for (String propertiesName : propertiesNameSet) {
sparkConf.set(propertiesName, properties.getProperty(propertiesName));
}
return new JavaSparkContext(sparkConf);;
}
2、获取hbase的配置文件
public static Configuration getHbaseConfig() {
Properties properties = PropertiesUtils.loadProperties("hbase.properties");
Set
Configuration hbaseConfig = HBaseConfiguration.create();
for (String propertiesName : propertiesNameSet) {
hbaseConfig.set(propertiesName, properties.getProperty(propertiesName));
}
return hbaseConfig;
}
3、获取scan的String对象 COLUMN_FAMILY_BYTES为列族,ROW_PREFIX为rowkey前缀
public static String buildScanString(){
Scan scan = new Scan();
scan.addFamily(COLUMN_FAMILY_BYTES);
scan.setCacheBlocks(false);
Filter filter = new PrefixFilter(Bytes.toBytes(ROW_PREFIX));
scan.setFilter(filter);
ClientProtos.Scan proto = null;
try {
proto = ProtobufUtil.toScan(scan);
} catch (IOException e) {
e.printStackTrace();
}
return Base64.encodeBytes(proto.toByteArray());
}
4、获取rdd
public static JavaRDD
hbaseConfig.set(TableInputFormat.INPUT_TABLE, INPUT_HBASE_TABLE_NAME);
hbaseConfig.set(TableInputFormat.SCAN,buildScanString());
JavaPairRDD
JavaRDD
Long count = resultRdd.count();
System.out.println("count: " + count);
return resultRdd;
}
以上只要打印出条数便说明程序正确运行了,在正式运行时可以把Long count = resultRdd.count();这一句和控制台的打印给注释掉。