当我执行订单时
"bin/hadoop namenode -format"
Run Code Online (Sandbox Code Playgroud)
在Linux中,我得到了以下警告,
"WARN common.Util: Path /data/dfs/name should be specified as a URI in configuration files. Please update hdfs configuration."
Run Code Online (Sandbox Code Playgroud)
文件hdfs-site.xml中的namenode dir设置是
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/dfs/name</value>
<final>true</final>
</property>
Run Code Online (Sandbox Code Playgroud)
当我改变它
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///data/dfs/name</value>
<final>true</final>
</property>
Run Code Online (Sandbox Code Playgroud)
警告消失了,那么"file://"是什么意思,我们为什么要在那里添加呢?
当我编写mapreduce程序时,我经常编写代码
job1.setMapOutputKeyClass(Text.class);
Run Code Online (Sandbox Code Playgroud)
但是为什么我们要明确指定MapOutputKeyClass呢?我们已经在mapper类中进行了spicify,例如
public static class MyMapper extends
Mapper<LongWritable, Text, Text, Text>
Run Code Online (Sandbox Code Playgroud)
在Hadoop:权威指南一书中,有一个表显示方法setMapOutputKeyClass是可选的(属性用于配置类型),但是在我测试时,我发现它是必要的,或者eclipse的控制台会显示
Type mismatch in key from map: expected org.apache.hadoop.io.LongWritable, received org.apache.hadoop.io.Text
Run Code Online (Sandbox Code Playgroud)
有人能告诉我它的原因吗?
在书中,它说
"必须与MapReduce类型兼容的设置列于表8-1的下半部分".这是否意味着我们必须设置下部属性类型,但不必设置较高部分属性类型?
表的内容如下所示:
Properties for configuring types:
mapreduce.job.inputformat.class
mapreduce.map.output.key.class
mapreduce.map.output.value.class
mapreduce.job.output.key.class
mapreduce.job.output.value.class
Properties that must be consistent with the types:
mapreduce.job.map.class
mapreduce.job.combine.class
mapreduce.job.partitioner.class
mapreduce.job.output.key.comparator.class
mapreduce.job.output.group.comparator.class
mapreduce.job.reduce.class
mapreduce.job.outputformat.class
Run Code Online (Sandbox Code Playgroud)