Hadoop集群搭建

Posted 有智者弑静成

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop集群搭建相关的知识,希望对你有一定的参考价值。

Hadoop集群搭建

 发行版本

Hadoop发行版本分为开源社区版商业版

  • 社区版是Apache基金会维护的版本,官方维护版本体系。
  • 商业版是第三方商业公司在社区办Hadoop基础上进行了修改整合以及各个服务组件兼容性测试而发行的版本

Hadoop1.0是由一个分布式文件系统HDFS和一个离线计算框架MapReduce组成

Hadoop2.0则包含一个支持NameNode横向扩展的HDFS,一个资源管理系统YARN和一个运行在YARN上的离线计算框架MapReduce。相比1.0Hadoop2.0功能更加强大,且具有更好的扩展性、性能,并支持多种计算框架

Hadoop3.0相比之前的Hadoop2.0有一系列的功能增强。但目前还是alpha版本有很多bug不能保证API的稳定和质量

集群简介

Hadoop集群具体来说是包含两个集群:HDFS集群和YARN集群,两者逻辑上分离但物理上常在一起

集群是多台机器做同一件事情(高性能HPC)  或者任意一台机器处理一个事情(负载均衡LBC)主备高可用(HA)
主从和主备
    * 主从:主和从干的活不一样,但是从受主的管理,而且主从同时运行
    * 主备:主和备干的活一模一样 同一时刻同一时间只能有一个服务,主挂掉备启动 高可用HA

HDFS集群负责海量数据的存储

主要角色有:NameNode、DataNode、SecondaryNameNode

YARN集群负责海量数据运算时的资源调度

主要角色有:ResourceManager、NodeManager

MapReduce

MapReduce是一个分布式运算变成框架,是应用程序开苞,由用户按照变成规范进行程序开发,打包后运行在HDFS集群上,并且受到YARN集群的资源调度管理.

Hadoop部署方式分类

  • 独立模式Standalone mode 又称为单机模式,仅1台机器运行1个java进程,主要用于调试。
  • 伪分布式模式Pseudo-Distributed mode 伪分布模式也是在 1 个机器上运行 HDFS 的 NameNode 和 DataNode、YARN 的ResourceManger 和 NodeManager,但分别启动单独的 java 进程,主要用于调试。
  • 集群模式Cluster mode 集群模式主要用于生产环境部署。会使用 N 台主机组成一个 Hadoop 集群。
    这种部署模式下,主节点和从节点会分开部署在不同的机器上。

    node-1  NameNode  DataNode                        ResourceManager   NodeManager
    node-2            DataNode   SecondaryNameNode                      NodeManager
    node-3            DataNode                                          NodeManager
    

集群按以上分布的原因

  • Namenode和SecondaryNameNode占内存不放在一起
  • 为了方便一般吧不同服务的老大都放在一起
  • 那台机器进行了DataNode安装就一定涉及到了资源管理NodeManager

具体搭建步骤

搭建前准备

1.准备Linux环境

1.0 配置好各虚拟机的网络(采用NAT联网模式)

    第一种:通过Linux图形界面进行修改(桌面版本Centos)
        进入Linux图形界面 
        -> 右键点击右上方的两个小电脑 
        -> 点击Edit connections
        -> 选中当前网络System eth0 
        -> 点击edit按钮 
        -> 选择IPv4 
        -> method选择为manual 
        -> 点击add按钮 
        -> 添加IP:192.168.1.101 子网掩码:255.255.255.0 网关:192.168.1.1 -> apply

    第二种:修改配置文件方式
        vi /etc/sysconfig/network-scripts/ifcfg-eth0
        DEVICE="eth0"
        BOOTPROTO="static"               ###
        HWADDR="00:0C:29:3C:BF:E7"
        IPV6INIT="yes"
        NM_CONTROLLED="yes"
        ONBOOT="yes"
        TYPE="Ethernet"
        UUID="ce22eeca-ecde-4536-8cc2-ef0dc36d4a8c"
        IPADDR="192.168.1.101"           ###
        NETMASK="255.255.255.0"          ###
        GATEWAY="192.168.1.1"            ###

