大数据入门--hadoop(一)--分布式集群搭建
准备工作
- vm建立虚拟机
- 虚拟机配置IP、更改hostname、配置hosts、创建新用户,为新用户增加sudo权限,免密登录
暂时参考:以后更新步骤。和我一起学Hadoop(一)
ntp时间同步
假设我们有三台机器:hadoop101/hadoop102/hadoop103
hadoop101为时间同步主服务
hadoop102/hadoop103同步hadoop101的时间
注意操作用户为:root
第一步:检查ntp服务是否安装
rpm -qa|grep ntp
安装NTP服务
yum install ntp
hadoop101配置
修改/etc/ntp.conf
- 修改1(授权192.168.1.0-192.168.1.255网段上的所有机器可以从这台机器上查询和同步时间)
#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
- 修改2(集群在局域网中,不使用其他互联网上的时间)
# 注释掉互联网时间
#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
- 添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)
server 127.127.1.0
fudge 127.127.1.0 stratum 10
修改/etc/sysconfig/ntpd 文件
追加内容
#让硬件时间与系统时间一起同步
SYNC_HWCLOCK=yes
重新启动ntpd服务
service ntpd status
service ntpd start
# 开机自动启动
chkconfig ntpd on
其他服务器配置
定时从hadoop101同步时间即可
crontab -e
增加一条计划任务
# 每隔十分钟同步一次
*/10 * * * * /usr/sbin/ntpdate hadoop101
hadoop组成
- hdfs
- namenode
- datanode
- secondary namenode
- mapreduce
- app master
- container
- yarn
- resource manger
- node manager
集群模式
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
<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:8020</value>
</property>
<!-- 指定 hadoop 数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置 HDFS 网页登录使用的静态用户为 hadoop -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>hadoop</value>
</property>
配置hdfs-site.xml
<!-- nn web 端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop101:9870</value>
</property>
<!-- 2nn web 端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop103:9868</value>
</property>
配置yarn-site.xml
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop102</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
配置mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop103:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop103:19888</value>
</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