Java 如何将序列化对象放入Hadoop DFS中并将其返回到map函数中?

Java 如何将序列化对象放入Hadoop DFS中并将其返回到map函数中?,java,hadoop,thrift,Java,Hadoop,Thrift,我是Hadoop新手,最近我被要求使用Hadoop做一个测试项目。 所以当我在读BigData的时候,碰巧知道了关于Pail的事。现在我想做的是这样的事情。首先创建一个简单的对象,然后使用Thrift将其序列化,并使用Pail将其放入HDFS。然后我想在map函数中得到这个对象,然后做我想做的事情。但我不知道如何在map函数中获取tat对象 有人能告诉我一些参考资料或者解释一下怎么做吗?我可以想出三种选择: 使用-files选项并在HDFS中命名该文件,因为任务跟踪器将为该节点上运行的所有作业下

我是Hadoop新手,最近我被要求使用Hadoop做一个测试项目。 所以当我在读BigData的时候,碰巧知道了关于Pail的事。现在我想做的是这样的事情。首先创建一个简单的对象,然后使用Thrift将其序列化,并使用Pail将其放入HDFS。然后我想在map函数中得到这个对象,然后做我想做的事情。但我不知道如何在map函数中获取tat对象


有人能告诉我一些参考资料或者解释一下怎么做吗?

我可以想出三种选择:

使用-files选项并在HDFS中命名该文件,因为任务跟踪器将为该节点上运行的所有作业下载一次该文件 使用与上述类似的DistributedCache逻辑,但是您可以通过一些API调用而不是通过命令行来配置文件 直接从HDFS加载文件效率较低,因为您在每个任务的HDFS上拉取文件 对于某些代码,将加载逻辑放入映射器的设置中。。。或配置。。方法,具体取决于您使用的是新API还是旧API,如下所示:

protected void setup(Context context) {
    // the -files option makes the named file available in the local directory
    File file = new File("filename.dat");
    // open file and load contents ...

    // load the file directly from HDFS
    FileSystem fs = FileSystem.get(context.getConfiguration());
    InputStream hdfsInputStream = fs.open("/path/to/file/in/hdfs/filename.dat");
    // load file contents from stream...
}
DistributedCache中有一些示例代码