1.1修改各个虚拟机主机名

    vi /etc/sysconfig/network

    NETWORKING=yes
    HOSTNAME=node-1    

1.2修改主机名和IP的映射关系

    vi /etc/hosts

    192.168.1.101    node-1
    192.168.1.102    node-2
    192.168.1.103    node-3

1.3关闭防火墙

    #查看防火墙状态
    service iptables status
    #关闭防火墙
    service iptables stop
    #查看防火墙开机启动状态
    chkconfig iptables --list
    #关闭防火墙开机启动
    chkconfig iptables off

1.4.配置ssh免登陆

#生成ssh免登陆密钥
ssh-keygen -t rsa (四个回车)
执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
将公钥拷贝到要免密登陆的目标机器上
ssh-copy-id node-2

1.5 同步集群时间

常用的手动进行时间的同步
    date -s "2017-03-03 03:03:03"
或者网络同步:
    yum install ntpdate
    ntpdate cn.pool.ntp.org
注:在分布式集群环境中 系统的时间同步非常重要有些软件就是根据彼此时间差来判断对方是否活着在集群中,优先确保各个机器之间的时间是同步的,其次在去确保集群跟外界时间同步。

2.安装JDK

2.1上传jdk

    rz jdk-8u65-linux-x64.tar.gz

2.2解压jdk

    tar -zxvf jdk-8u65-linux-x64.tar.gz -C /root/apps

2.3将java添加到环境变量中

    vim /etc/profile
    #在文件最后添加
    export JAVA_HOME=/root/apps/jdk1.8.0_65
    export PATH=$PATH:$JAVA_HOME/bin
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

    #刷新配置
    source /etc/profile

3.安装hadoop2.7.4

上传hadoop的安装包到服务器
 hadoop-2.7.4-with-centos-6.7.tar.gz
 解压安装包
 tar zxvf hadoop-2.7.4-with-centos-6.7.tar.gz
注意:hadoop2.x的配置文件目录:$HADOOP_HOME/etc/hadoop

3.1配置hadoop

第一个:hadoop-env.sh

vi hadoop-env.sh
export JAVA_HOME=/root/apps/jdk1.8.0_65

第二个:core-site.xml

<!-- 指定HADOOP所使用的文件系统schema(URI),HDFS的老大(NameNode)的地址 -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://node-1:9000</value>
</property>

<!-- 指定hadoop运行时产生文件的存储目录,默认/tmp/hadoop-${user.name} -->
<property>
    <name>hadoop.tmp.dir</name>
    <value>/home/hadoop/hadoop-2.4.1/tmp</value>
</property>

第三个:hdfs-site.xml

<!-- 指定HDFS副本的数量 -->
<property>
    <name>dfs.replication</name>
    <value>2</value>   //包含源文件一共2分
</property>

<property>
     <name>dfs.namenode.secondary.http-address</name>
      <value>node-22:50090</value>
</property>

第四个:mapred-site.xml

mv mapred-site.xml.template mapred-site.xml
vi mapred-site.xml

<!-- 指定mr运行时框架,这里指定在yarn上,默认是local -->
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

第五个:yarn-site.xml

<!-- 指定YARN的老大(ResourceManager)的地址 -->
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>node-21</value>
</property>

<!-- NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序默认值:"" -->
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

第六个:slaves文件,里面写上从节点所在的主机名字

vi slaves
node-21
node-22
node-23

3.2将hadoop添加到环境变量

vim /etc/proflie
    export JAVA_HOME=/root/apps/jdk1.8.0_65
    export HADOOP_HOME=/root/apps/hadoop-2.7.4
    export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

source /etc/profile

3.3格式化namenode(本质是对namenode进行初始化)

    hdfs namenode -format(hadoop namenode -format)

推荐使用hadoop namenode -format 这是hadoop2提供改的 前一个是hadoop1提供的按照最新的选择

