我可以看到猪可以原生地读取.bz2文件,但我不确定它是否运行明确的工作将bz2分成多个输入分割?谁能证实这一点?如果pig正在运行创建inputsplits的工作,有没有办法避免这种情况?我的意思是让MapReduce框架将bz2文件拆分为框架级别的muplitple inputlits的方法?
答案 0 :(得分:1)
可分割输入格式未在hadoop中实现(或在pig中,它只为您运行MR作业),以便文件被一个作业拆分,然后由第二个作业处理拆分。
输入格式定义了isSplittable
方法,该方法定义是否可以拆分文件格式。除此之外,大多数基于文本的格式将检查文件是否使用已知的压缩编解码器(例如:gzip,bzip2)以及编解码器是否支持拆分(原则上gzip不支持,但bz2支持)。
如果输入格式/编解码器允许拆分文件,则在压缩文件中定义(和可配置)的点(例如每64 MB)定义拆分。创建映射任务以处理每个拆分时,然后获取输入格式以创建文件的记录读取器,传递读取器应从哪里开始的拆分信息(64MB块偏移)。然后告诉读者寻找分裂的偏移点。此时,底层编解码器将在压缩文件中寻找该点,并向前扫描直到找到下一个压缩块头(在bz2的情况下)。读取然后在编解码器返回的未压缩流上正常继续,直到在未压缩流中传递了拆分结束点。