pig@hadoop:使用多核处理没有 hdfs 的本地文件

Posted

技术标签:

【中文标题】pig@hadoop:使用多核处理没有 hdfs 的本地文件【英文标题】:pig@hadoop: processing local files without hdfs with multiple cores 【发布时间】:2015-07-25 01:05:05 【问题描述】:

如果我在本地模式下运行 pig@hadoop(因为我不想使用 hdfs),那么它会以单线程/单进程模式处理我的脚本。如果我在伪模式下设置 hadoop(复制=1 的 hdfs),那么 pig@hadoop 不喜欢我的file:///...

traj = LOAD 'file:///root/traj'
   USING org.apache.pig.piggybank.storage.CSVExcelStorage(
        ';', 'NO_MULTILINE', 'UNIX', 'SKIP_INPUT_HEADER'
   ) AS
   (
     a1:chararray,
     a2:long,
     a3:long,
     a4:float,
     a5:float,
     a6:float,
     a7:chararray,
     a8:float,
     a9:chararray
   );

c = FOREACH (GROUP traj ALL) GENERATE COUNT(traj);
dump c;

有没有办法告诉 pig@hadoop 以多核模式处理文件而不将文件放入 hdfs 中?

【问题讨论】:

【参考方案1】:

本地模式 - 要在本地模式下运行 Pig,您需要访问单台机器;所有文件都使用本地主机和文件系统安装和运行。使用 -x 标志指定本地模式(pig -x local)。

Mapreduce 模式 - 要在 mapreduce 模式下运行 Pig,您需要访问 Hadoop 集群和 HDFS 安装。 Mapreduce模式是默认模式;您可以但不需要使用 -x 标志(pig OR pig -x mapreduce)指定它。

来源:http://pig.apache.org/docs/r0.9.1/start.html#execution-modes

如果你想在本地模式下运行它,你应该使用命令$ pig -x local 将 pig 切换到本地模式。默认情况下 pig 在 MapReduce 模式下运行并从 HDFS 读取数据。

要在本地模式下运行 Pig,您只需要访问一台机器。为简单起见,将文件复制到当前工作目录(您可能希望创建一个临时目录并移至该目录)在您的 pig 脚本中提供该位置。

【讨论】:

我可以在本地和外部 mapreduce 模式(以伪模式下运行)运行 pig,几乎就像你描述的那样。如果我在 mapreduce 模式下运行 pig,pig 会抱怨 file:///root/traj(无法访问,尽管文件在本地)。如何在没有 hdfs 的情况下以 hadoop 或本地模式处理文件? 如果您已将 pig 切换为本地模式,那么它将从您的本地目录中获取 pic 文件并在本地模式下运行。同样,如果您想在 MapReduce 模式下运行,则需要使用命令 $ pig -x mapreduce 将其切换到 MapReduce 模式,并且文件应该在 HDFS 位置可用。 在本地模式下 (pig -x local) 我可以访问所有本地文件,但处理仅限于一个核心。在 mapreduce 模式下 (pig -x maprecude) 我有 32 个内核可用,但在访问本地文件时遇到问题。我怎样才能同时获得这两者? 你不能同时得到两个。您一次只能选择一个。并行处理是 Hadoop 的一个优势,因此您应该使用 HDFS 而不是本地模式来快速处理作业。

以上是关于pig@hadoop:使用多核处理没有 hdfs 的本地文件的主要内容,如果未能解决你的问题,请参考以下文章

Pig Hadoop Stream 帮助

无法在猪中打开别名的迭代器

如何向从 Pig (Hadoop) 创建的文件添加标题行?

pig安装配置

我需要从 PIG HADOOP 的同一列中过滤 2 个条件

python是不是支持多处理器/多核编程?