Datuqiqi的博客

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

在hadoop-env.sh里加入

export JAVA_HOME=/usr/local/lib/jdk1.7.0_67

启动hadoop:

我们可以在hadoop文件夹下的bin文件夹下启动hadoop,也可以将bin文件加入到环境变量里,这样在什么目录下都能用,还是在profile里面

把之前的export PATH改为=$PATH:$JAVA_HOME/bin:/home/ustc/hadoop/hadoop-1.2.1/bin,

然后命令窗

hadoop namenode -format

这是格式化namenode

start-all.sh

这是启动所有节点

输入jps

可以看到六个进程

OK!

使用自带的例程进行测试(引用自最短路径之从零开始学习hadoop)

5.为了能用IDE进行java的编辑,我们下载并安装了eclipse,安装过程不多讲了

6.下载maven,用来帮助在eclipse里编辑mapreduce程序

下载安装maven:

然后再自己的一个文件夹内,比方说eclipse的workspace里,创建一个wordcount

先mvn archetype:generate,这是在生成maven项目框架

要求输入groupID ,artifactID等等,这个自己按意愿输入,详细参考maven相关书籍

mvn eclipse:eclipse生成eclipse可识别的工程,然后启动eclipse,import maven项目,然后编辑POM.xml,在里面的dependencies加入 dependency

<dependency>

<groupId>org.apache.hadoop</hadoop>

<artifactId>hadoop-core</artifactId>

<version>1.2.1</version>

</dependency>

加入这个是为了让maven自动下载hadoop相关的包,使mapreduce正确运行,否则找不到这些包

然后mvn clean install,先清空jar包,然后编译打包生成jar包

最后hadoop jar ./target/wordcount-1.0-SNAPSHOT.jar ustc/hilab/WordCount a tt

上面这句的意思是在hadoop下调用wordcount jar包,ustc/hilab/WordCount这个是调用的类,ustc.hilab包下的WordCount类 a是我自己建的一个文件,,里面有几行字母(当然先得按照之前讲的把本地的a put进hdfs里面) tt是输出文件夹, 如果想看tt,输入 hadoop fs -ls即可,这就是看hadoop的fs

下面是wordcount 代码,引用自

package ustc.hilab; import java.io.IOException; import java.util.Iterator; import java.util.StringTokenizer; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapred.FileInputFormat; import org.apache.hadoop.mapred.FileOutputFormat; import org.apache.hadoop.mapred.JobClient; import org.apache.hadoop.mapred.JobConf; import org.apache.hadoop.mapred.MapReduceBase; import org.apache.hadoop.mapred.Mapper; import org.apache.hadoop.mapred.OutputCollector; import org.apache.hadoop.mapred.Reducer; import org.apache.hadoop.mapred.Reporter; import org.apache.hadoop.mapred.TextInputFormat; import org.apache.hadoop.mapred.TextOutputFormat; /** * * 描述:WordCount explains by Felix * @author Hadoop Dev Group */ public class WordCount {/*** MapReduceBase类:实现了Mapper和Reducer接口的基类(其中的方法只是实现接口,而未作任何事情)* Mapper接口:* WritableComparable接口:实现WritableComparable的类可以相互比较。所有被用作key的类应该实现此接口。* Reporter 则可用于报告整个应用的运行进度,本例中未使用。**/public static class Map extends MapReduceBase implementsMapper<LongWritable, Text, Text, IntWritable>{/*** LongWritable, IntWritable, Text 均是 Hadoop 中实现的用于封装 Java 数据类型的类,这些类实现了WritableComparable接口,* 都能够被串行化从而便于在分布式环境中进行数据交换,你可以将它们分别视为long,int,String 的替代品。*/private final static IntWritable one = new IntWritable(1);private Text word = new Text();/*** Mapper接口中的map方法:* void map(K1 key, V1 value, OutputCollector<K2,V2> output, Reporter reporter)* 映射一个单个的输入k/v对到一个中间的k/v对* 输出对不需要和输入对是相同的类型,输入对可以映射到0个或多个输出对。* OutputCollector接口:收集Mapper和Reducer输出的<k,v>对。* OutputCollector接口的collect(k, v)方法:增加一个(k,v)对到output*/public void map(LongWritable key, Text value,OutputCollector<Text, IntWritable> output, Reporter reporter)throws IOException{String line = value.toString();StringTokenizer tokenizer = new StringTokenizer(line);while (tokenizer.hasMoreTokens()){word.set(tokenizer.nextToken());output.collect(word, one);}}}public static class Reduce extends MapReduceBase implementsReducer<Text, IntWritable, Text, IntWritable>{public void reduce(Text key, Iterator<IntWritable> values,OutputCollector<Text, IntWritable> output, Reporter reporter)throws IOException{int sum = 0;while (values.hasNext()){sum += values.next().get();}output.collect(key, new IntWritable(sum));}}public static void main(String[] args) throws Exception{/*** JobConf:map/reduce的job配置类,向hadoop框架描述map-reduce执行的工作* 构造方法:JobConf()、JobConf(Class exampleClass)、JobConf(Configuration conf)等*/JobConf conf = new JobConf(WordCount.class);conf.setJobName("wordcount");//设置一个用户定义的job名称conf.setOutputKeyClass(Text.class); //为job的输出数据设置Key类conf.setOutputValueClass(IntWritable.class); //为job输出设置value类conf.setMapperClass(Map.class);//为job设置Mapper类conf.setCombinerClass(Reduce.class);//为job设置Combiner类conf.setReducerClass(Reduce.class);//为job设置Reduce类conf.setInputFormat(TextInputFormat.class); //为map-reduce任务设置InputFormat实现类conf.setOutputFormat(TextOutputFormat.class); //为map-reduce任务设置OutputFormat实现类/*** InputFormat描述map-reduce中对job的输入定义* setInputPaths():为map-reduce job设置路径数组作为输入列表* setInputPath():为map-reduce job设置路径数组作为输出列表*/FileInputFormat.setInputPaths(conf, new Path(args[0]));FileOutputFormat.setOutputPath(conf, new Path(args[1]));JobClient.runJob(conf);//运行一个job} }

渐渐少了联络,友谊就变的淡了,所以,抽点时间,联络朋友一起聊聊天,

Datuqiqi的博客

相关文章:

你感兴趣的文章:

标签云: