<七>、Hadoop Web项目--HDFS文件管理

2023-10-26

   本博客参考:http://blog.csdn.net/fansy1990/article/details/51356583

一、项目介绍

   推荐系统的web项目已经完成,现在在此基础上增加HDFS文件管理功能,便于管理HDFS上的文件数据,本文基本参考了fansy1990的HDFS文件管理系统这个项目,改动的地方是将原来分散开的功能集中在了一个页面和处理了中文显示乱码。


二、项目实现

  1、打开菜单显示根目录文件及文件夹,点击文件夹进入下一目录,并可输入文件名、所有者进行检索

  js代码:  

	$('#dg_hdfsManager_search').datagrid({
		border : false,
		fitColumns : false,
		singleSelect : true,
		width : 1050,
		height : 280,
		nowrap : false,
		fit : false,
		pagination : true,// 分页控件
		pageSize : 8, // 每页记录数,需要和pageList保持倍数关系
		pageList : [ 4, 8, 12 ],
		rownumbers : true,// 行号
		pagePosition : 'top',
		url : 'hdfs/hdfsManager_searchFolder.action',
		queryParams: {
			folder: "/",
			name:"",
			nameOp:"no",
			owner:"",
			ownerOp:"no"
		},
		onLoadError:function(){
			console.info("load error!");
			 $.messager.alert('警告','读取错误,请联系管理员!','warning');
		},
		onBeforeLoad:function(param){
			return checkExistAndAuth(param.folder,'rx');
		},
		onLoadSuccess:function(data ){
			console.info("success,data:"+data);
		},
		idField:'id',
		columns :[[
				{
					field : 'name',
					title : '文件名',
					width : '120',
					formatter: function(value,row,index){
						// 使用转义即可解决单引号、双引号不够用的问题
						return "<a href='javascript:void(0);' οnclick='refreshDir(\""+value+"\",\""+row.type+"\")"+"'>"+value+"</a>";
					},
				styler: function(index,row){ 
					var s1="";  
		            if (row.type=='dir'){  
		            	return  s1 =  'background-color:#FFCCCC;';  
		            }  
				}
				},{
					field : 'type',
					title : '类型',
					width : '50',
					formatter: function(value,row,index){
						return "<a href='javascript:void(0);' οnclick='refreshDir(\""+row.name+"\",\""+value+"\")"+"'>"+value+"</a>";
					}	
				},{
					field : 'size',
					title : '大小',
					width : '100'
				},{
					field : 'replication',
					title : '副本数',
					width : '50',
				},{
					field : 'blockSize',
					title : '块大小',
					width : '100'
				},{
					field : 'modificationTime',
					title : '修改时间',
					width : '200'
				},{
					field : 'permission',
					title : '权限',
					width : '150'
				},{
					field : 'owner',
					title : '所有者',
					width : '100'
				},{
					field : 'group',
					title : '组名',
					width : '100'
				}
				 ]]
		    });
 java代码:

public void listFolder() throws FileNotFoundException,
			IllegalArgumentException, IOException {
		List<HdfsResponseProperties> files = this.hdfsService
				.listFolder(hdfsFile.getFolder());
		Map<String, Object> jsonMap = new HashMap<String, Object>();
		jsonMap.put("total", files.size());
		jsonMap.put("rows", Utils.getProperFiles(files, page, rows));
		Utils.write2PrintWriter(JSON.toJSONString(jsonMap));
		return;
	}
public List<HdfsResponseProperties> listFolder(String folder)
			throws FileNotFoundException, IllegalArgumentException, IOException {
		List<HdfsResponseProperties> files = new ArrayList<>();
		FileSystem fs = HadoopUtils.getFs();
		FileStatus[] filesStatus = fs.listStatus(new Path(folder));		
		for (FileStatus file : filesStatus) {
			files.add(Utils.getDataFromLocatedFileStatus(file));
		}
		return files;
	}
2、新建目录

  在目录输入框录入目录名称,点击新建目录按钮后生成目录并进入改目录

  主要代码  

