知识点
相关文章
更多最近更新
更多Hadoop的FileSystem 文件系统实现上传下载文件
2019-03-28 13:15|来源: 网络
Hadoop的FileSystem 文件系统实现上传下载:
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
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;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.Progressable;
public class UploadAndDown {
public static void main(String[] args) {
UploadAndDown uploadAndDown = new UploadAndDown();
try {
//将本地文件local.txt上传为HDFS上cloud.txt文件
uploadAndDown.upLoadToCloud("local.txt", "cloud.txt");
//将HDFS上的cloud.txt文件下载到本地cloudTolocal.txt文件
uploadAndDown.downFromCloud("cloudTolocal.txt", "cloud.txt");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void upLoadToCloud(String srcFileName, String cloudFileName)
throws FileNotFoundException, IOException {
// 本地文件存取的位置
String LOCAL_SRC = "/home/linuxidc/hbase2/bin/" + srcFileName;
// 存放到云端HDFS的位置
String CLOUD_DEST = "hdfs://localhost:9000/user/linuxidc/" + cloudFileName;
InputStream in = new BufferedInputStream(new FileInputStream(LOCAL_SRC));
// 获取一个conf对象
Configuration conf = new Configuration();
// 文件系统
FileSystem fs = FileSystem.get(URI.create(CLOUD_DEST), conf);
// 输出流
OutputStream out = fs.create(new Path(CLOUD_DEST), new Progressable() {
@Override
public void progress() {
System.out.println("上传完成一个文件到HDFS");
}
});
// 连接两个流,形成通道,使输入流向输出流传输数据
IOUtils.copyBytes(in, out, 1024, true);
}
private void downFromCloud(String srcFileName, String cloudFileName) throws FileNotFoundException, IOException {
// 云端HDFS上的文件
String CLOUD_DESC = "hdfs://localhost:9000/user/linuxidc/"+cloudFileName;
// down到本地的文件
String LOCAL_SRC = "/home/linuxidc/hbase2/bin/"+srcFileName;
// 获取conf配置
Configuration conf = new Configuration();
// 实例化一个文件系统
FileSystem fs = FileSystem.get(URI.create(CLOUD_DESC), conf);
// 读出流
FSDataInputStream HDFS_IN = fs.open(new Path(CLOUD_DESC));
// 写入流
OutputStream OutToLOCAL = new FileOutputStream(LOCAL_SRC);
// 将InputStrteam 中的内容通过IOUtils的copyBytes方法复制到OutToLOCAL中
IOUtils.copyBytes(HDFS_IN, OutToLOCAL, 1024, true);
}
}
在本地建立一个local.txt文件,运行个java程序,在eclipse下看到HDFS文件系统多了一个cloud.txt
同样也可以用hadoop的命令察看
linuxidc@Ubuntu:~/hadoop/bin$ hadoop fs -ls
Found 4 items
-rw-r--r-- 3 linuxidc supergroup 11 2012-12-23 23:23 /user/linuxidc/Google.pdf
-rw-r--r-- 3 linuxidc supergroup 61 2012-12-23 23:59 /user/linuxidc/cloud.txt
-rw-r--r-- 3 linuxidc supergroup 13 2012-12-23 22:49 /user/linuxidc/demo.txt
drwxr-xr-x - linuxidc supergroup 0 2012-11-18 15:17 /user/linuxidc/docs
同时在本地多了个cloudTolocal.txt文件:
linuxidc@ubuntu:~/hbase2/bin$ ls *.txt
cloudTolocal.txt hadoop.txt local.txt
相关问答
更多-
怎样用Zk实现文件的上传下载[2022-04-06]
通常人们在架设FTP服务器时都为认为微软的IIS设置繁杂 ,其次是安全性较差。所以在这里将介绍使用功能强大的Serv-U来架设FTP服务器的过程 。Serv-U是一个非常实用的FTP服务器工具,体积虽然小但是大多数网站都是用该程序, 并且是共享软件,可以到软件类网站下载。 Serv-U的特征 1.支持多种用户接入 2.支持匿名用户,可随时限制用户数。 3.安全选项多 3.可基于目录或文件实现安全管理 4.支持虚拟多主目录IP站点登录 5.比例和带宽限制 6.作为系统服务运行 7.远程实施项目 8.通过FTP ... -
求指导windows上基于Hadoop的云平台搭建。如何实现文件的上传下载?[2022-10-07]
先安装JDK和JRE;然后Cygwin;再开启SSHD服务,之后便可以配置搭建Hadoop云平台。在云平台搭建好之后,安装Eclipse,并将Hadoop-eclipse开发插件包嵌入Eclipse。此后便可以通过eclipse连接Hadoop云平台,并实现其上的二次开发。具体的文件上传与下载都可以通过HDFS提供的API实现。 -
请注意,您将copyFromLocalFile调用的第一个参数设置为true,这会导致本地文件被删除。 如果要保留本地文件,请将deleteSrc设置为false 。 以下是copyFromLocalFile方法的详细信息。 public void copyFromLocalFile(boolean delSrc, boolean overwrite, Path[] srcs, ...
-
我通过调用“java -jar app.jar .... etc”来运行它。我应该使用“hadoop jar app.jar”。 当我正确运行它时按预期工作。 I was running this by calling "java -jar app.jar .... etc" I should have been using "hadoop jar app.jar". Worked as intended when I ran it correctly.
-
GoogleHadoopFileSystem无法强制转换为hadoop FileSystem?(GoogleHadoopFileSystem cannot be cast to hadoop FileSystem?)[2022-09-14]
简答 实际上它与IsolatedClientLoader有关,我们已经找到了根本原因并验证了修复。 我提交了https://issues.apache.org/jira/browse/SPARK-9206来跟踪这个问题,并通过简单的修复从我的fork成功构建了一个干净的Spark tarball: https : //github.com/apache/spark /拉/ 7549 有一些短期选择: 现在使用Spark 1.3.1。 在bdutil部署中,使用HDFS作为默认文件系统( - --defaul ... -
本地文件系统上的Hadoop(Hadoop on Local FileSystem)[2022-01-08]
您可以从mapred-site.xml文件中删除fs.default.name值 - 这应该只在core-site.xml文件中。 如果要在本地文件系统上以伪模式运行,通常通过在所谓的本地模式下运行来实现 - 通过将core-site.xml中的fs.default.name值设置为file:///(您目前已将其配置为hdfs:// localhost:54310)。 您看到的堆栈跟踪是辅助名称节点启动时 - 在“本地模式”下运行时不需要这样,因为没有用于2NN的fsimage或编辑文件。 修复core-s ... -
如果您编写如上所述的命令,该文件将被复制到用户的HDFS主目录,即/ home / username 。 另请参见: HDFS主目录 。 如果要将文件写入其他位置,则可以像在Linux文件系统中一样使用绝对路径名(以“/”开头)。 If you write the command like above, the file gets copied to your user's HDFS home directory, which is /home/username. See also here: HDFS H ...
-
如果您询问客户提供的加密密钥当前是否在Cloud Dataproc上可用,则答案是否定的。 以下是Google在其余时间加密的当前产品选项列表。 如果您只是想加密Spark写入的输出,您仍然可以使用Google的Cloud KMS在应用程序层加密。 这是在Google云端存储中执行此操作的代码库 (看起来就像您在上面的命令中所做的那样)。 请注意,默认情况下,客户内容在Google云平台上静态加密,因此这是另一层保护。 If you're asking if customer-supplied encryp ...
-
Hadoop文件系统读取linux文件系统而不是hdfs?(Hadoop filesystem reads linux filesystem instead of hdfs?)[2022-02-10]
如果找不到有效的hadoop配置,则会发生这种情况。 例如,如果你这样做: hadoop fs -ls 并且在默认位置没有找到配置,那么你将看到linux文件系统。 您可以通过在“hadoop”命令之后添加-conf选项来测试它,例如 hadoop -conf=fs -ls This will happen if a valid hadoop configuration is not found. e.g. if you do: hadoop fs -ls a ... -
查看Hadoop的bin/hadoop脚本,为了执行jar文件,它使用了这个条件 - elif [ "$COMMAND" = "jar" ] ; then CLASS=org.apache.hadoop.util.RunJar 这表示它使用RunJar类来执行jar。 如果你看到RunJar类,支持的参数是 - RunJar jarFile [mainClass] args... 其中,使用RunJar类中的以下代码访问jarFile-- int firstArg = 0; String fileN ...