(图文详细)云计算与大数据实训作业答案(之篇二大数据系统及应用-HDFS实训)

更新时间:2023-07-09 13:07:27 阅读: 评论:0

(图⽂详细)云计算与⼤数据实训作业答案(之篇⼆⼤数据系统及应⽤-HDFS
实训)
⼤数据系统及应⽤-HDFS 实训
Hadoop是⼀个由Apache基⾦会所开发的分布式系统基础架构,可以在不了解分布式底层细节的情况下,开发分布式程序,以满⾜在低性能的集群上实现对⾼容错,⾼并发的⼤数据集的⾼速运算和存储的需要。Hadoop⽀持超⼤⽂件(可达PB级),能够检测和快速应对硬件故障、⽀持流式数据访问、同时在简化的⼀致性模型的基础上保证了⾼容错性。因⽽被⼤规模部署在分布式系统中,应⽤⼗分⼴泛。实验⽬的
1) 理解HDFS在Hadoop体系结构中的⾓⾊;
2) 熟悉HDFS操作常⽤的Java API。
第1关:HDFS Java API 编程 ——⽂件读写
任务描述
利⽤HDFS⽂件系统开放的API对HDFS系统进⾏⽂件的创建和读写
相关知识
HDFS⽂件系统
HDFS设计成能可靠地在集群中⼤量机器之间存储⼤量的⽂件,它以块序列的形式存储⽂件。⽂件中除了最后⼀个块,其他块都有相同的⼤⼩(⼀般64M)。属于⽂件的块为了故障容错⽽被复制到不同节点备份(备份数量有复制因⼦决定)。块的⼤⼩和读写是以⽂件为单位进
⾏配置的。HDFS中的⽂件是⼀次写的,并且任何时候都只有⼀个写操作,但是可以允许多次读。
HDFS⽂件创建和读写
HDFS⽂件创建和操作可分为三个步骤: 1、获取FileSystem 对象;2、通过FSDataOutputStream 进⾏写⼊;
Configuration conf = new  Configuration();//configuration 类实现hadoop 各模块之间值的传递
FileSystem fs = (conf);  //获取⽂件系统
Path file = new  Path(xxx);        //创建⽂件
FSDataOutputStream outStream = fs.create(file); //获取输出流
outStream.writeUTF("XXX");//可以写⼊任意字符
outStream.clo();//记得关闭输出流
3、通过FSDataInputStream 将⽂件内容输出。
湿气重禁忌的食物FSDataInputStream inStream = fs.open(file);  //获取输⼊流
String data = adUTF();  //读取⽂件
编程要求
在右侧编辑器中补全代码,完成本关任务,具体要求如下:
获取hadoop的系统设置,并在其中创建HDFS⽂件,⽂件路径为/ur/hadoop/myfile;
在myfile⽂件中添加字符串www.educoder;
读取刚刚创建myfile⽂件中的内容,并输出。
测试说明
本关的评测预设⽂件时/ur/hadoop/myfile所以创建⽂档的路径必须设置为/ur/hadoop/myfile才能评测,否则会评测失败。 注:由于启动服务、编译等耗时,以及hdfs⽂件操作过程资源消耗较⼤且时间较长,因⽽评测时间较长,在40s左右.
实训使⽤软件环境为:JavaJDK1.8,hadoop2.7.4。
开始你的任务吧,gook luck!
代码如下:
import java.io.*;
import java.sql.Date;
import org.f.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class hdfs {
public static void main(String[] args) throws IOException {
Configuration conf = new Configuration();//configuration类实现hadoop各模块之间值的传递        FileSystem fs = (conf);  //获取⽂件系统
Path file = new Path("/ur/hadoop/myfile");        //创建⽂件
FSDataOutputStream outStream = fs.create(file); //获取输出流
outStream.writeUTF("www.educoder");//可以写⼊任意字符
outStream.clo();//记得关闭输出流
FSDataInputStream inStream = fs.open(file);  //获取输⼊流
String data = adUTF();  //读取⽂件怎样流产最快
}
}
第2关:HDFS Java API编程——⽂件上传
任务描述
本关任务:向HDFS中上传任意⽂本⽂件。
相关知识
判断HDFS中⽂件是否存在
1. FileSystem fs = (conf);//获取对象
2. fs.exists(new Path(path);    //判断该路径的⽂件是否存在,是则返回true
⽂件拷贝
关键代码如下:
1./* fs.copyFromLocalFile 第⼀个参数表⽰是否删除源⽂件,第⼆个参数表⽰是否覆盖 */
2. fs.copyFromLocalFile(fal, true, localPath, remotePath);
向HDFS⽂件追加数据
向HDFS⽂件中追加信息,关键代码如下:
FileSystem fs = (conf);
Path remotePath = new Path(remoteFilePath);
/* 创建⼀个⽂件读⼊流 */
FileInputStream in = new FileInputStream(localFilePath);
/* 创建⼀个⽂件输出流,输出的内容将追加到⽂件末尾 */
FSDataOutputStream out = fs.append(remotePath);
/* 读写⽂件内容 */
byte[] data = new byte[1024];
int read = -1;
while ( (read = in.read(data)) > 0 ) {
out.write(data, 0, read);
}
编程要求
请在右侧start…end处填充代码实现相关功能,完成向HDFS中上传⽂本⽂件,如果指定的⽂件在HDFS中已经存在,由⽤户指定是追加到原有⽂件末尾还是覆盖原有的⽂件。
测试说明
⽂中要上传的⽂件路径和⽬标⽂件路径已经设置好,请不要修改,否则⽆法评测,因为Hadoop环境⾮常消耗资源,所以评测时间较长,需要40秒左右。
开始你的任务吧,good luck!
代码如下:
哭的图片女生伤心
import java.io.*;
import java.sql.Date;
import java.util.Scanner;
import org.f.Configuration;
印度河平原
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class hdfs {
/**
* 判断路径是否存在
*/
public static boolean test(Configuration conf, String path) throws IOException {
/*****start*****/
/
/请在此处编写判断⽂件是否存在的代码
try(FileSystem fs = (conf)){
ists(new Path(path));
} catch (IOException e){
e.printStackTrace();
return fal;
}
/*****end*****/
}
/**
* 复制⽂件到指定路径
* 若路径已存在,则进⾏覆盖
*/
public static void copyFromLocalFile(Configuration conf, String localFilePath, String remoteFilePath) throws IOException {
/*****start*****/
//请在此处编写复制⽂件到指定路径的代码
Path localPath = new Path(localFilePath);
Path remotePath = new Path(remoteFilePath);
try (FileSystem fs = (conf)) {
} catch (IOException e) {
又的成语e.printStackTrace();
}
/*****end*****/
}
/**
* 追加⽂件内容
*/
public static void appendToFile(Configuration conf, String localFilePath, String remoteFilePath) throws IOException {
/*****start*****/
//请在此处编写追加⽂件内容的代码
Path remotePath = new Path(remoteFilePath);
try (FileSystem fs = (conf);
FileInputStream in = new FileInputStream(localFilePath);) {
FSDataOutputStream out = fs.append(remotePath);
byte[] data = new byte[1024];
int read = -1;
while ((read = in.read(data)) > 0) {
out.write(data, 0, read);
}
out.clo();
} catch (IOException e) {
e.printStackTrace();
}
/
*****end*****/
}
/**
* 主函数
*/
public static void main(String[] args)throws IOException  {
Configuration conf = new Configuration();
createHDFSFile(conf);
String localFilePath = "./";          // 本地路径
String remoteFilePath = "/ur/";    // HDFS路径
String choice = "";
率的结构
try {
/* 判断⽂件是否存在 */
Boolean fileExists = fal;
if (st(conf, remoteFilePath)) {
fileExists = true;
System.out.println(remoteFilePath + " 已存在.");
choice = "append";      //若⽂件存在则追加到⽂件末尾
} el {缝纫
System.out.println(remoteFilePath + " 不存在.");
冷吃兔的做法
choice = "overwrite";  //覆盖
}
/
*****start*****/
//请在此处编写⽂件不存在则上传⽂件choice等于overwrite则覆盖  choice 等于append 则追加的逻辑
if (!fileExists) { // ⽂件不存在,则上传
System.out.println(localFilePath + " 已上传⾄ " + remoteFilePath);
} el if (choice.equals("overwrite")) {    // 选择覆盖
System.out.println(localFilePath + " 已覆盖 " + remoteFilePath);
} el if (choice.equals("append")) {  // 选择追加
hdfs.appendToFile(conf, localFilePath, remoteFilePath);
System.out.println(localFilePath + " 已追加⾄ " + remoteFilePath);
}
/*****end*****/
} catch (Exception e) {
e.printStackTrace();
}
}
//创建HDFS⽂件
public static void createHDFSFile(Configuration conf)throws IOException{

本文发布于:2023-07-09 13:07:27,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1074422.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:追加   评测   代码   存在   是否   路径
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图