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

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_keys
b.然后将各个节点公钥文件合并,并覆盖各个节点~/.ssh下的公钥文件authorized_keys
3.测试
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 environment
export 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 java
5.测试,输入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的主机名都加进去,我的配置如下:
Slave1
Slave2
Slave3
    • 修改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 hadoop
    export HADOOP_HOME=/home/hadoop/hadopp-2.6.0
    export 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出现如下进程:
    NameNode
    ResourceManager
    SecondaryNameNode
    并且datanode节点出现如下进程:
    DataNode
    NodeManager
    则表示hadoop的完全分布式集群配置成功,你可以尝试在集群上运行一下hadoop自带的example(如:WorldCount),这里我就不演示了。

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

    5.参考

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


    评论 2
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值