hadoop streaming python多输入文件单Map器

h22fl7wq  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(394)

我只有一个制图器。

for line in sys.stdin:
    #if line is from file1
    #process it based on some_arbitrary_logic
    #emit k,v

    #if line is from file2
    #process it based on another_arbitrary_logic
    #emit k, v

我需要通过hadoop流式api调用这个Map器 -input file1 还有一个 -input file2 .
我如何做到这一点?我怎么知道哪一行属于 STDIN hadoop流媒体给了我什么?
更新

File1

Fruit, Vendor, Cost

Oranges, FreshOrangesCompany, 50
Apples, FreshAppleCompany, 100

File2

Vendor, Location, NumberOfOffices

FreshAppleCompany, NewZealand, 45
FreshOrangeCompany, FijiIslands, 100

我需要做的是打印出他们在多少办公室卖桔子。 Oranges 100 .
所以两个文件都需要 INPUT 给Map绘制者。

0pizxfdo

0pizxfdo1#

os.environ["map.input.file"] 在Map器内部,python代码应该给出Map器正在处理的块的文件名。

6mzjoqzu

6mzjoqzu2#

这个问题有点模棱两可,因为就档案的目的而言,没有提供多少细节。所以我做了一些假设
如果file1和file2只是两组数据文件,并且具有相同的数据类型,那么您只需要确保文件已被处理。。。然后只需将文件复制到hdfs文件夹中,并确保该文件夹被标识为input folder,您就可以了。两个文件中的数据将用于调用Map程序。。。
如果文件1和文件2有不同的用途。例如,file1是mapper的输入文件,而file2是一些连接等需要引用的文件,然后是分布式缓存。检查这个具有多个输入的hadoop流
如果file1和file2都是输入文件并且是相关的,则需要进行连接。如果file1或file2很小,则可以使用常规文件或归档文件将其用作分布式缓存。但是,如果两个文件都很大,则会稍微复杂一些,因为您可能需要执行多个mr或将文件转换为可以由配置单元使用的格式,然后使用配置单元联接,然后将联接结果用作pythonMap器作业的输入。
希望这有帮助。

相关问题