Hadoop集群搭建

基础配置

三台机器上编辑/etc/hosts配置文件,修改主机名。

image

三台机器在集群中担任的角色:

  • master:NameNode、DataNode、ResourceManager、NodeManager
  • node1:DataNode、NodeManager
  • node2:DataNode、NodeManager

配置ssh免密登录

1
2
3
4
# 三台机器上分别执行,互相免密登录
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub node1
ssh-copy-id -i ~/.ssh/id_rsa.pub node2

安装JDK

1
2
3
4
# 官网下载
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
http://anchnet-script.oss-cn-shanghai.aliyuncs.com/oracle/jdk-8u171-linux-x64.rpm
yum localinstall jdk-8u171-linux-x64.rpm -y

配置java环境变量

1
2
3
4
5
6
7
8
# 三台均操作
vim /etc/profile
JAVA_HOME=/usr/java/jdk1.8.0_171-amd64
JAVA_BIN=/usr/java/jdk1.8.0_171-amd64/bin
JRE_HOME=/usr/java/jdk1.8.0_171-amd64/jre
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
# source命令加载配置文件,让其生效
source /etc/profile

Hadpop配置分发

下载hadoop

1
2
https://www.apache.org/dist/hadoop/common/
wget https://www.apache.org/dist/hadoop/common/hadoop-2.6.5/hadoop-2.6.5.tar.gz

解压

1
tar -zxvf hadoop-2.6.5.tar.gz -C /data/modules

查看hadoop目录结构

1
cd /data/modules/hadoop-2.6.5/

image

  • bin目录存放可执行文件
  • etc目录存放配置文件
  • sbin目录下存放服务的启动命令
  • share目录下存放jar包与文档

配置hadoop环境变量

1
2
3
4
vim ~/.bash_profile
export HADOOP_HOME=/data/modules/hadoop-2.6.5/
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
source !$

编辑hadoop配置文件

  • 编辑etc/core-site.xml
1
2
3
4
5
6
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://10.234.2.169:8020</value>
# 指定默认的访问地址以及端口号
</property>
  • 编辑etc/hdfs-site.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <configuration>
    <property>
    <name>dfs.namenode.name.dir</name>
    <value>/data/hadoop/app/tmp/dfs/name</value>
    # namenode临时文件所存放的目录
    </property>
    <property>
    <name>dfs.datanode.data.dir</name>
    <value>/data/hadoop/app/tmp/dfs/data</value>
    # datanode临时文件所存放的目录
    </property>
  • 创建数据目录

    1
    2
    mkdir -p /data/hadoop/app/tmp/dfs/name
    mkdir -p /data/hadoop/app/tmp/dfs/data
  • 编辑etc/yarn-site.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <configuration>
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>
    <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>master</value>
    </property>
    </configuration>
  • 编辑etc/mapred-site.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    cp mapred-site.xml.template mapred-site.xml
    vim !$
    <configuration>
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    # 指定mapreduce运行在yarn框架上
    </property>
    </configuration>
  • 配置从节点的主机名etc/slaves

    1
    2
    node1
    node2

2台node节点也需创建对应安装目录,环境变量配置等

1
2
3
4
5
6
scp ~/.bash_profile node1:~/.bash_profile
scp * node1:/data/modules/hadoop-2.6.5/etc/hadoop/
# 2台节点上如下操作
source ~/.bash_profile
mkdir -p /data/hadoop/app/tmp/dfs/name
mkdir -p /data/hadoop/app/tmp/dfs/data

Hadoop格式化及启停

对NameNode做格式化,只需要在master上执行即可

1
2
[root@master hadoop]# hdfs namenode -format
# 格式化是对HDFS这个分布式文件系统中的DataNode进行分块,统计所有分块后的初始元数据的存储在NameNode中

格式化之后就可以启动Hadoop集群

1
2
# sbin目录下,执行脚本,执行后要输入master服务器的密码
[root@master hadoop]# ./start-all.sh

查看机器进程

  • master
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@master sbin]# jps
19237 SecondaryNameNode
22231 NodeManager
21978 ResourceManager
19019 NameNode
30941 Jps
21327 DataNode
# 如果master上的某些服务进程未启动,需要再次手动执行脚本启动
# 启动NameNode
sbin/hadoop-daemon.sh start namenode
# 启动DataNode
sbin/hadoop-daemon.sh start datanode
# 启动SecondaryNameNode
sbin/hadoop-daemon.sh start secondarynamenode
# 启动Resourcemanager
sbin/yarn-daemon.sh start resourcemanager
# 启动nodemanager
sbin/yarn-daemon.sh start nodemanager
  • node
    1
    2
    3
    4
    [root@node1 ~]# jps
    25827 Jps
    18742 DataNode
    20583 NodeManager

