CentOS7下搭建hadoop完全分布式环境

单机伪分布式环境的搭建请参考这篇文章

1. 实验环境的相关信息

  • 操作系统:
    CentOS7.2.1511
  • hadoop版本:
    2.7.3
  • 节点信息:
角色地址
Namenode192.168.1.231
Datanode192.138.1.232
Datanode192.168.1.233

#2. 安装和配置JDK
这里我们选择安装JDK8。

  • 下载
curl -LO -H "Cookie: oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u71-b15/jdk-8u71-linux-x64.rpm"
  • 安装
rpm -Uvh jdk-8u71-linux-x64.rpm
  • 配置环境变量
    打开/etc/profile,在文件最后面添加如下内容:
export JAVA_HOME=/usr/java/default
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
  • 使环境变量生效
    执行如下命令:
source /etc/profile

使环境变量及时生效。

  • 选择正确的JDK版本
    为防止系统里存在多个版本的JDK,需要使用alternatives选择正确的版本:
alternatives --config java

请选择/usr/java/jdk1.8.0_71/jre/bin/java对应的数字标号。

3. 设置hostname

为方便节点之间的互相访问,在每个节点的/etc/hosts文件中添加如下内容:

192.168.1.231 hadoop-namenode
192.168.1.232 hadoop-datanode-1
192.168.1.233 hadoop-datanode-2

4. 创建hadoop用户

在每个节点上创建hadoop用户:

useradd -d /usr/hadoop hadoop  #用户家目录设置为/usr/hadoop
chmod 755 /usr/hadoop 
passwd hadoop  #设置用户密码

5. 设置SSH免密钥登录

由于Namenode会执行一系列脚本去控制Datanode,因此需要设置SSH免密钥登录,省去输入密码的麻烦。

  • 登录到Namenode节点,切换用户为hadoop
su hadoop
  • 生成SSH KEY并将其拷贝到各个节点主机上
    依次执行如下命令:
ssh-keygen 
ssh-copy-id localhost #免密钥登录本机 
ssh-copy-id hadoop-datanode-1
ssh-copy-id hadoop-datanode-2

设置完成后,尝试在Namenode节点上用SSH连接各个节点,如果无需输入密码即可登录,则表示设置成功:

ssh localhost
ssh hadoop-datanode-1
ssh hadoop-datanode-2

6. 安装hadoop

本步骤需要在每个节点下载和安装hadoop,并做简单的配置。

  • 下载和安装,这里选择2.7.3版本
su hadoop #切换到hadoop用户
#下载2.7.3版本hadoop
curl -O http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz
#安装到/usr/hadoop目录
tar zxvf hadoop-2.7.3.tar.gz -C /usr/hadoop --strip-components 1
  • 配置环境变量
    hadoop用户的身份,打开~/.bashrc文件,在文件末添加如下内容:
export HADOOP_HOME=/usr/hadoop
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
  • 使环境变量生效
    执行如下命令:
source ~/.bashrc

使环境变量及时生效。

7. 配置hadoop

本节对hadoop集群进行具体的配置。首先请以hadoop用户的身份登录Namenode节点。

  • 创建Datanode文件目录
su hadoop
# Namenode兼做Datanode
mkdir ~/datanode 
# 远程到Datanode节点创建对应的目录
ssh hadoop-datanode-1 "mkdir ~/datanode" 
ssh hadoop-datanode-2 "mkdir ~/datanode" 
  • 配置hdfs
    首先打开~/etc/hadoop/hdfs-site.xml文件,在<configuration> - </configuration>之间添加如下内容:
  <property>
    <name>dfs.replication</name>
    <value>2</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///usr/hadoop/datanode</value>
  </property>

接下来将配置文件同步到Datanode:

scp ~/etc/hadoop/hdfs-site.xml hadoop-datanode-1:~/etc/hadoop/
scp ~/etc/hadoop/hdfs-site.xml hadoop-datanode-2:~/etc/hadoop/
  • 配置hadoop core
    首先打开~/etc/hadoop/core-site.xml文件,在 - 之间添加如下内容:
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop-namenode:9000/</value>
  </property>

