最近在整理资料的时候,看到刚开始学hadoop 的安装文档,本来写的很详细,每一步其实都截图,直接从文档中copy 过来所有的图片都没有了,排版样式都比较混乱了,   没办法编辑器老火,希望对大家有帮助!hadoop 每一个配置文件的很多参数详解 后面上传。

因为内容不止下面这一部分,后面上传一个文件吧


环境:CentOS6.6

hadoop版本:hadoop-2.7.3.tar.gz

安装目录:

root  root_71

IP规划

hadoop01: 192.168.1.71  (master ) hadoop-server-01  root root_71
hadoop02: 192.168.1.72  (slave01) hadoop-server-02root  root_72
hadoop03: 192.168.1.73  (slave02)hadoop-server-03

 

hadoop 集群中通讯端口众多 ,没有添加端口  一定要注意关闭防火墙

                                                                              

三台主机同时操作:

1.        配置主机名和ip 映射

2.        安装jdk

3.        创建hadoop用户

4.        配置ssh 免密登陆

5.        安装hadoop 

l  先配置好一台服务器,修改好hadoop相关文件, 然后scp 到其他两台服务器上

scp -r /home/hadoop/hadoop-2.7.3  hadoop02:/home/hadoop/

          如果第一台服务器 运行过,那么就会在我们配置的hadoop 临时目录tmp 中生   成一些数据,里面有些数据是用来标识当前hadoop 的相关信息,需要删除其他机器上的tmp 信息  ,不然无法组建集群

# rm -rf /home/hadoop/hadoop-2.7.3/tmp

l  配置主节点上的salves

   如果不配置salves,单独去每台机器 也可以加入集群,但是比较麻烦,配        置主节点上的salves 后,在主节点上启动的时候会自动去启动从节点相关服务    进程

   vi salves

    加入所有节点

     hadoop01

     hadoop02

     hadoop03  

     这三台上面都会启动datanode 同时在主节点上启动namenode,如果只想在从节点上启动datanode ,不要加入hadoop01 即可

 

 

然后启动  每次都要sbin 目录比较麻烦 ,可以把这个目录配置当环境变量path 中,配置hadoop 环境变量

vi /etc/profile
export HADOOP_HOME=/home/hadoop/hadoop-2.7.3
在path 后面加上
exportPATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin: $HADOOP_HOME/sbin
 
让环境变量生效
source /etc/profile


     当前集群如果还想加入一台salve  只需要从一台服务器拷贝过去(或者重新配置),删除相关信息   修改主节点的salves 文件  使用手动启动方式handoop-daemon.sh 指定启动新服务器,就可以自动加入集群了

所以handoop 在线自动扩容非常简单,扩容的同时,集群服务不用停。

 

一.配置主机名和ip 映射

1.1配置hostname
192.168.1.71
# sudo vi/etc/sysconfig/network
  HOSTNAME=hadoop01 
 
192.168.1.72
# sudo vi /etc/sysconfig/network
  HOSTNAME=hadoop02 
 
192.168.1.73
# sudo vi/etc/sysconfig/network
  HOSTNAME=hadoop03
1.2 修改hosts文件

主节点

# sudo vi/etc/hosts
  127.0.0.1   localhost
192.168.1.71 hadoop01
  192.168.1.72 hadoop02
  192.168.1.73 hadoop03

 

如果不配置这个 到时候ssh copy 会找不到主机名

 

从节点 至少需要把主节点的 加入  因为以后的配置 用到hadoop01  没有用ip

192.168.1.72 
  127.0.0.1   localhost
  192.168.1.71 hadoop01
  192.168.1.72 hadoop02
  192.168.1.73 hadoop03
192.168.1.73
127.0.0.1    localhost
  192.168.1.71 hadoop01
  192.168.1.72 hadoop02
  192.168.1.73 hadoop03

 

 

重启
# su root
# reboot
 
 
关闭防火墙
# service iptablesstop 
 
or
# chkconfigiptables off

二.创建用户

三台服务器 都要执行 用户名:hadoop 密码:root

# useradd hadoop 
 更改hadoop用户的密码为root
# passwd hadoop

