如何将数据移入和移出Hadoop?
Hadoop -put命令的行为与Linux中的Linux cp命令不同,如果目标已存在,则会被覆盖; 在Hadoop中,副本失败并显示错误:
必须添加-f选项以强制覆盖文件:
与Linux cp命令非常相似,可以使用相同的命令复制多个文件。在这种情况下,最后一个参数必须是HDFS中复制本地文件的目录:
可以使用Linux管道将命令输出传递到HDFS文件——使用相同的-put命令并在其后添加单独的连字符,这告诉Hadoop从标准输入读取:
要测试文件或目录是否存在,请使用-test命令和-e或-d选项分别测试文件或目录是否存在。如果文件或目录存在,则命令的代码为0;如果不存在,则为1:
如果只想在HDFS中“touch”文件(创建一个新的空文件),那么touchz选项可以完成该工作: ![]() ![]() 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集群上运行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中创建文件:
使用WebHDFS获取有关该文件的各种有趣的元数据(用户名替换为以下URL中的aholmes): ![]() 命令语法由两部分组成:一是路径;二是正在执行的操作。但是,需要提供执行操作的用户名,否则HDFS将假定你是一个访问受限的匿名用户。 ![]() 图5.1 解析WebHDFS URL路径 从HDFS读取文件只需将OPEN指定为operation: ![]() 使用WebHDFS编写文件分为两步:第一步通知NameNode创建新文件的意图,可以使用HTTP PUT命令执行此操作: ![]() (编辑:淮安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |