1. HDFS操作常用Shell命令

1.1 查看命令使用方法

  • 启动Hadoop
start-dfs.sh

  • 查看各种命令
hdfs dfs -help

1.2 HDFS目录操作

1.2.1 目录操作方法

  • 查看HDFS下所有的目录
hdfs dfs -ls

  • 创建一个input_test的目录
hdfs dfs -mkdir input_test

  • 删除input_test的目录
hdfs dfs -rm -r input_test

1.2.2 文件操作方法

  • 查看HDFS中一个文件in0.txt的内容
hdfs dfs -cat in0.txt

  • 把HDFS中的in0.txt文件内容下载到本地系统/home/zqc/download
hdfs dfs -get in0.txt /home/zqc/download


  • 文件上传到HDFS out文件夹中
hdfs dfs -put /home/zqc/score.txt out

  • 把文件从HDFS的一个目录复制到另外一个目录
hdfs dfs -cp out/score.txt wordcount/input

2. 利用HDFS的Web管理界面

3. HDFS编程实践

  1. 在IDEA中创建项目
  2. 为项目添加需要用到的JAR包
  3. 编写Java应用程序
  4. 编译运行程序
  5. 应用程序的部署

3.1 题目1

编写 FileUtils 类,其中包含文件下载与上传函数的实现,要求如下:
A. 函数UploadFile()向HDFS上传任意文本文件,如果指定的文件在HDFS中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件;

B. 函数DownloadFile()从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名;

C. 在本地Download文件夹中创建文本文件 localfile.txt ,在main函数中编写逻辑实现将其上传到hdfs的input文件夹中;