为了方便,将hadoop加入root用户组,也可以独创建一个用户组

操作方法:先以root身份登录,密码是root_71

# su root
# usermod -g roothadoop 
 
执行完后hadoop即归属于root组了,查看
# id hadoop 
查看输出验证一下,如果看到类似下面的输出:
uid=502(hadoop)gid=0(root) 组=0(root)

 

 

三.安装jdk

 不用openjdk

 

查看是否已经安装jdk
rpm -qa | grep jdk
 
创建目录
# mkdir/usr/local/java
 
上传jdk jdk1.7.0_45.tar.gz 到/usr/local/java 目录
 
安装jdk 
# tar -zxvfjdk1.7.0_45.tar.gz
# mvjdk1.7.0_45  /usr/local/java/jdk1.7
 
使用root 用户配置环境变量
# su root
# vi /etc/profile
在文件最后面加入
exportJAVA_HOME=/usr/local/java/jdk1.7
exportJRE_HOME=/usr/local/java/jdk1.7/jre
exportCLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
exportPATH=$PATH:$JAVA_HOME/bin
使环境变量生效
# source/etc/profile
# java -version

 

四. 配置SSH 免密登录

hadoop工作时,各节点要相互通讯,正常情况下linux之间通讯要提供用户名、密码(目的是保证通讯安全),如果需要人工干预输入密码,显然不方便,做这一步的目的,是让各节点能自动通过安全认证,不影响正常通讯。

 

linux知识点  一般远程登录一台主机

ssh hadoop01

exit

 

 

由发起方生成秘钥 ,也就是主动登录方,这里就是主节点操作:

简要版配置

192.168.1.71

1. 生成秘钥
# su hadoop
# cd /home/hadoop
# ssh-keygen

  后面全部enter

 

.ssh 目录(是一个隐藏目录 看不到)里面会有二个文件id_rsa(私钥) , id_rsa.pub(公钥)

2.拷贝到其他需要免密登录的主机上去

   本机也是需要免密登录的。

ssh-copy-id hadoop01

 

 

hadoop02 是要免密登录的主机 的主机名

 

ssh-copy-id hadoop02
 
ssh-copy-id hadoop03

 

 

 

如果找不到主机名 就是上面的hosts 文件没有配置

或者以下错误  是没有先执行 ssh-copy-id hadoop01

 

 

3.测试 (ip 或者主机名)

# ssh hadoop02

       就不需要输入秘密了

# exit

 

 

 

五.安装hadoop

/home/hadoop
 
# suhadoop
# cd/home/hadoop
# tar -zxvf hadoop-2.7.3.tar.gz
 
hadoop环境变量(选配)每台机器都配置
# su root
# vi /etc/profile
  exportHADOOP_HOME=/home/hadoop/hadoop-2.7.3
  在path 后面加上
  exportPATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

 

 

share 下面的 doc 可以删除掉

 

 

 

配置hadoop相关文件

可以在本地配置好后直接上传,当前配置信息及其简单,

一共需要修改七个文件:

$HADOOP_HOME/etc/hadoop/hadoop-env.sh
$HADOOP_HOME/etc/hadoop/yarn-env.sh
$HADOOP_HOME/etc/hadoop/core-site.xml
$HADOOP_HOME/etc/hadoop/hdfs-site.xml
$HADOOP_HOME/etc/hadoop/mapred-site.xml
$HADOOP_HOME/etc/hadoop/yarn-site.xml
$HADOOP_HOME/etc/hadoop/slaves
1. hadoop-env.sh
# vi /home/hadoop/hadoop-2.7.3/etc/hadoop/hadoop-env.sh
    找到下面这行的位置,改成(jdk目录位置,大家根据实际情况修改)      
 
    export JAVA_HOME=/usr/local/java/jdk1.7
 
   另外 hadoop-env.sh中 , 建议加上这句:(暂时不加)
    exportHADOOP_PREFIX=/home/hadoop/hadoop-2.7.3

 

2. yarn-env.sh (暂时不配置)
vi /home/hadoop/hadoop-2.7.3/etc/hadoop/yarn-env.sh
   export JAVA_HOME=/usr/java/jdk1.7.0_51

