Hadoop的部署模式以及安装问题

目录

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就不可用。

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

安装分布式的准备:

1)ip

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

  

硬件设备名、网卡名、开机是否加载配置文件、网络配置协议、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中 每个节点的自身的数据存储在自己的节点上

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值