Hadoop2.x完全分布式配置详解

来源:互联网 发布:网络直播十大灵异事件 编辑:程序博客网 时间:2024/04/20 13:10

1.环境介绍

  • 这里用的是四台机器配置一个Hadoop完全分布式的集群环境,一个namenode和三个datanode,四台机器上安装的都是Ubuntu Server 14.04LTS系统;
  • JDK版本1.7.0_75,安装详情下面有介绍;
  • Hadoop版本为最新稳定版本hadoop2.6.0.

2.准备工作

  • 创建用户名和组

为三台机器创建相同的用户名和组,建议密码也都设为一样,我的所有机器用户名和密码都为hadoop,这样方便后面管理(个人建议:安装时直接创建hadoop用户,系统会自动将其放入到同名的组中,这样避免多用户权限问题),命令如下:
//1.创建hadoop用户组$ sudo addgroup hadoop //2.创建hadoop用户并添加到hadoop组里$ sudo adduser -ingroup hadoop hadoop//3.给hadoop用户添加root权限(不建议但是省事,不用管权限问题)$ sudo gedit /etc/sudoers 在root  ALL=(ALL:ALL)   ALL下添加如下内容:hadoop ALL=(ALL:ALL)   ALL

  • 修改主机名和主机--ip映射

//1.修改/etc/hostname文件,(建议安装时直接设置好)    namenode节点改为Master,三个datanode分别改为Slave1、Slave2、Slave3//2.修改每个节点/etc/hosts文件,加入以下内容    192.168.1.151        Master    192.168.1.152        Slave1    192.168.1.153        Slave2    192.168.1.154        Slave3

  • 安装SSH并配置各个节点间无密码互访

//1.安装ssh一般系统是默认安装了ssh命令的。如果没有,或者版本比较老,则可以用以下命令重新安装:sudo apt-get install ssh//2.设置无密码互访(思路:各个节点的公钥文件都包含各个节点的秘钥)a.各个节点都执行:第一步:产生密钥$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa第二步:将秘钥追加到公钥中$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keysb.然后将各个节点公钥文件合并,并覆盖各个节点~/.ssh下的公钥文件authorized_keys3.测试namenode节点: ssh localhost ssh Slave1(其他slave节点)datanode节点: ssh localhost ssh Master(其他Slave节点)如果都能无密码登陆到别的节点,则表示配置成功

  • 安装JDK

//1.到oracle官网下载jdk-7u75-linux-x64.tar.gz,解压到/usr/lib/jvm目录下sudo tar zxvf jdk-7u75-linux-x64.tar.gz -C /usr/lib/jvm//2.修改环境变量sudo gedit /etc/profile添加如下内容:#set java environmentexport JAVA_HOME=/usr/lib/jvm/jdk1.7.0_75  export JRE_HOME=${JAVA_HOME}/jre  export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  export PATH=${JAVA_HOME}/bin:$PATH//3.使配置立即生效source /etc/profile//4.配置默认JDK版本第一步: sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0_75/bin/java 300  sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0_75/bin/javac 300第二步,输入以下命令,选择刚刚安装的jdk:sudo update-alternatives --config java5.测试,输入java -version,若显示的是刚刚安装的jdk,则表示jdk安装成功

3.安装Hadoop

强烈建议:所有节点都按以下步骤来配置,可以配置一个节点,然后复制到其他节点(当然要确保每个节点环境一致,如jdk的路径和版本,hadoop的路径等等),这样不仅省事省力,还便于以后修改和管理

  • 下载hadoop并解压

从官网下载最新稳定版本hadoop-2.6.0.tar.gz,复制到/home/hadoop目录下并解压到当前目录
sudo tar -zxvf hadoop-2.6.0.tar.gz

  • 修改hadoop-2.6.0/etc/hadoop下的配置文件

    • 修改hadoop-env.sh文件

//修改JAVA_HOME路径为jdk的安装路径export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_75

    • 修改yarn-env.sh文件

//修改JAVA_HOME路径为jdk的安装路径export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_75

    • 修改slaves文件

