Hadoop 0.20.2 安装配置说明【转】

Hadoop 0.20.2 安装配置说明

作者:独孤酒间                         编辑日期:2012820

关键字:hadoop 0.20.2 集群配置 ubuntu

描述:本人参考了书籍《Hadoop 实战》及网络上一些资源,经过多次尝试搭建成功后编写的此文档。文档中使用 Ubuntu Server 12.04 x64 + JDK 1.7.0 u5 + Hadoop 0.20.2 及 5 台虚拟机做为演示测试环境。希望能对大家带来帮助。本文档适合初学者,指引初学者或初次接触 Hadoop 的人成功安装 Hadoop ,使用代码执行简单的 HDFS 操作,并利用 MapReduce 执行分布式计算示例代码。其中 MapReduce 示例代码为 Hadoop 官方带的 hadoop-0.20.2-examples.jar 。

一、     环境说明

1.1、运行环境

虚拟机 × 5:

系统:Ubuntu Server 12.04 x64

JAVA:JDK 1.7.0 u5 linux x64

ssh:OpenSSH_5.9p1

Hadoop:Hadoop 0.20.2

1.2、网络环境配置

主机名

IP 地址

Hadoop 角色

ubuntu00

192.168.1.130

NameNode

ubuntu01

192.168.1.131

SecondaryNameNode

ubuntu02

192.168.1.132

DataNode

ubuntu03

192.168.1.133

DataNode

ubuntu04

192.168.1.134

DataNode

 

1.2.1、配置主机名

sudo vi /etc/hostname

将里面内容改为你的主机名即可。如下图,我其中一台机器的主机名叫ubuntu01

 

1.2.2、配置网络

sudo vi /etc/network/interfaces

文件内容如下:

# This file describes the network interfaces available on your system

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

 

# The loopback network interface

auto lo

iface lo inet loopback

 

# The primary network interface

auto eth0 # eth0 是网卡设备名称

iface eth0 inet static # 设置 IP 为静态

address 192.168.1.130 # 你的 IP 地址

netmask 255.255.255.0 # 你的子网掩码

network 192.168.1.0 # 此行可省略删除

broadcast 192.168.1.255 # 此行可省略删除

gateway 192.168.1.1 # 网关

dns-nameservers 202.97.224.68 202.97.224.69 # DNS服务器,以空格分隔

dns-search fireteam.org # 此行和省略删除

# 以上红字部分为需要根据你的网络环境更改。

 

1.2.3、配置 IP 与主机名的映射

sudo vi /etc/hosts

1、注释 127.0.1.1 所在行,否则DataNode连不上。

2、将你的集群机器ip   主机名对应方式加上。如192.168.1.130 ubuntu00,每机器一行,本机也要写上。

 

二、     软件安装

2.1、JDK

2.1.1、安装 JDK

tar -zxvf /ftp/jdk-7u5-linux-x64.tar.gz -C /tools/

其中“/ftp/jdk-7u5-linux-x64.tar.gz”是你的安装包完整路径,-C(-C必须大写)后面的“/tools/”是你要解压到的路径。

2.1.2、配置环境变量

sudo vi /etc/profile

在文件结尾处添加如下内容:

# Set JVM 1.7.0_05

export JAVA_HOME="/tools/jdk1.7.0_05" # 红字部分需要改为你的 JDK 安装路径。

export JRE_HOME="${JAVA_HOME}/jre"

export CLASSPATH=".:${JAVA_HOME}/lib:${JRE_HOME}/lib"

# Set Path

export PATH="${JAVA_HOME}/bin:${JRE_HOME}/bin:${PATH}

 

配置完成后执行 sudo source /etc/profile ,使环境变量设置生效。

2.1.3、测试 JDK

java -version

显示 java version "1.7.0_05" 即为成功。

javac -version

显示 javac 1.7.0_05 即为成功。

2.2、SSH

2.2.1、安装 SSH

sudo apt-get install openssh-server openssh-client

2.2.2、查看 SSH 状态

service ssh status

显示 ssh start/running, process 810 即为成功,其中810为进程 ID 。

2.2.3、启动或重启 SSH

sudo service ssh start

或者

sudo /etc/init.d/ssh restart

2.2.4、配置 SSH 免密码登录

