Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2441893
  • 博文数量: 328
  • 博客积分: 4302
  • 博客等级: 上校
  • 技术积分: 5486
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-01 11:14
个人简介

悲剧,绝对的悲剧,悲剧中的悲剧。

文章分类

全部博文(328)

文章存档

2017年(6)

2016年(18)

2015年(28)

2014年(73)

2013年(62)

2012年(58)

2011年(55)

2010年(28)

分类: 云计算

2015-01-01 21:03:36

环境如下:

ubuntu-12.04.2-server-amd64

hadoop-1.0.4

VirtualBox


1、在VBox中安装Ubuntu Server,

用户名和密码都是hadoop,安装完成后,克隆两份,这样就有三台机器,一台master,两台slave。克隆后的slave打开不能 上网,原因是克隆的时候,“重新初始化所有网卡的MAC地址”,而Ubuntu系统中网卡缓存中的MAC地址也新的MAC地址不一致,解决方法是在克隆后 的机器中删除一个文件,使用如下命令:


sudo rm /etc/udev/rules.d/70-persistent-net.rules

然后重启,机器就能连网了。


2、安装jdk,使用如下命令:

sudo apt-get install openjdk-6-jdk

master和slave都要安装。


3、修改机器名称,编辑/etc/hostname,把master机器修改成master.Hadoop,slave机器修改成slave1.Hadoop和slave2.Hadoop。


4、修改机器网络配置,编辑/etc/network/interfaces。master的网络配置如下:

# This file describes the network interfaces available on your system

# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
#iface eth0 inet dhcp
iface eth0 inet static
address 192.168.0.40 netmask 255.255.255.0 gateway 192.168.0.1 dns-nameservers 8.8.8.8

slave1和slave2的配置只需要修改IP地址,分别是192.168.0.41和192.168.0.42。


5、配置master和slave的hosts文件,编辑/etc/hosts,在文件中追加如下内容:

192.168.0.40 master.Hadoop 192.168.0.41 slave1.Hadoop 192.168.0.42 slave2.Hadoop

三台机器的hosts配置相同。


6、配置master无密码登录所有slave

在master上执行:

ssh-keygen -t rsa -P ''

这个命令用于生成无密码密钥对,询问其保存路径时直接回车采用默认路径。生成的密钥对为id_rsa和id_rsa.pub,默认存储在/home/hadoop/.ssh目录下。接着在master上做如下配置,把id_rsa.pub追加到授权的key里:

cat .ssh/id_rsa.pub >> .ssh/authorized_keys

修改权限:authorized_keys的权限和.ssh目录的权限,使用如下命令:

chmod 600 .ssh/authorized_keys
chmod 700 .ssh

在slave机器上创建.ssh目录,使用如下命令:

mkdir .ssh

把authorized_keys复制到slave1机器的/home/hadoop/.ssh中,使用如下命令:

 scp .ssh/authorized_keys slave1.Hadoop:/home/hadoop/.ssh/authorized_keys

修改权限,同master上的权限配置,在slave2上做同样的操作。


7、在master上安装hadoop

解压hadoop-1.0.4.tar.gz:

tar -zxvf hadoop-1.0.4.tar.gz


8、配置hadoop

编辑conf/hadoop-env.sh,修改JAVA_HOME的值:

export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-amd64/

编辑conf/mapred-site.xml,添加内容:

复制代码
xml version="1.0"?> xml-stylesheet type="text/xsl" href="configuration.xsl"?>  <configuration> <property> <name>mapred.job.trackername> <value>value> property> configuration>
复制代码

编辑conf/hdfs-site.xml,添加内容:

复制代码
xml version="1.0"?> xml-stylesheet type="text/xsl" href="configuration.xsl"?>  <configuration> <property> <name>dfs.name.dirname> <value>/home/hadoop/namevalue> property> <property> <name>dfs.data.dirname> <value>/home/hadoop/datavalue> property> <property> <name>dfs.replicationname> <value>2value> property> configuration>
复制代码

编辑conf/core-site.xml,添加内容:

复制代码
xml version="1.0"?> xml-stylesheet type="text/xsl" href="configuration.xsl"?>  <configuration> <property> <name>fs.default.namename> <value>hdfs://master.Hadoop:9000value> property> <property> <name>hadoop.tmp.dirname> <value>/home/hadoop/hadoop-1.0.4/tmpvalue> property> configuration>
复制代码

编辑conf/masters,删除localhost,添加内容:

master.Hadoop

编辑conf/slaves,删除localhost,添加内容:

