之前依据名字想当然的把fs.default.name配置在hdfs-site.xml里,结果执行ls copy等命令都是本地的方式,后调试也未果,故想了下之前自己的操作,然后看了下代码发现都是配置惹的问题,故在此总结下各配置项的加载情况。
在hadoop 0.20.2版本中存在如下几个配置文件
core-default.xml core-site.xml hdfs-default.xml hdfs-site.xml mapred-default.xml mapred-site.xml
其中default中各个配置项可以参看我之前的blog里有说。下面总结下加载情况
在Configuration类中通过static加载方式加载了
core-default.xml core-site.xml
也就是说所有用到Configuration的类都会加载这个配置项。
在以下几个类中会显示加载hdfs-*.xml
DataNode NameNode DFSck DistributedFileSystem
这几个类加载这些文件是通过Configuration来完成的,也就是说默认会将core-*的xml也加载进来。
以下几个类中会显示加载mapred-*.xml
JobClient JobConf JobTracker TaskTracker
同样他们的操作也是由Configuration来完成的,也就是说默认会将core-*的xml也加载进来
在hadoop命令中有以下类是执行命令的实体类
namenode CLASS=org.apache.hadoop.hdfs.server.namenode.NameNode secondarynamenode CLASS=org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode datanode CLASS=org.apache.hadoop.hdfs.server.datanode.DataNode fs CLASS=org.apache.hadoop.fs.FsShell dfs CLASS=org.apache.hadoop.fs.FsShell dfsadmin CLASS=org.apache.hadoop.hdfs.tools.DFSAdmin mradmin CLASS=org.apache.hadoop.mapred.tools.MRAdmin fsck CLASS=org.apache.hadoop.hdfs.tools.DFSck balancer CLASS=org.apache.hadoop.hdfs.server.balancer.Balancer jobtracker CLASS=org.apache.hadoop.mapred.JobTracker tasktracker CLASS=org.apache.hadoop.mapred.TaskTracker job CLASS=org.apache.hadoop.mapred.JobClient queue CLASS=org.apache.hadoop.mapred.JobQueueClient pipes CLASS=org.apache.hadoop.mapred.pipes.Submitter version CLASS=org.apache.hadoop.util.VersionInfo jar CLASS=org.apache.hadoop.util.RunJar distcp CLASS=org.apache.hadoop.tools.DistCp daemonlog CLASS=org.apache.hadoop.log.LogLevel archive CLASS=org.apache.hadoop.tools.HadoopArchives sampler CLASS=org.apache.hadoop.mapred.lib.InputSampler
也就是说从这些类中排除上面那些显示指定hdfs,mapred等配置项的类,那么这些剩余的类使用的配置都是从
core-default.xml core-site.xml
获得,所以如果你有针对以上类中需要使用的特定配置而不是使用系统默认的配置,那么需要配置在core-site.xml中,例如fs.default.name