目录

hadoop的几种部署模式:

单机模式:

伪分布式模式:

完全分布式模式:

高可用模式:

联邦模式:

安装分布式的准备:

伪分布式安装:

完全分布式安装:

高可用模式

安装过程中的问题

1.查看集群日志

2.主机名

3.启动的时候某一个进程启动不了(jps查看进程)

4.格式化的问题

 5.时间同步问题

6.环境变量的配置


hadoop的几种部署模式:

单机模式:

安装在一个节点上。

不存在分布式文件系统,所有的文件存取都是在本地模式,数据来源于本地存储。linux本地存储。

生产上肯定不会用,一般用于本地测试(快)

伪分布式模式:

安装在一个节点上。

存在分布式文件系统,但是所有进程全部运行在一台机器上。存在主从结构,也是分布式。

生产上不会用,一般用于个人学习。用的时候和完全分布式一样。

完全分布式模式:

主从结构,运行在多个节点。(一个主节点,多个从节点)

多个节点共同服务,依赖于namenode进行联系。

生产中用的比较少,集群的节点数比较少的时候会用(20个节点以下)

缺陷:一个主节点,一个冷备份节点

           主节点压力大,容易存在主节点的单点故障。(如果namenode宕机了,集群不能正常访问,集群瘫痪)

高可用模式:

多个主节点,多个从节点。

多个主节点中在同一时间只有一个主节点对外提供服务,称为active namenode,其他主节点处于热备份状态(standby namenode),时刻监控active namenode主节点的状态。

当active namenode宕机时,standby namenode立即进行切换为active namenode。所以standby namenode必须实时和active namenode的元数据保持一致。

高可用模式依赖于zookeeper(主从切换依赖zookeeper)

目前使用最广泛的集群模式。

缺陷:虽然有多个主节点,但是同一时间只有一个是active,集群中真正服务的主节点仍然是一台机器的能力。如果集群非常大,有1000台从节点机器,每台datanode的存储元数据都需要存在namenode中,namenode的压力会很大,namenode存储的东西过多,进行数据访问的时候效率过低。     

这个时候需要帮namenode分担压力,同一时间有多个主节点对外提供服务就好了(联邦模式)

联邦模式:

适用于大型集群

同一时间会有多个namenode共同服务。多个namenode之间相互协作的时候依赖于块池id,来区分哪个数据归属哪一 个namenode管理。多个namenode共同管理集群中的所有datanode ,分工明确的,每个 namenode只负责管理datanode上自己块池的数据。

块池:联邦模式中标志数据块的管理权限的

blockpoolID=BP-54673466-192.168.40.201-1531445892504

这个指的是当前的namenode所管理的块池的名字

缺陷:当其中一个active namenode宕机时,这个管理的blockpool就不可用。

           所以一般采用 :联邦+高可用

hadoop3 集群部署 hadoop集群部署模式_主机名

安装分布式的准备:

1)ip

vi /etc/sysconfig/network-scripts/ifcfg-eth0

hadoop3 集群部署 hadoop集群部署模式_主机名_02

  

硬件设备名、网卡名、开机是否加载配置文件、网络配置协议、IP、子网掩码、网关、域名解析、外网域名解析

2)主机名

vi /etc/sysconfig/network

HOSTNAME=主机名

3)映射

vi /etc/hosts

主机IP  主机名

192.168.40.161 host1

4)关闭防防火墙和selinux

service iptables stop  或者service iptables off
vi /etc/selinux/config
SELINUX=disabled    linux高级运维  权限认证
5)配置普通用户   赋予sudolers权限  root权限
vi /etc/sudoers
hadoop  ALL=(ALL)       ALL
登录普通用户:hadoop
6)免密登录:(用普通用户进行安装,以下步骤用普通用户登录)
ssh-keygen   生成秘钥(三次回车)
ssh-copy-id host1  对自身进行免密登录
ssh host1   验证免密登录
exit    退出登录

/home/hadoop/.ssh  当前用户的秘钥地址

7)将系统启动级别改为3

