《 并 行 程 序 设 计 》
大 作 业
Hadoop 集群的安装与配置
计算机与信息工程学院
网络工程
题
院
专
作
目:
部:
业:
者:
指导教师:
2013 年 6 月 18 日
1
目录
1 Hadoop 概述.................................................................................................................................... 3
2 安装前准备.....................................................................................................................................3
3 安装步骤.........................................................................................................................................3
3.1 安装 Ubuntu12.04-server........................................................................................................ 3
3.2 安装 Hadoop............................................................................................................................3
3.2.1 添加节点 ip 和主机名 ..............................................................................................4
3.2.2 创建用户 .................................................................................................................. 4
3.2.3 在所有节点上安装 JDK ..........................................................................................4
3.2.4 安装 Hadoop 集群 ................................................................................................... 5
3.2.5 配置 Hadoop 集群 ................................................................................................... 6
3.2.6 启动及验证.............................................................................................................. 7
3.2.7 通过网页查看集群 ................................................................................................10
4 常见问题 FAQ..............................................................................................................................11
4.1 关于 Warning: $HADOOP_HOME is deprecated............................................................... 11
4.1.1 切换至 root 用户 .....................................................................................................11
4.1.2 添加内容................................................................................................................. 12
4.1.3 重新生效................................................................................................................. 12
4.2 解决"no datanode to stop"问题............................................................................................. 12
4.2.1 第一种解决方案.....................................................................................................12
4.2.2 第二种解决方案.....................................................................................................13
4.3 Slave 服务器中 datanode 启动后又自动关闭.......................................................................13
4.4 从本地往 hdfs 文件系统上传文件.......................................................................................14
4.5 安全模式导致的错误........................................................................................................... 14
4.6 解决 Exceeded MAX_FAILED_UNIQUE_FETCHES........................................................14
4.7 解决"Too many fetch-failures"..............................................................................................15
4.8 处理速度特别的慢............................................................................................................... 15
4.9 解决 hadoop OutOfMemoryError 问题................................................................................. 16
4.10 Namenode in safe mode........................................................................................................16
4.11 IO 写操作出现问题............................................................................................................. 16
4.12 status of 255 error................................................................................................................. 16
5 结束语...........................................................................................................................................17
2
1 Hadoop 概述
Hadoop 一个分布式系统基础架构,由 Apache 基金会开发。用户可以在不了解分布式底
层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop 实现了
一个分布式文件系统(Hadoop Distributed File System),简称 HDFS。HDFS 有着高容错性的
特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高传输率(high throughput)
来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS 放
宽了(relax)POSIX 的要求(requirements)这样可以流的形式访问(streaming access)文
件系统中的数据。
2 安装前准备
软件:Ubuntu12.04-server 光盘(镜像)、Hadoop1.0.4
3 安装步骤
3.1 安装 Ubuntu12.04-server
集群中包括 3 个节点:1 个 Master,2 个 Salve,节点之间局域网连接,可以相互 ping
通,节点 IP 地址分布及主机名如下:
机器名称
master
salve1
salve2
3.2 安装 Hadoop
IP 地址
210.45.165.131
210.45.165.133
210.45.165.134
集群中的一台主机被指定为 NameNode,另一台主机被指定为 JobTracker,NameNode
和 JobTracker 被称作 master,其它机器同时被用做 DataNode 和 TaskTracker,它们被称作
slave。
Hadoop 安 装 文 件 的 根 目 录 被 称 作 : HADOOP_HOME , 集 群 中 的 所 有 机 器 的
HADOOP_HOME 目录相同。
Hadoop 包含两类配置文件:
i. 只 读 的 默 认 配 置 文 件 : src/core/core-default.xml, src/hdfs/hdfs-default.xml and
src/mapred/mapred-default.xml.
ii.节点配置文件:conf/core-site.xml, conf/hdfs-site.xml and conf/mapred-site.xml.
3
3.2.1 添加节点 ip 和主机名
修改所有节点的/etc/hosts 文件,在/etc/hosts 文件中添加所有节点的 ip 及其的 hostname。
i. hadoop@master:~$ sudo vim /etc/hosts
xx.xx.xx.xx master
ii. 增加:
xx.xx.xx.xx
slave1
slave2
xx.xx.xx.xx
iii. 修改完成后,ping slave1,查看是否能 ping 通。
备注:当设置 SSH 无密码验证后,可以"scp"进行复制,然后把原来的"hosts"文件执行覆盖
即可。)
3.2.2 创建用户
创建统一用户 hadoop 并且实现 ssh 认证登录(master 可以无密码登录 slave)
i. hadoop@master:~$sudo apt-get install ssh
ii. hadoop@master:~$sudo /etc/init.d/ssh start
iii. hadoop@master:~$cd ~/.ssh
iv. hadoop@master ssh:~$ssh-keygen -t rsa
v. hadoop@master ssh:~$cat id_rsa.pub >> authorized_keys
vi. hadoop@master:~/.ssh$ ssh-copy-id -i id_rsa.pub slave1
hadoop@master:~/.ssh$ ssh-copy-id -i id_rsa.pub slave2
v. hadoop@master:~/.ssh$ ssh slave1
测试是否能够无密码连接。
注:SSH 无密码原理
Master(NameNode | JobTracker)作为客户端,要实现无密码公钥认证,连接到服务器
Salve(DataNode | Tasktracker)上时,需要在 Master 上生成一个密钥对,包括一个公钥和一
个私钥,而后将公钥复制到所有的 Slave 上。当 Master 通过 SSH 连接 Salve 时,Salve 就会
生成一个随机数并用 Master 的公钥对随机数进行加密,并发送给 Master。Master 收到加密
数之后再用私钥解密,并将解密数回传给 Slave,Slave 确认解密数无误之后就允许 Master
进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户
端 Master 复制到 Slave 上。
3.2.3 在所有节点上安装 JDK
从官网下载 Linux 下 64 位 jdk 1.6,jdk-6u43-linux-x64.bin。
注:可在 Windows 上下载,通过 SSH Secure File Transfer 将文件上传至 Linux。或者在 Linux
使用 wget 下载。使用如下命令:
@slave2:~$ wget http://download.oracle.com/otn-pub/java/jdk/6u43-b01/jdk-6u43-linux-x64.bin
4
在 Master 节点上下载 JDK 后,可使用 scp 命令拷贝至 slave 主机。如下所示:
hadoop@slave1:~$ scp jdk-6u43-linux-x64.bin hadoop@210.45.165.134:/home/hadoop
修改 jdk 安装文件为可执行,然后拷贝至/usr/local/java 文件夹下安装。
$chmod 777 jdk-6u43-linux-x64.bin
$ cd /usr/local/
$ sudo mkdir java
$ cd java
$ sudo cp ~/jdk-6u43-linux-x64.bin ./
$ sudo ./jdk-6u43-linux-x64.bin
安装完成后可在/usr/local/java 目录下看到文件夹 jdk.1.6.0_43。
配置环境变量。
修改/etc/profile 文件。
sudo vi /etc/profile
在文件结束添加如下内容:
#set java environment
export JAVA_HOME=/usr/local/java/jdk1.6.0_43
export JRE_HOME=/usr/local/java/jdk1.6.0_43/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
使用 source /etc/profile 命令使设置生效。
输入 java –version,测试是否设置成功。
3.2.4 安装 Hadoop 集群
下载 hadoop1.0.4.tar.gz 安装包,使用 SSH Secure File Transfer Client 上传至各个节点。
将安装文件拷贝至/usr/local 文件夹,解压并重命名为 hadoop。
$ cd /usr/local
$ sudo cp ~/hadoop-1.0.4.tar.gz ./
$ sudo tar -zxvf hadoop-1.0.4.tar.gz
$ sudo mv hadoop-1.0.4 hadoop
$ sudo chown –R hadoop:root hadoop //将 hadoop 文件夹读权限分配给 hadoop 用户。
在/usr/local/hadoop 下创建 tmp 文件夹。
hadoop@master:/usr/local/hadoop$ mkdir tmp
把 Hadoop 安装路径添加到/etc/profile 文件中。增加如下代码。
#set hadoop path
5
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
使用 source 命令使用其生效。
hadoop@master:/usr/local/hadoop$ source /etc/profile
3.2.5 配置 Hadoop 集群
①配置 master 节点
Hadoop 配置文件在 conf 目录下,之前的版本的配置文件主要是 Hadoop-default.xml 和
Hadoop-site.xml。由于 Hadoop 发展迅速,代码量急剧增加,代码开发分为了 core,hdfs 和
map/reduce 三部分,配置文件也被分成了三个 core-site.xml、hdfs-site.xml、mapred-site.xml。
core-site.xml 和 hdfs-site.xml 是站在 HDFS 角度上配置文件;core-site.xml 和 mapred-site.xml
是站在 MapReduce 角度上配置文件。
i. 配置 core-site.xml 文件
修改 Hadoop 核心配置文件 core-site.xml,这里配置的是 HDFS 的地址和端口号。
hadoop.tmp.dir
/usr/local/hadoop/tmp
fs.default.name
hdfs://210.45.165.131:9000
ii.配置 hdfs-site.xml 文件
修改 Hadoop 中 HDFS 的配置,配置的备份方式默认为 3(Slave 少于 3 台时会报错)。
dfs.replication
1
iii.配置 mapred-site.xml 文件
修改 Hadoop 中 MapReduce 的配置文件,配置的是 JobTracker 的地址和端口。
6
mapred.job.tracker
http://210.45.165.131:9001
iv. 配置 masters 文件
将 conf/masters 文件中的 localhost 修改成 210.45.165.131。
v. 配置 slaves 文件
将 conf/slaves 文件中的 localhost 修改成所有 slave 的 ip,文件内容如下:
210.45.165.133
210.45.165.134
vi. 修改 conf/hadoop-env.sh
在该文件中加入 JAVA_HOME 环境变量。
② 配置 slave 节点
将 master 节点的 conf 目录拷贝至 slave 节点。
hadoop@master:/usr/local/hadoop$ sudo scp -r conf root@210.45.165.133:/usr/local/hadoop
hadoop@master:/usr/local/hadoop$ sudo scp -r conf root@210.45.165.134:/usr/local/hadoop
注:使用 root 用户拷贝,需先设置 root 用户密码,使用 sudo password 设置 root 用户密码。
3.2.6 启动及验证
i. 格式化 HDFS 文件系统
在"Master "上使用普通用户 hadoop 进行操作。(备注:只需一次,下次启动不再需要格
式化,只需 start-all.sh)
hadoop@master:/usr/local/hadoop$ hadoop namenode -format
Warning: $HADOOP_HOME is deprecated.
13/04/16 12:01:54 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:
STARTUP_MSG:
STARTUP_MSG:
STARTUP_MSG:
=
https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.0 -r 1393290; compiled by
'hortonfo' on Wed Oct
host = master /210.45.165.131
args = [-format]
version = 1.0.4
3 05:13:58 UTC 2012
build
7
= 64-bit
12:01:55
INFO
************************************************************/
13/04/16 12:01:54 INFO util.GSet: VM type
13/04/16 12:01:54 INFO util.GSet: 2% max memory = 17.77875 MB
13/04/16 12:01:54 INFO util.GSet: capacity
= 2^21 = 2097152 entries
13/04/16 12:01:54 INFO util.GSet: recommended=2097152, actual=2097152
13/04/16 12:01:55 INFO namenode.FSNamesystem: fsOwner=hadoop
13/04/16 12:01:55 INFO namenode.FSNamesystem: supergroup=supergroup
13/04/16 12:01:55 INFO namenode.FSNamesystem: isPermissionEnabled=true
13/04/16 12:01:55 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100
13/04/16
accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)
13/04/16 12:01:55 INFO namenode.NameNode: Caching file names occuring more than 10 times
13/04/16 12:01:55 INFO common.Storage: Image file of size 112 saved in 0 seconds.
13/04/16 12:01:55 INFO common.Storage: Storage directory /usr/local/hadoop/tmp/dfs/name has
been successfully formatted.
13/04/16 12:01:55 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at master /210.45.165.131
************************************************************/
isAccessTokenEnabled=false
namenode.FSNamesystem:
ii. 启动 hadoop
在所有节点上使用以下命令设置 iptables
$sudo iptables -P INPUT ACCEPT
$sudo iptables -P OUTPUT ACCEPT
使用下面命令启动。
start-all.sh
启动 hadoop 成功后,在 Master 中的 tmp 文件夹中生成了 dfs 文件夹,在 Slave 中
的 tmp 文件夹中均生成了 dfs 文件夹和 mapred 文件夹。
iii. 验证 hadoop
方法一:使用 jps 命令查看进程。
Master:
hadoop@master:/usr/local/hadoop$ jps /all
7891 Jps
7397 SecondaryNameNode
7053 NameNode
8