`
亦梦亦真
  • 浏览: 229573 次
  • 性别: Icon_minigender_1
  • 来自: 秦皇岛
社区版块
存档分类
最新评论

在hbase上存储文件以及下载

阅读更多

因为hbase的存储只支持文本。但当我们需要要一些文件类型上传到hbase上的时候,如果使用文件流,将它转成文本类型,上传下载是没有问题,可是这样一来,新生成的文件与原始文件的里的格式(如DOC里的图片)这样的东西就不存在了,这样的话,就没有什么意义了。

因此,上传到hbase的时候,可以通过将文件流转换成BASE64的编码,这样,上传下载仍是原文件。但是要注意的是,该文件的格式,如果格式不统一的话,还是不会出来的。

我就遇到过这样的问题,该文件是docx格式的,我下载后转成doc的,就会出问题。

下面是实现代码

public String getSource(String URL) throws IOException{
	 File file = new File(URL);
	 file.length();
	 FileInputStream is = new FileInputStream(file);
	 byte[] bytes = new byte[(int) file.length()];
	 int len=0;
	 while( (len = is.read(bytes)) != -1 ){
	 is.read(bytes);
	 }
	 is.close();
	 BASE64Encoder be = new BASE64Encoder();
	 return be.encode(bytes);
}

 

public String down(String tablename,String rowkey) throws IOException{
BASE64Decoder db = new BASE64Decoder();
String Content="";
HTable talbe =new HTable(tablename);
Result result = null;
Get get = new Get(Bytes.toBytes(Id));
get.addFamily(Bytes.toBytes("property"));//这是在hbase上存储的该文件的一些属性
get.addFamily(Bytes.toBytes("content"));//这是在hbase上存储该文件的BASE64编码的列族名
result = table.get(get);
table.close();
Content = Bytes.toString(r.getValue(Bytes.toBytes("content"), Bytes
					.toBytes("content")));//获得到该文件的文本
String title=Bytes.toString(r.getValue(Bytes.toBytes("property"),Bytes.toBytes("title")));
String downurl=tmp+title;
byte c[] = bd.decodeBuffer(tmp);
		FileOutputStream out = new FileOutputStream(new File(downurl));
		out.write(c);
		out.close();
	return downurl;
}

 这是临时写的简宜代码,有很多不足之处。

 

 

4
2
分享到:
评论
7 楼 di1984HIT 2014-09-07  
不对吧,HBase就是支持字节流啊,再说底层存储只要存储字节的话,没什么影响吧
6 楼 zhangjidong2005 2014-05-21  
急需hbase上传下载代码,能给份优化后的代码。
5 楼 亦梦亦真 2013-10-18  
yaoxiaowei0909 写道
不用转BASE64Decoder 多此一举

对,以前不怎么会用,当时以为HBASE只能支持可见字符
4 楼 zm1989 2013-09-05  
根本不用编码。
3 楼 yaoxiaowei0909 2013-05-28  
不用转BASE64Decoder 多此一举
2 楼 亦梦亦真 2012-07-03  
BruceXX 写道
文件流存储和文件类型应该没有关系的,你再check下是哪点造成这种影响的,base64只适合在用字符串传输byte流,但是存储的话不是一个好方案,而且每次下载和上传都要消耗cpu资源去做转化。

因为hbase只支持文本存储,为了使用hbase的这种分布式存储,所以才要转换成base64的编码
1 楼 BruceXX 2012-06-28  
文件流存储和文件类型应该没有关系的,你再check下是哪点造成这种影响的,base64只适合在用字符串传输byte流,但是存储的话不是一个好方案,而且每次下载和上传都要消耗cpu资源去做转化。

相关推荐

    hbase2.2安装文件

    3. **配置HBase**:编辑`conf/hbase-site.xml`文件,设置必要的配置参数,如`hbase.rootdir`(HBase的数据目录,通常在HDFS上)、`hbase.zookeeper.quorum`(Zookeeper集群的服务器列表)等。 4. **配置Hadoop**:...

    java从本地读文件并上传Hbase

    在Java编程环境中,将本地文件读取并上传到HBase是一项常见的任务,特别是在大数据处理和存储的场景下。HBase是一个分布式、版本化的NoSQL数据库,基于Apache Hadoop,适用于大规模数据存储。以下是一个详细的过程,...

    HBase+SpringBoot实战分布式文件存储

    HBase+SpringBoot实战分布式文件存储 资源永久有效哦

    hbase导出csv,文本,html文件

    HBase是一个基于Apache Hadoop的数据存储系统,适用于处理大规模、分布式、实时的数据存储和查询。而Hive则是一个数据仓库工具,它允许用户使用SQL-like语言(HQL)对Hadoop集群上的大量数据进行分析和查询。 标题...

    hbase-1.1.5-bin版本的压缩包,下载到本地解压后即可使用 HBase 是一个开源的、分布式的NoSQL数据库

    HBase 是一个开源的、分布式的、版本化的 NoSQL 数据库(也即非关系型数据库),它利用 Hadoop 分布式文件系统(Hadoop Distributed File System,HDFS)提供分布式数据存储。与传统的关系型数据库类似,HBase 也以...

    HBase配置文件与HBase doc文档

    7. **监控和故障排查**:如何通过HBase的仪表盘和日志进行监控,以及在遇到问题时的排查方法。 8. **复制和备份**:HBase支持数据复制以提高可用性,文档会解释如何配置复制和进行数据备份与恢复。 9. **安全与...

    Python访问Hbase的库文件

    在大数据处理的世界里,Apache HBase是一种分布式的、面向列的NoSQL数据库系统,特别适合于存储大量半结构化数据。HBase的分布式特性使其在大数据场景下表现出色,而Python作为一门强大的编程语言,其社区提供了丰富...

    Hbase配置所需要的配置文件.zip

    例如,你可以在这里设置`hbase.rootdir`来指定HBase的数据存储位置(通常是在HDFS上),以及`hbase.zookeeper.quorum`来指定Zookeeper服务器的地址,用于协调集群中的各个节点。 2. **hbase-env.sh**: 这个脚本文件...

    基于Hbase的海量视频存储简单模拟

    HDFS的分布式特性使得视频文件可以被分割成多个块并分散在集群的不同节点上,这样不仅提高了存储效率,也便于多线程并行访问,加快了读取速度。每个视频文件在HDFS上都会有一个唯一的路径标识,这为我们后续的索引...

    基于虚拟机集hbase1.2.1配置文件

    在IT领域,HBase是一个分布式、面向列的开源数据库,它是构建在Apache Hadoop文件系统(HDFS)之上的,特别适合处理大规模数据。这里提到的"基于虚拟机集hbase1.2.1配置文件"是针对一个由一个Master节点和三个Slave...

    HBase存储海量图片

    本文档详细描述了如何采用HBase存储海量图片,以及如何将大批量的小文件写成sequenceFile文件格式。海量图片的存储是通过HBase实现的,HBase是一种面向列的NoSQL数据库,特别适合存储海量数据。 一、直接上传本地...

    hbase jar包.zip

    在Java开发领域,Spring框架的广泛使用与HBase这样的大数据存储系统的结合日益紧密。"hbase jar包.zip" 提供了整合Spring与HBase所需的关键库文件,使得开发者能够高效地利用Spring进行HBase的操作。接下来,我们将...

    HBase配置文件

    在搭建Hadoop框架中的HBase集群之前,理解并熟悉HBase的配置文件是至关重要的步骤。HBase是一款基于Google Bigtable理念设计的开源分布式数据库,它构建于Hadoop之上,适用于处理海量数据。HBase提供了高可靠性、高...

    hbase安装包

    全称为Hadoop Distributed File System上的基础结构(HBase on Hadoop Distributed File System),是一种分布式的、面向列的开源数据库,它构建在Apache Hadoop文件系统(HDFS)之上,提供高可靠性、高性能、可伸缩...

    将hdfs上的文件导入hbase的源代码

    Hadoop主要负责大规模数据的分布式存储和计算,而HBase则是构建在Hadoop之上的分布式列式数据库,适合实时查询和大数据分析。本主题将详细讲解如何将HDFS(Hadoop Distributed File System)上的文件导入到HBase中,...

    hbase-1.4.9-bin.tar.gz

    HBase是建立在Hadoop文件系统之上的分布式面向列的数据库。它是一个开源项目,是横向扩展的。 HBase是一个数据模型,类似于谷歌的大表设计,可以提供快速随机访问海量结构化数据。它利用了Hadoop的文件系统(HDFS)...

    HBase官方文档

    HBase是一个分布式的、面向列的数据库,构建在Apache Hadoop和Apache ZooKeeper之上。这种数据库通常用于处理大规模的非结构化数据集,因此与大数据紧密相关。HBase具有高扩展性、高性能、以及灵活的数据模型。下面...

    hbase专题配套文件

    HBase,全称Apache HBase,是构建在Hadoop分布式文件系统(HDFS)之上、面向列的开源数据库,主要用于处理大规模数据。HBase的设计理念是支持实时读写,适合大数据场景下的快速随机访问。在本专题中,我们通过分析...

    hbase监控文件.zip

    本文将详细探讨如何使用Zabbix这一强大的开源监控工具来监控Hbase集群,以及如何利用“hbase监控文件.zip”中的资源进行部署。 HBase是一个基于Apache Hadoop的非关系型分布式数据库(NoSQL),它设计用于处理海量...

    atlas 2.2版本 hbase下载资源

    总结来说,Apache Atlas 2.2版本与HBase的集成,涉及到HBase的下载、安装、配置,以及在Atlas中配置HBase的元数据管理。通过这样的集成,企业可以实现对大数据生态系统的高效管理和治理,确保数据的安全和合规性。在...

Global site tag (gtag.js) - Google Analytics