将 pig fs 命令输出到文件或变量

Posted

技术标签:

【中文标题】将 pig fs 命令输出到文件或变量【英文标题】:output pig fs command to a file or a variable 【发布时间】:2017-01-30 01:23:50 【问题描述】:

我正在尝试监视我的 HDFS 系统中的文件。 目前,我这样做的方式非常痛苦:fs -ls -R /river/entity/files;

此命令在控制台日志文件中输出结果。然后我需要将结果复制/粘贴到文件中以使用它......这根本没有效率。使用PIG,有没有一种简单的方法可以将命令的结果直接输出到文件中?

编辑:谢谢你的答案,但我还不够清楚。对不起 ! 我无法使用终端。我只执行一个猪脚本,我希望我的结果在 HDFS 中。是否可以仅在 hadoop 方面做到这一点?

【问题讨论】:

仅作记录:这可能是可能的,但为此使用 Pig 将始终是一种解决方法/hack,而不是正确的解决方案。 【参考方案1】:

是的,你可以!事实上,您可以像这样在 Pig 脚本中执行任何 shell 命令:

%declare dummy `hdfs dfs -ls -R /river/entity/files | hdfs dfs -put - hdfs://nn.example.com/hadoop/myfile.log`

但您应该考虑到 Pig 语句不会按照您的脚本中出现的顺序执行!

【讨论】:

这不会在HDFS中输出结果吧? myfile.log 将在本地。但我无法访问本地。 现在应该写入 hdfs,- 使 put 命令从标准输入读取 这将是一个不错的 hack,@StevenBENET 这似乎是为写入 HDFS 而设计的,你能确认它是否有效吗?【参考方案2】:

只需在终端中输入:

$hadoop fs -ls -R /river > your/path/to/file.txt

或在 shell 脚本示例中编写命令 file.sh 包含以下代码,然后运行你的 shell 脚本:

hadoop fs -ls -R /river > your/path/to/file.txt

如果您使用的是 Pig Grunt shell 或 Pig 脚本,请使用 shell utility commands

示例file_name.pig 包含代码fs -ls -R /river/entity/files

然后从终端运行您的猪脚本,例如PIG file_name.pig > your/path/to/file2.txt

【讨论】:

谢谢你,但我不能使用终端。如果可能的话,我希望一切都在猪身上完成。输出将存储在 HDFS 中

以上是关于将 pig fs 命令输出到文件或变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在hadoop pig中执行-fs

将 Hadoop Pig 输出作为 JSON 数据发布到 URL?

Node.js - 如何从文件中读取数据并将输出集成到变量中

Java & Pig - 是不是可以将 pig 脚本的输出转换为 Java 变量?

Hadoop Pig fs 测试命令

在 Python 中绑定到 Pig STORE 或 DUMP 输出