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 ...
随机推荐
- IIS下图片防盗连设置详解
小站只有100个IIS,盗链后经常是连主页都打不开,就想着弄个图片防盗链,在网上找了一下资料,正则表达式的写法啊,ISAPI_REWRITE基本配置啊等等,找来啃了一天终于发现有三个方法实现. 第一. ...
- php 编译安装选项
./configure --prefix=/usr/local/php/ --with-config-file-path=/etc/php5/cli/ --with-config-file-scan- ...
- MyBatis错误--Invalid bound statement (not found)
今天在开发项目的时候使用MyBatis发生错误:Invalid bound statement (not found) 具体错误信息: org.springframework.beans.factor ...
- Facebook和Google如何激发工程师的创造力
http://taiwen.lofter.com/post/664ff_ad8a15 今天终于“朝圣”了两个伟大的公司——Facebook和Google,对创造力和驱动力的来源有了更多的理解,尤其是对 ...
- web UI
Semantic不错的UI,代码非常详细
- ionic ng-src 在网页显示,但是导出apk在android手机中运行不显示图片
解决方法参照: http://stackoverflow.com/questions/29896158/load-image-using-ng-src-in-android-ionic-aplicat ...
- 为何某些公司不允许使用C++ STL?
说几个STL的缺点吧,虽然都是在比较极端的情况下出现,但是对于一些大项目还是会遇到的 1. 代码膨胀问题每一个实例化过的模板类,都会膨胀出一份独立的代码,比如std::vector<std::s ...
- xcode安装
Xcode5.1默认不支持iOS5版本的模拟器开发调试,在OS X Mavericks(10.9.x)下默认只能支持iOS6.1及以上版本的模拟器,在OS X Mountain Lion(10.8.x ...
- cf581A Vasya the Hipster
One day Vasya the Hipster decided to count how many socks he had. It turned out that he had a red so ...
- GF(2^8)生成元
目的是找出所有GF(2^8)的生成元. 方法很简单,从2开始遍历,将每个元素都与自身相乘255次,看是否能得到1~255.若能,则是生成元. #include<iostream> #inc ...