选配:

yarn 配置scheduler

yarn的Scheduler机制,由yarn-site.xml中的配置参数指定:
<name>yarn.resourcemanager.scheduler.class</name>
默认值为:
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.CapacityScheduler</value>

 

3、core-site.xml修改:
vi /home/hadoop/hadoop-2.7.3/etc/hadoop/core-site.xml
 
  <configuration>
    <property>
       <name>fs.defaultFS</name>                 
       <value>hdfs://hadoop01:9000</value>
    </property>
    <property>
       <name>hadoop.tmp.dir</name>
       <value>/home/hadoop/hadoop-2.7.3/tmp</value>
    </property>
  </configuration>

    第一个参数:配置 hadoop 使用什么dfs , value 为hdsf地址是hadoop01 服务器上的文件系统

    第二个参数:hadoop 运行临时文件存放路径     

    注:tmp 目录如不存在,则先mkdir手动创建  测试发现可自动创建

 

window 上开发过程中找不到hadoop01

所有节点可以改为:

<value>hdfs://192.168.1.71:9000</value>
或者window 修改ip hostname 的映射
 
 
4、hdfs-site.xml
 vi /home/hadoop/hadoop-2.7.3/etc/hadoop/hdfs-site.xml
 
   <configuration>
       <property>
          <name>dfs.replication</name>
          <value>1</value>
      </property>
      <property>
        <name>dfs.datanode.http.address</name>
        <value>192.168.1.71:50075</value>
   </property>
   </configuration>
 
注:dfs.replication表示数据副本数,一般不大于datanode的节点数,默认是3
 
选配:以下内容 不配置 默认也是这样的
  <property>
     <name>dfs.datanode.ipc.address</name>
      <value>0.0.0.0:50020</value>
    </property>
hadoop web 访问地址
    <property>
     <name>dfs.datanode.http.address</name>
     <value>0.0.0.0:50075</value>
   </property>

 

 

 

5、mapred-site.xml

 

 

当前只有一个mared-site.xml.template 文件

 

# cp mapred-site.xml.templatemapred-site.xml
# vi /home/hadoop/hadoop-2.7.3/etc/hadoop/mapred-site.xml
 
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl"href="configuration.xsl"?>
<configuration>
  <property>
   <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>

 

配置mapreduce 在yarn平台上执行, hadoop中yarn管理和分配资源

 

6.yarn-site.xml
vi /home/hadoop/hadoop-2.7.3/etc/hadoop/yarn-site.xml
   <property>
      <name>yarn.resourcemanager.hosename</name>
     <value>hadoop01</value>
   </property>
   <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
   </property>

hadoop01  可以改成 192.168.1.71

全部配置成ip 便于其他地方访问,但是不建议 还是用主机名,因为主机ip 一旦变换 所有的配置都需要修改

resourcemanager是yarn 的主进程,nodemangger是从节点进程    

 

加入以下配置 ,访问yarnweb 界面正常  

 

<property>
            <name>yarn.resourcemanager.address</name>
    <value>192.168.1.71:8032</value>
</property>
 
<property>
            <name>yarn.resourcemanager.scheduler.address</name>
    <value>192.168.1.71:8030</value>
</property>
 
<property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>192.168.1.71:8031</value>
</property>

 

7.savles 

当前只是把本机加入到从节点中, 等把hadoop 拷贝到从节点  需要修改

#cp /home/hadoop/hadoop-2.7.3/etc/hadoop/slaves/home/hadoop/hadoop-2.7.3/etc/hadoop/slaves.bak 
 
# vi /home/hadoop/hadoop-2.7.3/etc/hadoop/slaves
  hadoop01

只是加入了本机

 

当前hadoop 已经配置完成,可以先测试下本机是否启动成功,启动可以参考第六点启动脚本

 

8. 从主节点拷贝hadoop 文件到两个从节点上

 因为配置了ssh免密登录 所以不需要输入密码

# scp -r/home/hadoop/hadoop-2.7.3 hadoop02:/home/hadoop/
# scp -r /home/hadoop/hadoop-2.7.3  hadoop03:/home/hadoop/

 

