HDFS JAVA API访问

千岛酱 2013-05-08 11:52:35
小女子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文件夹下了啊。。

这是为什么。。求大侠指点!!
...全文
420 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
胡偉 2013-05-11
  • 打赏
  • 举报
回复
楼主你好,我最近也在做这个,卡了快一周了,能看一下你的源码吗?谢谢了
撸大湿 2013-05-10
  • 打赏
  • 举报
回复
引用 4 楼 xiezijiang111 的回复:
[quote=引用 1 楼 tntzbzc 的回复:] 其实不需要加载core-site.xml、core-default.xml 只要把关键配置写到一个自定义Config.xml文件里就行,文件名随意。 如果是玩HDFS API 需要加载 HDFS的PATH路径 #Config.xml <property> <name>hdfs.path</name> <value>hdfs://localhost:9000/</value> </property>
//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就可以了~[/quote] 这样写也可以,单代码里写死总不太好,如果将来namenode换个host就需要重新编译代码,建议写配置,动态加载,方便运维人员维护
千岛酱 2013-05-10
  • 打赏
  • 举报
回复
引用 1 楼 tntzbzc 的回复:
其实不需要加载core-site.xml、core-default.xml 只要把关键配置写到一个自定义Config.xml文件里就行,文件名随意。 如果是玩HDFS API 需要加载 HDFS的PATH路径 #Config.xml <property> <name>hdfs.path</name> <value>hdfs://localhost:9000/</value> </property>
//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就可以了~
我想飞走 2013-05-09
  • 打赏
  • 举报
回复
关注我也有这方面的需求
撸大湿 2013-05-09
  • 打赏
  • 举报
回复
顺便提醒一下 所有需要引用的包要放在\tomcat\webapps\servletWEB\WEB-INF\lib 不能放在\tomcat\lib下
撸大湿 2013-05-09
  • 打赏
  • 举报
回复
其实不需要加载core-site.xml、core-default.xml 只要把关键配置写到一个自定义Config.xml文件里就行,文件名随意。 如果是玩HDFS API 需要加载 HDFS的PATH路径 #Config.xml <property> <name>hdfs.path</name> <value>hdfs://localhost:9000/</value> </property>
//hdfs.path是我随便取的名字,无所谓
Configuration myConf = new Configuration();
myConf.addResource(new Path("/Path/Config.xml"));
FileSystem myFS = FileSystem.get(URI.create(myConf.get("hdfs.path")), myConf);
加入以上代码再试一下

20,808

社区成员

发帖
与我相关
我的任务
社区描述
Hadoop生态大数据交流社区,致力于有Hadoop,hive,Spark,Hbase,Flink,ClickHouse,Kafka,数据仓库,大数据集群运维技术分享和交流等。致力于收集优质的博客
社区管理员
  • 分布式计算/Hadoop社区
  • 涤生大数据
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