文档章节

Hadoop 2.5.1学习笔记1:初探【纯使用篇】

强子大叔的码田
 强子大叔的码田
发布于 2014/10/24 14:37
字数 728
阅读 158
收藏 2

最新版本:2.5.1.

Hadoop的一个优秀的思想便是:代码向数据迁移,因为代码往往很小,数据却很大。所以代码迁就数据,很自然的想法。

下载2.5.1版本后,解压缩,进入文件夹,执行

root@idc66:/hadoop-2.5.1# ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.1.jar wordcount
Usage: wordcount <in> [<in>...] <out>
root@idc66:/hadoop-2.5.1#

 也就是说还缺少一些参数!

执行mkdir input

然后执行./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.1.jar  wordcount input output

就可以看到输出,第一个Hadoop 2.5.1程序顺利执行完成!

root@idc66:/hadoop-2.5.1# cat output/part-r-00000
!!! 1
hello 1
world 1

--------------------------为了学习方便,对于刚开始的程序员,并不推荐一上来就使用分布式环境,

个人建议在本地单机学习使用Hadoop 2.5.1即可。

对于解压缩的文件,配置

编辑core-site.xml

./etc/hadoop/core-site.xml

 

<property>

 <name>fs.default.name</name>

 <value>hdfs://idc66:9000</value>

</property>  <!--指定namenode的ip:port-->

-----------------------------------------------------------------------------------

关于HDFS:文件从本地上传到HDFS之后,被程序从HDFS文件系统中读取,操作完成后,又产生新的HDFS文件系统。-----------------------------------------------------------------------------------

我们开始写第一个MR程序。

先下载数据。

进入linux,启动Hadoop,

下载我们所需要的数据---

http://www.nber.org/patents/Cite75_99.zip

http://www.nber.org/patents/acite75_99.zip

解压缩之后即可。

启动hadoop后, 上传文件 ./bin/hadoop fs -put ./usa_data/apat63_99.txt

查看文件通过 ./bin/hadoop fs -lsr /user/root

然后编写代码如下:

 

 

import java.io.IOException;
import java.util.Iterator;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.Reporter;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.KeyValueTextInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

public class MyJob extends Configured implements Tool {

 // public static class MapClass extends MapReduceBase implements
 // Mapper<Text,Text,Text,Text>{
 public static class MapClass extends Mapper<LongWritable, Text, Text, Text> {
  public void map(LongWritable key, Text value, Context context)
    throws IOException, InterruptedException {
  
   String year = value.toString().split(",")[1];
   context.write(new Text(year), new Text("1"));
  }

 }

 public static class Reduce extends Reducer<Text, Text, Text, Text> {
  public void reduce(Text key, Iterable<Text> values, Context context)
    throws IOException, InterruptedException {
   long  count = 0;
   for (Text val : values) {
    count+=Long.parseLong(val.toString());
   }
   context.write(key, new Text(""+count));
  }

 }

 @Override
 public int run(String[] args) throws Exception {

  Configuration conf = getConf();
  // JobConf job = new JobConf(conf,MyJob.class);
  Job job = new Job(conf, "MyJob");
  job.setJarByClass(MyJob.class);
  job.setJobName("MyJob");

  Path in = new Path(args[0]);
  FileInputFormat.setInputPaths(job, in);
  job.setInputFormatClass(TextInputFormat.class);// 已经定义了k1,v1的格式
  //conf.set(
    //"mapreduce.input.keyvaluelinerecordreader.key.value.separator",
    //",");
  //conf.set("key.value.separator.in.input.line", ",");
  job.setMapperClass(MapClass.class);
  job.setReducerClass(Reduce.class);
  
  

  job.setOutputFormatClass(TextOutputFormat.class);
  job.setOutputKeyClass(Text.class);
  job.setOutputValueClass(Text.class);
  Path out = new Path(args[1]);
  FileOutputFormat.setOutputPath(job, out);

  // JobClient.runJob(job);
  System.exit(job.waitForCompletion(true) ? 0 : 1);

  return 0;
 }

 public static void main(String[] args) throws Exception {
  int res = ToolRunner.run(new Configuration(), new MyJob(), args);
  System.exit(res);
 }

}


执行命令:

./bin/hadoop jar ./Hadoop_2.5.1_fat.jar /user/root/apat63_99.txt  /user/root/apat63_99.rst

 

