最近项目中需要这样一个应用,将上海市的遥感图像生成金字塔存储到Hadoop的HDFS中去,
然后在前台的三维地球画面上点击浏览,就会自动从HDFS下载相应的TIFF图像,并贴到地球上,显示。
但是这样出现了一个问题,如何从HDFS中下载图像呢?
我最初采用了绑定 地理坐标与TIFF图像,并且通过Java执行shell指令
bin/hadoop dfs -copyToLocal /hdfs /localfs
的方式,发现这种方式实用性有限,就琢磨着如何在普通的Java程序中根据HDFS中的文件名创建HDFS的FileSystem,
并且传出文件流,但是一直出现一种情况,HDFS的路径被程序认为是 本地Linux的文件系统而发生错误,
经过调试发现,在不启动mapreduce的情况下,conf对象是不会读取hadoop-site.xml的,
这样就郁闷了,在博士gg的指点下,我发现可以手工指定conf中配置使用HDFS文件系统,
具体做法很简单,就是
Configuration conf = new Configuration();
conf.set("fs.default.name","hdfs://nd0:54310");
郁闷了两天的问题终于解决了,希望这种使用方法能对大家有所帮助。
PS:最近已经成功的在Hadoop中重写了InputFormat,可以读取图像了,
希望有志同道合的筒子一起研究,用分布式的方法处理图像,做些处理,站内我。