sudo vi /etc/inittab
# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)    关机    init 0
#   1 - Single user mode       单用户
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)    多用户  没有网络
#   3 - Full multiuser mode   完全多用户
#   4 - unused    弃用
#   5 - X11       图形化
#   6 - reboot (Do NOT set initdefault to this)  重启   init 6
id:3:initdefault

8)安装jdk

在家目录下创建目录apps

Alt+p 进入sftp,上传jdk,并解压到/home/hadoop/apps/jdk1.8.0_73

(注意: 用普通用户进行登录,否则,上传的时候,默认上传到root用户的家目录下)

tar -zxvf jdk-8u73-linux-x64.tar.gz   解压

配置环境变量:

sudo vi /etc/profile   
export JAVA_HOME=/home/hadoop/apps/jdk1.8.0_73
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile    
java -version  / javac   验证
如果jdk的版本是1.7的就卸载(说明是以前的)
卸载linux自带的jdk
rpm -qa | grep -i jdk      -i  忽略大小写
sudo rpm -e java-1.7.0-openjdk-1.7.0.99-2.6.5.1.el6.x86_64 --nodeps   解除依赖
sudo rpm -e java-1.6.0-openjdk-1.6.0.38-1.13.10.4.el6.x86_64 --nodeps  解除依赖
rpm -qa | grep jdk
source /etc/profile
 java -version

9)时间同步

伪分布不需要   完全分布式需要

注意:

关闭防火墙    service iptables stop

伪分布式安装:

伪分布式模式:在一台机器上运行

在安装hadoop的时候,会遇到版本选择问题。

不会选择最高版本---市场应用不广,有待测试;

不会选择低版本---很多功能不全;

选择适中版本---2.7.6

1)上传安装包(hadoop)

2)解压

 tar -xvzf hadoop-2.7.6.tar.gz -C apps/

3)修改配置文件

/apps/hadoop2.7.6/etc      (hadoop的配置文件,而不是家目录下的配置文件)

/home/hadoop/apps/hadoop-2.7.6/etc/hadoop

修改6个配置文件( 都是在hadoop-2.7.6/etc/hadoop下配置 )

1)hadoop-env.sh

vi hadoop-env.sh

export JAVA_HOME=/home/hadoop/apps/jdk1.8.0_73

找配置文件到官网去找(http://hadoop.apache.org/  找里面的document)

2)core-site.xml      核心文件配置文件    三个模块的公共的配置

vi core-site.xml
<property>
<name>fs.defaultFS</name>配置项的名字(不可改) 文件系统的默认访问路径
<value>hdfs://localhosts:9000</value>  配置项的值
</property>
hdfs://localhosts(主机名):9000(默认的端口号)
jdbc:mysql://localhost
3)hdfs-site.xml    hdfs的相关配置
vi hdfs-site.xml
<property>
<name>dfs.replication</name>  文件系统的副本个数, 文件存储的份数
<value>1</value>   伪分布式配一台节点
</property>
4) mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
<property>
<name>mapreduce.framework.name</name>  mapreduce程序的资源调度框架,框架为yarn
<value>yarn</value>
</property>
5)yarn-site.xml
vi yarn-site.xml
<property>
        <name>yarn.nodemanager.aux-services</name>  Yarn资源调度框架上跑的哪些计算任务
        <value>mapreduce_shuffle</value>
</property>

6)slaves

配置从节点的信息 (配置从节点的主机的信息)

   vi slaves

  改主机名为model(主机名)

 注意:

一行一个主机名   

主机名输完之后不要加空格  

也不要回车(除非多个主机名)

4)配置hadoop的环境变量

sudo vi /etc/profile
export JAVA_HOME=/home/hadoop/apps/jdk1.8.0_73
export HADOOP_HOME=/home/hadoop/apps/hadoop-2.7.6
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
hadoop version  检验

5)进行格式化 (不进行格式化,整个集群使用不了)执行命令  重要

hadoop namenode -format

成功:

18/07/12 16:31:08 INFO common.Storage: Storage directory /tmp/hadoop-hadoop/dfs/name has been successfully formatted.