首次启动HDFS时,必须对其进行格式化操作

所谓的namenode的格式化就是针对hdfs集群进行初始化,在这当中,创建hadoop数据存储的目录(hadoop.tmp.dir)还会创建一些和hdfs相关文件,创建集群的id编号clusterID=CID-8e80457a-f23e-4b43-96ff-035e11b2e360

不要理解成传统意义上的格式化

格式化只能进行一次,一般在集群新搭建的时候进行

/export/data/hadoop/dfs/name/current
-rw-r--r--. 1 root root 321 Dec  4 11:51 fsimage_0000000000000000000
-rw-r--r--. 1 root root  62 Dec  4 11:51 fsimage_0000000000000000000.md5
-rw-r--r--. 1 root root   2 Dec  4 11:51 seen_txid
-rw-r--r--. 1 root root 208 Dec  4 11:51 VERSION

查看该目录下文件可以看出是刚刚启动改的集群
cat VERSION
里保存了集群编号 这个id唯一标识

想要重新格式化需要重启系统

3.4启动hadoop

启动方式有两种

单点逐个启动

在主节点上使用以下命令启动 HDFS NameNode:

hadoop-daemon.sh start namenode

在每个 从节点上使用以下命令启动 HDFS DataNode:

hadoop-daemon.sh start datanode
hadoop-daemons.sh start datanode 

datanode 结合 slaves 文件 启动所有 DataNode 。

在主节点上使用以下命令启动 YARN ResourceManager:

yarn-daemon.sh start resourcemanager resourcemanager 

在每个 从节点上使用以下命令启动 YARN nodemanager:
yarn-daemon.sh start nodemanager
yarn-daemons.sh start nodemanager
结合 slaves 启动所有 nodemanager 。

以上脚本位于$HADOOP_PREFIX/sbin/目录下。如果想要停止某个节点上角色,只需要把命令中的start改为stop即可。

脚本一键启动

如果配置了 etc/hadoop/slaves 和 ssh 免密登录,则可以使用程序脚本启动所有 Hadoop 两个集群的相关进程,在主节点所设定的机器上执行。

hdfs:$HADOOP_PREFIX/sbin/start-dfs.sh 
yarn: $HADOOP_PREFIX/sbin/start-yarn.sh 

停止集群:
stop-dfs.sh
stop-yarn.sh

3.5验证是否启动成功

    使用jps命令验证
    27408 NameNode
    28218 Jps
    27643 SecondaryNameNode   (secondarynamenode)  这个进程只能在该主进程处
    28066 NodeManager
    27803 ResourceManager
    27512 DataNode

    http://192.168.1.101:50070 (HDFS管理界面)
    http://192.168.1.101:8088 (MR管理界面)

Hadoop初体验

HDFS使用

从 Linux 本地上传一个文本文件到 hdfs 的/test/input 目录下

hadoop  fs -mkdir  -p  /wordcount/input
hadoop  fs -put  /root/somewords.txt   /test/input

上传后可以在NameNode管理页面查找到
192.168.XXX.XXX:50070 -> Utilities

运行mapreduce程序

在 Hadoop 安装包的 hadoop-2.7.4/share/hadoop/mapreduce 下有官方自带
的 mapreduce 程序。我们可以使用如下的命令进行运行测试。 示例程序 jar:
hadoop-mapreduce-examples-2.7.4.jar
计算圆周率:

hadoop  jar hadoop-mapreduce-examples-2.7.4.jar  pi 2 5

关于圆周率的估算,感兴趣的可以查询资料 Monte Carlo 方法来计算 Pi 值。





















































以上是关于Hadoop集群搭建的主要内容,如果未能解决你的问题,请参考以下文章

如何搭建hadoop集群 桥接

Hadoop集群搭建(一主二从)

【大数据】使用Docker搭建Hadoop集群

大数据实战——hadoop集群安装搭建

Hadoop集群搭建(一主二从)

Hadoop集群搭建(一主二从)