如果没有配置ssh免密登录

如下操作: 需要加上用户名

# scp -r/home/hadoop/hadoop-2.7.3  hadoop@hadoop02:/home/hadoop/
# scp -r /home/hadoop/hadoop-2.7.3  hadoop@hadoop03:/home/hadoop/

注:如果第一台服务器运行过,那么就会在配置的hadoop 临时目录tmp 中生成一些数据,里面有些数据是用来标识当前hadoop的相关信息,需要删除其他机器上的tmp 信息  ,不然无法组建集群

 

192.168.1.72
# rm -rf /home/hadoop/hadoop-2.7.3/tmp
 rm -rf /home/hadoop/hadoop-2.7.3/logs
 
192.168.1.73
# rm -rf /home/hadoop/hadoop-2.7.3/tmp
  rm -rf /home/hadoop/hadoop-2.7.3/logs

 

修改主节点salves 配置文件

加入从节点信息,如果不想本机上启动datanode 就不加入hadoop01

# vi /home/hadoop/hadoop-2.7.3/etc/hadoop/slaves
  hadoop01
  hadoop02              
  hadoop03

加入此从节点后在主节点上启动 ,hadoop 会自动启动从节点上的相关进程

 

 

注:两个从节点修改

hdfs-site.xml       
 vi /home/hadoop/hadoop-2.7.3/etc/hadoop/hdfs-site.xml
 
   <configuration>
       <property>
          <name>dfs.replication</name>
          <value>1</value>
      </property>
      <property>
        <name>dfs.datanode.http.address</name>
        <value>0.0.0.0:50075</value>
   </property>
   </configuration>

 

 

六.启动与停止hadoop

hadoop 里面三个重要组成部分 hdsfmapreduce yarn,需要启动hdsf 和yarn

mapredue 只是开发好后,上传后在yarn 上去执行就行

同时hdsf 和yarn 是没有耦合在一起的两个任意一个启动与不启动  相互不影响 

1.格式化namenode  (格式化hdsf )
# cd /home/hadoop/hadoop-2.7.3/bin
     老版本如下格式化
     # ./hadoop namenode –format      
     现在使用如下格式化:
      #  ./hdfs namenode -format

 

查看tmp 文件下面的文件

 

注:如果是第二次格式化  请先删除tmp 目录不然会引发错误

2.手动启动
# cd /home/hadoop/hadoop-2.7.3/sbin
2.1启动namenode
# ./hadoop-daemon.shstart namenode
     查看namenode 进程 是否启动成功
     # jps

2.2 启动datanode 和sencondarynamenode
# ./hadoop-daemon.sh start datanode
    # jps
    # ./hadoop-daemon.sh start secondarynamenode
    # jps
    查看进程
    # netstat -nltp

 

   9000 :内部通讯端口

   50070:web 页面访问端口

    如果打不开下面地址  请关闭防火墙

    http://192.168.1.71:50070

 

 

2.3启动yarn 里面相关的服务进程

   yarn 主进程

./yarn-daemon.shstart resourcemanager
   
 ./yarn-daemon.sh start nodemanager
 jps

 

 

 

3.自动化脚本启动
3.1 启动hdfs
cd /home/handoop/hadoop-2.7.3/sbin
./start-dfs.sh
3.2 启动yarn

./start-yarn.sh

 

 

 

 以上的启动可以使用一个命令全部启动

./start-all.sh

 

4.停止hadoop
# cd/home/handoop/hadoop-2.7.3/sbin
# ./stop-dfs.sh
# ./stop-yarn.sh
 
或者用
./stop-all.sh

 

 

 

七. hadoop集群动态扩容

当前集群如果想加入一个salve节点, 只需要从一台服务器拷贝过去(或者重新安装),删除相关信息,修改主节点的salves 文件,使用手动启动方式 handoop-daemon.sh 指定启动新服务器, 就可以自动加入集群了

所以handoop 在线自动扩容非常简单,扩容的同时,集群服务不用停

如果要加入datanode 只需要在新的从节点启动 datanode
# cd /home/hadoop/hadoop-2.7.3/sbin
# ./hadoop-daemon.shstart datanode