如果格式化不成功,修改错误的地方  重新格式化   

格式化成功,只需要一次

6)启动

 启动hdfs:  namenode   datanode   secondarynamenode

start-dfs.sh  

jps 查看

进程号  进程名

27504 DataNode

27692 SecondaryNameNode

27804 Jps

27405 NameNode

   启动yarn:

start-yarn.sh

 jps 查看

27504 DataNode

27953 NodeManager

27988 Jps

27851 ResourceManager

27692 SecondaryNameNode

27405 NameNode

到此 伪分布式安装成功。

7)验证:

http://192.168.40.161:50070   hdfs的web网页

http://192.168.40.161:8088   yarn的web网页

(能访问到的前提是:防火墙关闭)

完全分布式安装:

集群规划:哪个节点上安装哪个进程(这里用三个节点)

hdfs: namenode(1) datanode(多个 3) secondarynamenode(1)

yarn: resourcemanager(1) nodemanager(3)

Hdfs 的进程安装在哪,Yarn 的进程安装在哪,如下:

hadoop01    namenode datanode nodemanager

hadoop02    datanode  secondarynamenode nodemanager

hadoop03    datanode  resourcemanager nodemanager

安装:准备工作:(如上 9个准备步骤)

    连接三个主机(hadoop01,hadoop02,hadoop03)

    依次检查准备工作是否做好:

1) ip addr 查看ip

2) cat /etc/sysconfig/network 主机名

3) cat /etc/hosts 映射

4) sudo service iptables status 关闭防火墙

      cat /etc/selinux/config

5) 配置普通用户,三台

6) 免密登录:普通用户

三台机器相互之间都需要做免密,用户名和密码一定要一致

ssh-keygen (三台都执行)

ssh-copy-id hadoop@hadoop01(三台都执行)

ssh-copy-id hadoop@hadoop02(三台都执行)

ssh-copy-id hadoop@hadoop03(三台都执行)

ssh hadoop01 验证

ssh hadoop02 验证

ssh hadoop03 验证

为了避免是root用户,加hadoop@;(格式:用户名@),不加这个,默认的是当前用户

/home/hadoop/.ssh当前用户的秘钥

7) 将系统启动级别改为3

检查 cat /etc/inittab

8) 安装jdk

上传安装包 先上传到一台 配置完成之后再发送

上传jdk, 并解压到/home/hadoop/apps/jdk1.8.0_73

tar -zxvf jdk-8u73-linux-x64.tar.gz -C /home/hadoop/apps
配置环境变量:
    sudo vi /etc/profile
    export JAVA_HOME=/home/hadoop/apps/jdk1.8.0_73
    export PATH=$PATH:$JAVA_HOME/bin
    source /etc/profile
    java -version 或javac
hadoop02 hadoop03远程发送:
    scp -r jdk1.8.0_73 hadoop02:/home/hadoop/apps/
    scp -r jdk1.8.0_73 hadoop03:$PWD
    sudo scp /etc/profile hadoop02:/etc/
    sudo scp /etc/profile hadoop03:/etc/
    source /etc/profile    2个节点都source
如果jdk的版本是1.7的就卸载(说明是以前的)
卸载linux自带的jdk
rpm -qa | grep jdk -i 忽略大小写
sudo rpm -e java-1.7.0-openjdk-1.7.0.99-2.6.5.1.el6.x86_64 --nodeps
sudo rpm -e java-1.6.0-openjdk-1.6.0.38-1.13.10.4.el6.x86_64 --nodeps
source /etc/profile
java -version

发送jdk到hadoop02,hadoop03

在hadoop02,hadoop03里的家目录下创建apps

scp -r jdk1.8.0_73 hadoop02:$PWD

scp -r jdk1.8.0_73 hadoop03:$PWD

9)时间同步

完全分布式需要 多台机器的 集群的 时间同步

命令: ntpdate 时间同步服务器

例如:sudo ntpdate ntp1.aliyun.com (三台一起用这个命令)

注意:不是所有服务器都能用;可以用sudo ntpdate cn.pool.ntp.org