1) 为每台机器生成公钥和加密文件

在每台机器上执行命令 ssh-keygen -t rsa 之后一路回车。

2) 把每台机器的公钥文件复制到其它所有机器

scp ~/.ssh/id_rsa.pub 192.168.1.131:~/id_rsa_130.pub

scp ~/.ssh/id_rsa.pub 192.168.1.132:~/id_rsa_130.pub

以上两句中的 ~/.ssh/id_rsa.pub 是你执行 1) 后生成的公钥文件路径,192.168.1.131 和 192.168.1.132 是其它机器的 IP 地址,IP 后面的 ~/id_rsa_130.pub 是目标路径及文件名,这里我为了区分各机器的公钥文件,执行了重命名,将每台机器的 id_rsa.pub 拷贝至目标机器的 id_rsa_130.pub (其中 130 为所属机器的 IP )。然后输入yes,最后输入slave机器的密码

3) 确保 ssh 配置文件中存在如下内容

执行命令:sudo vi /etc/ssh/sshd_config

 

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile    .ssh/authorized_keys

 

如需修改,则在修改后参照2.2.3执行重启SSH服务使其生效。

4) 将 id_rsa_*.pub 追加到授权的 key 里面

追加本机的授权: cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

追加其它机的授权: cat ~/id_rsa_130.pub >> ~/.ssh/authorized_keys

其中 id_rsa_130.pub 要替换为你的其他机公钥文件名,有几个就替换并执行几遍。

在每台机器上重复执行 4) 内容。

5) 验证 SSH

在每台机器中执行 ssh 192.168.1.130 (替换为你的目标机器的 IP 地址),然后输入 yes (首次连接确认)。如果主机名由本机名变成目标主机名即为成功。每台机器都要执行一遍对所有机器的连接。

6) 移除公钥文件

删除所有机器上刚生成的 .pub 文件

rm ~/.ssh/id_rsa.pub

rm ~/id_rsa*.pub

 

2.3、Hadoop

2.3.1、安装 Hadoop

tar -zxvf /ftp/hadoop-0.20.2.tar.gz -C /tools/

其中“/ftp/hadoop-0.20.2.tar.gz”是你的安装包完整路径,-C(-C必须大写)后面的“/tools/”是你要解压到的路径。

2.3.2、配置环境变量

sudo vi /etc/profile

在文件结尾处添加如下内容:

# Set Hadoop 0.20.2

export HADOOP_HOME="/tools/hadoop-0.20.2" # 红字部分需要改为你的 Hadoop 安装路径。

export HADOOP_DEV_HOME="${HADOOP_HOME}"

export HADOOP_CONF_DIR="${HADOOP_HOME}/conf"

# Set Path

export PATH="${JAVA_HOME}/bin:${JRE_HOME}/bin:${HADOOP_HOME}/bin:${PATH}

# 在 2.1.2 JDK 环境变量的配置基础上加上红字部分。

 

配置完成后执行 sudo source /etc/profile ,使环境变量设置生效。

三、     Hadoop 配置

3.1、默认端口信息

50030 mapred.job.tracker.http.address

描述:JobTracker administrative web GUI JOBTRACKER的HTTP 服务器和端口

50070 dfs.http.address

描述:NameNode administrative web GUI NAMENODE的HTTP服务器和端口

50010 dfs.datanode.address

描述:DataNode control port (each DataNode listens on this port and registers it with the NameNode on startup) DATANODE控制端口,主要用于DATANODE初始化时向NAMENODE提出注册和应答请求

50020 dfs.datanode.ipc.address

描述:DataNode IPC port, used for block transfer DATANODE的RPC服务器地址和端口

50060 mapred.task.tracker.http.address

描述:Per TaskTracker web interface TASKTRACKER的HTTP服务器和端口

50075 dfs.datanode.http.address

描述:Per   DataNode web interface DATANODE的HTTP服务器和端口

50090 dfs.secondary.http.address

描述:Per secondary NameNode web interface 辅助DATANODE的HTTP服务器和端口

 

3.2、建立相关文件夹

我的 Hadoop 根目录:/tools/hadoop/workspace/

mkdir /tools/hadoop/workspace/temp

mkdir /tools/hadoop/workspace/dfs

