Hbase表数据的导入和导出

转载自:http://blog.csdn.net/javajxz008/article/details/61173213

Hbase没有提供类似于hive根据已有表的建表建表语句,如在hive中创建一个和已有表表结构完全一样的表可执行SQLcreate table tbl_test1 like tbl_test,hbase只能采用笨办法,将其表结构拷贝出来建表。如:

稍作整理:

create 'solrHbase2', {NAME => 'f1', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'SNAPPY', MIN_VERSIONS => '0',KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}

需要将原表结构中的TTL => 'FOREVER'去掉才能建。

1. 导出数据

使用hbase org.apache.hadoop.hbase.mapreduce.Driver export tablename hdfspath

或hbase org.apache.hadoop.hbase.mapreduce.Export tablename hdfspath

eg:hbase org.apache.hadoop.hbase.mapreduce.Driver export solrHbase /home/hdfs/export

此命令可加参数:

解释如下:

Usage: Export [-D <property=value>]* <tablename> <outputdir> [<versions> [<starttime> [<endtime>]] [^[regex pattern] or [Prefix] to filter]]

 

  Note: -D properties will be applied to the conf used.

  For example:

   -D mapred.output.compress=true 输出压缩

   -D mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec 压缩方式

   -D mapred.output.compression.type=BLOCK 按块压缩

  Additionally, the following SCAN properties can be specified

  to control/limit what is exported..

   -D hbase.mapreduce.scan.column.family=<familyName> 列簇

   -D hbase.mapreduce.include.deleted.rows=true 

   -D hbase.mapreduce.scan.row.start=<ROWSTART> 开始rowkey

   -D hbase.mapreduce.scan.row.stop=<ROWSTOP>  终止rowkey

For performance consider the following properties:

   -Dhbase.client.scanner.caching=100 客户端缓存条数

   -Dmapred.map.tasks.speculative.execution=false

   -Dmapred.reduce.tasks.speculative.execution=false

For tables with very wide rows consider setting the batch size as below:

   -Dhbase.export.scanner.batch=10 批次大小

输入命令后会生成mapreduce作业,不想全部将表数据导出,可采用参数-D hbase.mapreduce.scan.row.start=<ROWSTART>-D hbase.mapreduce.scan.row.stop=<ROWSTOP>指定rowkey范围导出数据。如导出指定rowkey范围的数据:

 hbase org.apache.hadoop.hbase.mapreduce.Export -D hbase.mapreduce.scan.row.start=00 -D hbase.mapreduce.scan.row.stop=0d solrHbase /home/hdfs/export

这里的开始rowkey 00和结束rowkey 0drowkey的开头部分,该表是做过预分区的,在hbase的控制台上看:

1. 导入数据

hbase org.apache.hadoop.hbase.mapreduce.Driver import tablename hdfspath

或hbase org.apache.hadoop.hbase.mapreduce.Import tablename hdfspath

Import也有一些使用说明:

将刚刚导出的数据导入新表中:

hbase org.apache.hadoop.hbase.mapreduce.Import solrHbase2 /home/hdfs/export

输入命令生成mapreduce作业,完成后可查看新表数据是否导入成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要导出 HBase 中的数据,您可以使用 HBase Shell 命令或 HBase API。 1. HBase Shell 命令: - 进入 HBase Shell:在命令行中输入 hbase shell 命令。 - 导出数据:使用 scan 命令,并将结果保存到文件中。例如: ``` hbase> scan 'table_name', {RAW => true} | awk -F'\t' '{print $3,$4}' > /tmp/table_name.txt ``` 2. HBase API: - 获取 HBase 连接:使用 HBaseConfiguration 类获取 HBase 连接。 - 扫描数据:使用 HBaseAdmin 类获取 HBase ,并使用 Table 类执行扫描操作。 - 保存数据:将扫描结果保存到文件中。 下面是一个使用 Java API 导出 HBase 数据的示例: ```java import java.io.IOException; import java.util.List; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.client.Table; public class HBaseExport { public static void main(String[] args) throws IOException { Configuration conf = HBaseConfiguration.create(); try (Connection connection = ConnectionFactory.createConnection(conf); Table table = connection.getTable(TableName.valueOf("table_name")); ResultScanner scanner = table.getScanner(new Scan())) { for (Result result : scanner) { // Do something with the result. } } } } ``` ### 回答2: 编写校导出HBase数据的过程如下: 1. 配置HBase集群:确保HBase集群已正确配置和启动。 2. 编写Java程序:使用Java编写程序来导出HBase数据。 3. 导入相关依赖:在Java代码中导入HBase相关的依赖项,例如HBase的核心 jar 包。 4. 创建HBase连接:使用Java代码创建到HBase集群的连接。连接需要指定HBase的主机名和端口号。 5. 获取HBase对象:通过HBase连接对象获取到需要导出数据对象。 6. 设置过滤器:使用过滤器来筛选需要导出数据。可以根据需求选择不同类型的过滤器,例如前缀过滤器、范围过滤器等。 7. 执行Scan操作:使用Scan对象进行数据扫描。Scan对象可以设置需要扫描的列族、列等信息。 8. 迭代处理结果:使用ResultScanner迭代扫描结果,并对每条数据进行处理。 9. 数据导出:根据需要将每条数据导出到文件、数据库或其他存储介质中。 10. 关闭连接:在程序执行结束后,关闭与HBase的连接。 以上步骤提供了一个基本的框架,可以根据具体需求进行调整和扩展。对于大规模数据导出,可能需要考虑分页查询、多线程处理等更高级的功能。同时,也需要注意处理可能出现的异常情况,例如连接失败、数据格式错误等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值