Hadoop 根据映射程序代码中的某些逻辑,将映射程序中的一些数据(行)写入单独的目录
我使用mrjob满足我的电子病历需求 根据映射器代码中的逻辑,如何将映射器中的一些数据(行)写入“单独的目录”,我可以:Hadoop 根据映射程序代码中的某些逻辑,将映射程序中的一些数据(行)写入单独的目录,hadoop,elastic-map-reduce,mrjob,Hadoop,Elastic Map Reduce,Mrjob,我使用mrjob满足我的电子病历需求 根据映射器代码中的逻辑,如何将映射器中的一些数据(行)写入“单独的目录”,我可以: tar gzip和 作业突然完成/终止后,是否上载到单独的S3存储桶(取决于目录名) 我猜“--output dir”选项只允许您将最终作业输出上载到该目录,但我也希望不时从我的映射器写入其他目录。不,传统意义上您不能。 原因:MrJob在内部使用Hadoop流来运行map/reduce作业,当使用Hadoop集群运行时,我假设amazonelasticm/R与Hadoop集
我猜“
--output dir
”选项只允许您将最终作业输出上载到该目录,但我也希望不时从我的映射器写入其他目录。不,传统意义上您不能。
原因:MrJob在内部使用Hadoop流来运行map/reduce作业,当使用Hadoop集群运行时,我假设amazonelasticm/R与Hadoop集群相同
--output dir
实际上是Hadoop streaming的一个输入,它指定在哪里收集减速机的输出。不能使用此机制将数据隔离到不同的文件夹中
[编辑:回应评论]
我的理解是boto只是一个连接到Amazon服务并访问ec2和s3等的库
我想,在非传统意义上,您仍然可以写入不同的目录。
我没有测试过这个想法,也不推荐这种方法。这就像打开一个文件并直接在reducer中写入它一样。理论上你可以这么做。而不是仅仅将减速机输出写入std.out。您可以直接打开和写入S3对象。您必须确保在生成多个还原程序时打开不同的文件
这是我在Hadoop集群中使用MrJob时学到的:不,传统意义上你不能这样做。 原因:MrJob在内部使用Hadoop流来运行map/reduce作业,当使用Hadoop集群运行时,我假设amazonelasticm/R与Hadoop集群相同
--output dir
实际上是Hadoop streaming的一个输入,它指定在哪里收集减速机的输出。不能使用此机制将数据隔离到不同的文件夹中
[编辑:回应评论]
我的理解是boto只是一个连接到Amazon服务并访问ec2和s3等的库
我想,在非传统意义上,您仍然可以写入不同的目录。
我没有测试过这个想法,也不推荐这种方法。这就像打开一个文件并直接在reducer中写入它一样。理论上你可以这么做。而不是仅仅将减速机输出写入std.out。您可以直接打开和写入S3对象。您必须确保在生成多个还原程序时打开不同的文件
这是我在使用MrJob与Hadoop群集时学到的:我认为Hadoop的
多输出
功能可以帮助您,在自定义的输出格式中,您可以指定路径和文件名。我认为Hadoop的多输出
功能可以帮助您,在自定义的outputFormat
中,您可以指定路径和文件名。您可以按照创建自定义Jar的方法自定义outputFormat
,以便在不同的文件夹/文件中多路输出。您应该创建MultipleTextOutputFormat
的子类,并覆盖其中的一些方法(generateFileNameForKeyValue(文本键、文本值、字符串叶)
和generateActualKey(文本键、文本值)
)
有关更多详细信息,请参阅:您可以按照创建自定义Jar的方法,自定义您的OutputFormat
,以便在不同的文件夹/文件中多路输出。您应该创建MultipleTextOutputFormat
的子类,并覆盖其中的一些方法(generateFileNameForKeyValue(文本键、文本值、字符串叶)
和generateActualKey(文本键、文本值)
)
有关更多详细信息,请参阅:深入思考:MrJob附带特定版本的boto。现在我可以用它来写本地文件夹,或者如果写不到,写“远程”S3存储桶吗?我仍然在寻找一种方法来减少对S3的PUT数(现在我每得到一行,就至少触发一个PUT)。此外,写入到STDERR的数据在哪里会用于MrJob?(我假设所有STDOUT输出都指向'--output dir')@newToFlume:两个日志文件所指向的位置。看到这个链接对Hadoop流媒体似乎没有什么用处,但感谢Ashish的后续工作。更深入地思考:MrJob附带了特定版本的boto。现在我可以用它来写本地文件夹,或者如果写不到,写“远程”S3存储桶吗?我仍然在寻找一种方法来减少对S3的PUT数(现在我每得到一行,就至少触发一个PUT)。此外,写入到STDERR的数据在哪里会用于MrJob?(我假设所有STDOUT输出都指向'--output dir')@newToFlume:两个日志文件所指向的位置。看到这个链接对Hadoop流媒体似乎没有什么用处,但是感谢Ashish的后续工作。我想你目前在Hadoop流媒体中可能不会这么做,它说你必须使用自定义jar。但我可能错了,您当然可以将自定义jar作为Hadoop流作业运行。示例命令如下:ruby elastic mapreduce–jobflow--jar--arg--arg--step name“My Streaming Job step”我想目前在Hadoop Streaming中您可能不会这样做,它说您必须使用自定义jar。但我可能错了,您当然可以将自定义jar作为Hadoop流作业运行。示例命令如下所示:ruby elastic mapreduce–jobflow--jar--arg--arg--step name“My Streaming Job step”