目录
- 1、Hadoop三种Shell方式
- (1)目录操作
- 1、查看目录
- 2、创建目录
- 3、删除目录
- (2)文件操作
- 1、创建文件
- 2、上传文件
- 3、下载文件
- 4、拷贝文件
- 2、利用Web界面管理HDFS
- 3、利用Java API 与 HDFS 进行交互
- (1)安装eclipse包
- (2)使用 Eclipse 开发试 调试 HDFS Java 程序
- (3)编译运行程序
- 1、启动HDFS
- 2、创建文件
- 3、上传文件
- 4、回到eclipse
- 5、在HDFS查看merge.txt的内容
- (4)部署用户程序
- 1、创建目录
- 2、将程序打包成JAR包
- 3、删除merge.txt
- 4、运行jar包
- (5)、关闭HDFS
目的:
熟练使用HDFS操作常用的Shell命令
熟悉HDFS操作常用的Java API
1、Hadoop三种Shell方式
(1)目录操作
1、查看目录
2、创建目录
3、删除目录
(2)文件操作
1、创建文件
2、上传文件
3、下载文件
4、拷贝文件
2、利用Web界面管理HDFS
启动HDF、在浏览器输入http://localhost:9870
./sbin/start-dfs.sh
3、利用Java API 与 HDFS 进行交互
(1)安装eclipse包
链接: link
链接:https://pan.baidu.com/s/1V_XVDTl4zGcT5gXx7Z2qDA
提取码:1vy7
(2)使用 Eclipse 开发试 调试 HDFS Java 程序
import java.io.IOException;
import java.io.PrintStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
/**
* 过滤掉文件名满足特定条件的文件
*/
class MyPathFilter implements PathFilter {
String reg = null;
MyPathFilter(String reg) {
this.reg = reg;
}
public boolean accept(Path path) {
if (!(path.toString().matches(reg))) {
return true;
}
return false;
}
}
/**
* 利用 FSDataOutputStream 和 FSDataInputStream 合并 HDFS 中的文件
*/
public class MergeFile {
Path inputPath = null; // 待合并的文件所在的目录的路径
Path outputPath = null; // 输出文件的路径
public MergeFile(String input, String output) {
this.inputPath = new Path(input);
this.outputPath = new Path(output);
}
public void doMerge() throws IOException {
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://localhost:9000");
conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
FileSystem fsSource = FileSystem.get(URI.create(inputPath.toString()), conf);
FileSystem fsDst = FileSystem.get(URI.create(outputPath.toString()), conf);
// 下面过滤掉输入目录中后缀为.abc 的文件
FileStatus[] sourceStatus = fsSource.listStatus(inputPath, new MyPathFilter(".*\\.abc"));
FSDataOutputStream fsdos = fsDst.create(outputPath);
PrintStream ps = new PrintStream(System.out);
// 下面分别读取过滤之后的每个文件的内容,并输出到同一个文件中
for (FileStatus sta : sourceStatus) {
// 下面打印后缀不为.abc 的文件的路径、文件大小
System.out.print("路径:" + sta.getPath() + " 文件大小:" + sta.getLen()
+ " 权限:" + sta.getPermission() + " 内容:");
FSDataInputStream fsdis = fsSource.open(sta.getPath());
byte[] data = new byte[1024];
int read = -1;
while ((read = fsdis.read(data)) > 0) {
ps.write(data, 0, read);
fsdos.write(data, 0, read);
}
fsdis.close();
}
ps.close();
fsdos.close();
}
public static void main(String[] args) throws IOException {
MergeFile merge = new MergeFile(
"hdfs://localhost:9000/user/damon/",
"hdfs://localhost:9000/user/damon/merge.txt");
merge.doMerge();
}
}
(3)编译运行程序
1、启动HDFS
cd /usr/local/hadoop #进入 hadoop 安装目录
./sbin/start-dfs.sh #启动 hdfs
jps #查看进程
./bin/hdfs dfs -ls / #查看根目录下内容
./bin/hdfs dfs -ls/user #查看/user 目录下内容
2、创建文件
3、上传文件
4、回到eclipse
运行文件:
5、在HDFS查看merge.txt的内容
(4)部署用户程序
1、创建目录
2、将程序打包成JAR包
3、删除merge.txt
4、运行jar包
./bin/hadoop jar ./myapp/HDFSexample.jar