首页 > 其他分享 >今日总结

今日总结

时间:2023-12-08 21:25:26浏览次数:26  
标签:总结 文件 fs localFilePath remoteFilePath conf 今日 txt

今天完成了大数据的一部分作业

实验目的
1、理解HDFS在Hadoop体系结构中的角色
2、熟悉使用HDFS操作常用的Shell命令
3、熟悉HDFS操作常用的Java API

实验平台
1、操作系统:Windows
2、Hadoop版本:3.1.3
3、JDK版本:1.8
4、Java IDE:Eclipse

实验步骤
1、编程实现以下功能,并利用Hadoop提供的Shell命令完成相同任务
1)向 HDFS 中上传任意文本文件,如果指定的文件在 HDFS 中已经存在,则由用户来指定是追加到原有文件末尾还是覆盖原有的文件;
Shell 命令
检查文件是否存在,可以使用如下命令:

cd /usr/local/hadoop
./bin/hdfs dfs -test -e text.txt
1
2
执行完上述命令不会输出结果,需要继续输入命令查看结果:

echo $?

如果结果显示文件已经存在,则用户可以选择追加到原来文件末尾或者覆盖原来文件,
具体命令如下:

cd /usr/local/hadoop
./bin/hdfs dfs -appendToFile local.txt text.txt #追加到原文件末尾
./bin/hdfs dfs -copyFromLocal -f local.txt text.txt #覆盖原来文件,第一种命令形式
./bin/hdfs dfs -cp -f file:///home/hadoop/local.txt text.txt#覆盖原来文件,第二种命令形式

实际上,也可以不用上述方法,而是采用如下命令来实现:

if $(hdfs dfs -test -e text.txt);
then $(hdfs dfs -appendToFile local.txt text.txt);
else $(hdfs dfs -copyFromLocal -f local.txt text.txt);
fi

上述代码可视为一行代码,在终端中输入第一行代码后,代码不会立即被执行,可以继续输入第 2 行代码和第 3 行代码,直到输入 fi 以后,上述代码才会真正执行。另外,上述代码中,直接使用了 hdfs 命令,而没有给出命令的路径,因为,这里假设已经配置了 PATH环境变量,把 hdfs 命令的路径“/usr/local/hadoop/bin”写入了 PATH 环境变量中。

Java 代码
我们这里需要一个jar包来实现scphttp://www.ganymed.ethz.ch/ssh2/
项目目录结构如下:

HDFSApi.java

package HDFSApi;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import java.io.*;

import HDFSApi.SCP;