开始安装:

jdk远程发送给其他两个主机

hadoop先在一台机器上安装,再远程发送

1)上传hadoop压缩包

2)解压

tar -xvzf hadoop-2.7.6.tar.gz -C /home/hadoop/apps
3)修改配置文件
cd /home/hadoop/apps/hadoop-2.7.6/etc/hadoop
hadoop-env.sh
export JAVA_HOME=/home/hadoop/apps/jdk1.8.0_73
core-site.xml
<property>
<name>hadoop.tmp.dir</name> hadoop临时文件的存储目录
<value>/home/hadoop/data/hadoopdata</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:9000</value>
</property>
hdfs-site.xml
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/data/hadoopdata/name</value>
<description>namenode的存储目录,为了保证元数据的安全一般配置多个不同目录</description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/data/hadoopdata/data</value>
<description>datanode 的数据存储目录</description>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
<description>HDFS 的数据块的副本存储个数</description>
</property>
<property>
<name>dfs.secondary.http.address</name>
<value>hadoop02:50090</value> secondarynamenode的访问路径
<description>secondarynamenode 运行节点的信息,和 namenode 不同节点</description>
</property>
mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop03</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
<description>YARN 集群为 MapReduce 程序提供的 shuffle 服务</description>
</property>
vi slaves    从节点的信息
hadoop01
hadoop02
hadoop03
4)配置hadoop的环境变量
sudo vi /etc/profile
export JAVA_HOME=/home/hadoop/apps/jdk1.8.0_73
export HADOOP_HOME=/home/hadoop/apps/hadoop-2.7.6
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
hadoop version
5)远程发送到其他两个节点
scp -r hadoop-2.7.6 hadoop02:$PWD
scp -r hadoop-2.7.6 hadoop03:$PWD

sudo scp /etc/profile hadoop02:/etc/
sudo scp /etc/profile hadoop03:/etc/

source /etc/profile

6)格式化

只需要在一台机器上执行,一定在namenode节点上 hdfs的主节点上 hadoop01

hadoop namenode -format

格式化成功会出现 successfully formatted

7)启动

启动hdfs:

start-dfs.sh 在任意一个节点上执行,执行一次
hadoop01:namenode datanode
hadoop02:datanode secondarynamenode
hadoop03:datanode
启动yarn:
start-yarn.sh 最好在yarn的主节点,如果不在,会造成resourcemanager启动失败
hadoop01:nodemanager
hadoop02:nodemanager
hadoop03:resourcemanager nodemanager
8) 验证
验证格式
Hdfs:namenode:50070 hadoop01:50070
Yarn:resourcemanager:8088 hadoop03:8088
验证:
http://192.168.2.101:50070 hdfs的web网页
http://192.168.2.103:8088 yarn的web网页

高可用模式

安装过程中的问题

1.查看集群日志

/home/hadoop/apps/hadoop-2.7.6/logs    存放集群的日志信息

日志名称解释:

hadoop(进程归属)-hadoop(用户名)-datanode(进程名)-hadoop01(节点).log

yarn-hadoop-nodemanager-hadoop01.log

以.log结尾的是启动日志;

以.out结尾的是退出日志;

日志监听:

tail -f 文件路径

tail -f/F yarn-hadoop-nodemanager-hadoop01.log

tail -100 yarn-hadoop-nodemanager-hadoop01.log      查看当前日志末尾100行信息

看集群是否有问题,最核心的是看日志文件。日志文件不报错,肯定没有问题

如何判断进程启动成功:(看启动日志)

监听顺序:

stop-dfs.sh

tail -f hadoop-hadoop-datanode-hadoop01.log(在hadoop01上监听)

start-dfs.sh 先监听,再开启(在另一台hadoop01上开启)

想看集群是否有问题,集群启动完毕,只需看日志文件的末尾100行

tail -100 yarn-hadoop-nodemanager-hadoop01.log

结果不报错,那么启动成功

2.主机名

日志文件出现错误:unknown hostname

/etc/sysconfig/network

/etc/hosts

