Hive外部分區表加載flume打到hdfs上文件,讀不到.tmp文件

    flume打到hdfs上時,按照文件大小生成文件,在達到指定大小以前數據都是以.tmp文件形式保存在hdfs上,hive外部表也會加載這些文件,可是當文件完成後.tmp會消失,這時候hive會報找不到文件的錯誤。解決方法是本身寫hive的pathfilter類,hive加載數據的時候把tmp文件過濾掉不加載便可。 java

 錯誤信息以下: 服務器

自定義PathFilter類以下: code

/**
 * 
   * @Title: FileFilterExcludeTmpFiles.java 
   * @Description: hive加載分區表時會加載.tmp的文件,該類型文件在flume滾動數據以後就會消失,此時hive找不到該文件就會報錯
   * 			         該類會將.tmp的文件過濾掉,不加載進hive的分區表中 
   * @version V0.1.0
   * @see
 */
public class FileFilterExcludeTmpFiles implements PathFilter{
	private static final Logger logger = LoggerFactory.getLogger(FileFilterExcludeTmpFiles.class);
	public boolean accept(Path path) {
		// TODO Auto-generated method stub
		return !name.startsWith("_") && !name.startsWith(".") && !name.endsWith(".tmp");
	}

}



編寫完後,打成jar包上傳服務器,再修改hive-site.xml文件,修改以下:

<property>

    <name>hive.aux.jars.path</name><value>file:///usr/lib/mylib/FilterTmpPath.jar</value>

    <description>The location of the plugin jars that contain implementations of user defined functions and serdes.</description>

  </property>

  <property>

    <name>mapred.input.pathFilter.class</name>

    <value>cn.utils.hive.FileFilterExcludeTmpFiles</value>

  </property>
切記:不能有回車換行這樣的字符,要否則回報一些亂七八糟的錯誤,博主就被坑的七零八碎的!!!!