- 客户端环境配置
- 1. 环境配置
- 2. 测试
- 3. 样例- mkdir
- Java API
- 1. 文件上传-CopyfromLocal
- 文件上传参数优先级
- 2. 文件下载 - CopyToLocal
- 原理
- 过程
- 代码
- 3. 文件夹删除 - Delete
- 原理
- 过程
- 代码
- 4. 文件名更改 - Rename
- 原理
- 过程
- 代码
- 5. 文件详情查看 - ListFiles
- 原理
- 过程
- 代码
- 6. 文件和文件夹判断 - ListStatus
- 原理
- 过程
- 代码
边学边写,持续更新中
配合目录用
- 下载并解压Maven到 /opt 目录下,配置环境变量
在/etc/profile.d 路径下创建一个 maven.sh 文件,写入以下代码
source /etc/profile ,用 mvn -v 查看是否安装成功,如图
export MAVEN_HOME=/opt/apache-maven-3.0.5
export PATH=$PATH:${MAVEN_HOME}/bin
- 更换maven源
vim /opt/apache-maven-3.0.5/conf/settings.xml,在指定位置写入以下代码,如图
nexus-aliyun central Nexus aliyun http://maven.aliyun.com/nexus/content/groups/public/
- 创建Maven工程
在 /opt 目录下,创建一个文件夹,进入该文件夹
mkdir workspace
在workspace文件夹下,创建项目,如图
mvn archetype:generate -DgroupId=com.root
默认回车执行,创建一个maven样例工程
输入项目名称,定义版本号-默认回车,检查-默认回车。如图
- 用 tree hdfs-mkdir/ 查看结构。若提示 tree not found ,按提示安装tree。如图
- 打包 mvn package , 输出hello world
在 hdfs-mkdir 目录下,执行mvn package ,再用 tree hdfs-mkdir/ 会增加如下内容
运行该打包文件,在/hdfs-mkdir 目录下。结果如图
java -cp target/hdfs-mkdir-1.0-SNAPSHOT.jar com.root.App
- 导入依赖。更改 pom.xml ,写入以下代码,并在如图所示加入版本号
junit junit RELEASE org.apache.logging.log4j log4j-core 2.8.2 org.apache.hadoop hadoop-common ${hadoop.version} org.apache.hadoop hadoop-client ${hadoop.version} org.apache.hadoop hadoop-hdfs ${hadoop.version}
- 清理上次运行的结果
mvn clean
再次运行 mvn package
运行打包的文件,成功输出
java -cp target/hdfs-mkdir-1.0-SNAPSHOT.jar com.root.App
每一次运行java程序之前都要 clean 和 package 一遍
- mkdir样例
- 修改pom.xml 文件,加入以下代码,,如图,注意对齐
完成后执行 mvn clean 和 mvn package
org.apache.maven.plugins maven-jar-plugin 2.3.2 true lib/ com.young org.apache.maven.plugins maven-dependency-plugin copy package copy-dependencies ${project.build.directory}/lib
- 防止日志报警。在src/main/resources路径下添加日志配置文件log4j.properties,并写入以下代码
log4j.rootLogger=INFO, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n log4j.appender.logfile=org.apache.log4j.FileAppender log4j.appender.logfile.File=target/spring.log log4j.appender.logfile.layout=org.apache.log4j.PatternLayout log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
- 编辑App.java,替换成以下代码。在hdfs-mkdir路径下。
vim src/main/java/com/root/App.java
package com.root;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class App
{
public static void main( String[] args ) throws IOException, Exception, URISyntaxException
{
Configuration conf = new Configuration();
//1 获取hdfs客户端对象
FileSystem fs = FileSystem.get(new URI("hdfs://hadoop1:9000"), conf, "root");
//2 在hdfs上创建路径
fs.mkdirs(new Path("/0x00/usr"));
//3 关闭资源
fs.close();
System.out.println( "HDFS mkdir!" );
}
}
- 运行App.java,如图
java -cp target/hdfs-mkdir-1.0-SNAPSHOT.jar com.root.App
- 新建java程序,拷贝之前的App.java即可
cp App.java CopyfromLocal.java
- 进入 CopyfromLocal 中,写入以下代码
package com.root;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class CopyfromLocal
{
public static void main( String[] args ) throws IOException, Exception, URISyntaxException
{
Configuration conf = new Configuration();
//1 获取hdfs客户端对象
FileSystem fs = FileSystem.get(new URI("hdfs://hadoop1:9000"), conf, "root");
//2 将本地文件上传到hdfs上
fs.copyFromLocalFile(new Path("/tmp/pom.xml"), new Path("/"));
//3 关闭资源
fs.close();
System.out.println( "HDFS copy from local" );
}
}
- 运行程序
mvn clean
mvn package
java -cp target/hdfs-mkdir-1.0-SNAPSHOT.jar com.root.CopyfromLocal
如图
- 创建java文件
- 写入代码
- mvn clean
- mvn package
- java -cp target/hdfs-mkdir-1.0-SNAPSHOT.jar com.root.CopyToLocal
package com.root;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class CopyToLocal
{
public static void main( String[] args ) throws IOException, Exception, URISyntaxException
{
Configuration conf = new Configuration();
//1 获取hdfs客户端对象
FileSystem fs = FileSystem.get(new URI("hdfs://hadoop1:9000"), conf, "root");
//2 下载操作
fs.copyToLocalFile(new Path("/pom.xml"), new Path("/tmp/pom-r-n.xml"));
//3 关闭资源
fs.close();
System.out.println( "HDFS copy to local" );
}
}
3. 文件夹删除 - Delete
原理
过程
- 创建java文件
- 写入代码
- mvn clean
- mvn package
- java -cp target/hdfs-mkdir-1.0-SNAPSHOT.jar com.root.Delete
package com.root;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class Delete
{
public static void main( String[] args ) throws IOException, Exception, URISyntaxException
{
Configuration conf = new Configuration();
//1 获取hdfs客户端对象
FileSystem fs = FileSystem.get(new URI("hdfs://hadoop1:9000"), conf, "root");
//2 文件删除
fs.delete(new Path("/0x00"), true);
//3 关闭资源
fs.close();
System.out.println( "HDFS delete" );
}
}
4. 文件名更改 - Rename
原理
过程
- 创建java文件
- 写入代码
- mvn clean
- mvn package
- java -cp target/hdfs-mkdir-1.0-SNAPSHOT.jar com.root.Rename
package com.root;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class Rename
{
public static void main( String[] args ) throws IOException, Exception, URISyntaxException
{
Configuration conf = new Configuration();
//1 获取hdfs客户端对象
FileSystem fs = FileSystem.get(new URI("hdfs://hadoop1:9000"), conf, "root");
//2 文件更名
fs.rename(new Path("/pom.xml"), new Path("/pom-r-x.xml"));
//3 关闭资源
fs.close();
System.out.println( "HDFS Rename" );
}
}
5. 文件详情查看 - ListFiles
原理
过程
- 创建java文件
- 写入代码 vim src/main/java/com/root/ListFiles.java
- mvn clean
- mvn package
- java -cp target/hdfs-mkdir-1.0-SNAPSHOT.jar com.root.ListFiles
package com.root;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator;
import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.BlockLocation;
public class ListFiles
{
public static void main( String[] args ) throws IOException, Exception, URISyntaxException
{
Configuration conf = new Configuration();
//1 获取hdfs客户端对象
FileSystem fs = FileSystem.get(new URI("hdfs://hadoop1:9000"), conf, "root");
//2 查看文件详情
RemoteIterator listFiles = fs.listFiles(new Path("/"), true);
while (listFiles.hasNext())
{
LocatedFileStatus fileStatus = listFiles.next();
// 查看文件名称、权限、长度、块信息
System.out.println(fileStatus.getPath().getName());
System.out.println(fileStatus.getPermission());
System.out.println(fileStatus.getLen());
BlockLocation[] blockLocations = fileStatus.getBlockLocations();
for (BlockLocation blockLocation: blockLocations)
{
String[] hosts = blockLocation.getHosts();
for (String host: hosts)
{
System.out.println(host);
}
}
System.out.println( "----------" );
}
//3 关闭资源
fs.close();
System.out.println( "HDFS list files" );
}
}
6. 文件和文件夹判断 - ListStatus
原理
过程
- 创建java文件
- 写入代码 vim src/main/java/com/root/ListStatus.java
- mvn clean
- mvn package
- java -cp target/hdfs-mkdir-1.0-SNAPSHOT.jar com.root.ListStatus
package com.root;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator;
import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.BlockLocation;
public class ListStatus
{
public static void main( String[] args ) throws IOException, Exception, URISyntaxException
{
Configuration conf = new Configuration();
//1 获取hdfs客户端对象
FileSystem fs = FileSystem.get(new URI("hdfs://hadoop1:9000"), conf, "root");
//2 判断操作
FileStatus[] listStatus = fs.listStatus(new Path("/"));
for (FileStatus fileStatus: listStatus)
{
if (fileStatus.isFile())
{
// 文件
System.out.println("f: "+fileStatus.getPath().getName());
} else
{
// 文件夹
System.out.println("d: "+fileStatus.getPath().getName());
}
}
//3 关闭资源
fs.close();
System.out.println( "HDFS list status" );
}
}
cd - 进入
cd $_ 进入刚创建的文件夹



