Hive添加的文件在哪里?

Posted

技术标签:

【中文标题】Hive添加的文件在哪里?【英文标题】:Where is the file added by Hive? 【发布时间】:2017-05-05 09:38:52 【问题描述】:

我使用命令“添加文件”,该文件随后将由 UDF 加载。

但我在 HDFS(hdfs://namenode:8026/user/hdfs) 找不到 hive 添加的文件,我需要 udf 方法中的路径。

文件的路径是什么,如何通过udf使用?

【问题讨论】:

【参考方案1】:

UDF/UDTF 无法访问 dfs 路径,您需要在 UDF/UDTF 中提供本地路径。

我的做法:

检查文件是否存在于本地的“/tmp”中。 如果是并且文件长度非零,则使用它,否则将文件从 DFS:/shared 拉到 '/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;        

【讨论】:

【参考方案2】:

add file在 Hive 的分布式缓存中添加文件。

【讨论】:

感谢您的回复...我必须找到新的方法 如果您提供详细要求,我会帮助您。我已经处理过这个场景。 谢谢!我正在编写一个 UDTF 来通过从公司购买的 *.dat 文件解析 IP 地址。所以我需要在我的 UDTF 方法中指明 .dat 文件路径。我已将文件放在 dfs 上,但是当我运行该方法时,它总是说:'java.io.FileNotFoundException: hdfs:/192.168.7.20:8020/tmp/ip_20170204.dat (No such file or directory)' 对了,我的UDTF Java代码细节可以看我之前的问题:***.com/questions/43799688/…

以上是关于Hive添加的文件在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

Hive中如何添加自定义UDF函数以及oozie中使用hive的自定义函数

Hive 在 HDFS 中将文件存储在哪里?

hive添加UDF函数

使用 Tez 执行引擎将文件系统添加到 Hive

Hive分区表动态添加字段

Hive在哪里存储HDFS中的文件?