【大数据计算】(一) HDFS操作方法和基础编程
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编程实践
- 在IDEA中创建项目
- 为项目添加需要用到的JAR包
- 编写Java应用程序
- 编译运行程序
- 应用程序的部署
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操作方法和基础编程相关推荐
- [大数据计算基础] 大数据计算系统
大数据计算系统 大数据计算框架的几个要素 : • 计算场景: 适用于何种任务使用? • 抽象:程序员看到的框架是什么样的? • API:程序员如何使用框架? • 系统架构:系统有哪些模块? • 基本数 ...
- 哈工大《大数据计算基础》期末考试
哈工大<大数据计算基础>期末考试 留给学弟学妹们参考 题型:判断.简答.综合题 判断:10 x 2分 非常简单,记不住了 简答:4 x 5分 Spark RDD是什么及特点? 大数据算法中 ...
- 哈工大《大数据计算基础》期末考试2021
哈工大<大数据计算基础>期末考试2021 去年学长的链接2020年大数据基础 判断 10道,基本都比较简单 比如: 大数据就是1T以上的数据 大数据技术框架是否都是并行计算的 简答:4 x ...
- 哈工大《大数据计算基础》课程资料链接
哈工大<大数据计算基础>课程资料链接 这里列举一下笔者当时复习时候参考的学长的火炬的链接 复习链接 算法复习的链接 系统复习的链接 往年考试回忆链接 2021年的 2020年的
- 大数据计算框架与平台--深入浅出分析
http://mp.weixin.qq.com/s/s2DnbgieeQockaLKdZDCzA?utm_source=tuicool&utm_medium=referral 1. 前言 计算 ...
- 超级干货 :一文读懂大数据计算框架与平台(升级版)
1. 前言 计算机的基本工作就是处理数据,包括磁盘文件中的数据,通过网络传输的数据流或数据包,数据库中的结构化数据等.随着互联网.物联网等技术得到越来越广泛的应用,数据规模不断增加,TB.PB量级成为 ...
- 一文读懂大数据计算框架与平台
1. 前言 计算机的基本工作就是处理数据,包括磁盘文件中的数据,通过网络传输的数据流或数据包,数据库中的结构化数据等.随着互联网.物联网等技术得到越来越广泛的应用,数据规模不断增加,TB.PB量级成为 ...
- 从零开始大数据--Hadoop、HDFS、MapReduce、HBase、Hive
文章目录 概述 Hadoop HDFS HBase 实现原理 Regin服务器原理 HBase安装与使用 NoSQL数据库 MapReduce Hive 概述 IT领域每隔十五年就会迎来一次重大变革: ...
- 大数据计算的基石——MapReduce
MapReduce Google File System提供了大数据存储的方案,这也为后来HDFS提供了理论依据,但是在大数据存储之上的大数据计算则不得不提到MapReduce. 虽然现在通过框架的不 ...
最新文章
- wireshark合并多个文件_小技巧:快速合并多个excel文件(收藏版)
- 2022年跨境电商的风口还在吗?
- boost::timer模块检查在同一程序中使用 Chrono 和 Timer 不会导致链接错误
- java编译后生成字节码_请问java源文件编译后怎么生成字节码文件?
- 近半年能力没进步原因分析与求助
- POI创建的文档具有不同条件的灵活样式
- C++:52---多重继承
- recovery.conf 用于 stream replication
- 基类成员函数和派生类成员函数不构成重载
- 一文讲清如何正确选择图表,学会后再也不会用错图表
- “21天好习惯”第一期-13
- 扒一扒9.3阅兵直播如何采用虚拟现实技术
- SQL中Case的使用方法(上篇)
- DEAP:使用生理信号进行情绪分析的数据库IEEE
- qml textarea出现滚动条
- Laravel 使用百度地图实现地理位置转经纬度
- 【已解决】C盘-系统引导盘扩大容量
- python二次函数_python数据分析之曲线拟合:二次函数拟合
- 5G时代来临,电影行业面临的机遇与挑战
- windows10突然没有蓝牙标识解决办法合集