slave1.Hadoop
slave2.Hadoop


9、把master的hadoop-1.0.4拷贝到slave

在master上执行:

scp -r hadoop-1.0.4 slave1.Hadoop:/home/hadoop/
scp -r hadoop-1.0.4 slave2.Hadoop:/home/hadoop/


10、在master上格式化HDFS文件系统,使用如下命令:

hadoop-1.0.4/bin/hadoop namenode -format


11、启动所有结点

在master上执行:

hadoop-1.0.4/bin/start-all.sh

在master上执行jps命令,输出如下:

1974 JobTracker 2101 Jps 1602 NameNode 1893 SecondaryNameNode

说明master上hadoop正常启动。

在slave上执行jps命令,输出如下:

2007 Jps 1423 DataNode 1636 TaskTracker

说明slave上hadoop正常启动。

也可以在浏览器中打开192.168.0.40:50030或者192.168.0.40:50070查看master和slave是否正常启动。


12、关闭所有节点

在master上执行:

hadoop-1.0.4/bin/stop-all.sh

  

13、第一个hadoop程序

hadoop届的hello world,wordcount程序

首先生成要执行的jar文件
$ mkdir wordcount_classes 
$ javac -classpath ${HADOOP_HOME}/hadoop-${HADOOP_VERSION}-core.jar -d wordcount_classes WordCount.java 
$ jar -cvf /usr/joe/wordcount.jar -C wordcount_classes/ .

然后在HDFS上面准备好要count的输入文件
$ bin/hadoop dfs -ls [hdfs://>:9000]/usr/joe/wordcount/input/ 
/usr/joe/wordcount/input/file01 
/usr/joe/wordcount/input/file02 

$ bin/hadoop dfs -cat /usr/joe/wordcount/input/file01 
Hello World Bye World 
$ bin/hadoop dfs -cat /usr/joe/wordcount/input/file02 
Hello Hadoop Goodbye Hadoop

执行查询:
$ bin/hadoop jar /usr/joe/wordcount.jar org.myorg.WordCount /usr/joe/wordcount/input /usr/joe/wordcount/output

输出
$ bin/hadoop dfs -cat /usr/joe/wordcount/output/part-00000 
Bye 1 
Goodbye 1 
Hadoop 2 
Hello 2 
World 2 

点击(此处)折叠或打开

  1. package org.myorg;

  2. import java.io.IOException;
  3. import java.util.*;

  4. import org.apache.hadoop.fs.Path;
  5. import org.apache.hadoop.conf.*;
  6. import org.apache.hadoop.io.*;
  7. import org.apache.hadoop.mapred.*;
  8. import org.apache.hadoop.util.*;

  9. public class WordCount {

  10.    public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> {
  11.      private final static IntWritable one = new IntWritable(1);
  12.      private Text word = new Text();

  13.      public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
  14.        String line = value.toString();
  15.        StringTokenizer tokenizer = new StringTokenizer(line);
  16.        while (tokenizer.hasMoreTokens()) {
  17.          word.set(tokenizer.nextToken());
  18.          output.collect(word, one);
  19.        }
  20.      }
  21.    }

  22.    public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> {
  23.      public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
  24.        int sum = 0;
  25.        while (values.hasNext()) {
  26.          sum += values.next().get();
  27.        }
  28.        output.collect(key, new IntWritable(sum));
  29.      }
  30.    }

  31.    public static void main(String[] args) throws Exception {
  32.      JobConf conf = new JobConf(WordCount.class);
  33.      conf.setJobName("wordcount");

  34.      conf.setOutputKeyClass(Text.class);
  35.      conf.setOutputValueClass(IntWritable.class);

  36.      conf.setMapperClass(Map.class);
  37.      conf.setCombinerClass(Reduce.class);
  38.      conf.setReducerClass(Reduce.class);

  39.      conf.setInputFormat(TextInputFormat.class);
  40.      conf.setOutputFormat(TextOutputFormat.class);

  41.      FileInputFormat.setInputPaths(conf, new Path(args[0]));
  42.      FileOutputFormat.setOutputPath(conf, new Path(args[1]));

  43.      JobClient.runJob(conf);
  44.    }
  45. }


参考链接:

http://blog.chinaunix.net/uid-26867092-id-3213709.html

http://www.cnblogs.com/xia520pi/archive/2012/05/16/2503949.html
官网1.0.4的安装教程:

官网2.6.0的安装教程:

转载自:http://www.cnblogs.com/sunjie21/archive/2013/04/01/2994309.html
阅读(1689) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~