2017-05-05 105 views
0

我使用命令'add file',隨後文件將由UDF加載。Hive添加的文件在哪裏?

但我找不到HDFS(hdfs:// namenode:8026/user/hdfs)配置單元添加的文件,我需要udf方法中的路徑。

什麼是文件的路徑,以及如何通過UDF使用它?

回答

0

DFS路徑是不是從UDF/UDTF訪問,你需要提供UDF/UDTF本地路徑。

我的方法:

檢查該文件存在於本地的「/ tmp目錄」與否。 如果是的話,有非零文件長度,然後用它,否則拉離DFS文件:/共享「/ tmp和繼續。

public static boolean readFile(){ 
    BufferedReader br=null; 
    try { 
     File f = new File("/tmp/" + fileName); 
     if (! f.exists() || f.length() == 0){ 
      // Pull fresh file from dfs:/xyz. 
      String cmd = "hadoop fs -get /xyz/" + fileName + " /tmp/"; 
      Runtime run = Runtime.getRuntime(); 
      System.err.println("Pulling Mapping file from HDFS. Running: " + cmd); 
      Process pr = run.exec(cmd); 
      try { 
       // Waiting for the job to complete. 
       pr.waitFor(); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
     //open file for reading 
     br = new BufferedReader(new FileReader("/tmp/" + fileName)); 

     String line= br.readLine(); 

     while(line != null){ 
      System.out.println(line);    
      //read next line 
      line = br.readLine(); 
     } 

     br.close(); 

    }catch (FileNotFoundException e){ 

     System.err.println("File not found - "+fileName); 
     return false; 

    }catch(IOException e){ 

     System.err.println("Error while reading from the preset file");   
     return false;   
    } 

    return true;   
} 
+0

哇〜Linux的CMD可以在UDF被執行~~我學會了......謝謝! – superz

0

add file在蜂巢中添加分佈式緩存文件。

+0

感謝您的回覆...我必須找到一種新方式 – superz

+0

如果您提供詳細要求,我會幫助您。我已經在處理這種情況。 –

+0

謝謝!我正在編寫一個UDTF來通過從公司購買的* .dat文件來解析IP地址。所以我需要在我的UDTF方法中指出.dat文件路徑。我已經把該文件在DFS但是當我運行的方法它總是說:「java.io.FileNotFoundException:HDFS:/192.168.7.20:8020的/ tmp/ip_20170204.dat(沒有這樣的文件或目錄)」 – superz