public class HDFSApi {
/**
* 判断路径是否存在
*/
public static boolean test(Configuration conf, String path) throws IOException {
FileSystem fs = FileSystem.get(conf);
return fs.exists(new Path(path));
}
/**
* 复制文件到指定路径
* 若路径已存在,则进行覆盖
*/
public static void copyFromLocalFile(Configuration conf, String localFilePath, String remoteFilePath) throws IOException {
FileSystem fs = FileSystem.get(conf);
Path localPath = new Path(localFilePath);
Path remotePath = new Path(remoteFilePath);
/* fs.copyFromLocalFile 第一个参数表示是否删除源文件,第二个参数表示是否覆盖 */
fs.copyFromLocalFile(false, true, localPath, remotePath);
fs.close();
}
/**
* 追加文件内容
*/
public static void appendToFile(Configuration conf, String localFilePath, String remoteFilePath) throws IOException {
FileSystem fs = FileSystem.get(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);
}
out.close();
in.close();
fs.close();
}
/**
* 主函数
*
*/
public static void main(String[] args) throws IOException {

SCP.get();//通过SCP将linux上的文件下载到windows上

Configuration conf = new Configuration();
conf.set("fs.default.name","hdfs://192.168.43.200:9000");
String localFilePath = "D:\\local.txt"; // 本地路径
String remoteFilePath = "/user/hadoop/text.txt"; // HDFS 路径
String choice = "append"; // 若文件存在则追加到文件末尾
// String choice = "overwrite"; // 若文件存在则覆盖
try {
/* 判断文件是否存在 */
Boolean fileExists = false;
if (HDFSApi.test(conf, remoteFilePath)) {
fileExists = true;
System.out.println(remoteFilePath + " 已存在.");
} else {
System.out.println(remoteFilePath + " 不存在.");
}
/* 进行处理 */
if ( !fileExists) { // 文件不存在,则上传
HDFSApi.copyFromLocalFile(conf, localFilePath, remoteFilePath);
System.out.println(localFilePath + " 已上传至 " + remoteFilePath);
} else if ( choice.equals("overwrite") ) { // 选择覆盖
HDFSApi.copyFromLocalFile(conf, localFilePath, remoteFilePath);
System.out.println(localFilePath + " 已覆盖 " + remoteFilePath);
} else if ( choice.equals("append") ) { // 选择追加
HDFSApi.appendToFile(conf, localFilePath, remoteFilePath);
System.out.println(localFilePath + " 已追加至 " + remoteFilePath);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}SCP.java

package HDFSApi;
import java.io.IOException;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.SCPClient;
public class SCP {
public static void get() throws IOException{
Connection conn = new Connection("192.168.43.200");
conn.connect();
boolean isAuthenticated = conn.authenticateWithPassword("root", "123456");
if (isAuthenticated == false)
throw new IOException("Authentication failed.");
SCPClient client = new SCPClient(conn);
client.get("/root/local.txt", "D:\\");
conn.close();
}
}

标签:总结,文件,fs,localFilePath,remoteFilePath,conf,今日,txt
From: https://www.cnblogs.com/zhaoyueheng/p/17889047.html

相关文章

  • 2023-2024-1 20231317《计算机基础与程序设计》第十一周学习总结
    这个作业属于哪个课程<班级的链接>(如2023-2024-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2022-2023-1计算机基础与程序设计第十一周作业)这个作业的目标<《C语言程序设计第10章》《计算机科学概论第15、16章》>作业正文https://www.cnblogs......
  • 《钢岚》今日首发,成为首款基于HarmonyOS NEXT开发的战棋新游
    今日,紫龙游戏旗下BlackJack工作室全新战棋旗舰作品《钢岚》在华为游戏中心首发上线,并宣布《钢岚》完成鸿蒙原生应用开发,成为基于HarmonyOSNEXT开发的首款战棋新游,不但进一步丰富了鸿蒙生态战棋品类游戏内容,也是鸿蒙生态游戏内容建设的重要进展,为鸿蒙生态注入更多新鲜血液。作为......
  • 12.08每日总结
    我学会在窗体上添加控件、调整控件的布局,设置修改控件属性,编写事件处理程序的方法。一开始我不会用这个控件,后来在同学的协助下和我的努力下我学会了怎么操作满满一步步填充代码。注意控件的顺序序号,双击控件能显示。我学会自己设计并编写一个Windows应用程序,学会用到TextBox......
  • StyleSync 开源部分总结
    https://github.com/guanjz20/StyleSync_PyTorch这个是号称最强的模型.说百分之99拟合真人.我们赶紧来学习.首先权重和训练是不开源的.我也只能尽可能的根据发布的代码来看能学到什么.先说结论:整体跟wav2lip百分之90相似.都是视频--->图片--->抽取人脸landmark->每个图片......
  • 每日总结
    今天复习外观,享元和代理模式。均为结构型模式。其中外观模式主要作用是隐藏子系统内部的复杂性,并为客户端提供一个简单而一致的接口。其中包括外观角色,系统角色。享元模式主要是有效地支持大量细粒度的对象共享。它通过共享对象来减少内存消耗和提高性能。其中主要包括享元接......
  • 我的2023技术总结
    做的项目使用.NET6的那个服务断断续续写了一年时间使用WPF、Winform、CefSharp开发的可切换谷歌IE内核的浏览器,断断续续写了大半年时间大数据服务维护使用Leaflet开发电子地图的功能,今年做了正经的前后端分离的项目(以前是按自己的方式搞的一套),前端是Vue年末做了一个ThreeJ......
  • 物联网后端个人第十四周总结
    物联网方面进度    1.登陆超时是因为后端运行的端口和前端监听的接口不一样,所以后端也没有报错,将二者修改一致即可    2.登录之后会进行平台的初始化,但是初始化的时候会卡住,此时只需要将路径的IP+端口后边的内容去掉即可    3.阅读并完成了jetlinks文档中......
  • 使用Java实现面向对象编程 第八章 File IO 总结笔记
    java里操作文件1.第一步一定是获得这个文件(获得的文件,你是无法解析获得里面的内容,约等于获得冰。你只能知道大小颜色等。外表能够获取信息.)。2.第二步获得这个文件将这个文件转换成流。然后从这个io流里读取数据io流里又分为字符流(专门处理文字)字节流(专门处理2进制等文件)3.......
  • Java语言基础知识全总结
    一.Java的优点1.      跨平台性。一次编译,到处运行。Java编译器会将Java代码编译成能在JVM上直接运行的字节码文件,C++会将源代码编译成可执行的二进制代码文件,所以C++执行速度快2.      纯面向对象。Java所有的代码都必须在类中书写。C++兼具面向对象和面向过程的特......
  • 题目总结
    1.constinta;   表示a是只读的intconsta;//常整型数    constint*a; //a是一个指向常整型数的指针 表示这个指针变量可以修改,但是不能通过这个指针变量修改其所指向地址的值int*consta; // a是一个指向整型数的常指针 表示这个指针变量不可以......