用于文件操作的 Pig 或 Hive

Posted

技术标签:

【中文标题】用于文件操作的 Pig 或 Hive【英文标题】:Pig or Hive for a file manipulation 【发布时间】:2015-11-19 09:28:16 【问题描述】:

我有一个文件组成如下:

&009:65 

34KKll90JJKK87LLOO

%(..)?.I$£.....

&013:35

36KKll90TTYY87LLPP

%%(.9)?'


&025:66

55KKll88ZZYY87MMQQ

%&(.9)?%%??-_'

我想得到一个文件:

&009:65 34KKll90JJKK87LLOO  %(..)?.I$£.....

&013:35 36KKll90TTYY87LLPP  %%(.9)?'.......

&025:66 55KKll88ZZYY87MMQQ  %&(.9)?%%??-_'.......

我使用 hortonworks,我想知道使用 Hive 或 PIG 哪个更好,以及如何使用其中一个来实现这一点?

【问题讨论】:

【参考方案1】:

Hive、Pig 和整个 Hadoop 生态系统都希望文件具有单行记录,因此您可以在任何换行符处任意拆分文件,并使用任意数量的 Mapper 单独处理拆分.

您的示例有跨越多行的逻辑记录。不可分割的东西。无法以分布式方式轻松处理。游戏结束。

解决方法:在某个地方启动一个 shell,在本地下载丑陋的东西,使用旧的 sedawk 实用程序重建一致的记录,然后上传结果。然后你可以用 Hive 或 Pig 来读取它。

示例 sed 命令行(awk 恕我直言)...

sed -n '/^&/  N ; N ; N ; N ; s/\n\n/ /g ; p ' UglyStuff.dump > NiceStuff.txt

如果您更喜欢单行:

hdfs dfs -cat /some/path/UglyStuff.dump | sed -n '/^&/  N ; N ; N ; N ; s/\n\n/ /g ; p ' | hdfs dfs -put -f - /different/path/NiceStuff.txt

【讨论】:

以上是关于用于文件操作的 Pig 或 Hive的主要内容,如果未能解决你的问题,请参考以下文章

Pig和Hive的对比

hadoop环境搭建

大数据Hadoop生态圈:Pig和Hive

如何使用 Pig 将数据存储在 HDFS 上的多个分区文件中

Hadoop相关项目Hive-Pig-Spark-Storm-HBase-Sqoop

何时使用 Hadoop、HBase、Hive 和 Pig?