Hadoop----【基础知识、集群安装、常用Shell命令】

1. Hadoop基础

1.1 Hadoop介绍

​ Hadoop是 Apache 旗下的一个用 java 语言实现开源软件框架,是一个开发和运行处理大规模数据的软件平台。允许使用简单的编程模型在大量计算机集群上对大型数据集进行分布式处理。

  • 狭义上 : Hadoop是处理大数据的软件平台
    • HDFS(分布式文件系统) : 解决海量数据存储
    • YARN(作业调度和集群资源管理的框架) : 解决资源任务调度
    • MAPREDUCE(分布式运算编程框架) : 解决海量数据计算
  • 广义上 : Hadoop生态圈

1.2 Hadoop特点

  • 扩展能力强
  • 成本低
  • 高效率
  • 可靠性高

2. Hadoop集群搭建

2.1 发行版本

​ Hadoop发行版本分为开源社区版和商业版 , 社区版是Apache软件基金会维护的, 是官方维护的版本 ; 商业版指第三方商业公司在社区版基础上进行优化 , 整合 , 测试 , 较为著名的有cloudera的CDH、mapR等

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

​ 我们使用当前2系列最稳定的版本 : Apache Hadoop 2.7.4。

2.2 集群简介

Hadoop集群 = HDFS集群 + YARN集群 , 两者都是主从集群 , 一主带多从 , 两者逻辑上分离 , 物理上常常在一起

  • HDFS 集群负责海量数据的存储,集群中的角色主要有:

    • NameNode : 主角色

    • DataNode : 从角色

    • SecondaryNameNode : 秘书角色

  • YARN 集群负责海量数据运算时的资源调度,集群中的角色主要有 :

    • ResourceManager : 主角色
    • NodeManager : 从角色
  • 简写

nn   namenode
dn   datanode
snn  SecondaryNameNode
rm   ResourceManager
nm   NodeManager
mr   mapreduce

​ Hadoop 部署方式分三种,Standalone mode (独立模式)、Pseudo-Distributedmode(伪分布式模式)、Cluster mode(群集模式),其中前两种都是在单机部署。

扩展 :

集群规划

结合软件中组件的特性和服务器的硬件做出合理的角色分配

  • 如果两个角色间所依赖的硬件有冲突 尽量不在一起

  • 如果两个角色间有工作上的依赖 尽量在一起

    补充:nodemanager和datanode是好基友 成双成对出现

我们部署的是Cluster mode ( 集群模式 )

node-1 : namenode 					  datanode  |  resourcemanager  nodemanager 
node-2 : 		   secondarynamenode  datanode  |  				    nodemanager
node-3 :			  				  datanode  |				    nodemanager
  • 如果企业中需要扩大集群规模:

    node-4: datanode  nodemanager
    node-5: datanode  nodemanager
    ......
    

    规划和最终实际效果要想一致 需要配置文件中参数做出约束保证。

  • 如何高效的在多台机器上搭建分布式的软件?

    一般选择一台机器先配置好 后scp到其他各个机器

Hadoop集群图解

在这里插入图片描述

tips: mapreduce(mr)是计算框架 , 是代码层的组件 , 当我们需要计算大数据的时候, 需要自己动手编程mr , mr在hadoop集群上运行

2.3 服务器准备

本案例使用 VMware Workstation Pro 虚拟机创建虚拟服务器来搭建 HADOOP集群,所用软件及版本如下:
VMware Workstation Pro 12.0 或者 14.0
Centos 6.7 64bit

2.4 网络环境准备

采用NAT方式联网

2.5 服务器系统设置

同步时间

  • 手动同步集群各机器时间

    date -s "2018-11-14 11:40:08"

    yum install ntpdate

  • 网络同步时间

    ntpdate cn.pool.ntp.org

设置主机名

vi /etc/sysconfig/network

NETWORKING=yes
HOSTNAME=node-1

配置IP、主机名映射

vi /etc/hosts

192.168.244.151 node-1
192.168.244.152 node-2
192.168.244.153 node-3

