假设我们有三台机器:hadoop101/hadoop102/hadoop103
hadoop101为时间同步主服务
hadoop102/hadoop103同步hadoop101的时间
注意操作用户为:root
第一步:检查ntp服务是否安装
rpm -qa|grep ntp
安装NTP服务
yum install ntp
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap为此处我们是复制一行,改为192.168.100.0(我们的网段与默认不同)
restrict 192.168.100.0 mask 255.255.255.0 nomodify notrap
# 注释掉互联网时间
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 127.127.1.0
fudge 127.127.1.0 stratum 10
追加内容
#让硬件时间与系统时间一起同步
SYNC_HWCLOCK=yes
service ntpd status
service ntpd start
# 开机自动启动
chkconfig ntpd on
定时从hadoop101同步时间即可
crontab -e
增加一条计划任务
# 每隔十分钟同步一次
*/10 * * * * /usr/sbin/ntpdate hadoop101
Hadoop运行模式包括:本地模式、伪分布式模式以及完全分布式模式
安装文档参考官方
只跑mapreduce,没有hdfs(本地磁盘),没有yarn
单机上跑hdfs yarn mapreduce
环境
系统 | CentOS7 |
Hadoop | hadoop-3.1.3.tar.gz |
JDK | jdk-8u144-linux-x64.tar.gz |
机器 | hadoop101 (192.168.100.101) hadoop102 (192.168.100.102) hadoop103 (192.168.100.103) |
文件目录
/opt/software | 软件安装包存放路径 |
/opt/module | 软件安装路径 |
集群分布
NameNode | hadoop101 |
ResourceManager | hadoop102 |
Secondary NameNode | hadoop103 |
DataNode | hadoop101、hadoop102、hadoop103 |
NodeManager | hadoop101、hadoop102、hadoop103 |
关闭防火墙(所有机器执行)
# 关闭防火墙
sudo systemctl stop firewalld.service
# 禁用防火墙
sudo systemctl disable firewalld.service
# 查看防火墙运行状态
sudo systemctl status firewalld.service
以下操作单独在hadoop101执行即可,执行完毕后将其内容分发到各个服务器
创建目录并修改权限
sudo mkdir /opt/software
sudo mkdir /opt/module
sudo chown hadoop:hadoop /opt/module /opt/software
上传hadoop安装包和jdk安装包至/opt/software/目录下
解压
tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module/
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
配置系统环境变量
vi /etc/profile
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
验证安装
[hadoop@hadoop101 hadoop-3.1.3]$ java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
[hadoop@hadoop101 hadoop-3.1.3]$ hadoop version
Hadoop 3.1.3
Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r ba631c436b806728f8ec2f54ab1e289526c90579
Compiled by ztang on 2019-09-12T02:47Z
Compiled with protoc 2.5.0
From source with checksum ec785077c385118ac91aadde5ec9799
This command was run using /opt/module/hadoop-3.1.3/share/hadoop/common/hadoop-common-3.1.3.jar
准备分发hadoop101上面已安装好的文件
创建一个分发脚本,支持将指定目录文件一键分发到其他服务器
sudo vi /bin/xsync
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if ((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for((host=101; host<104; host++)); do
echo ------------------- hadoop$host --------------
rsync -av $pdir/$fname $user@hadoop$host:$pdir
done
改变xsync的执行权
sudo chmod +x /bin/xsync
将/bin/xsync分发到各个机器
sudo xsync /bin/xsync
分发其他安装配置文件
xsync /opt/module/hadoop-3.1.3/
xsync /opt/module/jdk1.8.0_144/
# profile需要root用户发送
sudo xsync /etc/profile
这里会需要输入每个节点的密码,可以通过配置免密来去掉输入密码的过程
在需要免密登录的机器上生成公私钥,将公钥放入需要被免密登录的机器,既可完成免密登录配置
比如现在我们需要hadoop101免密登录hadoop102、hadoop103
在hadoop101生成公私钥
ssh-keygen -t rsa #三次回车
将hadoop101公钥复制到hadoop102、hadoop103
ssh-copy-id hadoop102
hadoop101是hdfs的namenode所以hadoop101需要免密登录到101、102、103
hadoop102是yarn的resource manager所以hadoop102也要免密登录到101、102、103
注意免密时包含自身也要支持免密登录
Hadoop集群配置
默认配置
要获取的默认文件 | 文件存放在 Hadoop 的 jar 包中的位置 |
---|---|
core-default.xml | hadoop-common-3.1.3.jar/core-default.xml |
hdfs-default.xml | hadoop-hdfs-3.1.3.jar/hdfs-default.xml |
yarn-default.xml | hadoop-yarn-common-3.1.3.jar/yarn-default.xml |
mapred-default.xml | hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml |
所有的hadoop配置均在HADOOP_HOME/etc/hadoop/下
配置hadoop-env.sh,yarn-env.sh,mapred-env.sh文件,配置Java_HOME
补充:因为我们在/etc/profile中export JAVA_HOME所以,这里的步骤是可以忽略的
配置core-site.xml
<property>
<name>fs.defaultFSname>
<value>hdfs://hadoop101:8020value>
property>
<property>
<name>hadoop.tmp.dirname>
<value>/opt/module/hadoop-3.1.3/datavalue>
property>
<property>
<name>hadoop.http.staticuser.username>
<value>hadoopvalue>
property>
配置hdfs-site.xml
<property>
<name>dfs.namenode.http-addressname>
<value>hadoop101:9870value>
property>
<property>
<name>dfs.namenode.secondary.http-addressname>
<value>hadoop103:9868value>
property>
配置yarn-site.xml
<property>
<name>yarn.nodemanager.aux-servicesname>
<value>mapreduce_shufflevalue>
property>
<property>
<name>yarn.resourcemanager.hostnamename>
<value>hadoop102value>
property>
<property>
<name>yarn.nodemanager.env-whitelistname>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOMEvalue>
property>
配置mapred-site.xml
<property>
<name>mapreduce.framework.namename>
<value>yarnvalue>
property>
<property>
<name>mapreduce.jobhistory.addressname>
<value>hadoop103:10020value>
property>
<property>
<name>mapreduce.jobhistory.webapp.addressname>
<value>hadoop103:19888value>
property>
启动历史服务器:
mapred --daemon start historyserver
配置workers
hadoop101
hadoop102
hadoop103
分发配置文件
xsync /opt/module/hadoop-3.1.3/etc
格式化Namenode 在hadoop101
hdfs namenode -format
启动hdfs
start-dfs.sh
在配置了Resourcemanager机器上执行
start-yarn.sh
验证集群搭建
hdfs:
http://hadoop101:9870
yarn:
http://hadoop102:8088/cluster/nodes
测试MR–wordcount(单词统计案例)
mkdir input/wordcount
vi input/wordcount/aa.txt
abc
def efg
asd
上传hdfs
hadoop fs -put input /
执行job
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input/wordcount /output/wordcount
查看结果
[hadoop@hadoop101 ~]$ hadoop fs -cat /output/*
abc 1
asd 1
def 2
efg 1
关闭集群
stop-dfs.sh
stop-yarn.sh