`

压缩 HDFS 上的文件, 提供使用者下載

阅读更多

(转)今天的進度是研究如何讓使用者透過網路來下載 HDFS 上的檔案,基本上這和壓縮一般的檔案沒什麼兩樣,直接透過 java 內建的 java.util.zip 套件就可以輕易做到了。唯一的差別,在這裡要用 Hadoop API 提供的 FSDatainputStream 來開啟檔案串流,然後逐一寫入到壓縮串流就可以完成檔案壓縮的目的。 


而在操作流程的上,使用者會先選擇要下載的檔案,這個對 HTML 有基礎瞭解的開發人員不是什麼問題,利用 Form 加 Checkbox 就可以輕易的達成目的,當使用者選擇確認後,再送到 servlet 處理就可以了。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 	String photoYear = request.getParameter("photoYear");
 	String id = request.getParameter("id");
 	
	Configuration conf = new Configuration();
 	conf.set("hadoop.job.ugi","hadoop,supergroup"); 	
 	
 	String uriBase= String.format("hdfs://cloud:9000/%s/%s/", photoYear, id);
 	String files[] = request.getParameterValues("SelectPic");	 	 	
 	BufferedOutputStream dest = new BufferedOutputStream(response.getOutputStream());
        ZipOutputStream outZip = new ZipOutputStream(new BufferedOutputStream(dest));
    	    
	response.setHeader("Content-Type", "application/zip");
	
	int bytesRead;
	Path sourceFilePath;
	
	FileSystem fs = FileSystem.get(URI.create(uriBase),conf);	
	try {	
	    for (int i=0; i < files.length; i++) {	 
       	         sourceFilePath = new Path(uriBase + files[i]);
	    	
	        //開啟資料輸入串流
	         FSDataInputStream in = fs.open(sourceFilePath);
	    			       
	       //建立檔案的 entry
	        ZipEntry entry = new ZipEntry(files[i]); 
	        outZip.putNextEntry(entry); //將壓縮串流移到此 entry 的資料位置
	       
	       //透過檔案輸入串流, 將 HDFS 檔案內容寫入到壓縮串流
	        byte[] buffer = new byte[4096];
	        while ((bytesRead = in.read(buffer)) < 0) {
		  outZip.write(buffer, 0, bytesRead);
	        }				
	        in.close();
	    }
	    outZip.flush();
	    outZip.close();
	 } catch(Exception e) {
	      outZip.close();
	      e.printStackTrace();
	 } 

}
分享到:
评论

相关推荐

    云计算技术实验报告四HDFS文件的读写

    实验报告“云计算技术实验报告四HDFS文件的读写”主要涵盖了如何在Hadoop的分布式文件系统(HDFS)上进行文件操作,包括文件的上传和下载,以及文件的合并。该实验是针对计算机科学专业的《云计算技术》课程设计,...

    HDFS用户指南中文版

    - `hdfs dfs -get`:用于从HDFS下载文件。 - `hdfs dfs -ls`:列出指定目录下的所有文件和子目录。 - `hdfs dfs -rm`:删除指定的文件。 - `hdfs dfs -mkdir`:创建新的目录。 - `hdfs dfs -cat`:显示文件...

    Hadoop-hdfs下载

    ### Hadoop-HDFS环境下文件上传与下载操作指南 #### 一、Windows环境下配置Hadoop环境 **1.1 下载Hadoop** 为了在Windows环境下配置Hadoop环境,首先需要下载Hadoop软件包。推荐下载Hadoop 2.7.7版本,可以从清华...

    实验二:熟悉常用的HDFS操作.docx.zip

    "实验二:熟悉常用的HDFS操作.docx.zip" 这个标题表明这是一个关于Hadoop分布式文件系统(HDFS)操作的学习实验文档,以.docx格式压缩成.zip文件。实验的目的是帮助用户熟悉HDFS的基本操作,这通常包括数据的上传、...

    数据科学导论实验报告 实验1:常用Linux操作和 Hadoop操作

    启动Hadoop后,可以在HDFS中创建用户目录,并通过Hadoop命令如`hadoop fs -mkdir`创建目录,`hadoop fs -put`上传文件,`hadoop fs -ls`查看目录内容,以及`hadoop fs -get`将HDFS上的文件或目录下载到本地。...

    基于关联规则挖掘的分布式小文件存储方法.pdf

    通过关联规则挖掘分析Hadoop系统中的审计日志,能够识别出小文件之间的关联规则,从而指导合并算法将小文件合并压缩后存储到HDFS中。 在HDFS中请求文件时,ARMFS方法通过关联规则挖掘得到的高频访问模式和预取机制...

    基于LZO的Hadoop文件归档优化方法.docx

    Hadoop的文件系统(HDFS)是其数据存储的核心,提供了一种分布式、容错性的大容量存储方案。文件归档是Hadoop中管理大量历史数据的重要手段,它可以将不再频繁访问的数据转移到更经济的存储介质上,以节省昂贵的主...

    hadoop-3.1.0-windows依赖文件.7z

    但是,对于那些习惯于Windows环境的开发者和学习者,这个压缩包提供了方便。以下是这个压缩包可能包含的文件和组件: 1. **Hadoop Common**: 这是Hadoop的基础组件,包含了一套通用工具和服务,如文件系统接口、...

    hadoop上传文件共5页.pdf.zip

    3. **WebHDFS接口**:通过编程方式,如使用Java API、Python的`hdfs3`库或Hadoop的RESTful API,可以实现文件的上传。 4. **Hadoop的集成工具**:如Apache Hue或Cloudera Manager等可视化界面,提供了友好的图形用户...

    Java写的hadoop压缩worldcount例子

    这些压缩格式可以有效地减少数据在HDFS(Hadoop分布式文件系统)中的存储空间和网络传输的数据量,从而提高整体性能。在这个例子中,可能涉及到自定义的压缩器,这通常是为了优化特定场景下的压缩效率或解压速度。 ...

    hadoop2x集成eclipse插件压缩包

    4. 使用:现在,你可以利用插件提供的功能,如浏览HDFS文件系统、提交MapReduce作业、查看作业执行状态等。 总结来说,这个"Hadoop2x集成eclipse插件压缩包"是一个强大的工具,它使得Hadoop开发更加直观和高效,...

    hive学习实战-guli_video_orc-guli_video_user_orc-相关资料.7z

    - 理解Hive的基本概念和架构,包括元数据、HDFS上的数据存储以及如何使用Hive CLI或Hue等工具。 - 学习Hive SQL语法,包括SELECT、JOIN、GROUP BY、WHERE等基本操作,以及窗口函数、分区等高级特性。 - 掌握ORC格式...

    spark-hive-2.11和spark-sql-以及spark-hadoop包另付下载地址

    在实际使用中,首先需要解压缩这些文件,然后配置Spark的`spark-defaults.conf`文件以指向Hive的元数据存储位置(如HDFS或本地文件系统上的metastore_db)。接着,通过设置`spark.sql.hive.metastore.uris`等参数,...

    hive从入门到放弃(六)——常用文件存储格式.doc

    * 以这种格式存储的文件,可以直接在 HDFS 上 cat 查看数据。 * 可以用任意分隔符对列分割,建表时需要指定分隔符。 * 不会对文件进行压缩,因此加载数据的时候会比较快,因为不需要解压缩;但也因此更占用存储空间...

    hive_big_table.tar.gz

    描述中没有提供具体信息,但我们可以推测这个压缩文件可能是为了存储或传输一个大型Hive表的数据。".tar.gz"是一个常见的压缩格式,用于归档多个文件或目录,通过tar命令创建并用gzip压缩,以节省存储空间和提高传输...

    不同Hadoop版本winutils文件包

    这个文件是Hadoop为了解决Windows操作系统与Hadoop的兼容性问题而提供的,因为Hadoop原本是设计在Linux系统上运行的。在Windows上运行Hadoop或相关工具(如Hive、HBase等)时,会用到winutils来执行一些Linux命令,...

    hadoop.dll & winutils.exe For hadoop-2.8.0

    例如,它可以用于设置Hadoop环境变量、初始化HDFS命名空间、管理HDFS文件权限等。在Windows环境中安装和配置Hadoop时,"winutils.exe"是必需的,因为它弥补了Windows系统与Hadoop原生在Linux上依赖的一些命令的差异...

Global site tag (gtag.js) - Google Analytics