配置ssh免密登录

  • 生成ssh免密登录密钥

    ssh-keygen -t rsa(四个回车)

    执行完这个命令 , 会生成id_rsa(私钥) , id_rsa.pub(公钥)

    将公钥拷贝到要免密登陆的目标机器上

    ssh-copy-id node-1

    tips: 也需要拷贝给自己 , 其他的机器也需要生成免密登录的密钥 , 然后拷贝即可

设置防火墙

  • 查看防火墙状态

    service iptables status

  • 关闭防火墙

    service iptables stop

  • 查看防火墙开机启动状态

    chkconfig iptables --list

  • 关闭防火墙开机启动

    chkconfig iptables off

2.6 JDK环境安装

  • 删除openjdk

    • 查看是否存在openjdkrpm -qa | grep java
    • 删除所有openjdkrpm -e --nodeps xxxxxxxxx
  • 上传jdk安装包

    jdk-8u65-linux-x64.tar.gz到**/export/servers**下

  • 解压安装包(解压到当前包(/export/servers)即可)

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

  • 配置环境变量 vi /etc/profile

    export JAVA_HOME=/export/servers/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===> 查看版本java -version

2.7 Hadoop安装包目录结构

  • hadoop官方tar包介绍
hadoop-2.7.4-src.tar.gz   src 源码包
hadoop-2.7.4.tar.gz       bin 安装包
  • Q:为什么有些软件需要自己下载源码进行编译?

    • 软件中有些特性跟系统的版本位数息息相关 需要下载源码结合你具体的操作系统进行编译 , 将源码放在操作系统上先进行编译
    • 有些软件需要修改源码 满足自己的特性 这时候也需要自己重新编译
    • 如何编译源码 :
      • 可以用maven进行编译 , 利用maven-package编译即可 , 具体参考资料中的源码编译
  • 这里我们选择将编译好的打包进行安装

  • 上传 hadoop-2.7.4-with-centos-6.7.tar.gz到**/export/servers**

  • 解压即可 , 也可以删除安装包

了解Hadoop的目录结构

  • bin : Hadoop 最基本的管理脚本和使用脚本的目录
  • etc:Hadoop 配置文件所在的目录
  • sbin:Hadoop 管理脚本所在的目录,主要包含 HDFS 和 YARN 中各类服务的启动/关闭脚本
  • share : hadoop自带示例,编译后的jar

2.8 Hadoop配置文件修改

首先进入配置文件目录cd etc/hadoop/再进行操作

2.8.1 hadoop-env.sh

文件中设置的是 Hadoop 运行时需要的环境变量。JAVA_HOME是必须设置的 , 保证hadoop运行时一定可以加载到JDK

vi hadoop-env.sh
export JAVA_HOME=/export/servers/jdk1.8.0_65
2.8.2 core-site.xml

hadoop 的核心配置文件,有默认的配置项 core-default.xml。

vi core-default.xml
<!-- 指定默认文件系统类型,以及文件系统老大所在位置 , namenode在node-1 -->
<property>
	<name>fs.defaultFS</name>
	<value>hdfs://node-1:9000</value> 
</property>
<!--指定Hadoop运行时所有数据保存的目录,默认/tmp/hadoop-${user.name}-->
<property>
	<name>hadoop.tmp.dir</name>
	<value>/export/data/hddata</value>
</property>
2.8.4 hdfs-site.xml

HDFS 的核心配置文件,有默认的配置项 hdfs-default.xml。

vi hdfs-site.xml
<!-- 指定HDFS副本的数量, 默认副本数是3-->
<property>
	<name>dfs.replication</name>
	<value>2</value>
</property>
<!-- secondary namenode 所在主机的 ip 和端口->
<property>
	<name>dfs.namenode.secondary.http-address</name>
	<value>node-2:50090</value>
</property>
2.8.4 mapred-site.xml

MapReduce 的核心配置文件,有默认的配置项 mapred-default.xml。

vi mapred-site.xml
<!-- 指定mr运行时框架名称,也就是由谁提供运算资源-->
<property>
	<name>mapreduce.framework.name</name>
	<value>yarn</value>
</property>
2.8.5 yarn-site.xml

YARN 的核心配置文件,有默认的配置项 yarn-default.xml。

