HDFS上传文件-流方式

Hadoop文件上传实践
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import javax.ws.rs.core.NewCookie;

import org.apache.commons.compress.utils.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class Test03 {
	static Configuration conf =  new Configuration();
	static FileSystem fs =null;
	public static void main(String[] args) throws IllegalArgumentException, IOException, InterruptedException, URISyntaxException {
		upload();
		
	}
		


	public static void upload() throws IllegalArgumentException, IOException, InterruptedException, URISyntaxException{
		fs = FileSystem.get(new URI("hdfs://hadoop1:9000"),conf,"root");
		FSDataOutputStream out = fs.create(new Path("/input/新建3.txt"));
		FileInputStream in = new FileInputStream("H:/新建.txt");
		IOUtils.copy(in, out); 
		fs.close();
		
	}
}

 

### 如何在HDFS分布式文件系统中上传文件或数据 在HDFS分布式文件系统中,文件上传过程由客户端(Client)负责完成。当用户希望将本地文件上传HDFS时,客户端会执行一系列操作以实现这一目标。 #### 客户端的角色与功能 客户端的主要职责包括以下几个方面: - **文件切分**:客户端会将待上传的大文件按照预定义的块大小(通常为128MB,默认值可能因配置而异)分割成多个数据块(Block)。这种机制允许大文件被分布存储于不同的DataNode节点上[^1]。 - **与NameNode交互**:为了确定数据块的目标位置以及获取元数据信息,客户端需要向NameNode发送请求。NameNode返回可用的数据节点列表及其地址信息,用于后续实际的数据传输[^1]。 - **与DataNode通信并写入数据**:基于从NameNode接收到的信息,客户端依次连接至指定的DataNode,并按顺序将各数据块逐一复制过去。在此过程中,还遵循副本策略(Replication Factor),即每一块会被备份若干次存放在不同机器上以保障可靠性[^1]。 #### 实际操作方法 以下是几种常见的通过命令行或其他工具来上传文件方式: ##### 使用Shell命令上传文件 最简单直接的方法便是利用`hadoop fs`提供的shell接口来进行文件的操作。下面展示了一个典型的例子说明怎样把本地磁盘上的某个特定路径下的文件拷贝进入HDFS之中: ```bash hadoop fs -put /local/path/to/sourceFile.txt /destination/in/hdfs/ ``` 此命令中的参数解释如下: - `-put`: 表示要执行的是“Put”动作即将源文件放置到目的地址; - `/local/path/to/sourceFile.txt`: 这是你想要上传的那个位于本机硬盘里的原始文件全名连同其所在目录一起给出的具体位置描述符; - `/destination/in/hdfs/`: 则是要设定好的最终存放该文档的目的地所在的HDFS内部相对应的虚拟路径表示法[^2]。 另外还有其他类似的指令如`copyFromLocal`,它们的功能基本相同只是名称有所区别而已,在具体应用场景下可以根据个人习惯选用其中之一即可达成同样效果。 ##### 编程方式上传文件 除了依靠CLI之外还可以借助编程语言编写脚本来自动化处理大批量的任务需求。这里列举一段Python代码片段作为示范用途: ```python from hdfs import InsecureClient client = InsecureClient('http://namenode_host:port', user='your_username') with open('/path/to/local_file', 'rb') as reader: client.upload('/target_path_in_hdfs/', '/path/to/local_file') ``` 上述程序首先实例化了一个指向Namenode服务端口的对象,接着打开了一条通往某已知本地资源的输入最后调用了upload函数完成了整个迁移程[^2]。 ### 注意事项 需要注意的一点是在正式实施之前应当确认好相关的环境变量设置正确无误并且网络可达性良好从而避免不必要的麻烦发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值