Hadoop安装教程-集群配置

主要思想

1.选定一台机器作为 Master
2.在 Master 节点上配置 hadoop 用户、安装 SSH server、安装 Java 环境
3.在 Master 节点上安装 Hadoop,并完成配置
4.在其他 Slave 节点上配置 hadoop 用户、安装 SSH server、安装 Java 环境
5.将 Master 节点上的 /usr/local/hadoop 目录复制到其他 Slave 节点上
6.在 Master 节点上开启 Hadoop

环境

本教程采用CentOS6.7 64位,安装Hadoop版本为2.7.3,Java版本为1.8.0
其他linux版本也类似,只是命令行不同而已。
集群环境为:Master Slave1 Slave2

创建hadoop用户

我选择为单独创建一个用户来搭建hadoop和spark集群。

添加用户(用管理员权限)

#adduser hadoop

设置用户密码,按提示输入两次

#passwd hadoop 

为hadoop用户赋予管理员权限,以管理员身份执行如下命令:

#visudo         #找到对应位置(中间)添加hadoop  ALL=(ALL)  ALL

修改用户组,使其属于root组,修改完毕后可使用su-获得管理员权限,命令如下:

#usermod -g root hadoop

为了区分各节点现修改主机名(改为Master):

$vim /etc/sysconfig/network    #改为HOSTNAME=Master

然后修改自己所用节点的IP映射:

$sudo vim /etc/hosts

例如本教程使用的三个节点的名称与对应的IP关系如下:

192.168.139.134  Master
192.168.139.135  Slave1
192.168.139.135  Slave2

/etc/hosts原有的不要删除,在底部增加IP关系即可。在其它节点上也要对/etc/hosts和/etc/sysconfig/network这两个文件进行修改,修改完成后可用如下命令测试是否相互ping通,如果可以相互ping通,则配置成功,否则配置失败。

$ping Master -3            #只ping3次,否则按ctrl+c 中断。
$ping Slave1 -3
$ping Slave2 -3

安装Java环境

笔者未用OpenJDK7,选择的是java1.8.0。下载的是jdk-8u101-linux-x64.tar.gz,目前最新版下载地址是jdk-8u111-linux-x64.tar.gz

我选择用windows下载后使用WinSCP传给linux系统hadoop用户,下面是解压命令:

$sudo tar -xvf jdk-8u101-linux-x64.tar.gz -C /usr/local    #我的安装目录是/usr/local

配置JAVA_HOME环境:

$vim ~/.bashrc 

在文件最前端添加如下内容(JDK的安装路径):

export JAVA_HOME=/usr/local/jdk1.8.0_101
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

使该环境变量生效,执行如下代码:

source ~/.bashrc    #使该变量生效

检验是否配置正确:

$java -version     #若不为java1.8.0,建议重启。

安装SSH、配置SSH免密码登陆

首次执行如下命令是对提示输入密码(如果有yes/no选择请选择yes)。

$ssh localhost

首先退出刚才的ssh,然后利用ssh-keygen生成密钥,并将密钥加入到授权中,代码如下:

$exit
$cd ~/.ssh
$ssh-keygen -t rsa     #会有提示,每一步都按回车就可以
$cat ./id_rsa.pub >> ./authorized_keys #加入授权

此时再用ssh localhost命令,无需密码就可以直接登陆了,如图所示:
这里写图片描述

安装Hadoop2.7.3

同jdk-8u101-linux-x64.tar.gz一样,我选择用windows下载后使用WinSCP传给linux系统hadoop用户。

笔者选择将hadoop安装在/usr/local/目录中:

$sudo tar -zxf  ~/hadoop-2.7.3.tar.gz  -C  /usr/local #解压至/usr/local
$cd /usr/local
$sudo mv ./hadoop-2.7.3/  ./hadoop  #修改文件名为hadoop
$sudo chown -R hadoop ./hadoop  #修改文件权限为hadoop

解压后即可使用,输入如下命令检查hadoop是否可用,成功则显示Hadoop版本信息:

$cd /usr/local/hadoop
$./bin/hadoop version

配置Hadoop PATH变量

这样配置后可以在任意目录中使用hdfs等命令,这一步只需要在Master节点上进行配置。

$vim ~/.bashrc        #添加如下代码块
#在开头添加如下代码块
export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin

保存后务必执行source ~/.bashrc 使变量设置生效。


以上所有步骤在三台机器上都需要完成,更改用户名时注意为Slave1和Slave2

下面为集群配置:

SSH无密码登陆子节点

这个操作的前提是Master节点和所有子节点都完成ssh localhost免密码登陆本机,然而下面的操作是要让Master节点可以无密码SSH登陆到各个Slave节点上。

首先生成Master节点的公钥,在Master节点的终端上执行(因为改过主机名,所有还需要删除原有的再重新生成一次):

