加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

如何将数据移入和移出Hadoop?

发布时间:2018-10-17 14:08:41 所属栏目:教程 来源:赵钰莹
导读:【新产品上线啦】51CTO播客,随时随地,碎片化学习 企业在项目中完全使用Hadoop之前,数据移动是必须解决的事情之一。如何将数千台主机日志数据放入Hadoop?从关系型或者No/NewSQL系统以及Hadoop中获取数据的最有效方法是什么?如何将Hadoop中生成的Lucene索

Hadoop -put命令的行为与Linux中的Linux cp命令不同,如果目标已存在,则会被覆盖; 在Hadoop中,副本失败并显示错误:

  1. put: `hdfs-file.txt': File exists 

必须添加-f选项以强制覆盖文件:

  1. $ hadoop fs -put -f local-file.txt hdfs-file.txt 

与Linux cp命令非常相似,可以使用相同的命令复制多个文件。在这种情况下,最后一个参数必须是HDFS中复制本地文件的目录:

  1. $ hadoop fs -put local-file1.txt local-file2.txt /hdfs/dest/ 

可以使用Linux管道将命令输出传递到HDFS文件——使用相同的-put命令并在其后添加单独的连字符,这告诉Hadoop从标准输入读取:

  1. $ echo "the cat sat on the mat" | hadoop fs -put - hdfs-file.txt 

要测试文件或目录是否存在,请使用-test命令和-e或-d选项分别测试文件或目录是否存在。如果文件或目录存在,则命令的代码为0;如果不存在,则为1:

  1. $ hadoop fs -test -e hdfs-file.txt  
  2. $ echo $?  
  3. 1  
  4. $ hadoop fs -touchz hdfs-file.txt  
  5. $ hadoop fs -test -e hdfs-file.txt  
  6. $ echo $?  
  7. $ hadoop fs -test -d hdfs-file.txt  
  8. $ echo $?  

如果只想在HDFS中“touch”文件(创建一个新的空文件),那么touchz选项可以完成该工作:

如何将数据移入和移出Hadoop?
如何将数据移入和移出Hadoop?

CLI专为交互式HDFS活动而设计,它也可以合并到脚本中,以用于自动执行某些任务。CLI的缺点是级别较低,并且没有内置任何自动化机制。它需要为每个命令分配一个fork,如果在bash脚本中使用可能没问题,但如果试图将HDFS功能集成到Python或Java应用程序中,可能就会出现问题。在这种情况下,为每个命令启动外部进程的开销可能也是想要避免的。

使用REST加载文件

CLI便于快速运行命令和编写脚本。但是,它会产生为每个命令分配一个单独进程的开销,这可能是想要避免的,特别是编程语言与HDFS连接时。

问题

没有HDFS本机接口的编程语言如何与HDFS交互。

解决方案

使用Hadoop的WebHDFS接口,该接口为HDFS操作提供全功能的REST API。

讨论

在开始之前,需要确保在集群上启用WebHDFS(默认不启动),这由dfs.webhdfs.enabled属性控制。如果未启用,则需要更新hdfs-site.xml并添加以下内容:

如何将数据移入和移出Hadoop?

在这种技术中,我们将介绍在不安全的Hadoop集群上运行WebHDFS.3的情况。如果正在使用安全的Hadoop集群,则不会提供user.name参数。

相反,我们将在与WebHDFS交互之前使用kinit对Kerberos进行身份验证,然后在curl命令行中提供-negotiate -u:youruser。

警告:如果为已经关闭了安全性的集群启用WebHDFS,则可以轻松地将其用作集群中任意用户命令(只需将URL中的用户名更改为簇)。建议仅在打开安全性的情况下运行WebHDFS。

要想在此技术中使用HTTP与NameNode进行通信,需要知道运行NameNode RPC服务的主机和端口,这是使用dfs.namenode.http-address属性配置的。在伪分布式设置中,这很可能设置为0.0.0.0:50070。我们假设其余技术的伪分布式——替换适当的主机和端口进行设置。

首先使用CLI在HDFS中创建文件:

  1. $ echo "the cat sat on the mat" | hadoop fs -put - /tmp/hdfs-file.txt 

使用WebHDFS获取有关该文件的各种有趣的元数据(用户名替换为以下URL中的aholmes):

如何将数据移入和移出Hadoop?

命令语法由两部分组成:一是路径;二是正在执行的操作。但是,需要提供执行操作的用户名,否则HDFS将假定你是一个访问受限的匿名用户。

如何将数据移入和移出Hadoop?
图5.1 解析WebHDFS URL路径

从HDFS读取文件只需将OPEN指定为operation:

如何将数据移入和移出Hadoop?

使用WebHDFS编写文件分为两步:第一步通知NameNode创建新文件的意图,可以使用HTTP PUT命令执行此操作:

如何将数据移入和移出Hadoop?

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读