import java.io.*;
import java.util.Scanner;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;public class FileUtils {public static void appendToFile(Configuration conf, String LocalPath, String UploadPath) {Path uploadpath = new Path(UploadPath);try (FileSystem fs = FileSystem.get(conf); FileInputStream in = new FileInputStream(LocalPath);) {FSDataOutputStream out = fs.append(uploadpath);byte[] data = new byte[1024];int read = -1;while ((read = in.read(data)) > 0) {out.write(data, 0, read);}out.close();} catch (IOException e) {e.printStackTrace();}}public static void coverFile(Configuration conf, String LocalPath, String UploadPath) {Path uploadpath = new Path(UploadPath);try (FileSystem fs = FileSystem.get(conf); FileInputStream in = new FileInputStream(LocalPath);) {FSDataOutputStream out = fs.create(uploadpath);byte[] data = new byte[1024];int read = -1;while ((read = in.read(data)) > 0) {out.write(data, 0, read);}out.close();} catch (IOException e) {e.printStackTrace();}}public static void UploadFile(Configuration conf, String LocalPath, String UploadPath) {try {FileSystem fs = FileSystem.get(conf);Path localpath = new Path(LocalPath);Path uploadpath = new Path(UploadPath);if (fs.exists(uploadpath)) {System.out.println("File \"" + UploadPath + "\" exist!");System.out.println("1. append\t2. cover");Scanner sc = new Scanner(System.in);String s = sc.nextLine();if (s.equals("1")) {try {appendToFile(conf, LocalPath, UploadPath);} catch (Exception e) {e.printStackTrace();}} else {try {coverFile(conf, LocalPath, UploadPath);} catch (Exception e) {e.printStackTrace();}}} else {System.out.println("File \"" + UploadPath + "\" not exist!");InputStream in = new FileInputStream(LocalPath);OutputStream out = fs.create(uploadpath);IOUtils.copyBytes(in, out, 4096, true);System.out.println("File uploaded successfully!");}} catch (IOException e) {e.printStackTrace();}}public static void DownloadFile(Configuration conf, String LocalPath, String DownloadPath) {Path downloadpath = new Path(DownloadPath);try (FileSystem fs = FileSystem.get(conf)) {File f = new File(LocalPath);if (f.exists()) {System.out.println(LocalPath + " exits!");Integer i = Integer.valueOf(0);while (true) {f = new File(LocalPath + "_" + i.toString());if (!f.exists()) {LocalPath = LocalPath + "_" + i.toString();break;} else {i++;continue;}}System.out.println("rename: " + LocalPath);}Path localpath = new Path(LocalPath);fs.copyToLocalFile(downloadpath, localpath);} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {Configuration conf = new Configuration();conf.set("dfs.client.block.write.replace-datanode-on-failure.enable", "true");conf.set("dfs.client.block.write.replace-datanode-on-failure.policy", "NEVER");conf.set("fs.defaultFS", "hdfs://localhost:9000");conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");String LocalPath = "/home/zqc/Downloads/localfile.txt";String UploadPath = "/user/zqc/input/localfile.txt";
//        String DownloadPath = "/user/hadoop/input/score.txt";UploadFile(conf, LocalPath, UploadPath);
//        DownloadFile(conf, LocalPath, DownloadPath);
//        try {
//            String CreateDir = "/home/zqc/Downloads/";
//            String FileName = "localfile.txt";
//            String HDFSDir = "/user/hadoop/input";
//            File file = new File(CreateDir, FileName);
//            if (file.createNewFile()) {//                FileSystem hdfs = FileSystem.get(conf);
//                Path localpath = new Path(CreateDir + FileName);
//                Path hdfspath = new Path(HDFSDir);
//                hdfs.copyFromLocalFile(localpath, hdfspath);
//            }
//        } catch (Exception e) {//            e.printStackTrace();
//        }}
}

3.2 题目2

A. 编程实现一个类“MyFSDataInputStream”,该类继承“org.apache.hadoop.fs.FSDataInputStream”,要求如下:实现按行读取HDFS中指定文件的方法“readLine()”,如果读到文件末尾,则返回空,否则返回文件一行的文本。

B. 在main函数中编写逻辑实现按行读取input文件夹中的file.txt (查看附件)文件,将长度超过15个字符的行在控制台中打印出来;

import java.io.*;
import java.net.URI;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;public class ReadLine {public class MyFSDataInputStream extends FSDataInputStream {public MyFSDataInputStream(InputStream in) {super(in);}}public static String readline(Configuration conf, String filepath) throws IOException {Path path = new Path(filepath);FileSystem fs = FileSystem.get(URI.create("hdfs://localhost:9000"), conf);FSDataInputStream in = fs.open(path);BufferedReader d = new BufferedReader(new InputStreamReader(in));String line = null;while ((line = d.readLine()) != null) {System.out.println(line);}d.close();in.close();return null;}public static void main(String[] args) throws IOException {Configuration conf = new Configuration();conf.set("fs.defaultFS", "hdfs://localhost:9000");conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");String filepath = "/user/zqc/input/file.txt";try {Path path = new Path(filepath);FileSystem fs = FileSystem.get(URI.create("hdfs://localhost:9000"), conf);FSDataInputStream in = fs.open(path);BufferedReader d = new BufferedReader(new InputStreamReader(in));String line = null;while ((line = d.readLine()) != null) {if (line.length() > 15) {System.out.println(line);}}d.close();in.close();} catch (Exception e) {e.printStackTrace();}}
}

【大数据计算】(一) HDFS操作方法和基础编程相关推荐

  1. [大数据计算基础] 大数据计算系统

    大数据计算系统 大数据计算框架的几个要素 : • 计算场景: 适用于何种任务使用? • 抽象:程序员看到的框架是什么样的? • API:程序员如何使用框架? • 系统架构:系统有哪些模块? • 基本数 ...

  2. 哈工大《大数据计算基础》期末考试

    哈工大<大数据计算基础>期末考试 留给学弟学妹们参考 题型:判断.简答.综合题 判断:10 x 2分 非常简单,记不住了 简答:4 x 5分 Spark RDD是什么及特点? 大数据算法中 ...

  3. 哈工大《大数据计算基础》期末考试2021

    哈工大<大数据计算基础>期末考试2021 去年学长的链接2020年大数据基础 判断 10道,基本都比较简单 比如: 大数据就是1T以上的数据 大数据技术框架是否都是并行计算的 简答:4 x ...

  4. 哈工大《大数据计算基础》课程资料链接

    哈工大<大数据计算基础>课程资料链接 这里列举一下笔者当时复习时候参考的学长的火炬的链接 复习链接 算法复习的链接 系统复习的链接 往年考试回忆链接 2021年的 2020年的

  5. 大数据计算框架与平台--深入浅出分析

    http://mp.weixin.qq.com/s/s2DnbgieeQockaLKdZDCzA?utm_source=tuicool&utm_medium=referral 1. 前言 计算 ...

  6. 超级干货 :一文读懂大数据计算框架与平台(升级版)

    1. 前言 计算机的基本工作就是处理数据,包括磁盘文件中的数据,通过网络传输的数据流或数据包,数据库中的结构化数据等.随着互联网.物联网等技术得到越来越广泛的应用,数据规模不断增加,TB.PB量级成为 ...

  7. 一文读懂大数据计算框架与平台

    1. 前言 计算机的基本工作就是处理数据,包括磁盘文件中的数据,通过网络传输的数据流或数据包,数据库中的结构化数据等.随着互联网.物联网等技术得到越来越广泛的应用,数据规模不断增加,TB.PB量级成为 ...

  8. 从零开始大数据--Hadoop、HDFS、MapReduce、HBase、Hive

    文章目录 概述 Hadoop HDFS HBase 实现原理 Regin服务器原理 HBase安装与使用 NoSQL数据库 MapReduce Hive 概述 IT领域每隔十五年就会迎来一次重大变革: ...

  9. 大数据计算的基石——MapReduce

    MapReduce Google File System提供了大数据存储的方案,这也为后来HDFS提供了理论依据,但是在大数据存储之上的大数据计算则不得不提到MapReduce. 虽然现在通过框架的不 ...

最新文章

  1. wireshark合并多个文件_小技巧:快速合并多个excel文件(收藏版)
  2. 2022年跨境电商的风口还在吗?
  3. boost::timer模块检查在同一程序中使用 Chrono 和 Timer 不会导致链接错误
  4. java编译后生成字节码_请问java源文件编译后怎么生成字节码文件?
  5. 近半年能力没进步原因分析与求助
  6. POI创建的文档具有不同条件的灵活样式
  7. C++:52---多重继承
  8. recovery.conf 用于 stream replication
  9. 基类成员函数和派生类成员函数不构成重载
  10. 一文讲清如何正确选择图表,学会后再也不会用错图表
  11. “21天好习惯”第一期-13
  12. 扒一扒9.3阅兵直播如何采用虚拟现实技术
  13. SQL中Case的使用方法(上篇)
  14. DEAP:使用生理信号进行情绪分析的数据库IEEE
  15. qml textarea出现滚动条
  16. Laravel 使用百度地图实现地理位置转经纬度
  17. 【已解决】C盘-系统引导盘扩大容量
  18. python二次函数_python数据分析之曲线拟合:二次函数拟合
  19. 5G时代来临,电影行业面临的机遇与挑战
  20. windows10突然没有蓝牙标识解决办法合集

热门文章

  1. 【微信小程序】小程序的生命周期
  2. 系统性思考-思考习惯的养成
  3. max_allowed_packet Mysql 5.1遇到的信息包过大问题
  4. 一个不错的故事(上)
  5. elasticsearch操作
  6. 【深度学习】池化 (pooling)
  7. 分析天平计算机分类,分析化学之分析天平的概述和分类
  8. Mybatis-Plus用纯注解完成一对多多对多查询
  9. 反击爬虫,前端工程师的脑洞可以有多大?
  10. new UI-布局之LinearLayout(线性布局)详解