大数据入门--hadoop(一)--分布式集群搭建

大数据入门--hadoop(一)--分布式集群搭建

  • 准备工作
    • ntp时间同步
      • hadoop101配置
        • 修改/etc/ntp.conf
        • 修改/etc/sysconfig/ntpd 文件
        • 重新启动ntpd服务
      • 其他服务器配置
  • hadoop组成
  • 集群模式
    • 本地模式
    • 伪分布式
    • 完全分布式
      • 安装步骤

准备工作

  1. vm建立虚拟机
  2. 虚拟机配置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


<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
大数据入门--hadoop(一)--分布式集群搭建_第1张图片

yarn:
http://hadoop102:8088/cluster/nodes
大数据入门--hadoop(一)--分布式集群搭建_第2张图片
测试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

你可能感兴趣的:(大数据,hadoop,hadoop)