【问题标题】:Hadoop/Yarn/Spark can I call command line?Hadoop/Yarn/Spark 我可以调用命令行吗?
【发布时间】:2015-11-06 03:07:14
【问题描述】:

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

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

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

【问题讨论】:

    标签: hadoop apache-spark mapr


    【解决方案1】:

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

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

    不过,从您的描述来看,GNU Parallel 可能是比 Spark 更好的选择。

    【讨论】:

    • 谢谢。您是否知道 yarn/spark 是否会将来自子进程的内存视为我的工作消耗的内存的一部分?他们担心的是,我会产生 yarn 不知道的进程,这会消耗内存。如果 tshark 开始消耗大量内存,这可能会导致集群出现问题。我认为这同样适用于 GNU 并行,但可能更糟,因为 yarn 根本不知道这些进程。
    • 说实话我不知道。通过实验检查应该不难。
    猜你喜欢
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 2019-06-21
    • 1970-01-01
    相关资源
    最近更新 更多