通过网上教程看到的一个查询hdfs中是否有某文件的java程序:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.log4j.BasicConfigurator;
public class test {
public static void main(String[] args){
try {
String filename = "hdfs://localhost:9000/123.txt"; #这是检查hdfs中的根目录中是否有123.txt
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
if (fs.exists(new Path(filename))){
System.out.println("exist");
}else {
System.out.println("not exist");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
想在IDEA中试一试,但是IDEA和ECLIPSE在配置的时候有些不同,所以踩了不少坑。
1.导入jar包
IDEA中导入jar的流程是File-Projiect Structure-Modules(eclipse中是Libraries)
然后点击选中对应的项目,我的是test,点击右侧的加号:
选中hadoop所在位置,hadoop中的jar包都在hadoop/share/hadoop/中,选中common/lib,加载其中的包。
2.将hadoop/etc/hadoop中的core-site.xml和hdfs-site.xml复制到test/src中即该工程的src目录下(eclipse是放在bin目录下):
否则会出现:
3.运行程序中出现log4j问题的解决方法解决:log4j:WARN No appenders could be found for logger
两种办法:
第一种:在src文件中添加相关文件
第二种:在主函数中加入一句代码:BasicConfigurator.configure();参考:其中还有该问题出现的具体原因
4.出现:org.apache.hadoop.fs.UnsupportedFileSystemException: No FileSystem for scheme “hdfs”
是因为导入的jar包不全,建议把hadoop/share/hadoop/common/lib中的包全部导入
5.每次启动hadoop都要格式化namenode的问题
首先在home目录下建立一个hadoop_tmp目录
sudo mkdir ~/hadoop_tmp
然后修改hadoop/etc/hadoop目录里面的core-site.xml文件,加入以下节点:
hadoop.tmp.dir
/home/zcsc/hadoop_tmp
A base for other temporary directories.
注意:我的用户是zcsc所以目录是/home/zcsc/hadoop_tmp
格式化一下namenode
hadoop namenode -format
给hadoop_tmp权限:
sudo chmod -R 777 /home/zcsc/hadoop_tmp
然后启动hadoop
start-all.sh
执行下JPS命令就可以看到NameNode了