public boolean createFolder(String folder, boolean recursive)
			throws IllegalArgumentException, IOException,
			AccessControlException {
		FileSystem fs = HadoopUtils.getFs();
		try {
			return fs.mkdirs(new Path(folder));
		} catch (AccessControlException e) {
			throw e;
		}
	}
3、文件上传


  主要代码

public boolean upload(String src, String des) throws Exception {
		try {
			HadoopUtils.getFs().copyFromLocalFile(new Path(src), new Path(des));
		} catch (IllegalArgumentException | IOException e) {

			log.info("数据上传异常,src:{},des:{}", new Object[] { src, des });
			throw e;
		}
		return true;
	}
4、文件下载,选中文件所在行,点击下载保存文件到本地

  主要代码

public boolean download(String fileName, String localFile) throws Exception {
		boolean flag = true;
		try {
			HadoopUtils.getFs().copyToLocalFile(new Path(fileName),
					new Path(localFile));
		} catch (Exception e) {
			e.printStackTrace();
			log.info("数据下载异常,src:{},des:{}",
					new Object[] { fileName, localFile });
			throw e;
		}
		return flag;
	}
5、删除,选中文件或文件夹,点击删除进行删除文件或文件夹,文件夹删除模式是删除其中所有文件及目录

 js判断删除对象是文件或目录调用不同方法 

$('#dg_hdfsManager_folder_delete_btn').bind('click', function(){	
		var row=$('#dg_hdfsManager_search').datagrid('getSelected');
		var  value=row.type;
		var  name=row.name;	
		var curr =$('#hdfsManager_search_folder').val();
		if(curr == '/'){
			var folder_=curr+name;
		}else{
			var folder_=curr+'/'+name;
		}	
		if(value == 'dir'){							 	
			var recursive_ ="true";			
			// ajax 异步提交任务
			var result = callByAJaxHdfs('hdfs/hdfsManager_deleteFolder.action',{folder:folder_,recursive:recursive_});
			if("true" == result.flag){
				$.messager.alert('信息','目录删除成功!','info');
			}else if("false" == result.flag){
				$.messager.alert('信息','目录删除失败,'+result.msg,'info');
			}
		}else if(value != 'dir'){			
			var flag = checkExistAndAuth(folder_,'x');
	        if(!flag) return;	   
			var file_=folder_;
			// ajax 异步提交任务
			var result = callByAJaxHdfs('hdfs/hdfsManager_deleteFile.action',{fileName:file_});
			if("true" == result.flag){
				$.messager.alert('信息','文件删除成功!','info');
			}else if("false" == result.flag){
				$.messager.alert('信息','文件删除失败,'+result.msg,'info');
			}
		}			
		search_data();
	});
 java代码:

public boolean deleteFolder(String folder, boolean recursive)
			throws IllegalArgumentException, IOException {
		FileSystem fs = HadoopUtils.getFs();
		try {
			return fs.delete(new Path(folder), recursive);
		} catch (RemoteException e) {
			throw e;
		}
	}

public boolean deleteFile(String fileName) throws Exception {
		boolean flag = false;
		try {
			flag = HadoopUtils.getFs().delete(new Path(fileName), false);
		} catch (IllegalArgumentException | IOException e) {

			log.info("数据删除异常,fileName:{}", new Object[] { fileName });
			throw e;
		}
		return flag;
	}
6、文件查看,选中文件,如果文件是text文本点击其文件文可以打开查看内容


  主要代码

public static String readText(String fileName, int records)
			throws IllegalArgumentException, IOException {
		FileSystem fs = getFs();
		FSDataInputStream inStream = fs.open(new Path(fileName));
		BufferedReader br = new BufferedReader(new InputStreamReader(inStream));
		StringBuffer buffer = new StringBuffer();
		try {
			String line;
			line = br.readLine();
			while (line != null && records-- > 0) {				
				buffer.append(line).append("<br>");				
				line = br.readLine();
			}
		} finally {			
			br.close();
			inStream.close();
		}
		return buffer.toString();
	}