vi yarn-site.xml
<!-- 指定 YARN 的老大(ResourceManager)的地址 -->
<property>
	<name>yarn.resourcemanager.hostname</name>
	<value>node-1</value>
</property>
<!-- NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce
程序默认值:"" -->
<property>
	<name>yarn.nodemanager.aux-services</name>
	<value>mapreduce_shuffle</value>
</property>
2.8.6 slaves ???

slaves 文件里面记录的是集群主机名。

vi slaves
node-1
node-2
node-3
注意 : 先删除本地的 , 这里一行一个 , 不要一行多个

2.9 Hadoop环境变量

编辑环境变量的配置文件

vi /etc/profile
export HADOOP_HOME=/export/servers/hadoop-2.7.4
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

保存配置文件 , 刷新配置文件 :

source /etc/profile

复制到其他机器

scp -r /export/servers/hadoop-2.7.4/ root@node-2:/export/servers/
scp -r /export/servers/hadoop-2.7.4/ root@node-3:/export/servers/
scp -r /etc/profile root@node-2:/etc
scp -r /etc/profile root@node-3:/etc
source /etc/profile

3. Hadoop集群启动、初体验

3.1 启动方式

​ 要启动 Hadoop 集群,需要启动 HDFS 和 YARN 两个集群。

注意 : 首次启动(是指刚刚搭建好Hadoop集群)HDFS时,必须对其进行格式化操作。本质上是一些清理和准备工作,因为此时的 HDFS 在物理上还是不存在的。

hdfs namenode -format 或者 hadoop namenode -format

  • hdfs 格式化 准确来说是对hdfs的文件系统进行初始化的操作 保证运时的目录数据文件等存在。

    • 该操作在集群搭建完成后首次启动之前进行
    • 格式化只可进行一次 如果出现多次格式化 就是使得主从之间的集群ID不一致 导致集群启动失败
    • 一般在namenode所在机器执行一次
    Q:万一格式化多次怎么破?
    解决方式:把每个机器上初始化生成的文件夹都删除  重新格式化一次
    

  • 格式化会自动创建配置中指定目录(hadoop.tmp.dir) 和生成hdfs运行相关的数据文件

    -rw-r--r--. 1 root root 321 Nov 14 11:52 fsimage_0000000000000000000
    -rw-r--r--. 1 root root  62 Nov 14 11:52 fsimage_0000000000000000000.md5
    -rw-r--r--. 1 root root   2 Nov 14 11:52 seen_txid
    -rw-r--r--. 1 root root 208 Nov 14 11:52 VERSION
    
3.1.1 单节点逐个启动
  • 启动/关闭HDFS NameNode : hadoop-daemon.sh start/stop namenode
  • 启动/关闭HDFS DataNode : hadoop-daemon.sh start/stop datanode
  • 启动/关闭YARN ResourceManager : yarn-daemon.sh start/stop resourcemanager
  • 启动/关闭YARN nodemanager : yarn-daemon.sh start/stop nodemanager
3.1.2 脚本一键启动

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

开启集群 : start-dfs.sh start-yarn.sh

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

前提是配置好免密登录

下面两方式尽量少用 :

开启集群 : start-all.sh

停止集群 : stop-all.sh

3.2 集群web-ui

一旦Hadoop集群启动并运行 , 可以通过web-ui进行集群查看 , 如下所述:

NameNode http://nn_ip:port/ 默认50070 ==>http://node-1:50070 该网站是用于访问的 ; http://node-1:9000该网站是用于操作的

hdfs:本质上就是文件系统 存放文件的(文件就是文件 目录就是目录)

​ 操作起来慢

ResourceManager http://rm_ip:port 默认8088 ==>http://node-1:8088

在这里插入图片描述

在这里插入图片描述

3.3 Hadoop初体验

3.3.1 HDFS使用

从 Linux 本地上传一个文本文件到 hdfs 的/test/input 目录下
hadoop fs -mkdir -p /test/input
hadoop fs -put /root/startZk.sh /test/input

3.3.2 运行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 4
关于圆周率的估算,感兴趣的可以查询资料 Monte Carlo 方法来计算 Pi 值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值