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文件
//在标签中加入如下属性配置,官网core-default.xml说明了该文件的可配属性和默认值  
  
        fs.defalutFS  
        hdfs://Master:8020  
  
  
        hadoop.tmp.dir  
        file:/home/hadoop/tmp    
 

  • 修改hdfs-size.xml文件
//在标签中加入如下属性配置,官网hdfs-default.xml说明了该文件的可配属性和默认值  
  
        dfs.namenode.secondary.http-address  
        Master:9001  
  
  
        dfs.namenode.name.dir  
        file:/home/hadoop/dfs/name   
  
  
        dfs.datanode.data.dir  
        file:/home/hadoop/dfs/data  
  
  
        dfs.replication  
        3                
  
  
        dfs.webhdfs.enabled  
        true  
  
  
        dfs.permissions    
        false  
  
  
        dfs.heartbeat.interval     
        3  
  
  
        dfs.namenode.heartbeat.recheck-interval    
        35000  
 
注意:1.一般情况下,配置前面五个即可,后面三个是我根据自己集群的需要加的;2.当某个节点在35000/1000*2+3*10即100s内无响应,则集群将其标记为dead

  • 修改mapred-site.xml文件
//在标签中加入如下属性配置,官网mapred-default.xml说明了该文件的可配属性和默认值

        mapreduce.framework.name
        yarn


        mapreduce.jobhistory.address
        Master:10020


        mapreduce.jobhistory.webapp.address
        Master:19888
备忘:jobhistory要手动启动,即使start-all.sh也不会启动,启动命令:sbin/mr-jobhistory-daemon.sh start historyserver,这样在web上就可以访问Master:19888端口了,这是查看job的history信息的端口

  • 修改yarn-site.xml文件
//在标签中加入如下属性配置,官网yarn-default.xml说明了该文件的可配属性和默认值

        yarn.nodemanager.aux-services
        mapreduce_shuffle


        yarn.nodemanager.aux-services.mapreduce.shuffle.class
        org.apache.hadoop.mapred.ShuffleHandler


        yarn.resourcemanager.scheduler.address
        Master:8030            


        yarn.resourcemanager.resource-tracker.address
        Master:8031


        yarn.resourcemanager.address
        Master:8032


        yarn.resourcemanager.admin.address
        Master:8033


        yarn.resourcemanager.webapp.address 
        Master:8088

  • 修改/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


你可能感兴趣的:(Hadoop)