$cd ~/.ssh
$rm ./id_rsa*  #删除原有的公钥
$ssh-keygen -t rsa
$cat ./id_rsa.pub >> ./authorized_keys 

验证让Master节点无密码SSH本机,在Master节点上执行ssh Master,可能需要输入yes,成功后执行exit返回原来的终端。

将Master节点上的公钥传输Slave1节点:

$scp ~/.ssh/id_rsa.pub  hadoop@Slave1:/home/hadoop/   #scp为secure copy

接着在Slave1节点上,将ssh公钥加入授权:

$cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
$rm ~/id_rsa.pub      

在Slave2节点上也要执行相同的操作即将Master公钥传输到Slave2节点、在Slave2节点上加入授权这两步。

Master节点上执行如下命令:

$ssh Slave1

结果为:终端标题以及命令符变为Slave1,此时执行的命令相当于在Slave1节点上执行的,可执行exit退回到原来的Master终端。[hadoop@Slave1 ~]

这里写图片描述

配置集群/分布式环境

集群配置需要修改/usr/local/hadoop/etc/hadoop中的5个配置文件,分别如下:

  • slaves
  • core-site.xml
  • hdfs-site.xml
  • mapred-site.xml
  • yarn-site.xml

1.slaves文件,将作为Master的主机名写入该文件,每行一个。
修改命令如下:

$cd /usr/local/hadoop/etc/hadoop
$vim slaves

笔者的Slaves文件为:

Slave1
Slave2

2.文件core-site.xml改为一下配置:

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://Master:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/usr/local/hadoop/tmp</value>
                <description>Abase for other temporary direct ories.</description>
        </property>
</configuration>

3.文件hdfs-site.xml,dfs.replication为Slave节点的个数,笔者为2:

<configuration>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>Master:50090</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>
        <property>
                <name>dfs.namenode.name.dif</name>
                <value>file:/usr/local/hadoop/tmp/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/usr/local/hadoop/tmp/dfs/data</value>
        </property>
</configuration>

4.文件mapred-site.xml需要重命名,然后配置修改为如下:

重命名命令如下:

$cd /usr/local/hadoop/etc/hadoop
$sudo mv ./mapred-site.xml.template  ./mapred-site.xml

修改内容如下:

<configuration>
        <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>
</configuration>

5.文件yarn-site.xml

<configuration>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>Master</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>

配置好以后,需要将Master节点上/usr/local/hadoop文件夹复制到各个Slave节点上,如果在Master节点上跑过伪分布式模式,建议先删除之前的临时文件。在Master节点上执行:

$cd /usr/local
$sudo rm -r ./hadoop/tmp       #删除临时文件
$sudo rm -r ./hadoop/logs/*        #删除日志文件
$tar -zcf ~/hadoop.master.tar.gz   ./hadoop       #先压缩后复制
$cd ~
$scp ./hadoop.master.tar.gz  Slave1:/home/hadoop

在Slave1节点上执行:

$sudo rm -r /usr/local/hadoop  #如果存在,删除旧的
$sudo tar -zxf ~/hadoop.master.tar.gz  -C  /usr/local   
$sudo chown -R hadoop /usr/local/hadoop

同样在Slave2上执行同样的操作。

关闭防火墙

CentOS系统默认开启了防火墙,在开启集群之前,需要关闭每个节点的防火墙。有防火墙会导致ping得通,但是telnet端口不通,从而导致了DataNode启动了,但是live datanode 为0的情况。

CentOS 6.x关闭防火墙命令如下:

$sudo service iptables stop    #关闭防火墙服务
$sudo chkconfig iptables off   #禁止防火墙开机自启

启动集群

首次启动需要先在Master节点上执行NameNode的格式化:

$hdfs namenode -format     #首次运行需要,之后不需要

接着在Master节点上,启动hadoop,命令如下:

$start-dfs.sh
$start-yarn.sh
$mr-jobhistory-daemon.sh start historyserver

通过jps命令可以查看各个节点所启动的进程。正确应该有如下进程:

  • NameNode
  • ResourceManager
  • Jps
  • SecondaryNameNode
  • JobHistoryServer

缺少一个进程都不对。

在Slave节点上应该看到:

  • Jps
  • DataNode
  • NodeManager

另外可以在Master节点上执行 hdfs dfsadmin -report 查看DataNode是否正常启动,如果Live datanode 不为0 且为子节点的个数,则说明启动成功。

也可用WebUI查看DataNode的状态,如下所示:

这里写图片描述

关闭Hadoop集群也是在Master节点上执行的:

$stop-yarn.sh
$stop-dfs.sh
$mr-jobhistory-daemon.sh stop historyserver

参考教程:

给力星:Hadoop集群安装配置教程_Hadoop2.6.0_Ubuntu/CentOS

致谢

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值