读取文件 FileSystemCat.java 和 FileSystemPut.java 中提供的分析 HDFS 应用程序
使用应用程序 FileSystemCat.java 和 FileSystemPut.java 在 Java HDFS 应用程序中实现,该应用程序将位于
HDFS 中的两个文件合并为同样位于 HDFS 中的一个文件。
应用程序必须具有以下参数。
(1) HDFS 中第一个输入文件的路径和名称。
(2) HDFS 中第二个输入文件的路径和名称。
(3) 要在 HDFS 中创建的输出文件的路径和新名称。该文件应该包含第一个输入文件的内容,后跟第二个输入文件的内
容。
实现应用程序并将其源代码保存在文件solution1.java中。
上传两个文件到HDFS。 HDSF 中文件的内容、名称和位置由您决定。
准备就绪后,编译、创建 jar 文件并处理您的应用程序。显示应用程序创建的结果。
使用Hadoop提供证据,上传到HDFS的两个文件已成功合并为HDFS中的一个文件。
文件solution1.txt,其中包含应用程序源代码列表、编译报告、jar 文件创建、上传到 HDFS 的两个小文件进行测试、
HDFS 中这两个文件的列表、应用程序的处理以及证明上传到 HDFS 的两个文件已成功合并为 HDFS 中的一个文件。
必须通过将终端窗口的内容复制/粘贴到文件solution1.txt 中来创建文件solution1.txt。
FileSystemCat.java:
// cc FileSystemCat Displays files from a Hadoop filesystem on standard output by using the FileSystem directly
//import java.io.InputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.io.IOUtils;
// vv FileSystemCat
public class FileSystemCat {
public static void main(String[] args) throws Exception {
String uri = args[0];
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(uri), conf);
FSDataInputStream in = null;
Path path = new Path(uri);
in = fs.open(path);
IOUtils.copyBytes(in, System.out, 4096, true);
}
}
// ^^ FileSystemCat
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.io.IOUtils;
public class FileSystemPut {
public static void main(String[] args) throws Exception {
String localStr = args[0];
String hdfsStr = args[1];
Configuration conf = new Configuration();
FileSystem local = FileSystem.getLocal(conf);
FileSystem hdfs = FileSystem.get(URI.create(hdfsStr), conf);
Path localFile = new Path(localStr);
Path hdfsFile = new Path(hdfsStr);
FSDataInputStream in = local.open(localFile);
FSDataOutputStream out = hdfs.create(hdfsFile);
IOUtils.copyBytes(in, out, 4096, true);
}
}
引用chatgpt内容作答:
根据您提供的要求,您需要创建一个 Java HDFS 应用程序来合并两个位于 HDFS 中的文件,并将源代码保存在 solution1.java 文件中。以下是您可能需要的代码:
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.io.IOUtils;
public class MergeHDFSFiles {
public static void main(String[] args) throws Exception {
if (args.length < 3) {
System.err.println("Usage: MergeHDFSFiles <inputFile1> <inputFile2> <outputFile>");
System.exit(1);
}
String inputFile1 = args[0];
String inputFile2 = args[1];
String outputFile = args[2];
Configuration conf = new Configuration();
FileSystem hdfs = FileSystem.get(conf);
Path inputPath1 = new Path(inputFile1);
Path inputPath2 = new Path(inputFile2);
Path outputPath = new Path(outputFile);
FSDataOutputStream out = hdfs.create(outputPath);
FSDataInputStream in1 = hdfs.open(inputPath1);
FSDataInputStream in2 = hdfs.open(inputPath2);
try {
IOUtils.copyBytes(in1, out, conf, false);
IOUtils.copyBytes(in2, out, conf, false);
} finally {
IOUtils.closeStream(in1);
IOUtils.closeStream(in2);
IOUtils.closeStream(out);
}
System.out.println("Files merged successfully.");
}
}
将上述代码保存为 solution1.java 文件,并根据您的要求进行编译和打包为 JAR 文件。然后,您可以通过终端窗口运行以下命令来执行应用程序:
hadoop jar solution1.jar MergeHDFSFiles <inputFile1> <inputFile2> <outputFile>
请将 , 和 替换为实际的 HDFS 文件路径和名称。
完成运行后,您可以通过运行以下命令来查看合并后的文件内容:
hadoop fs -cat <outputFile>
最后,将所有相关的信息,包括源代码、编译报告、JAR 文件创建、测试文件的上传、HDFS 中文件的列表、应用程序的处理和证明文件合并成功,复制粘贴到 solution1.txt 文件中。这将包括终端窗口的输出内容。
你这个不是已经完成了嘛
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.io.IOUtils;
public class MergeFiles {
public static void main(String[] args) throws Exception {
String inputFile1 = args[0];
String inputFile2 = args[1];
String outputFile = args[2];
Configuration conf = new Configuration();
FileSystem hdfs = FileSystem.get(conf);
Path inputPath1 = new Path(inputFile1);
Path inputPath2 = new Path(inputFile2);
Path outputPath = new Path(outputFile);
FSDataInputStream in1 = hdfs.open(inputPath1);
FSDataInputStream in2 = hdfs.open(inputPath2);
FSDataOutputStream out = hdfs.create(outputPath);
IOUtils.copyBytes(in1, out, conf, false);
IOUtils.copyBytes(in2, out, conf, true);
}
}
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.io.IOUtils;
public class MergeHDFSFiles {
public static void main(String[] args) throws Exception {
if (args.length < 3) {
System.err.println("Usage: MergeHDFSFiles <inputFile1> <inputFile2> <outputFile>");
System.exit(1);
}
String inputFile1 = args[0];
String inputFile2 = args[1];
String outputFile = args[2];
Configuration conf = new Configuration();
FileSystem hdfs = FileSystem.get(conf);
Path inputPath1 = new Path(inputFile1);
Path inputPath2 = new Path(inputFile2);
Path outputPath = new Path(outputFile);
FSDataOutputStream out = hdfs.create(outputPath);
FSDataInputStream in1 = hdfs.open(inputPath1);
FSDataInputStream in2 = hdfs.open(inputPath2);
try {
IOUtils.copyBytes(in1, out, conf, false);
IOUtils.copyBytes(in2, out, conf, false);
} finally {
IOUtils.closeStream(in1);
IOUtils.closeStream(in2);
IOUtils.closeStream(out);
}
System.out.println("Files merged successfully.");
}
}