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


    集群规划: 主机名 IP 安装的软件 运行的进程 weekend01 192.168.1.201 jdk、hadoop NameNode、DFSZKFailoverController(zkfc) weekend02 192.168.1.202 jdk、hadoop NameNode、DFSZKFailoverController(zkfc) weekend03 192.168.1.203 jdk、hadoop ResourceManager weekend04 192.168.1.204 jdk、hadoop ResourceManager weekend05 192.168.1.205 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain weekend06 192.168.1.206 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain weekend07 192.168.1.207 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain 说明: 1.在hadoop2.0中通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务 仅同步active namenode的状态,以便能够在它失败时快速进行切换。 hadoop2.0官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据 信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode 这里还配置了一个zookeeper集群,用于ZKFC(DFSZKFailoverController)故障转移,当Active NameNode挂掉了,会自动切换Standby NameNode为standby状态 2.hadoop-2.2.0中依然存在一个问题,就是ResourceManager只有一个,存在单点故障,hadoop-2.4.1解决了这个问题,有两个ResourceManager,一个是Active,一个 是Standby,状态由zookeeper进行协调
    评论 2
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值