Hadoop系统完全分布式集群搭建方法

来源:互联网 发布:c语言实型数据 编辑:程序博客网 时间:2024/04/20 06:32

Hadoop系统分布式集群搭建方法

 

        记得以前学习hadoop时,互联网上有不少有关Hadoop环境搭建的方法,但很多语焉不详,步骤不清晰。下面是本人亲自搭建hadoop完全分布式系统环境的笔记,沉落硬盘已久,闲来无事,现整理后发到博客上,和博友共勉,希望对hadoop初学者有所帮助,欣喜不已!

1. linux操作系统安装

在每个节点上安装Linux操作系统(Centos6.3),安装时为各机器分别命名为 Masterslave1slave2…。令主机名为Master的作为主节点,主机名为slave1slave2…作为从节点。

如果是在已经安装好系统的集群中配置hadoop环境,且各机器的主机名命名无规律,这时最好按照下述方法修改主机名。

1.1编辑各个机器的主机名:(将主从节点的主机名分别命名为Masterslave1slave2…

 [root@Centos ~]# vi /etc/hostname

 [root@Centos ~]# vi /etc/sysconfig/network

注:如有必要,主从节点都需要修改,这样改的目的是容易规划集群中的机器。

 

1.2为所有主从节点设置静态IP(为所有机器配置好静态IP

1.2.1修改网卡配置,编辑:vi /etc/sysconfig/network-scripts/ifcfg-eth0

1.2.2修改网关配置,编辑:vi /etc/sysconfig/network 

1.2.3修改DNS配置,编辑:vi /etc/resolv.conf

1.2.4重启网络服务, 执行命令:service network restart

 

2.安装SSH并配置免密码SSH访问机制(重要)

如果安装RHELS 6.0 ,确保软件安装时把SSH选上;如果安装Linux时没有安装SSH,则需要另行安装SSH

 

配置为可以免密码登录主节点和从节点:

首先查看在“当前用户”文件夹下是否存在.ssh文件夹(注意ssh前面有“.”,这是一个隐藏文件夹)。输入命令查看此文件夹是否存在。一般来说,安装SSH时会自动在当前用户下创建这个隐藏文件夹,如果没有,可以手创建一个。)

下面的配置我是在主节点Masterhadoop用户下进行的:

[hadoop@Master ~]# ls –a

发现.ssh文件夹已经存在。

接下来输入命令(注意下面命令中不是双引号,是两个单引号):

执行: [hadoop @Master ~]# ssh-keygen -t  rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/home/hadoop/.ssh/id_rsa): &按回车默认路径 &

Created directory '/home/ hadoop /.ssh'.  &创建/ hadoop /.ssh目录&

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:

c6:7e:57:59:0a:2d:85:49:23:cc:c4:58:ff:db:5b:38 root@master

通过以上命令将在/home/ hadoop /.ssh/目录下生成id_rsa私钥和id_rsa.pub公钥

进入/ hadoop /.ssh目录在namenode节点下做如下配置:

[hadoop @Master.ssh]# cat id_rsa.pub > authorized_keys

至此,主节点配置完毕,可通过ssh本机IP测试是否需要密码登录。

操作如图所示:说明配置无密码登录成功!

然后配置从节点,将authorized_keys文件复制到所有从节点上:

[hadoop@Master.ssh]$ scp authorized_keys  [从节点主机名或IP]:/home/hadoop/.ssh

至此免密码登录各节点已配置完毕,可通过ssh各节点IP测试是否需要密码登录。

 

3.安装Java(首先使用[root@ Master ~]#arch命令查看机器属于32位还是64位机)

 1)查看系统默认安装的JDK,命令:java -version

 2下载和安装自己的Jdk,将jdk安装在/usr/java目录下。

root用户登陆,新建目录mkdir  /usr/java,然后将 JDK安装包jdk-6u13-linux-i586.bin复制到目录/usr/java进入该目录,执行安装命令“./ jdk-6u13-linux-i586.bin”,安装完成后将在目录下生成jdk的安装文件夹/jdk1.6.0_13

 3)删除默认安装的jdk

      查看jdk的版本号:rpm -qa|grep  jdk    卸载:yum -y remove

 