//将datanode的主机名都加进去,我的配置如下:Slave1Slave2Slave3

    • 修改core-site.xml文件

    //在<configuration></configuration>标签中加入如下属性配置,官网core-default.xml说明了该文件的可配属性和默认值  <property>          <name>fs.defalutFS</name>          <value>hdfs://Master:8020</value>  </property>  <property>          <name>hadoop.tmp.dir</name>          <value>file:/home/hadoop/tmp</value>  <!--建议先手动建好该临时目录-->  </property> 

      • 修改hdfs-size.xml文件

    //在<configuration></configuration>标签中加入如下属性配置,官网hdfs-default.xml说明了该文件的可配属性和默认值  <property>          <name>dfs.namenode.secondary.http-address</name>          <value>Master:9001</value>  </property>  <property>          <name>dfs.namenode.name.dir</name>          <value>file:/home/hadoop/dfs/name</value>   <!--建议先手动建好该目录--></property>  <property>          <name>dfs.datanode.data.dir</name>          <value>file:/home/hadoop/dfs/data</value>  <!--建议先手动建好该目录--></property>  <property>          <name>dfs.replication</name>          <value>3</value>              <!--副本数目不能大于datanode数目-->  </property>  <property>          <name>dfs.webhdfs.enabled</name>          <value>true</value>  </property>  <property>          <name>dfs.permissions</name>  <!--防止出现不允许远程读写hdfs-->          <value>false</value>  </property>  <property>          <name>dfs.heartbeat.interval</name>   <!--namenode每三秒发一个心跳信号-->          <value>3</value>  </property>  <property>          <name>dfs.namenode.heartbeat.recheck-interval</name>  <!--心跳机制recheck的间隔-->          <value>35000</value>  </property> 
    注意:1.一般情况下,配置前面五个即可,后面三个是我根据自己集群的需要加的;2.当某个节点在35000/1000*2+3*10即100s内无响应,则集群将其标记为dead

      • 修改mapred-site.xml文件

    //在<configuration></configuration>标签中加入如下属性配置,官网mapred-default.xml说明了该文件的可配属性和默认值<property>        <name>mapreduce.framework.name</name>        <value>yarn</value></property><property>        <name>mapreduce.jobhistory.address</name>        <value>Master:10020</value></property><property>        <name>mapreduce.jobhistory.webapp.address</name>        <value>Master:19888</value></property>
    备忘:jobhistory要手动启动,即使start-all.sh也不会启动,启动命令:sbin/mr-jobhistory-daemon.sh start historyserver,这样在web上就可以访问Master:19888端口了,这是查看job的history信息的端口

      • 修改yarn-site.xml文件

    //在<configuration></configuration>标签中加入如下属性配置,官网yarn-default.xml说明了该文件的可配属性和默认值<property>        <name>yarn.nodemanager.aux-services</name>        <value>mapreduce_shuffle</value></property><property>        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>        <value>org.apache.hadoop.mapred.ShuffleHandler</value></property><property>        <name>yarn.resourcemanager.scheduler.address</name>        <value>Master:8030</value>            </property><property>        <name>yarn.resourcemanager.resource-tracker.address</name>        <value>Master:8031</value></property><property>        <name>yarn.resourcemanager.address</name>        <value>Master:8032</value></property><property>        <name>yarn.resourcemanager.admin.address</name>        <value>Master:8033</value></property><property>        <name>yarn.resourcemanager.webapp.address</name>         <value>Master:8088</value></property>

      • 修改/etc/profile文件,加入hadoop的环境变量(为了方便执行hadoop的命令),修改完执行source /etc/profile使配置立即生效

    #for hadoopexport HADOOP_HOME=/home/hadoop/hadopp-2.6.0export PATH=${PATH}:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin

    4.测试

    所有节点都做到如上如上配置后,hadoop完全分布式集群就基本配置完毕,下面来测试。

    • 格式化namenode

    注:在namenode节点下执行以下命令(其他节点不用做这个操作)
    hadoop namenode -format

    • 启动服务

    在namenode输入以下命令启动hdfs和yarn,不建议使用start-all.sh,标准做法输入start-dfs.sh和start-yarn.sh来分别启动hdfs和yarn
    start-all.sh

    • 查看各节点进程

    在namenode节点和各个datanode节点分别输入jps命令,若在namenode出现如下进程:
    NameNodeResourceManagerSecondaryNameNode
    并且datanode节点出现如下进程:
    DataNodeNodeManager
    则表示hadoop的完全分布式集群配置成功,你可以尝试在集群上运行一下hadoop自带的example(如:WorldCount),这里我就不演示了。

    结尾注:博主写这篇博客目的在于记录这几天配置hadoop集群的过程,和初学者进行交流学习,难免有不足之处,望大家批评指正。ps:因为服务器没安装图形界面,不方便截图,所以主要以文字为主。

    5.参考

    http://www.aboutyun.com/thread-7684-1-1.html


    0 0