三、增加HBASE、HIVE表数据管理

 整合HBASE、HIVE表数据管理功能

 hbase继续参考fansy1990 的HBase表管理系统 


 hive是网上看的,需要先启动服务 ./bin/hive --service hiveserver,暂时只做了展示表名称


 代码:

public void getTables() throws Exception {		
		Map<String, Object> jsonMap = new HashMap<String, Object>();
		int columns = 0;	
		List<HiveTable> alltables = new ArrayList<>();
		Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver");// DriverName 注册Hive驱动  
		     //建立与Hive数据库的连接, 默认端口10000,使用数据库:hive,用户名密码:hive  
		    // URL,USER,PASSWORD  
		    Connection conn = DriverManager.getConnection("jdbc:hive://192.168.128.129:10000/default", "hh", "");  
		    Statement stmt = conn.createStatement();  		     
		    String sql="show tables";
		    ResultSet res = stmt.executeQuery(sql);		    
		    while (res.next()) {
		    	System.out.println(res.getString(1));	
		    	columns++;		    
		     	HiveTable hivetable = new HiveTable();
		    	BeanUtils.setProperty(hivetable, "tableName", res.getString(1));
		    	alltables.add(hivetable);		    
		    }		        
		    conn.close();
		    conn = null;
		jsonMap.put("total", columns);
		jsonMap.put("rows", Utils.getProperFiles(alltables, page, rows));
		Utils.write2PrintWriter(JSON.toJSONString(jsonMap));
		return;
	}






  

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

<七>、Hadoop Web项目--HDFS文件管理 的相关文章

