使用JAVA Serlvet page写一个选择本地csv文件通过sqoop将文件传输到Linux虚拟机的HDFS上的代码
时间: 2024-03-14 11:47:19 浏览: 83
利用JAVA代码将本地文件传入HDFS中
好的,下面是一个简单的示例代码,实现了选择本地CSV文件并将其传输到Linux虚拟机的HDFS上。
```java
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import org.apache.commons.io.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class CsvUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String HDFS_URI = "hdfs://localhost:9000";
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取上传的文件
Part filePart = request.getPart("file");
String fileName = filePart.getSubmittedFileName();
// 生成文件名
String hdfsFileName = UUID.randomUUID().toString() + "_" + fileName;
// 将文件上传到HDFS
Configuration conf = new Configuration();
conf.set("fs.defaultFS", HDFS_URI);
FileSystem fs = FileSystem.get(conf);
InputStream inputStream = filePart.getInputStream();
Path hdfsPath = new Path("/user/hadoop/csv/" + hdfsFileName);
fs.create(hdfsPath).write(IOUtils.toByteArray(inputStream));
fs.close();
// 返回上传成功的消息
response.getWriter().println("Upload successfully!");
}
}
```
请注意,这只是一个简单的示例代码,您可能需要根据您的实际需求进行更改。例如,您可能需要添加对上传文件类型和大小的验证,或者修改HDFS的URI和路径等。此代码仅供参考。
阅读全文