Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop grep转储sql_Hadoop - Fatal编程技术网

Hadoop grep转储sql

Hadoop grep转储sql,hadoop,Hadoop,我想使用ApacheHadoop来解析大文件(每个约20 MB)。这些文件是postegresql转储(即,主要是创建表和插入)。我只需要过滤掉任何不是CREATETABLE或INSERT的内容 所以我决定使用grep映射reduce和^(createtable | INSERT)。*$模式(以CREATE TABLE或INSERT开头,以“;”结尾的行)。 我的问题是,其中一些create和insert占用多行(因为我想架构非常大),因此模式根本无法匹配它们(如create TABLE tes

我想使用ApacheHadoop来解析大文件(每个约20 MB)。这些文件是postegresql转储(即,主要是创建表和插入)。我只需要过滤掉任何不是CREATETABLE或INSERT的内容

所以我决定使用grep映射reduce和
^(createtable | INSERT)。*$模式(以CREATE TABLE或INSERT开头,以“;”结尾的行)。
我的问题是,其中一些create和insert占用多行(因为我想架构非常大),因此模式根本无法匹配它们(如
create TABLE test(\n
“id”…\n…“名称”…\n
);

我想我可以编写一个mapreduce作业,在一行中重构每个“插入”和“创建”,但这将非常昂贵,因为文件很大。我也可以从文件中删除所有“\n”,但是一个映射操作必须处理多个创建/插入操作,这使得工作的平衡非常糟糕。我真的希望每次插入或创建一个映射操作

我不负责创建转储文件,因此无法更改初始转储文件的布局

我实际上不知道什么是最好的解决方案,我需要一些帮助:)。如果需要,我可以提供任何附加信息。

第一件事: 20MB文件对于Hadoop标准来说不是大文件,您可能会有很多文件(除非您只有少量数据),因此应该有很多并行化的可能性

因此,每个文件有一个映射器可能是一个很好的解决方案,您甚至可能希望连接文件以减少开销


也就是说:

如果您不想一次处理所有行,并且一次处理一行是不够的,那么唯一简单的解决方案是一次处理“几行”,例如2行或3行

另一种解决方案是将文件切碎,并对每个文件部分使用一个映射,但是您要么需要处理边缘,要么接受您的解决方案可能不会删除所需的位之一

我意识到这仍然是一个概念性的答案,但根据你迄今为止的进展,我觉得这可能足以让你达到目的

第一件事: 20MB文件对于Hadoop标准来说不是大文件,您可能会有很多文件(除非您只有少量数据),因此应该有很多并行化的可能性

因此,每个文件有一个映射器可能是一个很好的解决方案,您甚至可能希望连接文件以减少开销


也就是说:

如果您不想一次处理所有行,并且一次处理一行是不够的,那么唯一简单的解决方案是一次处理“几行”,例如2行或3行

另一种解决方案是将文件切碎,并对每个文件部分使用一个映射,但是您要么需要处理边缘,要么接受您的解决方案可能不会删除所需的位之一


我意识到这仍然是一个概念性的答案,但根据你迄今为止的进展,我觉得这可能足以让你达到目的

这个正则表达式如何提取所有有效行?注:如果没有样本数据,很难给您提供一个好的答案。对不起,我不是很清楚真正的问题。regexp还可以,我只是很难理解Hadoop映射机制。我使用Hadoop()中的grep mapreduce示例开始工作,但是这个示例的映射操作是一个逐行函数,因此我无法检索完整的SQL行。相反,我将只编写映射器并使其处理整个文件,而不是使用标准的grep。谢谢你的帮助:)这个正则表达式提取所有有效行怎么样?注:如果没有样本数据,很难给您提供一个好的答案。对不起,我不是很清楚真正的问题。regexp还可以,我只是很难理解Hadoop映射机制。我使用Hadoop()中的grep mapreduce示例开始工作,但是这个示例的映射操作是一个逐行函数,因此我无法检索完整的SQL行。相反,我将只编写映射器并使其处理整个文件,而不是使用标准的grep。谢谢你的帮助:)这正是我想要的答案!正如你提到的,20MB的文本文件对于Hadoop来说一点也不庞大,我有足够的文件(现在大约500个文件,将来可能会增加)来完成我需要的并行化。将文件拆分为多个映射操作而不是一次映射,只会增加开销。同样,正如你所说,在开始映射操作之前,我更可能连接文件,而不是拆分每个文件。你的替代解决方案也帮助我理解了这个问题。谢谢你的回答。这正是我想要的答案!正如你提到的,20MB的文本文件对于Hadoop来说一点也不庞大,我有足够的文件(现在大约500个文件,将来可能会增加)来完成我需要的并行化。将文件拆分为多个映射操作而不是一次映射,只会增加开销。同样,正如你所说,在开始映射操作之前,我更可能连接文件,而不是拆分每个文件。你的替代解决方案也帮助我理解了这个问题。谢谢你的回答。