1 安装环境
1.1 软件资源
软件名称 | 用途 | 说明 |
hadoop-1.0.3 | 包含HDFS及MapReduce | 解压安装即可 |
hbase-0.94.0 | Hbase安装介质 | 解压安装即可 |
zookeeper-3.3.5 | Zookeeper安装介质 | 解压安装即可 |
1.2 硬件资源
服务器类型 | 操作系统 | 基础资源配置 | 说明 |
虚拟机服务器 | Redhat5.6 64bit | Cpu :1颗4核 | 共4台 |
内存:2G | |||
本地磁盘:20G |
1.3 部署规划
主机名 | 数量 | 用途 | 说明 |
namnode | 共1台 | NameNode/Secondary NameNode/Jobtracker | |
datanode1 | 共3台 | Datanode/TacktTacker | |
datanode2 | |||
datanode3 |
2 修改主机名
在各台虚拟机中修改主机名,将HOSTNAME改成你想修改的名称。如将namenode节点的主机名改为namenode,如下所示:
[root@namenode]# vi /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=namenode
3 修改host文件
编辑hosts文件,使各虚拟机角色映射至对应的IP地址。
[root@namenode]# vi /etc/hosts
127.0.0.1 localhost
10.2.0.248 namenode
10.2.0.249 datanode1
10.2.0.253 datanode2
4 配置NTP
Network TimeProtocol(NTP)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正,且可以由加密确认的方式来防止恶毒的协议攻击。
本环境以namenode作为NTP服务器,其余虚拟机作为NTP客户端,保证所有操作系统时间全部一致。
4.1 配置NTP服务器端
1. 修改配置文件,将对应行改为以下红色字体。
[root@namenode]#vi /etc/ntp.conf
restrict default nomodify
2. 启动ntpd服务。
[root@namenode]# service ntpd start
3. 设置ntpd随机启动。
[root@namenode]# chkconfig ntpd on
4.2 配置NTP客户端
在除namenode除外的机器上用root用户配置定时服务,设置NTP客户端每一分钟同步一次时间。添加以下红色字体,保存。
[root@namenode]# crontab -u root –e
0-59 * * * * /usr/sbin/ntpdate namenode
5 安装及配置Java运行环境
Hadoop运行环境依赖JAVA运行时,版本须为JDK1.6.x,最好使用SUN的JDK。
1 安装JDK(在每台机器执行)
创建JDK软件安装目录。
[root@namenode]# mkdir -p /java
在公司内网下载JDK:
[root@namenode]#cd /java
[root@namenode]#wget http://lab.excellence.com.cn/download/develop/jdk-6u23-linux-x64.bin
授予可执行权限并安装
[root@namenode]# chmod +xjdk-1.6.0.23-linux-x64.bin
[root@namenode]# ./jdk-1.6.0.23-linux-x64.bin
2 设置Jdk环境变量(在每台机器执行)
编辑/etc/profile文件,设置JAVA_HOME,并添加进入CLASSPATH,在文件尾部添加以下字体。
[root@namenode]#vi /etc/profile
JAVA_HOME=/java/jdk1.6.0_23
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin
CLASSPATH=.:/java/jdk1.6.0_23/lib:/java/jdk1.6.0_23/jre/lib:$CLASSPATH
export JAVA_HOME CLASSPATH PATH
6 为Hadoop集群安装SSH
6.1 定义一个公共账号
对于Hadoop,所有节点上的账号应该有相同的用户名(本文档我们使用hadoop),对于安全的考虑,我们把这个用户设置为用户级别。它仅用于管理Hadoop集群。
[root@namenode]# useradd hadoop
设置用户密码,密码设置为hadoop。
[root@namenode]#passwd hadoop
6.2 生成SSH密钥对
使用namenode主节点上的ssh-keygen来生成RSA密钥对。
[root@namenode]# su – hadoop
[hadoop@namenode]$ mkdir .ssh
[hadoop@namenode]$chmod 700 .ssh
[hadoop@namenode]$ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key(/home/hadoop/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in/home/hadoop/.ssh/id_rsa.
Your public key has been saved in/home/hadoop/.ssh/id_rsa.pub.
The key fingerprint is:
39:6a:29:d1:f5:64:49:44:7f:85:a3:bb:f1:6c:cb:dfhadoop@namenode
6.3 将公钥分布并登录验证
尽管有些麻烦,但是还是需要逐一将公钥复制到给个从节点上。
[hadoop@namenode]$cd .ssh
[hadoop@namenode]$ssh namenode cat/home/hadoop/.ssh/id_rsa.pub >> authorized_keys
[hadoop@namenode]$ssh datanode1 cat/home/hadoop/.ssh/id_rsa.pub >> authorized_keys
[hadoop@namenode]$ssh datanode2 cat/home/hadoop/.ssh/id_rsa.pub >> authorized_keys
[hadoop@namenode]$ssh datanode3 cat/home/hadoop/.ssh/id_rsa.pub >> authorized_keys
将authorized_keys拷贝到各个节点操作系统的对应目录,如
[hadoop@namenode]$scp authorized_keysdatanode1:/home/hadoop/.ssh/
[hadoop@namenode]$scp authorized_keys datanode2:/home/hadoop/.ssh/
[hadoop@namenode]$ scp authorized_keys datanode3:/home/hadoop/.ssh/
在各台机器使用ssh远程登录namenode一次,如
[hadoop@namenode]$ ssh namenode date
如果无法远程登录成功,则必须检查以上步骤是否正确。要不然接下来的配置就无法进行了。
此文档中的配置为搭建本文描述Hadoop集群环境的最小配置,并没涉及相关性能参数设置,更多配置请进一步深入学习Hadoop。另外,可安装dsh等分布式shell工具方便配置。
7 运行Hadoop
7.1 解压安装Hadoop
[root@namenode]#su- hadoop
[hadoop@namenode]$wgethttp://lab.excellence.com.cn/download/develop/ hadoop-1.0.3.tar.gz
[hadoop@namenode]$tar -zxvfhadoop-1.0.3.tar.gz
7.2 修改hadoop-env.sh文件
为方便命令行操作,可将Hadoop home目录加入PATH等系统环境变量,操作如下:
[root@namenode]# vi /etc/profile
JAVA_HOME=/java/jdk1.6.0_23
HADOOP_HOME=/home/hadoop/hadoop-1.0.3
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HADOOP_HOME/bin:$PATH
CLASSPATH=.:/java/jdk1.6.0_23/lib:/java/jdk1.6.0_23/jre/lib:$CLASSPATH
exportJAVA_HOME HADOOP_HOME CLASSPATH PATH
在运行Hadoop之前需要做一些配置。指定包括主节点在内的所有节点上Java的位置,即在hadoop-env.sh中定义JAVA_HOME环境变量使之指向Java安装目录。
[hadoop@namenode]$vi /home/hadoop/hadoop-1.0.3/conf/hadoop-env.sh
exportJAVA_HOME=/java/jdk1.6.0_23
注:根据实际情况添加jdk的JAVA_HOME目录并保存。
指定同步目录。每次启动Hadoop进程时,自动将在namenode节点上指定的目录中的内容更新到各个节点上。这会影响集群的性能。
export HADOOP_MASTER=namenode:/home/hadoop/hadoop-1.0.3
8 全分布模式部署
Hadoop需要修改的配置文件所在目录路径为/home/hadoop/hadoop-1.0.3/conf,修改的文件包括hadoop-env.sh、core-site.xml、mapred-site.xml、hdfs-site.xml、masters及slaves。
8.1 编辑core-site.xml
[hadoop@namenode]$ vi /home/hadoop/hadoop-1.0.3/conf/core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://namenode:9000/</value>
<description>the name of the default file system. A URL whosescheme and authority determine theFilesystem implementation
</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/data/hdfs/hdfstmp</value>
<description>
Abase for other temporary directories.
</description>
</property>
</configuration>
参数名称 | 值 | 说明 |
fs.default.name | hdfs://namenode:9000/ | 该属性描述namenode的RPC服务器地址和端号 |
hadoop.tmp.dir | /data/hdfs/hdfstmp | Hdfs的临时工作目录。若目录不存在,先创建目录,并使用hadoop用户对目录有读写权限 |
8.2 编辑mapred-site.xml
[hadoop@namenode]$vi /home/hadoop/hadoop-1.0.3/conf/mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>jobtracker:9001</value>
<description>
the host and port that theMapReduce job tracker runsat.
</description>
</property>
</configuration>
参数名称 | 值 | 说明 |
mapred.job.tracker | jobtracker:9001 | 指定jobtracker的RPC服务器的地址及端口号,格式如:hostname:port |
8.3 编辑hdfs-site.xml
[hadoop@namenode]$vi /home/hadoop/hadoop-1.0.3/conf/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
<description>
the actual number of replication can be specifiedwhen the file iscreated.
</description>
</property>
<property>
<name>dfs.name.dir</name>
<value>/data/hdfs/hdfs</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/data/hdfs/hdfsdata</value>
</property>
<property>
<name>dfs.http.address</name>
<value>namenode:50070</value>
<description>
The address and the base port where the dfsnamenode web ui will listen on.If the port is 0 then the server will start on afree port.
</description>
</property>
<property>
<name>dfs.secondary.http.address</name>
<value> secNamenode:50090</value>
<description>
The secondary namenode http server addressand port.If the port is 0 then the server will starton a free port.
</description>
</property>
</configuration>
参数名称 | 值 | 说明 |
dfs.replication | 3 | 分布式文件系统中数据块的冗余因子,默认为3 |
dfs.name.dir | /data/hdfs/hdfs | Namenode节点中本地文件系统中存放命名空间及事务日志的路径。若目录不存在,先创建目录,并使用hadoop用户对目录有读写权限。可设置多个存放位置,逗号分隔,实现冗余 |
dfs.data.dir | /data/hdfs/hdfsdata | Datanode节点中本地文件系统存放数据块的位置若目录不存在,先创建目录,并使用hadoop用户对目录有读写权限。可设置多个存放位置,逗号分隔,挺高并行I/O |
dfs.http.address | namenode:50070 | Namenode主节点的http服务IP及端口,在此处配置主要用于显式指定固定的http服务端口,以便secondary namenode 与namenode通讯实现fsimage备份及edits与fsimage的合并更新。独部署secondar namenode时需配置此项 |
dfs.secondary.http.address | secNamenode:50090 | Secondary NameNode节点的http服务IP及端口,在此处配置主要用于显式指定固定的http服务端口,以便与namenode通讯实现fsimage备份及edits与fsimage的合并更新。单部署secondar namenode时需配置此项 |
8.4 编辑masters
[hadoop@namenode]$vi /home/hadoop/hadoop-1.0.3/conf/masters
namenode
值 | 说明 |
namenode | 填写的Secondary NameNode节点的名称(在hosts文件里必须有对应的映射记录)或者IP,当需要将secondary namenode单独部署的时候需将其对应节点名称在hosts文件里必须有对应的映射记录)或IP添加至此文件 |
8.5 编辑slaves
[hadoop@namenode]$vi /home/hadoop/hadoop-1.0.3/conf/slaves
datanode1
datanode2
datanode3
值 | 说明 |
datanode1 datanode2 datanode3 | Datanode及tasktracker的运行节点名称在hosts文件里必须有对应的映射记录)或ip |
8.6 拷贝配置文件至datanode节点
在修改所有相应配置文件后,将/home/hadoop/hadoop-1.0.3整个解压目录拷配至datanode节点相应目录,执行如下命令:
8.7 启动DFS
在将/home/hadoop/hadoop-1.0.3整个解压目录拷配至datanode节点相应目录之后,一定要格式化HDFS以准备好存储数据:
[hadoop@namenode]$ hadoop namenode –format
现在可愿意启动Hadoop的守护进程:
[hadoop@namenode]$bin/start-dfs.sh
查看NameNode进程是否已存在:
[hadoop@namenode]$ps -ef|grep hadoop|grep NameNode
由于所有进程都是JAVA进程,故也可运行:
[hadoop@namenodehadoop-1.0.3]$ jps
4826 Jps
4510 NameNode
4769SecondaryNameNode
验证访问,在浏览器输入URL:http:// 10.2.0.248:50070/
8.8 启动mapred
在jobtracker上启动jobtracker及tasker。
[hadoop@namenode]$start-mapred.sh
查看JobTracker进程是否已存在,在jobtracker节点执行,有返回则进程已启动。
[hadoop@namenode]$jps
5100 NameNode
5388SecondaryNameNode
5569 JobTracker
5715 Jps
检查TaskTracker进程是否已存在,在个datanode节点上执行:
[hadoop@datanode1]$ jps
4504 DataNode
4812 Jps
4709 TaskTracker
验证访问,在浏览器输入URL:http:// 10.2.0.248:50030
停止HDFS相关后台进程,停止前须保证集群中HBase及Zookeeper等后台进程已停止。
停止JobTracker及所有TaskTracker,在jobtracker上执行:
[hadoop@namenode]$$stop-mapred.sh
停止NameNode及所有DataNode,在namenode上执行:
[hadoop@namenode]$$stop-dfs.sh