4.创建专门的hadoop用户(令hadoop集群中的所有机器都是在hadoop用户下工作!)

创建用户组:hadoop,然后在此用户组下创建hadoop用户。可在安装系统的时候创建,也可以在安装好之后用如下命令创建:

[root@ Master ~]# groupadd  hadoop

[root@ Master ~]# useradd -g hadoop  -d /home/hadoop  hadoop

“hadoop”是所创建的用户名, -d指明“ hadoop”用户的home目录是/home/hadoop

[root@ Master ~]# passwd hadoop [给用户hadoop设置口令]

1). 在真实集群分布模式下,要求集群中所有节点使用相同的用户名,这是hadoop的基本要求。比如,可以使用“hadoop”作为所有节点上统一的用户名。

2). 并且要求在所有节点上安装的hadoop系统具有完全一致的目录结构。

 

5.在主节点上解压安装Hadoop

  Hadoop官网下载hadoop-1.0.1.tar.gz(本人使用的是此版本!)

  建立安装目录

    [hadoop@ Master ~] $mkdir ~/hadoop_installs

  hadoop-1.0.1.tar.gz放在这里,然后解压:

[hadoop@ Master hadoop_installs]$ tar –zxvf hadoop-1.0.1.tar.gz

解压安装完毕,可得hadoop的安装根目录为:/home/hadoop/hadoop_installs/hadoop-1.0.1

注:这个过程仅需在主节点上完成,然后安装好的Hadoop系统在完成后续配置后可被复制到所有从节点

6.配置环境变量(每个节点都必须做)

  进入到“hadoop用户下[root@Master ~]# su –hadoop [注意中间的”-”不要丢]

   [hadoop@ Master ~]$vi  ~/.bash_profile(此修改方式仅对hadoop用户生效)

  注: [root@ Master ~]#vi  /etc/profile这种修改方式是对本机所有用户生效!

设置如下环境变量:

  export  JAVA_HOME=/usr/java/jdk1.6.0_13

  export  JRE_HOME=/usr/java /jdk1.6.0_13/jre

   export  CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

   export  PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

export  HADOOP_HOME=/home/hadoop/hadoop_installs/hadoop-1.0.1

   export  PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin

vi编辑器增加以上内容后保存退出,并执行以下命令使配置生效!

#chmod  +x  /etc/profile;增加执行权限

#source  /etc/profile;使配置生效!

配置完毕后,在命令行中输入:java -version,如出现下列信息说明java环境安装成功。

java version "1.6.0_13"

Java(TM) SE Runtime Environment (build 1.6.0_13-b03)

Java HotSpot(TM) Server VM (build 16.3-b01, mixed mode)

 

7.在主节点上修改hadoop配置文件

  Hadoop的配置文件存放在hadoop安装目录下的conf目录中,主要有以下几个配置文件要修改:

  conf/hadoop-env.shHadoop环境变量设置

  conf/core-site.xml:主要完成NameNodeIP和端口设置

  conf/hdfs-site.xml:主要完成HDFS的数据块副本等参数设置

  conf/mapred-site.xml:主要完成JobTracker IP和端口设置

  conf/masters:完成master节点IP设置

 进入/home/hadoop/hadoop_install/hadoop-1.0.1/conf,配置Hadoop配置文件

7.1配置hadoop-env.sh文件

打开文件命令:vi hadoop-env.sh

添加 # set java environment

             export JAVA_HOME=/usr/java/jdk1.6.0_13

编辑后保存退出。

7.2配置core-site.xml

[hadoop@Master conf]$ vi 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://Master:9000/</value>

//注:Master为主节点主机名,9000后面的“/不能少

   </property>

    <property> 

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

<value>/tmp</value> 

</property>

</configuration>

