12 hdfs常用文件、目录拷贝操作、删除操作
package com.da.hbase.tool.utils; import com.da.hbase.tool.common.Const;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Map; /**
* hdfs操作常用方法类
*/
public class HdfsUtils {
public static final Logger LOG= LoggerFactory.getLogger(HdfsUtils.class);
/**
* 通过ip直接连接hdfs
* @param ip
* @return
*/
public static FileSystem getFsFromIp(String ip){
FileSystem fs = null;
try {
fs=FileSystem.get(URI.create("hdfs://"+ip),new Configuration());
} catch (IOException e) {
LOG.error("此ip:{} 连接出现异常", ip);
}
return fs;
} /**
* 检查该fs是否可用
* @param fs
* @return
*/
public static Boolean checkFs(FileSystem fs){
Boolean success=true;
if(null==fs){
return false;
}
Path path=new Path("/");
try {
RemoteIterator<FileStatus> remoteIterator= fs.listStatusIterator(path);
success=true;
} catch (IOException e) {
success=false;
}
return success;
} /**
* 从ips中获取一个可用的fs
* @param ips
* @return
*/
public static FileSystem getAndCheckFs(String ips){
return getAndCheckFs(ips,",");
}
/**
* 从ips中获取一个可用的fs
* @param ips
* @param separator
* @return
*/
public static FileSystem getAndCheckFs(String ips,String separator){
String [] ipArr=ips.split(separator);
FileSystem fs=null;
for (String ip : ipArr) {
fs=getFsFromIp(ip);
if(checkFs(fs)){
LOG.info("此Ip:{}可连接hdfs",ip);
break;
}else{
fs=null;
}
}
if(null==fs){
LOG.error("无法连接hdfs环境,请检查网络是否可用或者ip配置是否正确,配置ips:{}",ips);
}
return fs;
} /**
* 测试getAndCheckFs方法
*/
private static void testConnectFs(){
String ips="10.17.139.126,10.17.139.127,10.17.139.125";
FileSystem fs=getAndCheckFs(ips);
String path1="/hbase/data/default/";
Path path=new Path(path1);
try {
RemoteIterator<FileStatus> remoteIterator= fs.listStatusIterator(path);
while(remoteIterator.hasNext()){
System.out.println(remoteIterator.next().getPath());
}
} catch (IOException e) {
}
} /**
* 查看当前路径是否存在
* @param fs
* @param path
* @return
*/
public static Boolean checkPathExist(FileSystem fs,String path){
Boolean isExist=true;
try {
isExist=fs.exists(new Path(path));
} catch (IOException e) {
isExist=false;
e.printStackTrace();
}
return isExist;
} /**
* 递归遍历找到所有目录和文件存储在map中,文件,key:路径,value:FILE ;目录,key:路径,value:DIR
* @param fs
* @param src
*/
public static void recureScanDir(FileSystem fs,Path src, Map<Path,String> map){
try{
if(fs.isFile(src)) {
map.put(src, Const.FILE_STATUS);
}else{
map.remove(src);
RemoteIterator<FileStatus> remoteIterator= fs.listStatusIterator(src);
if(!remoteIterator.hasNext()){
map.put(src, Const.DIR_STATUS);
}else {
while (remoteIterator.hasNext()){
recureScanDir(fs,remoteIterator.next().getPath(),map);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
} /**
* 目录从本地拷贝到hdfs上
* @param fs
* @param src
* @param dst
* @return
*/
public static Boolean copyFromLocal(FileSystem fs,Path src,Path dst){
Boolean success=true;
try {
if(fs.exists(dst)){
fs.delete(dst,true);
}
fs.copyFromLocalFile(false,true,src,dst);
success=true;
} catch (IOException e) {
success=false;
LOG.error("文件从本地拷贝到hdfs上,出现Io异常,导致拷贝文件失败,src:{},dst:{}",src,dst);
e.printStackTrace();
}
return success;
} /**
*目录从hdfs上拷贝到本地
* @param fs
* @param src
* @param dst
* @return
*/
public static Boolean copyToLocal(FileSystem fs,Path src,Path dst){
Boolean success=true;
try {
if(new File(dst.toString()).exists()){
Utils.deletNotEmptyDir(new File(dst.toString()));
}
fs.copyToLocalFile(false, src, dst, true);
success=true;
} catch (IOException e) {
success=false;
LOG.error("文件从hdfs拷贝到本地,出现Io异常,导致拷贝文件失败");
e.printStackTrace();
}
return success;
} private static void testCopyFileToLocal(){
String ips="10.17.139.126,10.17.139.127,10.17.139.125";
FileSystem fs=getAndCheckFs(ips);
String path1="/hbase/data/default/";
Path path=new Path(path1);
try {
RemoteIterator<FileStatus> remoteIterator= fs.listStatusIterator(path);
while(remoteIterator.hasNext()){
System.out.println(remoteIterator.next().getPath());
}
} catch (IOException e) {
LOG.error(e.getMessage());
}
} /**
* 获取目录path下所有的文件名
* @param fs
* @param path
* @return
*/
public static List<String> scanDir(FileSystem fs,Path path){
List<String> list=new ArrayList<>();
try {
RemoteIterator<FileStatus> remoteIterator= fs.listStatusIterator(path);
while(remoteIterator.hasNext()){
list.add(remoteIterator.next().getPath().getName());
}
} catch (IOException e) {
LOG.error(e.getMessage());
}
return list;
} public static void main(String[] args) {
//testConnectFs();
testCopyFileToLocal(); }
}
12 hdfs常用文件、目录拷贝操作、删除操作的更多相关文章
- C#路径,文件,目录,I/O常见操作
C#路径,文件,目录,I/O常见操作 文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供 ...
- HDFS常用文件操作
put 上传文件 hadoop fs -put wordcount.txt /data/wordcount/ text 查看文件内容 hadoop fs -text /output/wo ...
- C#路径/文件/目录/I/O常见操作汇总
文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供 ...
- 使用scp将文件/目录拷贝到另一台Linux主机上
如何将一台Linux主机上的文件或目录拷贝到另一台Linux主机上,scp命令可以实现该需求 前提条件:两台Linux主机处于同一网段,可以互相ping通 操作如下: 文件拷贝 ①将本地文件拷贝到远端 ...
- C#路径/文件/目录/I/O常见操作汇总<转载>
文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供 ...
- 【转】C#路径/文件/目录/I/O常见操作汇总
文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供 ...
- 提供一个HDFS内的文件的路径,对该文件进行创建和删除操作。如果文件所在目录不存在,则自动创建目录。
1 import java.text.SimpleDateFormat; 2 3 import org.apache.hadoop.fs.FSDataOutputStream; 4 import or ...
- hadoop HDFS常用文件操作命令
命令基本格式: hadoop fs -cmd < args > 1. ls 列出hdfs文件系统根目录下的目录和文件 hadoop fs -ls /dir hadoop fs -ls -R ...
- Hadoop之HDFS常用文件操作命令
命令基本格式:hadoop fs -cmd < args > 1. ls 列出hdfs文件系统根目录下的目录和文件hadoop fs -ls /dirhadoop fs -ls -R /d ...
随机推荐
- javascript 网页图标音乐切换
图片名称 sprite.zip <!doctype html> <html> <head> </head> <style> .css{ po ...
- php 异常捕获
1 首先是try,catch <?php $path = "D:\\in.txt"; try //检测异常 { file_open($path); } catch(Excep ...
- linux运维面试题汇总一
1.如何让history历史命令显示命令使用的具体时间? [root@node0 ~]# export HISTTIMEFORMAT='%F %T ' [root@node0 ~]# history ...
- PE文件结构整理
一直想做一个PE结构的总结,只是学的时候有很多东西就没搞懂,加上时间一长,很多知识也早忘了,也就一直没完成.这几天从头看了下,好不容易理清楚了,整理一下,以免又忘了 pe文件框架结构,图片贴过来太模糊 ...
- 摇滚吧HTML5!Jsonic超声波前端交互!
前些年吹过一阵canvas制作html5游戏的东风,相信不少同学重温了一把高中物理课本上的牛顿定律.时光如梭,你是否还记得牛顿定律后面一章的各种机械波的物理定律?环视四周,光纤.wifi.蓝牙.广播都 ...
- Largest product in a grid
这个比前面的要复杂点,但找对了规律,还是可以的. 我逻辑思维不强,只好画图来数数列的下标了. 分四次计算,存入最大值. 左右一次,上下一次,左斜一次,右斜一次. In the 2020 grid be ...
- Usage、Usage Minimum和Usage Maximum项目详解
(1)一个产生多个数据域(Report Count>1)的主项目之前有一个以上的[用途]时,每个[用途]与一个数据域依次对应,如果数据域个数(Report Count)超过[用途]的个数,则剩余 ...
- 几种开源SIP协议栈对比OPAL,VOCAL,sipX,ReSIProcate,oSIP
随着VoIP和NGN技术的发展,H.323时代即将过渡到SIP时代,在H.323的开源协议栈中,Openh323占统治地位,它把一个复杂而又先进 的H.323协议栈展现在普通程序员的眼前,为H.323 ...
- Codeforces Round #FF (Div. 2)__E. DZY Loves Fibonacci Numbers (CF447) 线段树
http://codeforces.com/contest/447/problem/E 题意: 给定一个数组, m次操作, 1 l r 表示区间修改, 每次 a[i] + Fibonacci[i-l ...
- 寻找第K小元素
要在一个序列里找出第K小元素,可以用排序算法,然后再找.可以证明,排序算法的上界为O(nlogn). 在这里,给出两种可以在线性时间内找出第K小元素的方法. 方法1: (1) 选定一个比较小的阈值(如 ...