3.启动的时候某一个进程启动不了(jps查看进程)

先检查日志文件有没有报错。日志文件报错,排除错误后重新启动;日志文件没有报错,集群没问题,有可能是通信问题

方式1)先把集群全部停掉 重启 (暴力方式)

                         stop-dfs.sh

                         start-dfs.sh

方式2)缺哪一个进程 ,单独启动哪个进程

                        如果缺hdfs的相关进程,单独启动的命令:(启动程序都在sbin/下)

                       命令:hadoop-daemon.sh start 单独启动hdfs的相关命令的进程

                                 hadoop-daemon.sh start namenode

                                 hadoop-daemon.sh start datanode

                                 hadoop-daemon.sh start secondarynamenode

                       命令:yarn的相关命令,单独启动的命令:(启动程序都在sbin/下)

                                 yarn-daemon.sh start yarn 单独启动yarn的相关命令

                                 yarn-daemon.sh start resourcemanager

                                 yarn-daemon.sh start nodemanager

                      单独启动的命令:哪个节点上缺,就在哪一个节点上执行

4.格式化的问题

成功的格式化只能进行一次,如果不成功,一直努力,直到成功。把集群恢复到最初搭建好的状态,再格式化。

hdfs的格式化在做什么事情:(hadoop namenode -format)

创建namenode的数据存储目录 ,生成最初的元数据(主节点上的namenode)

/home/hadoop/data/hadoopdata/name/current/ ls

集群最初的元数据信息:fsimage_0000000000000000000 fsimage_0000000000000000000.md5 seen_txid VERSION

在这个元数据中有一个重要的信息:VERSION----记录的是集群当前的版本号,每次格式化一次都会生成一个全新的

cat VERSION         内容如下:
namespaceID=163052539
clusterID=CID-e10d7808-c7ea-48b6-832c-05801cad0b9f      集群的id
同一个集群这个值一定是相同的
cTime=0   创建时间
storageType=NAME_NODE    存储类型
blockpoolID=BP-54673466-192.168.40.201-1531445892504    块池id
layoutVersion=-63

datanode的目录结构是在集群启动的过程中自动创建的:(start-dfs.sh)
集群启动的过程中自动创建datanode的目录结构:/home/hadoop/data   创建data
/home/hadoop/data/hadoopdata/data/current
/home/hadoop/data/hadoopdata/data/in_use.lock
current:datanode的信息
in_use.lock:锁文件,标志这个节点上启动了一个datanode进程,如果再启动另外一个就不允许启动。
                     目的:保证一个节点启动一个datanode进程
在/home/hadoop/data/hadoopdata/data/current下ls

cat VERSION              Datanode的VERSION信息

storageID=DS-34cc3c93-efa6-41a5-9c30-0ba20c3a6982

clusterID=CID-e10d7808-c7ea-48b6-832c-05801cad0b9f     集群id

cTime=0

datanodeUuid=e215a9f5-9a6c-4f9f-b029-fc32b7f3733b

storageType=DATA_NODE

layoutVersion=-56


如果成功格式化之后启动了集群后又进行格式化,namenode的集群id信息会发生改变,datanode记录的集群id还是原来的,这时候就会造成datanode、namenode启动不了

集群关闭的命令:(把集群恢复到最初搭建好的状态)

stop-dfs.sh   在任意一个节点执行都行

stop-yarn.sh 在yarn的主节点上执行,否则会造成resourceManager关不了

 5.时间同步问题

机器不能联网:

手动进行同步

date -s ""

能联网的时候:

外部的时间服务器、自己搭建时间服务器

ntpdate "时间同步器的网址"

目的:是为了和北京时间保持一致吗?不是

是为了集群中各个节点之间的时间保持一致,集群中的各个节点需要通信,时间戳

6.环境变量的配置

/etc/profile

~/.bash_profile

~/.bashrc

加载顺序:

系统的环境变量   ->    ~/.bash_profile   ->     ~/.bashrc

生效顺序:

最后加载的最终生效

ps:在hadoop中 每个节点的自身的数据存储在自己的节点上