赞
踩
(1)理解HDFS在Hadoop体系结构中的角色;
(2)熟练使用HDFS操作常用的Shell命令;
(3)熟悉HDFS操作常用的Java API。
(1)操作系统:Linux;
(2)Hadoop版本:2.7.4 ;
(3)JDK版本1.8;
(4)Java IDE:eclipse 。
(一)编程实现以下功能,并利用Hadoop提供的Shell命令完成相同任务:
(1)向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,则由用户来指定是追加到原有文件末尾还是覆盖原有的文件
- /**
- * 向HDFS中上传任意文本文件
- * 如果指定的文件在 HDFS 中已经存在
- * 由用户指定是追加到原有文件末尾还是覆盖原有的文件
- * @param fileSystem
- * @param srcPath 本地文件地址
- * @param desPath HDFS文件地址
- * @author yangd
- */
- @Test
- private static void test1(FileSystem fileSystem, Path srcPath, Path desPath) {
- try {
- if (fileSystem.exists(new Path("/a/test.txt"))) {
- System.out.println("文件已存在,是否覆盖原有的文件? ( y 覆盖/n 追加)");
- if (new Scanner(System.in).next().equals("y")) {
- fileSystem.copyFromLocalFile(false, true, srcPath, desPath);
- } else {
- FileInputStream inputStream = new FileInputStream(srcPath.toString());
- FSDataOutputStream outputStream = fileSystem.append(new Path("/test/test.txt"));
- byte[] bytes = new byte[1024];
- int read = -1;
- while ((read = inputStream.read(bytes)) > 0) {
- outputStream.write(bytes, 0, read);
- }
- inputStream.close();
- outputStream.close();
- }
- } else {
- fileSystem.copyFromLocalFile(srcPath, desPath);
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
调用方法
- public static void main(String args[]) throws IOException {
- // HDFS路径
- Path path1 = new Path("/a/test.txt");
- // 本地路径
- Path path2 = new Path("D:/test.txt");
- System.setProperty("hadoop.home.dir", "D:\\Hadoop2.7.4\\hadoop-2.7.4");
- // 构造一个配置参数对象,设置一个参数:要访问的HDFS的URI
- Configuration conf = new Configuration();
- // 这里指定使用的是HDFS
- conf.set("fs.defaultFS", "hdfs://192.168.121.130:9000");
- // 通过如下的方式进行客户端身份的设置
- System.setProperty("HADOOP_USER_NAME", "root");
- // 通过FileSystem的静态方法获取文件系统客户端对象
- FileSystem fs = FileSystem.get(conf);
- test1(fs, path2, path1);
- }
结果
shell
- hadoop fs -put /export/data/word.txt /test
- hadoop fs -appendToFile /export/data/word.txt /test
- hadoop fs -copyFromLocal -f /export/data/word.txt /test
(2)从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名;
- /**
-
- * 从HDFS中下载指定文件 若本地文件与要下载的文件名称相同
-
- * 则自动对下载的文件重命名
-
- * @param fileSystem
-
- * @param remotePath HDFS文件地址
-
- * @param localPath 本地文件地址
-
- * @author yangd
-
- */
-
- @Test
-
- private static void test2(FileSystem fileSystem, Path remotePath, Path localPath) {
-
- try {
-
- if (fileSystem.exists(remotePath)) {
-
- if(!(fileSystem.equals(localPath))){
-
- fileSystem.copyToLocalFile(remotePath, localPath);
-
- System.out.println("从HDFS中下载文件成功!");
-
- }else {
-
- fileSystem.copyToLocalFile(remotePath, new Path("localPath"+ new Random().nextInt() + ".txt"));
-
- System.out.println("从HDFS中下载文件并重命名成功!");
-
- }
-
- } else {
-
- System.out.println("在HDFS中找不到此文件!");
-
- }
-
- }catch (IOException e) {
-
- e.printStackTrace();
-
- }
-
- }
hadoop fs -copyToLocal /a/test.txt /export/data/test.txt
(3)将HDFS中指定文件的内容输出到终端中;
hadoop fs -cat /a/test.txt
- /**
-
- * 将HDFS中指定文件的内容输出到终端中
-
- *
-
- * @param fileSystem
-
- * @param remotePath
-
- * @author yangd
-
- */
-
- @Test
-
- private static void test3(FileSystem fileSystem, Path remotePath) {
-
- try {
-
- FSDataInputStream inputStream = fileSystem.open(remotePath);
-
- BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
-
- String line;
-
- System.out.println("HDFS中文件内容为:");
-
- while ((line = bufferedReader.readLine()) != null) {
-
- System.out.println(line);
-
- }
-
-
-
- } catch (IOException e) {
-
- e.printStackTrace();
-
- }
-
- }
(4)显示HDFS中指定的文件的读写权限、大小、创建时间、路径等信息;
- /**
-
- * 显示HDFS中指定的文件的读写权限、大小、创建时间、路径等信息
-
- * @param fileSystem
-
- * @param remotePath HDFS文件地址
-
- * @author yangd
-
- */
-
- private static void test4(FileSystem fileSystem, Path remotePath) {
-
- try {
-
- FileStatus[] fileStatus = fileSystem.listStatus(remotePath);
-
- System.out.println("HDFS中指定的文件的读写权限、大小、创建时间、路径信息如下:");
-
- for (FileStatus status : fileStatus) {
-
- System.out.println(status.getPermission());
-
- System.out.println(status.getBlockSize());
-
- System.out.println(status.getAccessTime());
-
- System.out.println(status.getPath());
-
- }
-
- } catch (IOException e) {
-
- e.printStackTrace();
-
- }
-
- }
hadoop fs -ls -h /a/test.txt
完整实验过程及源代码和运行结果截图下载链接:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。