Hadoop数据进出操作指南
立即解锁
发布时间: 2025-08-25 00:55:08 阅读量: 1 订阅数: 6 

# Hadoop数据进出操作指南
## 1. WebHDFS与HttpFS的区别
WebHDFS和HttpFS的主要区别在于客户端对所有数据节点的访问权限。如果客户端能够访问所有数据节点,那么WebHDFS就适用,因为读写文件时客户端会直接与数据节点通信以进行数据传输。反之,如果客户端处于防火墙之后,可能无法访问所有数据节点,这时HttpFS是更好的选择。使用HttpFS时,服务器会与数据节点通信,而客户端只需与单个HttpFS服务器通信。
如果有选择的话,建议选择WebHDFS。因为客户端直接与数据节点通信有内在优势,它能让你轻松扩展跨多个主机的并发客户端数量,而不会因所有数据都通过HttpFS服务器传输而导致网络瓶颈。特别是当客户端运行在数据节点上时,WebHDFS能利用数据本地性优势,直接从本地文件系统流式传输本地托管的HDFS数据块,而无需通过网络传输。
## 2. 使用NFS挂载Hadoop
### 2.1 问题与解决方案
如果你想将HDFS当作常规的Linux文件系统,并使用标准的Linux工具与HDFS交互,可以使用Hadoop的NFS实现来访问HDFS中的数据。
### 2.2 详细讨论
在Hadoop 2.1之前,只能使用FUSE进行NFS挂载HDFS,但由于各种性能和可靠性问题,不建议普遍使用。而且它还要求在每个客户端机器上安装驱动程序,没有提供NFS网关。
Hadoop中的新NFS实现解决了旧的基于FUSE系统的所有缺点。它是一个标准的NFSv3实现,允许运行一个或多个NFS网关,以提高可用性和吞吐量。
### 2.3 操作步骤
#### 2.3.1 停止主机上运行的NFS服务
在Linux系统上,可以使用以下命令:
```bash
$ service portmap stop
$ service nfs stop
$ service rpcbind stop
```
#### 2.3.2 启动Hadoop NFS服务
首先启动portmap服务,它为协议及其关联的传输和端口提供注册表服务。由于它运行在受限端口上,需要以root用户身份启动:
```bash
$ sudo hadoop-daemon.sh start portmap
```
然后启动实际的NFS服务,运行此服务的用户必须与运行HDFS的用户相同:
```bash
$ hadoop-daemon.sh start nfs3
```
#### 2.3.3 验证服务是否运行
使用rpcinfo和showmount命令,应该看到类似以下的输出:
```bash
$ /usr/sbin/rpcinfo -p localhost
program vers proto port
100005 1 tcp 4242 mountd
100000 2 udp 111 portmapper
100005 3 tcp 4242 mountd
100005 2 udp 4242 mountd
100003 3 tcp 2049 nfs
100000 2 tcp 111 portmapper
100005 3 udp 4242 mountd
100005 1 udp 4242 mountd
100005 2 tcp 4242 mountd
$ /usr/sbin/showmount -e localhost
Export list for localhost:
/ *
```
#### 2.3.4 挂载HDFS到主机上的目录
以下示例选择/hdfs作为挂载目录,第二个挂载命令用于验证挂载是否成功:
```bash
$ sudo mkdir /hdfs
$ sudo mount -t nfs -o vers=3,proto=tcp,nolock localhost:/ /hdfs
$ mount | grep hdfs
localhost:/ on /hdfs type nfs (rw,nfsvers=3,proto=tcp,nolock,addr=127.0.0.1)
```
### 2.4 使用NFS网关的注意事项
- HDFS是只追加的文件系统,可以追加文件,但不能进行随机写入。如果需要使用支持随机写入的文件系统来处理Hadoop数据,可以考虑MapR的Hadoop发行版。
- Hadoop 2.2版本不支持安全Hadoop(Kerberos),目前有一个开放的工单来添加该支持。
- 直到Hadoop 2.4(或3)才支持代理用户。这意味着早期版本的Hadoop会以超级用户身份执行所有命令,因为NFS网关必须以与HDFS相同的用户身份运行。
由于这些限制,建议将NFS网关用于实验目的,或在不考虑用户级安全的单租户集群中使用。
## 3. 使用DistCp在集群内和集群间复制数据
### 3.1 问题与解决方案
如果你想高效地在Hadoop集群之间复制大量数据,并具备增量复制的能力,可以使用DistCp,它是Hadoop内置的并行文件复制工具。
### 3.2 DistCp 2版本的优势
DistCp 2支持与旧版本相同的一组命令行参数,但有许多有用的优点:
- 处理大量文件时,减少了设置和执行时间,因为驱动程序不再需要预处理所有输入,现在将其推迟到映射器中处理。
- 拥有全功能的Java接口,Java客户端无需将参数序列化为字符串。
- 支持原子提交,实现全有或全无的复制语义。
- 使用 -update 选项跳过目标中已存在的文件时,如果源文件和目标文
0
0
复制全文
相关推荐