随机推荐

  • 如何阅读他人的程序代码(上)——技巧学习篇

    一 读懂程序代码 使心法皆为我所用 程序代码是别人写的 只有原作者才真的了解程序代码的用途及涵义 许多程序人心里都有一种不自觉的恐惧感 深怕被迫去碰触其他人所写的程序代码 但是 与其抗拒接收别人的程序代码 不如彻底了解相关的语言和惯例 当成
  • java中如何进行日期时间比较?4种方法介绍

    1 Date compareto java util Date提供了在Java中比较两个日期的经典方法compareto 1 如果两个日期相等 则返回值为0 2 如果Date在date参数之后 则返回值大于0 3 如果Date在date参数
  • Docker 应用部署

    文章目录 一 部署 MySQL 二 部署 Tomcat 三 部署 Nginx 四 部署 Redis 提示 以下是本篇文章正文内容 Docker 系列学习将会持续更新 一 部署 MySQL 搜索并拉取 mysql 镜像 docker sear
  • 最近碰到的一个关于memcpy的奇葩问题

    最近写代码 碰到一个奇葩问题 memcpy函数用起来 编译居然提示我stackoverflow 简直是对写C的码农的最大羞辱 WTF UINT8 numBuffers 0 UINT16 cpLength 0 TPM2B DIGEST buf
  • 排序和复杂度

    常见的排序方式 1 冒泡排序 时间复杂度 最好情况是 O n 最坏情况是 O n2 空间复杂度 开辟一个空间交换顺序O 1 2 快速排序 时间复杂的 最好情况是 O nlogn 最坏情况是 O n2 空间复杂度 最好的情况 每一次base值
  • 结构型模式之外观模式

    复习用 不适合初学 复习用 不适合初学 复习用 不适合初学 定义 Facade Pattern 外部与一个子系统的通信必须通过一个统一的外观对象进行 为子系统中的一组接口提供一个一致的界面 外观模式定义了一个高层接口 这个接口使得这一子系统
  • collate chinese_prc_ci_as null解说

    我们在create table时经常会碰到这样的语句 例如 password nvarchar 10 collate chinese prc ci as null 那它到底是什么意思呢 不妨看看下面 首先 collate是一个子句 可应用于
  • 计算机程序的思维逻辑 (12) - 函数调用的基本原理

    栈 上节我们介绍了函数的基本概念 在最后我们提到了一个系统异常java lang StackOverflowError 栈溢出错误 要理解这个错误 我们需要理解函数调用的实现机制 本节就从概念模型的角度谈谈它的基本原理 我们之前谈过程序执行
  • 小知识·PD充电协议

    目录 PD充电器硬件结构 pd充电协议是什么 pd协议快充什么意思 PD快充协议优势 USB PD快速充电通信原理 PD充电器硬件结构 典型的手机充电器的硬件结构 以基于Dialog方案的高通QC2 0快充协议为例 如图1所示 iW626作
  • dd命令测试linux磁盘io情况,详解三种Linux测试磁盘IO性能的方法总结

    概述 在磁盘测试中我们一般最关心的几个指标分别为 iops 每秒执行的IO次数 bw 带宽 每秒的吞吐量 lat 每次IO操作的延迟 当每次IO操作的block较小时 如512bytes 4k 8k等 测试的主要是iops 当每次IO操作的
  • [C语言]如何使用C语言创建题库,进行高效刷题?

    事情是这样的 鄙人的学校开展了一个校内的知识竞赛 赛事主办方提供给了我们一个题库进行练习 但是是Word版本的 题目量不多 单选题 也就 140多道题目 当然 我们完全可以对着那个枯燥无味的Word文档进行死记硬背 但是 身为一名计算机专业
  • python - 例题分析:工时与工资

    工时在120到180 工资80 工时 工时超过180 超过部分奖励20 工时不足120 扣10 t int input 输入工时 1退出 while t 1 if t gt 120 and t lt 180
  • 3 关于QT中的MainWindow窗口,MenuBar ToolBar QuickTip等方面的知识点

    首先给大家分享一个巨牛巨牛的人工智能教程 是我无意中发现的 教程不仅零基础 通俗易懂 而且非常风趣幽默 还时不时有内涵段子 像看小说一样 哈哈 我正在学习中 觉得太牛了 所以分享给大家 点这里可以跳转到教程 1新建一个空Qt项目 编写12M
  • TP框架中, _initialize函数使用return 语句无法返回相应内容,同时也无法终止脚本继续执行

    tp框架中 initialize函数使用return 语句无法返回相应内容 同时也无法终止脚本继续执行 在 initialize中如果想要返回值 需要 使用echo 如 echo json encode code gt 0 msg gt 请
  • synchronized对于加锁代码块、方法以及全局(static)锁的详细对比

    在网上看了许多关于synchronized的介绍及用法区别 大多大同小异 点到为止 个人推荐一篇博友写的 网址如下 http blog csdn net cs408 article details 48930803 这篇博客是介绍对象锁和类
  • LeetCode--标签:数组31.下一个排列

    LeetCode 31 下一个排列 做题笔记 题目描述 解题思路 代码 java 题目描述 实现获取下一个排列的函数 算法需要将给定数字序列重新排列成字典序中下一个更大的排列 如果不存在下一个更大的排列 则将数字重新排列成最小的排列 即升序
  • 目标检测之YOLO系列

    文章目录 YOLO 整体结构 YOLO的核心思想 实现方法 损失函数 训练 预测 优缺点 YOLO V2 模型结构 改进策略 训练 YOLO9000 YOLOv3 改进点 YOLOv3结构 与其他模型对比结果 YOLO 整体结构 源码 de
  • 系统-等保三级-CentOS Linux 7合规基线检查 shell脚本

    系统 等保三级 CentOS Linux 7合规基线检查 shell脚本 bin bash 基于阿里云最佳实践安全实践的CentOS Linux 7基线标准 系统 等保三级 CentOS Linux 7合规基线检查 修改密码最大有效期为18
  • ceph学习(3)——rbd-mirror双机热备

    一 概述 本文主要关注于rbd mirror的使用以及使用过程中的遇到的问题 二 环境准备 ceph版本 14 2 16 服务器 3台centos7服务器 ceph1 ceph2 ceph3 硬盘 每台服务器1块10GB以上硬盘做osd 分
  • <七>、Hadoop Web项目--HDFS文件管理

    本博客参考 http blog csdn net fansy1990 article details 51356583 一 项目介绍 推荐系统的web项目已经完成 现在在此基础上增加HDFS文件管理功能 便于管理HDFS上的文件数据 本文基