ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 生产环境Hadoop大集群完全分布式模式安装 NFS+DNS+awk

生产环境Hadoop大集群完全分布式模式安装 NFS+DNS+awk

原创 Linux操作系统 作者:dd_dong 时间:2013-06-13 15:43:02 0 删除 编辑
介绍

       这是利用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

  

1 集群网络环境介绍及快速部署1.1 集群环境
  

主机名

  

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

  
        

NETWORKING=yes

   

HOSTNAME=NameNode

   
   
   


依次对每个节点进行处理,修改完之后,重启系统 #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

5.解压hadoop安装包

--可先一某节点(如NameNode)解压配置文件

[root@NameNode hadoop]# pwd
/usr/local/hadoop
[root@NameNode hadoop]#
[root@NameNode hadoop]# tar -zxvf hadoop-1.0.4.tar.gz

6. 配置 Hadoop

(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

      

              fs.default.name

              hdfs://NameNode.hdcw.org:9000

      

      

       hadoop.tmp.dir

       /home/hadoop_space/tmp  

      

编辑hdfs-site.xml

<!-- Put site-specific propertyoverrides in this file. -->

       dfs.name.dir

       /home/hadoop_space/hdfs/name

       dfs.data.dir

       /home/hadoop_space/hdfs/data

dfs.replication

       3

编辑mapred-site.xml

<!-- Put site-specific propertyoverrides in this file. -->

      

              mapred.job.tracker

              NameNode.hdcw.org:9001

      

      

              mapred.local.dir

              /home/hadoop_space/mapred/local

      

      

mapred.system.dir

              /home/hadoop_space/mapred/system

      

(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/



7.  向各节点复制hadoop(awk命令)

--把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/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2013-04-24

  • 博文量
    17
  • 访问量
    41442