这是利用Vmware9.0在一台服务器上搭建的分布式环境,操作系统CentOS 6.4 X64中配置Hadoop-1.0.4时的总结文档。 Hadoop配置建议所有配置文件中使用主机名进行配置,并且机器上应在防火墙中开启相应端口,并设置SSHD服务为开机启动,此外java环境变量可以在/etc/profile中配置。
0 安装程序|
软件 |
版本 |
地址 |
|
VMware-workstation-full-9.0.0-812388 |
9.0.0-812388 |
|
|
Centos |
6.4 X64 |
http://mirrors.163.com/centos/6.4/isos/x86_64/CentOS-6.4-x86_64-bin-DVD1.iso |
|
jdk |
jdk-6u45-linux-x64 |
http://www.oracle.com/technetwork/java/javase/downloads/jdk6downloads-1902814.html |
|
hadoop |
1.0.4 |
http://apache.fayea.com/apache-mirror/hadoop/common/stable/hadoop-1.0.4.tar.gz
|
|
主机名 |
IP |
备注 |
|
|
NFSServer |
10.88.106.219 |
独立服务器,提供NFS服务 |
|
|
DNSServer |
10.88.106.220 |
独立服务器,提供DNS服务 |
|
|
NameNode |
10.88.106.221 |
NameNode |
|
|
DataNode1 |
10.88.106.222 |
DataNode |
|
|
DataNode2 |
10.88.106.223 |
DataNode |
|
|
DataNode3 |
10.88.106.224 |
DataNode |
|
|
DataNode4 |
10.88.106.225 |
DataNode |
集群包含七个节点:1个NFSServer,1个DNSServer,1个namenode,4个datanode,节点之间局域网连接,可以相互ping通。
1.2 快速部署节点所有节点均是Centos 6.4 64位系统,防火墙均禁用,sshd服务均开启并设置为开机启动。
a) 首先在VMware中安装好一台Centos 6.4,创建hadoop用户。假设虚拟机的名字为NameNode
b) 关闭虚拟机,把NameNode文件夹,拷贝6份,并命名为DataNode1,..,DataNode4,NFSServer,DNSServer
c) 用VMware打开每个DateNode,设置其虚拟机的名字
d) 打开操作系统,当弹出对话框时,选择“I copy it”
e) 打开每个虚拟机,查看ip地址
ifconfig
f) 每个虚拟机,永久关闭防火墙(非常重要,一定要确认),并关闭SELINUX
chkconfig iptables off (永久生效)
service iptables stop (临时有效)
vim /etc/selinux/config
[root@DataNode1 local]# chkconfigiptables off
[root@DataNode1 local]# serviceiptables stop
iptables: Flushing firewall rules: [ OK ]
iptables: Setting chains to policyACCEPT: filter [ OK ]
iptables: Unloading modules: [ OK ]
[root@DataNode1 local]#
g) 配置NameNode
第一步,检查机器名
#hostname
如发现不对,则修改,root用户登陆,修改命令如下
# vim /etc/sysconfig/network
|
依次对每个节点进行处理,修改完之后,重启系统 #reboot
h) 规划系统目录
安装目录和数据目录分开,且数据目录和hadoop的用户目录分开,如果需要重新格式化,则可以直接删除所有的数据目录,然后重建数据目录。
如果数据目录和安装目录或者用户目录放置在一起,则对数据目录操作时,存在误删除程序或者用户文件的风险。
|
完整路径 |
说明 |
|
/usr/local |
hadoop的程序安装主目录 |
|
/home/hadoop_space/tmp |
临时目录 |
|
/home/hadoop_space/hdfs/name |
namenode上存储hdfs名字空间元数据 |
|
/home/hadoop_space/hdfs/data |
datanode上数据块的物理存储位置 |
|
/home/hadoop_space/mapred/local |
tasktracker上执行mapreduce程序时的本地目录 |
|
/home/hadoop_space/mapred/system |
这个是hdfs中的目录,存储执行mr程序时的共享文件 |
至于这里为什么在/usr/local下建立安装目录,解释如下
/usr 文件系统
/usr文件系统经常很大,因为所有程序安装在这里. /usr 里的所有文件一般来自Linux distribution;本地安装的程序和其他东西在/usr/local 下.这样可能在升级新版系统或新distribution时无须重新安装全部程序.
/usr/local 本地安装的软件和其他文件放在这里.
小贴士:创建目录:mkdir(makedirectories)
功能说明:建立目录
语 法:mkdir [-p][--help][--version][-m <目录属性>][目录名称]
补充说明:mkdir可建立目录并同时设置目录的权限。
参 数:
-m<目录属性>或–mode<目录属性> 建立目录时同时设置目录的权限。
-p或–parents 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录。
例:mkdir test
开始建立目录:
在NameNode下,root用户
mkdir-p /home/hadoop_space/tmp
mkdir-p /home/hadoop_space/hdfs/name
mkdir-p /home/hadoop_space/hdfs/data
mkdir-p /home/hadoop_space/mapred/local
mkdir-p /home/hadoop_space/mapred/system
chown-R hadoop:hadoop /home/hadoop_space/
修改目录/home/hadoop的拥有者(因为该目录用于安装hadoop,用户对其必须有rwx权限。)
chown -R hadoop:hadoop /home/hadoop
chown -R hadoop:hadoop /home/hadoop_space
1.3 安装jdk1.3.1.下载JDK选定linux环境版本,下载到的文件是:jdk-6u45-linux-x64.bin
1.3.2.复制JDK安装包到系统指定文件夹把下载的安装文件(jdk-6u45-linux-x64.bin)拷到linux路径/usr/local/下。
1.3.3.给安装文件赋予权限a).进入目录,命令:cd /usr/local/java
b).赋予权限,命令:chmod +x jdk-6u45-linux-x64.bin
(如果因权限问题执行失败,则加上su, 即su chmod u+x jdk-6u45-linux-x64.bin)
1.3.4安装JDK开始安装,在控制台执行命令: ./ jdk-6u45-linux-x64.bin
(如果因权限问题执行失败,则加上su , 即sud./jdk-6u45-linux-x64.bin)
文件会被安装到当前目录 /usr/local/jdk1.6.0_45
删除安装文件rm jdk-6u45-linux-x64.bin
安装完成后,修改/usr/local/jdk1.6.0_45目录拥有着为hadoop用户,
chown-R hadoop:hadoop /usr/local/jdk1.6.0_45
1.3.5 Java环境变量配置root用户登陆,命令行中执行命令”vim /etc/profile”,并加入以下内容,配置环境变量(注意/etc/profile这个文件很重要,后面Hadoop的配置还会用到)。
#java
JAVA_HOME=/usr/local/jdk1.6.0_45
JRE_HOME=/usr/local/jdk1.6.0_45/jre
PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME CLASSPATH PATH
保存并退出,执行以下命令使配置生效
chmod +x /etc/profile
source /etc/profile
配置完毕,在命令行中使用命令“java -version”可以判断是否成功。在hadoop用户下测试java -version,一样成功。
[root@NameNodehadoop]# java -version
javaversion "1.6.0_45"
Java(TM)SE Runtime Environment (build 1.6.0_45-b06)
JavaHotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
2. 配置DNS解析主机名说明:在生产的hadoop集群环境中,由于服务器可能会有许多台,通过配置DNS映射机器名,相比配置/etc/host方法,可以避免在每个节点都配置各自的host文件,而且在新增节点时也不需要修改每个节点的/etc/host的主机名-IP映射文件。减少了配置步骤和时间,便于管理。
详细步骤见:【 hadoop大规模应用之CentOS6.4+DNS-BIND域名服务器配置基础详解】
http://blog.csdn.net/liema2000/article/details/9076333
3.建立hadoop运行账号在所有的节点创建hadoop运行账号
[root@gc ~]#groupadd hadoop
[root@gc ~]#useradd -g hadoop hadoop
说明:在大的hadoop集群安装环境中,这步可以在批量安装linux系统之前完成,然后再进行系统的复制。
4.通过NFS配置ssh免密码连入说明:通过NFS配置ssh免密码连入时,当我们有新的节点接入时,不再需要分别向其它节点各自添加自己公钥信息,只需要把公钥信息追加到共享的authorized_keys公钥当中,其它节点就直接指向最新的公钥文件。便于分配公钥和管理。
详细步骤见: 【hadoop大规模应用之NFS安装及SSH免密码验证配置】
http://blog.csdn.net/liema2000/article/details/9076357
--可先一某节点(如NameNode)解压配置文件
[root@NameNode hadoop]# pwd
/usr/local/hadoop
[root@NameNode hadoop]#
[root@NameNode hadoop]# tar -zxvf hadoop-1.0.4.tar.gz
(1)配置Hadoop的配置文件
(a)配置hadoop-env.sh
$ vim /usr/local/hadoop-1.0.4/conf/hadoop-env.sh
# set java environment
export JAVA_HOME=/usr/local/jdk1.6.0_45
export HADOOP_HOME_WARN_SUPPRESS=1
export HADOOP_CLASSPATH=/usr/local/hadoop-1.0.4:/usr/local/hadoop-1.0.4/lib
(b)配置/etc/profile
#hadoop
export HADOOP_HOME=/usr/hadoop-1.0.4
export HADOOP_HOME_WARN_SUPPRESS=1
PATH=$HADOOP_HOME/bin:$PATH
export PATH
修改完,重启/etc/profile
[root@NameNode ~]# source /etc/profile
(c)配置conf/hadoop-site.xml
Hadoop-0.20.2之后的版本请分别配置core-site.xml,hdfs-site.xml和mapred-site.xml三个配置文件。
|
配置文件名(xml) |
字段名 |
字段值 |
说明 |
|
core-site |
fs.default.name |
hdfs://NameNode:9000 |
|
|
hadoop.tmp.dir |
/home/hadoop_space/tmp |
临时目录 | |
|
hdfs-site |
dfs.name.dir |
/home/hadoop_space/hdfs/name |
namenode上存储hdfs名字空间元数据 |
|
dfs.data.dir |
/home/hadoop_space/hdfs/data |
datanode上数据块的物理存储位置 | |
|
dfs.replication |
3 |
副本个数,不配置默认是3,应小于datanode机器数量 | |
|
mapred-site |
mapred.job.tracker |
NameNode:9001 |
jobtracker标识:端口号,不是URI |
|
mapred.local.dir |
/home/hadoop_space/mapred/local |
tasktracker上执行mapreduce程序时的本地目录 | |
|
mapred.system.dir |
/home/hadoop_space/mapred/system |
这个是hdfs中的目录,存储执行mr程序时的共享文件 |
编辑core-site.xml
编辑hdfs-site.xml
<!-- Put site-specific propertyoverrides in this file. -->
编辑mapred-site.xml
<!-- Put site-specific propertyoverrides in this file. -->
(d)配置masters文件,把localhost修改为namenode的主机名
|
NameNode.hdcw.org |
(e)配置slaves文件, 删除localhost,加入所有datanode的主机名
|
DataNode1.hdcw.org DataNode2.hdcw.org DataNode3.hdcw.org DataNode4.hdcw.org |
Namenode节点上root执行执行
chown-R hadoop:hadoop /usr/local
chown-R hadoop:hadoop /home/hadoop_space/
--把NameNode主机上面hadoop配置好的文件分别copy到各节点
--原来copy的方法是一个个命令执行,如下
[hadoop@NameNodehadoop]$ scp -rp hadoop-1.0.4 hadoop@DataNode1:/usr/local/
[hadoop@NameNodehadoop]$ scp -rp hadoop-1.0.4 hadoop@DataNode2:/usr/local/
--但站在hadoop大集群的角度,上面方法会很费时,我们可用awk命令生成批量执行的脚本,批量执行,省时省力,如下:
[root@NameNode local]# cat$HADOOP_HOME/conf/slaves| awk '{print "scp -rp hadoop-1.0.4hadoop@"$1":/usr/local/"}' > scp.sh
[root@NameNode local]# cat scp.sh
scp -rp hadoop-1.0.4hadoop@DataNode1.hdcw.org:/usr/local/
scp -rp hadoop-1.0.4hadoop@DataNode2.hdcw.org:/usr/local/
scp -rp hadoop-1.0.4hadoop@DataNode3.hdcw.org:/usr/local/
scp -rp hadoop-1.0.4hadoop@DataNode4.hdcw.org:/usr/local/
切换到hadoop用户,执行复制
复制java
[root@NameNode local]# cat$HADOOP_HOME/conf/slaves| awk '{print "scp -rp /usr/local/jdk1.6.0_45hadoop@"$1":/usr/local/"}' > scp_java.sh
复制hadoop_space
[root@NameNode local]# cat$HADOOP_HOME/conf/slaves| awk '{print "scp -rp /home/hadoop_spacehadoop@"$1":/home/"}' > scp_hadoop.sh
#复制/etc/profile
[root@NameNodelocal]# cat $HADOOP_HOME/conf/slaves|awk '{print "scp -rp /etc/profile root@"$1":/etc/"}' >scp_profile.sh
root用户执行
8. 格式化namenode--在namenode节点进行格式化
[hadoop@NameNode local]$cd $HADOOP_HOME
[hadoop@NameNodehadoop-1.0.4]$ bin/hadoop namenode -format
13/06/11 20:28:16 INFOnamenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: StartingNameNode
STARTUP_MSG: host = java.net.UnknownHostException:NameNode: NameNode
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 1.0.4
STARTUP_MSG: build =https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.0 -r 1393290;compiled by 'hortonfo' on Wed Oct 305:13:58 UTC 2012
************************************************************/
Re-format filesystem in/home/hadoop_space/hdfs/name ? (Y or N) Y
13/06/11 20:28:18 INFOutil.GSet: VM type = 64-bit
13/06/11 20:28:18 INFOutil.GSet: 2% max memory = 19.33375 MB
13/06/11 20:28:18 INFOutil.GSet: capacity = 2^21 = 2097152entries
13/06/11 20:28:18 INFOutil.GSet: recommended=2097152, actual=2097152
13/06/11 20:28:19 INFOnamenode.FSNamesystem: fsOwner=hadoop
13/06/11 20:28:19 INFOnamenode.FSNamesystem: supergroup=supergroup
13/06/11 20:28:19 INFOnamenode.FSNamesystem: isPermissionEnabled=true
13/06/11 20:28:19 INFOnamenode.FSNamesystem: dfs.block.invalidate.limit=100
13/06/11 20:28:19 INFOnamenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0min(s), accessTokenLifetime=0 min(s)
13/06/11 20:28:19 INFOnamenode.NameNode: Caching file names occuring more than 10 times
13/06/11 20:28:29 INFOcommon.Storage: Image file of size 112 saved in 0 seconds.
13/06/11 20:28:29 INFOcommon.Storage: Storage directory /home/hadoop_space/hdfs/name has beensuccessfully formatted.
13/06/11 20:28:29 INFOnamenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shuttingdown NameNode at java.net.UnknownHostException: NameNode: NameNode
************************************************************/
[hadoop@NameNodehadoop-1.0.4]$
9. 启动hadoop
--在NameNode节点启动hadoop守护进程
[hadoop@NameNodehadoop-1.0.4]$ bin/start-all.sh
starting namenode, loggingto /usr/local/hadoop-1.0.4/libexec/../logs/hadoop-hadoop-namenode-NameNode.out
DataNode1.hdcw.org:starting datanode, logging to /usr/local/hadoop-1.0.4/libexec/../logs/hadoop-hadoop-datanode-DataNode1.out
DataNode4.hdcw.org:starting datanode, logging to/usr/local/hadoop-1.0.4/libexec/../logs/hadoop-hadoop-datanode-DataNode4.out
DataNode2.hdcw.org:starting datanode, logging to /usr/local/hadoop-1.0.4/libexec/../logs/hadoop-hadoop-datanode-DataNode2.out
DataNode3.hdcw.org:starting datanode, logging to/usr/local/hadoop-1.0.4/libexec/../logs/hadoop-hadoop-datanode-DataNode3.out
NameNode.hdcw.org:starting secondarynamenode, logging to /usr/local/hadoop-1.0.4/libexec/../logs/hadoop-hadoop-secondarynamenode-NameNode.out
starting jobtracker,logging to/usr/local/hadoop-1.0.4/libexec/../logs/hadoop-hadoop-jobtracker-NameNode.out
DataNode2.hdcw.org:starting tasktracker, logging to /usr/local/hadoop-1.0.4/libexec/../logs/hadoop-hadoop-tasktracker-DataNode2.out
DataNode4.hdcw.org:starting tasktracker, logging to/usr/local/hadoop-1.0.4/libexec/../logs/hadoop-hadoop-tasktracker-DataNode4.out
DataNode1.hdcw.org:starting tasktracker, logging to /usr/local/hadoop-1.0.4/libexec/../logs/hadoop-hadoop-tasktracker-DataNode1.out
DataNode3.hdcw.org:starting tasktracker, logging to/usr/local/hadoop-1.0.4/libexec/../logs/hadoop-hadoop-tasktracker-DataNode3.out
[hadoop@NameNodehadoop-1.0.4]$
10. 用jps检验各后台进程是否成功启动
--在NameNode节点查看后台进程
[hadoop@NameNodehadoop-1.0.4]$ jps
28219 JobTracker
27989 NameNode
28141SecondaryNameNode
28376 Jps
[hadoop@NameNodehadoop-1.0.4]$
--在datanode节点查看后台进程
[hadoop@DataNode1 home]$ jps
56556 DataNode
56681 Jps
56635 TaskTracker
[hadoop@DataNode1 home]$
[grid@hotel03~]$ /usr/java/jdk1.6.0_18/bin/jps
29936TaskTracker
29828 DataNode
30924 Jps
11. 通过web了解Hadoop的活动
通过用浏览器和http访问jobtracker所在节点的50030端口监控jobtracker
Jobtracker监控
http://10.88.106.221:50030/jobtracker.jsp
通过用浏览器和http访问namenode所在节点的50070端口监控集群
http://10.88.106.221:50070/dfshealth.jsp
常见问题
1、权限问题
[hadoop @NameNode local]# scp -rhadoop-1.0.4 hadoop@DataNode1.hdcw.org:/usr/local
scp: /usr/local/hadoop-1.0.4: Permissiondenied
[hadoop @NameNode local]
原因:/usr/local文件夹的属主是root,hadoop没有权限操作
解决方法1:规划时,把hadoop的目录放到/home/hadoop/下面
解决方法2:更改/usr/local/的属主为hadoop
现在采用的是方法2
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/42046/viewspace-763798/ ,如需转载,请注明出处,否则将追究法律责任。