mkdir /tools/hadoop/workspace/dfs/name

mkdir /tools/hadoop/workspace/dfs/data

mkdir /tools/hadoop/workspace/mapred

mkdir /tools/hadoop/workspace/mapred/local

mkdir /tools/hadoop/workspace/mapred/system

java 程序使用的文件夹:

mkdir /tools/hadoop/workspace/java

 

3.3、修改配置文件

3.3.1、hadoop-env.sh

cd /tools/hadoop/hadoop-0.20.2/conf

vi hadoop-env.sh

最后一行加入:export JAVA_HOME=/tools/jdk1.7.0_05

# 红字部分替换为你的jdk安装路径。

3.3.2、core-site.xml

 

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

   <property>

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

      <value>hdfs://ubuntu00:9000</value>

      <description>NameNode 的主机名:端口号。</description>

   </property>

   <property>

      <name>hadoop.tmp.dir</name>

      <value>/tools/hadoop/workspace/temp</value>

   </property>

   <property>

      <name>dfs.name.dir</name>

      <value>/tools/hadoop/workspace/dfs/name</value>

   </property>

   <property>

      <name>dfs.data.dir</name>

      <value>/tools/hadoop/workspace/dfs/data</value>

   </property>

</configuration>

 

3.3.3、hdfs-site.xml

 

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

   <property>

      <name>dfs.replication</name>

      <value>2</value>

   </property>

   <property>

      <name>dfs.http.address</name>

      <value>ubuntu00:50070</value>

   </property>

</configuration>

 

3.3.4、mapred-site.xml

 

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

   <property>

      <name>mapred.job.tracker</name>

      <value>ubuntu00:9001</value>

   </property>

   <property>

      <name>mapred.job.tracker.http.address</name>

      <value>ubuntu00:50030</value>

   </property>

   <property>

      <name>mapred.local.dir</name>

      <value>/tools/hadoop/workspace/mapred/local</value>

   </property>

   <property>

      <name>mapred.system.dir</name>

      <value>/tools/hadoop/workspace/mapred/system</value>

   </property>

</configuration>

 

3.4、运行及测试页面

start-all.sh:启动所有的Hadoop 守护进程,包括NameNode、DataNode、SecondaryNameNode、JobTracker和Tasktrack。

start-dfs.sh:启动Hadoop DFS守护进程,包括NameNode、DataNode和SecondaryNameNode。

start-mapred.sh:启动Hadoop Map/Reduce守护进程,包括JobTracker和Tasktrack。

 

Hadoop 开启后,先查看安全模式的状态:

hadoop dfsadmin -safemode get

如果是开启状态则执行下面命令关闭:

hadoop dfsadmin -safemode leave

或等待自动关闭也可以。

 

打开 Hadoop http 页面,查看 Hadoop 运行状态。

http://IP 地址:端口,在 hdfs-site.xml 配置文件中dfs.http.address 的值,如果直接用主机名,请确保你的访问机能 ping 通 dfs 主机名(ubuntu00 等)。

如:http://192.168.1.130:50070

 

http://IP 地址:端口,在 mapred-site.xml 配置文件中 mapred.job.tracker.http.address 的值。

如:http://192.168.1.130:50030

 

可能一开始打开会很慢,或者 Nodes、Live Nodes 显示为 0 ,稍等一会(10分钟之内),如果还是为 0,则查看对应的日志,在 ${HADOOP_HOME}/logs 下。

 

四、     Hadoop-HDFS 测试

本节介绍使用 Java 代码测试 Hadoop HDFS 。

4.1 创建测试用的 Hadoop 目录

hadoop dfs -mkdir /test

hadoop dfs -mkdir /input

4.2 创建两个(或多个)任意内容的文件

vi /tools/hadoop/workspace/1.txt

vi /tools/hadoop/workspace/2.txt

4.3 拷贝文件到 Hadoop 中:

hadoop dfs -copyFromLocal /tools/hadoop/workspace/1.txt /input/

hadoop dfs -copyFromLocal /tools/hadoop/workspace/2.txt /test/

4.4 查看在 Hadoop 中的这两个文件:

hadoop dfs -cat /input/1.txt

hadoop dfs -cat /test/2.txt

4.5 编写 Java 类

