如何将hbase中的数据导出到hdfs

如题所述

一、如何将hbase中的数据导出到hdfs

1 HBase本身提供的接口

其调用形式为:

1)导入

./hbase org.apache.hadoop.hbase.mapreduce.Driver import 表名    数据文件位置

其中数据文件位置可为本地文件目录,也可以分布式文件系统hdfs的路径。

当其为前者时,直接指定即可,也可以加前缀file:///

而当其伟后者时,必须明确指明hdfs的路径,例如hdfs://mymaster:9000/path

2)导出

./hbase org.apache.hadoop.hbase.mapreduce.Driver export 表名    数据文件位置

同上,其中数据文件位置可为本地文件目录,也可以分布式文件系统hdfs的路径。

另外,该接口类还提供了一些其它的方法,例如表与表之间的数据拷贝,导入tsv文件等,可回车键查看

2 hadoop提供的工具(hadoop tool interface)

使用该工具的话,需要首先配置hadoop-env.sh,否则在执行时会提示缺少jar包或者class文件。

1)配置

切换到hadoop安装目录下,

vim hadoop-env.sh,加以下语句

export HADOOP_CLASSPATH="hbasejar包路径:zookeeper的jar包路径:hbase的config目录"

2)使用

导入:

hadoop jar /../hbase/hbase-.jar import mytest /export/mybakup

导出:

hadoop jar /../hbase/hbase-.jar import mytest /import/mybackup

直接将数据导出到hdfs目录中,当不指定file前缀时。

另外:

export,fs的参数为hdfs上的路径时,该路径必须不能已经存在,否则会报错。

import的表必须是hbase中已经创建好的,否则会报错。

二、云外面的数据怎么上传到hdfs

没看懂什么意思?

三、云外面的数据怎么上传到hdfs

hadoop计算需要在hdfs文件系统上进行,文件上传到hdfs上通常有三种方法:a hadoop自带的dfs服务,put;b hadoop的r对象可以实现这一功能;c 调用OTL可执行程序,数据从数据库直接进入hadoop
 hadoop计算需要统上进行,因此每次计算之前必须把需要用到的文件(我们称为原hdfs上。文件上传到hdfs上通常有三种方法:
   a hadoop自put;
   b hadoop的API,Writer对象可以实现这一功能;
   c 调用OTL可执行程oop
 由于存在ETL层,因此第三种方案不予考虑
 将a、b方案
   1 空间:方案a在hdfs上设只上传日志文件,掉约10T空间,如实表,将占用大约25T
                 方案b经测试,压缩比大约为3~4:1,因此假设hdfs空间4个月的数据,现在可以保存约1年
   2 上传时间:方案a的上传时间经测试,2
                           方案b的上传时间,程序不做任何优化,大约是以上的4~6倍,但存在一定程度提升速度的余地
   3 运算时间:经过对200G数据,大约4亿条记录的测试,如果程序以据的计算可以提高大约50%的速度,但如果程序以内存操作为主,则只能提高5%~10%的速度
   4 其它:未压缩的数据还有一个好处是可以直接在hdfs上查想看原始数据只能用程序把它导到本地,或者利用本
   压缩格式:按照hadoop api的介绍,压缩格式分两种:BLOCK和RECORD,其中RECORD是只对value进行压。
   对压缩文件进行计uenceFileInputFormat类来读入压缩文件,以下是计算程序的典型配置代码:
JobConf conf = new JobConf(getConf(), log.class);
   conf.setJobName(”log”);
   conf.setOutputKeyClass(Text.class);//set the map output key type
   conf.setOutputValueClass);//set the map output value type
   lass(MapClass.class);
   //confClass(Reduce.class);//set the combiner class ,if havenot, use Recuce class for default
   conf.setReducerClass(Reduce.class);
   conf.setInputFormat(SequenceFileInputFormat.class);//necessary if use compress
   接下来的处理与非压缩格式的处理一样

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网