查看文件:

./bin/hadoop fs -lsr /user/root
lsr: DEPRECATED: Please use 'ls -R' instead.
drwxr-xr-x   - root supergroup          0 2014-11-07 14:27 /user/root/apat63_99.rst
-rw-r--r--   3 root supergroup          0 2014-11-07 14:27 /user/root/apat63_99.rst/_SUCCESS
-rw-r--r--   3 root supergroup          9 2014-11-07 14:27 /user/root/apat63_99.rst/part-r-00000
-rw-r--r--   3 root supergroup  236903179 2014-11-07 13:48 /user/root/apat63_99.txt

 

查看内容:

./bin/hadoop fs -tail /user/root/apat63_99.rst/part-r-00000

...

很简单的东西,没啥好说的。

 

 

 

 

 

© 著作权归作者所有

强子大叔的码田

强子大叔的码田

粉丝 910
博文 1439
码字总数 1221048
作品 9
南京
架构师
私信 提问
加载中

评论(2)

强子大叔的码田
强子大叔的码田 博主

引用来自“雷子”的评论

为啥不让看呢
可以看了,之前没写好
雷子
为啥不让看呢
Hadoop学习笔记(二)设置单节点集群

本文描述如何设置一个单一节点的 Hadoop 安装,以便您可以快速执行简单的操作,使用 Hadoop MapReduce 和 Hadoop 分布式文件系统 (HDFS)。 参考官方文档:Hadoop MapReduce Next Generation ...

微wx笑
2014/10/07
0
0
[Hadoop][笔记]4个节点搭建Hadoop2.x HA测试集群

搭建Hadoop2.x HA 1.机器准备 虚拟机 4台 10.211.55.22 node1 10.211.55.23 node2 10.211.55.24 node3 10.211.55.25 node4 2.四台主机节点安排 node namenode datanode zk zkfc jn rm appli......

zemel
2016/08/22
84
0
centos6.5安装hadoop集群

环境准备:4台机器 192.168.217.174 node1 -----namenode 192.168.217.175 node2 -----secondary namenode 192.168.217.176 node3 -----datanode 192.168.217.177 node4 -----datanode 1. 4......

飞侠119
2017/05/03
0
0
大数据之Hadoop平台(二)Centos6.5(64bit)Hadoop2.5.1伪分布式安装记录,wordcount运行测试

注意:以下安装步骤在Centos6.5操作系统中进行,安装步骤同样适于其他操作系统,如有同学使用Ubuntu等其他Linux操作系统,只需注意个别命令略有不同。 注意一下不同用户权限的操作,比如关闭...

chaun
2015/04/14
374
0
Hadoop-2.5.1 编译安装步骤

环境: 系统 CentOS 6.3 64 位 * 2 Master 10.10.55.112Slave1 10.10.55.133软件: Hadoop- 2.5.1- src.tar.gz 一、准备环境 1.1 分别设置节点ip地址(固定) 此步骤所有节点都要操作 vi /et...

次渠龙哥
2014/09/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Netty整合Protobuffer

现在我们都知道,rpc的三要素:IO模型,线程模型,然后就是数据交互模型,即我们说的序列化和反序列化,现在我们来看一下压缩比率最大的二进制序列化方式——Protobuffer,而且该方式是可以跨...

算法之名
20分钟前
11
0
如何用C++实现栈

栈的定义 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压...

BWH_Steven
39分钟前
4
0
编程作业20190210900169

1编写一个程序,提示用户输入名和姓,然后以“名,姓”的格式打印出来。 #include <stdio.h>#include <stdlib.h> int main(){ char firstName[20]; char lastName[20]; print......

1李嘉焘1
51分钟前
10
0
补码的优点及原理分析

只讨论整数 1.计算机内部为什么没有减法器? 减法运算本身其实就是加法,如x - y即x +(-y),所以只需要将负数成功表示出来并可以参加加法运算,那加法器就可同时实现“+”和“-”的运算。这...

清自以敬
今天
76
0
Docker 可视化管理 portainer

官网安装指南: https://portainer.readthedocs.io/en/latest/deployment.html docker-compose.yml 位置,下载地址:https://downloads.portainer.io/docker-compose.yml...

Moks角木
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部