我用 Linux程序员玩转大数据

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

2017-02-22  本文已影响1775人  泰克尼客

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

1. 实验环境的相关信息

角色 地址
Namenode 192.168.1.231
Datanode 192.138.1.232
Datanode 192.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
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

使环境变量及时生效。

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免密钥登录,省去输入密码的麻烦。

su hadoop
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,并做简单的配置。

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
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节点。

su hadoop
# Namenode兼做Datanode
mkdir ~/datanode 
# 远程到Datanode节点创建对应的目录
ssh hadoop-datanode-1 "mkdir ~/datanode" 
ssh hadoop-datanode-2 "mkdir ~/datanode" 
  <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/
  <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/
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/
mkdir ~/namenode 

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

  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///usr/hadoop/namenode</value>
  </property>
<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>
<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/
hadoop-namenode
hadoop-datanode-1
hadoop-datanode-2

8. 运行示例进行验证

systemctl stop firewalld
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
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

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

上一篇 下一篇

猜你喜欢

热点阅读