目录
- 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