Hadoop系统分布式集群搭建方法
记得以前学习hadoop时,互联网上有不少有关Hadoop环境搭建的方法,但很多语焉不详,步骤不清晰。下面是本人亲自搭建hadoop完全分布式系统环境的笔记,沉落硬盘已久,闲来无事,现整理后发到博客上,和博友共勉,希望对hadoop初学者有所帮助,欣喜不已!
1. linux操作系统安装
在每个节点上安装Linux操作系统(Centos6.3),安装时为各机器分别命名为 Master,slave1、slave2…。令主机名为Master的作为主节点,主机名为slave1、slave2…作为从节点。
如果是在已经安装好系统的集群中配置hadoop环境,且各机器的主机名命名无规律,这时最好按照下述方法修改主机名。
1.1编辑各个机器的主机名:(将主从节点的主机名分别命名为Master,slave1、slave2…)
[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时会自动在当前用户下创建这个隐藏文件夹,如果没有,可以手创建一个。)
下面的配置我是在主节点Master的hadoop用户下进行的:
[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.sh:Hadoop环境变量设置
— conf/core-site.xml:主要完成NameNode的IP和端口设置
— 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.在NameNode和DataNode节点上分别进行“主机名和IP解析”配置
修改每台机器的/etc/hosts设置:
— 若为NameNode,则需要在hosts文件中添加集群中所有节点的IP地址机器对应的主机名。示例:
— 若为DataNode,则只需要在文件中添加本机和NameNode的IP地址及对应的主机名。
10.格式化NameNode
— 执行Hadoop的bin文件夹中的格式化命令:
[hadoop@ Master ~]$ hadoop namenode -format
如果格式化成功,会返回一堆有关NameNode的启动信息,其中会有一句“…. has been successfully formatted.”
11.启动HDFS和MapReduce
— 执行以下命令启动HDFS和MapReduce
[hadoop@ Master ~]$ start-all.sh
— 用JPS命令检查一下是否正常启动:
[hadoop@ Master ~]$ jps
显示以下各进程信息则说明HDFS和MapReduce都已正常启动:
4706 JobTracker
4582 SecondaryNameNode
4278 NameNode
4413 DataNode
4853 TaskTracker
4889 Jps
12 查看集群状态
命令方式: [hadoop@Master bin]$ hadoop dfsadmin –report
浏览器方式:在WEB页面下查看Hadoop工作情况
输入部署Hadoop服务器的IP:http://IP:50070;http://IP:50030.
13.运行测试
— 在Linux文件系统下(如/home/hadoop /test)创建两个文本数据文件:
file1.txt:hello hadoop hello world
file2.txt:goodbye 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.停止HDFS和MapReduce
— 执行以下命令启动HDFS和MapReduce
[hadoop@ Master ~]$ stop-all.sh