我有一个我要迭代的网址列表,其中每个网址都包含我要下载的特定文件。我正在尝试利用hadoop / pig加速这个过程,认为让每个节点处理特定的下载/上传将有助于提高网络吞吐量。
我有一个UDF负责下载,损坏检查,上传,但我遇到了一些问题,在某种意义上找到一种方法使这个调用无阻塞,以便我可以在特定时间进行多次下载。我开始使用foreach为每个URL调用UDF,但它一次只会生成一个下载任务。每个单独的映射器运行2个任务。有一个运行foreach循环,另一个运行UDF。每个UDF都是一个独立的任务,因为每个文件部分在逻辑上都是单独的下载。有没有想过是否有可能使这更加平行?我不确定增加映射器的数量是否会导致此UDF无阻塞。
我正在处理的文件大小约为每GB 2.8 GB,我每天处理大约1 TB
任何有关调查的帮助或建议都很棒!
答案 0 :(得分:0)
您可以根据自己的情况使用KafKa。这是一个Apache项目。它可以处理来自数千个客户端的每秒数百兆字节的读写操作。
它有两个实体1,称为生产者,将您的数据输入Kafka,另一个称为Consumer,从Kafka读取数据。
您可以实现从URL下载数据作为生产者的客户端。如果要处理可以使用storm的数据并将其注册为使用者。
或者您可以使用KafKa和Hadoop API将Hadoop注册为Kafka的消费者。