分享

HDFS JAVA API访问

xiezijiang111 发表于 2013-10-16 13:40:10 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 6 4916
小女子Hadoop新手。。
最近做的一个程序,在web应用程序中通过servlet访问HDFS。
遇到的问题:config得不到hadoop的配置信息。已经把core-site.xml,mapred-site.xml,hdfs-site.xml放在工程目录下了,把new Configuration()得到Congiguration的实例打印出来,可以看到这三个文件和原本HADOOP_HOME/conf文件夹的core-site.xml、core-default.xml都被读入了,但是fs.default.name却不是core-site.xml里配置的hdfs://localhost:9000,而是Configuration默认的file:///
我注意到一点,如果我把这段代码run on hadoop出来结果就是hdfs://localhost:9000,但是在tomcat上运行就不对。可是我已经把hadoop相关的jar包都放在web工程的lib文件夹下了啊。。
这是为什么。。求大侠指点!!
              
               
            

已有(6)人评论

跳转到指定楼层
tntzbzc 发表于 2013-10-16 13:40:55

            其实不需要加载core-site.xml、core-default.xml
只要把关键配置写到一个自定义Config.xml文件里就行,文件名随意。
如果是玩HDFS API 需要加载 HDFS的PATH路径
#Config.xml
   
        hdfs.path
        hdfs://localhost:9000/
   
//hdfs.path是我随便取的名字,无所谓
Configuration myConf = new Configuration();
myConf.addResource(new Path("/Path/Config.xml"));
FileSystem myFS = FileSystem.get(URI.create(myConf.get("hdfs.path")), myConf);
加入以上代码再试一下
        
回复

使用道具 举报

tntzbzc 发表于 2013-10-16 13:41:40

            顺便提醒一下
所有需要引用的包要放在\tomcat\webapps\servletWEB\WEB-INF\lib
不能放在\tomcat\lib下
        
回复

使用道具 举报

virgo777 发表于 2013-10-16 13:42:25

            关注我也有这方面的需求
        
回复

使用道具 举报

xiezijiang111 发表于 2013-10-16 13:43:10

            引用 1 楼 tntzbzc 的回复:其实不需要加载core-site.xml、core-default.xml
只要把关键配置写到一个自定义Config.xml文件里就行,文件名随意。
如果是玩HDFS API 需要加载 HDFS的PATH路径
#Config.xml
   
        hdfs.path
        hdfs://localhost:9000/
   
//hdfs.path是我随便取的名字,无所谓
Configuration myConf = new Configuration();
myConf.addResource(new Path("/Path/Config.xml"));
FileSystem myFS = FileSystem.get(URI.create(myConf.get("hdfs.path")), myConf);
加入以上代码再试一下

谢版大~试了下只要在Configuration里面set好fs.default.name就可以了~
        
回复

使用道具 举报

tntzbzc 发表于 2013-10-16 13:43:47

            引用 4 楼 xiezijiang111 的回复:Quote: 引用 1 楼 tntzbzc 的回复:
其实不需要加载core-site.xml、core-default.xml
只要把关键配置写到一个自定义Config.xml文件里就行,文件名随意。
如果是玩HDFS API 需要加载 HDFS的PATH路径
#Config.xml
   
        hdfs.path
        hdfs://localhost:9000/
   
//hdfs.path是我随便取的名字,无所谓
Configuration myConf = new Configuration();
myConf.addResource(new Path("/Path/Config.xml"));
FileSystem myFS = FileSystem.get(URI.create(myConf.get("hdfs.path")), myConf);
加入以上代码再试一下

谢版大~试了下只要在Configuration里面set好fs.default.name就可以了~

这样写也可以,单代码里写死总不太好,如果将来namenode换个host就需要重新编译代码,建议写配置,动态加载,方便运维人员维护
        
回复

使用道具 举报

huwell88 发表于 2013-10-16 13:44:17

             楼主你好,我最近也在做这个,卡了快一周了,能看一下你的源码吗?谢谢了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条