我这里类名叫 "DirStatus" ,文件名叫 " DirStatus.java"。

vi DirStatus.java

文件内容如下:

import java.util.*;

import java.net.URI;

import org.apache.hadoop.fs.FSDataInputStream;

import org.apache.hadoop.fs.FileStatus;

import org.apache.hadoop.fs.FileUtil;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.conf.Configuration;

 

public class DirStatus {

   public static void main (String[] args) throws Exception {

      String uri = args[0];

      Configuration conf = new Configuration();

      FileSystem fs = FileSystem.get(URI.create(uri), conf);

      Path[] paths = new Path[args.length];

      for (int i = 0, length = paths.length; i < length; i++) {

        paths[i] = new Path(args[i]);

        System.out.println("Directory argument[" + i + "]='" + args[i] + "'");

      }

      FileStatus[] status = fs.listStatus(paths);

      Path[] listedPaths = FileUtil.stat2Paths(status);

      for (Path p : listedPaths) {

        System.out.println(p);

      }

   }

}

 

4.6 编译 Java 类

javac -classpath ${HADOOP_HOME}/hadoop-0.20.2-core.jar:${HADOOP_HOME}/lib/commons-logging-1.0.4.jar DirStatus.java

4.7 执行 Java 程序

java -classpath ${HADOOP_HOME}/hadoop-0.20.2-core.jar:${HADOOP_HOME}/lib/commons-logging-1.0.4.jar: DirStatus "hdfs://ubuntu00:9000/input" "hdfs://ubuntu00:9000/test" "hdfs://ubuntu00:9000/"

注:-classpath 命令选项值最后的:不能省略,否则报 "Error: Could not find or load main class DirStatus" 异常。

执行结果如下:

 

五、     Hadoop-MapReduce 测试

本节介绍使用 hadoop 自带的例子 hadoop-0.20.2-examples.jar 测试MapReduce 。

5.1 创建 hadoop 输入目录

hadoop dfs -mkdir /input

5.2 创建计算时需要的文件

1) 编辑 file1.txt

vi file1.txt

文件内容如下:

hello world

hello hadoop

 

2) 编辑 file2.txt

vi file2.txt

文件内容如下:

hello mapreduce

hadoop world

hadoop is running

The world is ours

 

5.3 上传文件到 Hadoop 输入目录

hadoop dfs -put file1.txt file2.txt /input

5.4 执行 jar

hadoop jar ${HADOOP_HOME}/hadoop-0.20.2-examples.jar wordcount /input /output

注:输出目录 "/output" 必须不存在,否则会报错。

显示以下内容即为成功:

 

在 http://192.168.1.130:50030 中的 " Running Jobs" 下显示正在执行的任务。

如果执行成功,在 http://192.168.1.130:50030 中的 "Completed Jobs" 下显示已执行的任务表格,点击 "Jobid" 列中的值可以查看任务的详细信息。

"http://192.168.1.130:50030" 需要根据你的配置更改。

5.5 查看结果

hadoop dfs -cat /output/part-r-00000

或先查看 "/output" 目录下存在哪些文件

hadoop dfs -ls /output

注:"/output" 是 5.4 中输入的最后一个参数:输出目录。

结果内容如下:

 

六、     Java 的操作

6.1 编译 Java 文件

javac -classpath ${HADOOP_HOME}/hadoop-0.20.2-core.jar:${HADOOP_HOME}/lib/commons-cli-1.2.jar -d wordcount WordCount.java

其中:"-classpath" 命令选项后面的值是你的类所需要的包;"-d" 命令选项后面的值是编译后的文件存放路径,路径必须存在。

6.2 归档成 jar 文件

jar -cvf wordcount.jar -C wordcount/ .

注:"/ ." 不能删改!

6.3 Hadoop 执行 jar 归档文件

hadoop jar ${HADOOP_HOME}/hadoop-0.20.2-examples.jar wordcount /input /output

其中:"${HADOOP_HOME}/hadoop-0.20.2-examples.jar "为要执行的 jar 归档文件;"worcount" 为要执行的主函数所在类的类名;"/input" 、"/output" 为类的参数,分别代表输入路径及输出路径。

posted @ 2013-03-09 10:30  94julia  阅读(1182)  评论(0编辑  收藏  举报