接下来将配置文件同步到Datanode:

scp ~/etc/hadoop/core-site.xml hadoop-datanode-1:~/etc/hadoop/
scp ~/etc/hadoop/core-site.xml hadoop-datanode-2:~/etc/hadoop/
  • 在hadoop中设置JAVA_HOME环境变量
    首先通过如下命令在本机修改hadoop-env.sh文件中的环境变量:
sed -i -e 's/\${JAVA_HOME}/\/usr\/java\/default/' ~/etc/hadoop/hadoop-env.sh

接下来将配置文件同步到Datanode:

scp ~/etc/hadoop/hadoop-env.sh hadoop-datanode-1:~/etc/hadoop/
scp ~/etc/hadoop/hadoop-env.sh hadoop-datanode-2:~/etc/hadoop/
  • 创建Namenode文件目录
    本步骤只需在Namenode上操作。
    首先创建目录:
mkdir ~/namenode 

编辑~/etc/hadoop/hdfs-site.xml文件,增加如下的配置项:

  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///usr/hadoop/namenode</value>
  </property>
  • 配置map-reduce:
    本步骤只需在Namenode上操作。
    打开~/etc/hadoop/mapred-site.xml文件,新增如下内容:
<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>
  • 配置yarn
    首先打开~/etc/hadoop/yarn-site.xml文件,在 - 之间添加如下内容:
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop-namenode</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>

接下来将配置文件同步到Datanode:

scp ~/etc/hadoop/yarn-site.xml hadoop-datanode-1:~/etc/hadoop/
scp ~/etc/hadoop/yarn-site.xml hadoop-datanode-2:~/etc/hadoop/
  • 配置slave
    打开etc/hadoop/slaves文件,添加如下内容:
hadoop-namenode
hadoop-datanode-1
hadoop-datanode-2

8. 运行示例进行验证

  • 请暂时关闭防火墙:
systemctl stop firewalld
  • 在Namenode上运行如下命令,分别启动hdfs和yarn服务:
start-dfs.sh
start-yarn.sh

在Namenode上运行jps命令,应该会看到如下进程:

NameNode
SecondaryNameNode
NodeManager
DataNode
ResourceManager
Jps

在Datanode上运行jps命令,应该会看到如下进程:

NodeManager
Jps
DataNode

namenode-info.png
访问http://192.168.1.231:8088/,可以看到如下图所示的页面,用来监控任务的执行情况:

res-node-manager

  • 运行示例程序
    接下来就可以运行示例程序了,hadoop2.7.3提供的示例程序做了这件事:用正则表达式dfs[a-z.]+来搜索所有的输入文件,并汇总和统计搜索到的结果。简单来说,map过程就是对每个文件分别进行处理,reduce过程就是将这些结果进行汇总。
    在Namenode上使用如下命令,开始这个过程:
su hadoop
cd ~
hdfs dfs -mkdir /user
hdfs dfs -mkdir /user/test
hdfs dfs -put etc/hadoop /user/test
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep /user/test/hadoop /user/test/output 'dfs[a-z.]+'

在如上命令中,我们把文件系统中的/user/test/hadoop文件夹下的文件作为示例程序的输入,并告知示例程序将结果存储到/user/test/hadoop目录中。
执行命令时,可以刷新http://192.168.1.231:8088/这个页面,来获取任务执行情况。
任务执行成功后,执行如下命令查看结果:

$ hdfs dfs -cat /user/test/output/*
6	dfs.audit.logger
4	dfs.class
3	dfs.server.namenode.
2	dfs.period
2	dfs.audit.log.maxfilesize
2	dfs.audit.log.maxbackupindex
1	dfsmetrics.log
1	dfsadmin
1	dfs.servers
1	dfs.replication
1	dfs.file

可以看到该程序的输出,就是所有输入文件中被正则表达式匹配到的内容以及这些内容被匹配到的次数的统计。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值