访问测试

访问主节点 50070

image

访问主节点 YARN的web页面

image
点击“Active Nodes”查看存活的节点

执行命令

1
2
3
4
5
hdfs dfs -ls /
hdfs dfs -mkdir /test123
hdfs dfs -put ./test.sh /test123
# 然后去其他节点查看,不同的节点,访问的数据也是一样的
hdfs dfs -ls /

运行MapReduce Job

在Hadoop的share目录里,自带了一些jar包,里面带有一些mapreduce实例小例子。位置在/data/modules/hadoop-2.6.5/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar

  • 创建输入目录

    1
    2
    3
    4
    5
    6
    7
    bin/hdfs dfs -mkdir -p /test1/input
    # 原始文件
    [root@master hadoop-2.6.5]# cat /data/hadoop/test1.input
    hadoop hadoop hive
    mapreduce hive storm
    sqoop hadoop hive
    spark hadoop hbase
  • 上传到HDFS的/test1/input目录中

image

  • 运行WordCount MapReduce Job
    1
    [root@master hadoop-2.6.5]# bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar wordcount /test1/input /test1/output

image

YARN web控制台查看
image

  • 查看输出结果

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    [root@master hadoop-2.6.5]# hdfs dfs -ls /test1/output
    Found 2 items
    -rw-r--r-- 3 root supergroup 0 2018-12-13 15:22 /test1/output/_SUCCESS
    -rw-r--r-- 3 root supergroup 60 2018-12-13 15:22 /test1/output/part-r-00000
    # output目录中有两个文件,_SUCCESS文件是空文件,有这个文件说明Job执行成功。part-r-00000文件是结果文件,其中-r-说明这个文件是Reduce阶段产生的结果。一个reduce会产生一个part-r-开头的文件。
    # 查看执行结果
    [root@master hadoop-2.6.5]# hdfs dfs -cat /test1/output/part-r-00000
    hadoop 4
    hbase 1
    hive 3
    mapreduce 1
    spark 1
    sqoop 1
    storm 1
    # 结果是按照键值排序好的
  • 停止Hadoop

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 主节点上执行 stop-all.sh,如果进程未全部终止,就执行如下脚本对应停止。
    [root@master hadoop-2.6.5]# sbin/hadoop-daemon.sh stop namenode
    stopping namenode
    [root@master hadoop-2.6.5]# sbin/hadoop-daemon.sh stop datanode
    stopping datanode
    [root@master hadoop-2.6.5]# sbin/yarn-daemon.sh stop resourcemanager
    stopping resourcemanager
    [root@master hadoop-2.6.5]# sbin/yarn-daemon.sh stop nodemanager
    stopping nodemanager

开启历史服务

Hadoop开启历史服务可以在web页面上查看Yarn上执行job情况的详细信息。可以通过历史服务器查看已经运行完的Mapreduce作业记录,比如用了多少个Map、用了多少个Reduce、作业提交时间、作业启动时间、作业完成时间等信息。

  • 开启日志聚集
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # Hadoop默认是不启用日志聚集的。在yarn-site.xml文件里配置启用日志聚集。
    <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
    </property>
    <property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>106800</value>
    </property>
    # yarn.log-aggregation-enable:是否启用日志聚集功能。
    # yarn.log-aggregation.retain-seconds:设置日志保留时间,单位是秒。

将配置文件发布到其他节点:

1
2
scp etc/hadoop/yarn-site.xml node1:/data/modules/hadoop-2.6.5/etc/hadoop/
scp etc/hadoop/yarn-site.xml node2:/data/modules/hadoop-2.6.5/etc/hadoop/

重启Yarn进程和HistoryServer进程

1
2
3
4
sbin/stop-yarn.sh
sbin/start-yarn.sh
sbin/mr-jobhistory-daemon.sh stop historyserver
sbin/mr-jobhistory-daemon.sh start historyserver
  • 测试日志聚集
    运行一个demo MapReduce,使之产生日志:
    1
    2
    [root@master hadoop-2.6.5]# bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar wordcount2 /test1/input /test1/output2
    # 访问主节点的19888端口,运行job后就可以在web页面查看各个Map和Reduce的日志了。

image
image
image

-------------本文结束感谢您的阅读-------------
原创技术分享,感谢您的支持。