Hadoop/Yarn/Spark 我可以调用命令行吗?

Hadoop/Yarn/Spark can I call command line?

我的问题的简短版本:我们需要从 Spark 作业中调用命令行。这可行吗?集群支持组表示这可能会导致内存问题。

长版:我有一份工作需要 运行 在 Hadoop/MapR 集群上处理用 tshark/wireshark 捕获的数据包数据。数据是二进制数据包数据,每分钟捕获一个文件。我们需要从这个数据包数据中提取某些字段,例如 IP 地址等。我们已经研究了 jNetPcap 等选项,但这个库有点受限。所以看起来我们需要从作业中调用 tshark 命令行并处理响应。我们不能在捕获期间直接执行此操作,因为我们需要捕获尽可能高效以避免丢包。将二进制数据转换为集群外的文本是可能的,但这是 95% 的工作,因此我们也可以 运行 将整个作业作为单个服务器上的非分布式作业。这限制了我们可以使用的内核数量。

要解码的命令行是: tshark -V -r somefile.pcap 要么 tshark -T pdml -r somefile.pcap

好吧,这并非不可能。 Spark 提供了 pipe 方法,可用于将数据通过管道传输到外部进程并读取输出。一般结构可以是这样的:

val files: RDD[String] = ??? // List of paths
val processed: RDD[String] = files.pipe("some Unix pipe")

不过,从您的描述看来,GNU Parallel 可能比这里的 Spark 更好。