说明:hadoop分布式文件系统的两个重要的目录结构,一个是namenode上名字空间的存放地方,一个是datanode数据块的存放地方,还有一些其他的文件存放地方,这些存放地方都是基于hadoop.tmp.dir目录的,比如namenode的名字空间存放地方就是 ${hadoop.tmp.dir}/dfs/name, datanode数据块的存放地方就是 ${hadoop.tmp.dir}/dfs/data,所以设置好hadoop.tmp.dir目录后,其他的重要目录都是在这个目录下面,这是一个根目录。在此设置的是 /tmp,当然这个目录必须是存在的。

7.3配置hdfs-site.xml

[hadoop@Master conf]$ vi  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>3</value>

  </property>

</configuration>    

7.4配置mapred-site.xml

[hadoop@Master conf]$ vi 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>Master:9001</value>

  </property>

</configuration>

7.5配置masters文件和slaves文件

[hadoop@Master conf]$ vi masters   修改为主节点的主机名

[hadoop@Master conf]$ vi slaves   列出所有从节点的主机名

注:这个过程仅需在主节点上进行,然后将随着主机上安装好的Hadoop目录一起复制到所有从节点

 

8.复制Hadoop系统到所有从节点

将在主节点安装好的Hadoop系统目录复制到每一个从节点上:

[hadoop@ Master ~]$ scp -r /home/hadoop/hadoop-installs [从节点主机名或IP]:/home/hadoop/

这样可以避免对每一个从节点重复进行Hadoop系统安装。

 

9.NameNodeDataNode节点上分别进行“主机名和IP解析”配置

修改每台机器的/etc/hosts设置:

  若为NameNode,则需要在hosts文件中添加集群中所有节点的IP地址机器对应的主机名。示例:

  若为DataNode,则只需要在文件中添加本机和NameNodeIP地址及对应的主机名。

10.格式化NameNode

  执行Hadoopbin文件夹中的格式化命令:

    [hadoop@ Master ~]$ hadoop namenode -format

   

    如果格式化成功,会返回一堆有关NameNode的启动信息,其中会有一句“…. has been successfully formatted.”

 

11.启动HDFSMapReduce

  执行以下命令启动HDFSMapReduce

     [hadoop@ Master ~]$ start-all.sh

  JPS命令检查一下是否正常启动:

     [hadoop@ Master ~]$ jps

显示以下各进程信息则说明HDFSMapReduce都已正常启动:

4706 JobTracker

4582 SecondaryNameNode

4278 NameNode

4413 DataNode

4853 TaskTracker

4889 Jps

12 查看集群状态

命令方式: [hadoop@Master bin]$ hadoop dfsadmin –report

浏览器方式:在WEB页面下查看Hadoop工作情况

输入部署Hadoop服务器的IPhttp://IP:50070http://IP:50030.

 

 

13.运行测试

  Linux文件系统下(如/home/hadoop /test)创建两个文本数据文件:

          file1.txthello hadoop hello world

          file2.txtgoodbye hadoop

  hdfs分布式文件系统创建目录input

[hadoop@ Master ~]$ hadoop fs -mkdir input

  离开hodoop的安全模式:

[hadoop@Master ~]$ hadoop dfsadmin –safemode leave

  将文件复制到HDFS文件系统中的input文件夹下(下面命令二选一使用)

       [hadoop@Master ~]$ hadoop  dfs  –copyFromLocal   ~/test/*   input

       [hadoop@Master ~]$hadoop  fs  –put  ~/test/*  input

  运行hadoop安装包中自带的WorldCount程序进行测试:

[hadoop@Master ~]$hadoop jar hadoop-1.0.1-examples.jar  wordcount  input  output

注:其中output只能由程序创建,HDFS文件系统中不能事先存在.

  查看执行结果:

[hadoop@Master ~] hadoop dfs -cat output/*

 

14.停止HDFSMapReduce

  执行以下命令启动HDFSMapReduce

     [hadoop@ Master ~]$ stop-all.sh

 

 

原创粉丝点击