美文网首页
初识Hadoop2.x

初识Hadoop2.x

作者: 谭英智 | 来源:发表于2020-08-13 23:25 被阅读0次

Hadoop是一个能够对大量数据进行分布式处理的软件框架

hadoop-overview

术语

HDFS: 分布式文件系统,解决海量数据存储

YARN: 作业调度和集群资源管理的框架,解决资源任务调度

MAPREDUCE: 分布式运算编程框架,解决海量数据计算

特点

高扩展性: 集群可以容易的扩展到数以千计的节点

成本低:通过大量廉价的机器组成集群

高效率:并发数据,并发处理

高可靠:多份复制,任务失败后自动重新部署计算任务

进程

HDFS

DataNode

SecondaryNameNode

NameNode

YARN

NodeManager

ResourceManager

配置

hadoop-env.sh

export JAVA_HOME=/root/apps/jdk1.8.0_65

core-site.xml

#可以选择tfs/file/gfs文件系统
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://node-1:9000</value>
</property>
#运行时产生文件的存储目录
<property>
    <name>hadoop.tmp.dir</name>
    <value>/home/hadoop/tmp</value>
</property>

hdfs-site.xml

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

mapred-site.xml

#指定mr运行框架,默认local
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

yarn-site.xml

<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>node-1</value>
</property>
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

slaves

node-1
node-2
node-3

添加hadoop到环境变量

scp所有配置文件到所有node

格式化namenode

#只能初始化一次,格式化是生成一些文件,在文件内有集群的唯一id,多次初始化会令id发生变化,导致整个集群不可用
hdfs namenode -format
or hadoop namenode -format

启动

hadoop-daemon.sh start namenode
hadoop-daemon.sh start datanode
hadoop-daemon.sh start resourcemanager
hadoop-daemon.sh start nodemanager

或者

#配置了slaves和ssh免密登录
start-dfs.sh
start-yarn.sh
start-all.sh

停止

stop-dfs.sh
stop-yarn.sh
stop-all.sh

集群UI

nameNode: http://nn_host:port 默认50070

ResourceManager http://rm_host:port 默认8088

操作hdfs

hdfs dfs -ls /
hdfs dfs -mkdir /hello
hdfs dfs -put filename /hello

运行mapreduce程序

hadoop jar sample.jar <arg>

HDFS

  • 文件分块存储

    解决上传下载耗时

    解决单机存储容量限制

  • 文件块多份复制

    解决分布式机器诺机

  • 使用NameNode来管理分块和副本位置

    解决文件元数据的管理

设计目标

  • 硬件故障是常态,成百成千的机器,每个机器都可能出现故障,因此故障检测和自动快速恢复时HDFS的核心架构
  • 主要以流式方式读取数据,不适用交互式场景,反应时间长,更注重数据访问的高吞吐量
  • 大文件存储,GB/TB,不适用与小文件
  • 大部分的文件要求write-one-read-many。简化了数据一致性问题
  • 移动计算的代价比移动数据的代价低。把计算移动到数据近的机器,可以让大文件计算更高效
  • 可移植性,可以在不同的硬件和软件平台上运行

特性

  • 目录树管理文件,与linux文件系统一致
  • 分布式
  • NameNode管理目录树,文件元数据
  • DataNode管理文件存储,定时向NameNode汇报信息
  • 文件分块存储
  • 副本机制
  • 一次写入多次读取,只支持整个文件覆盖或者追加,不支持部分修改,延迟大

HA

hdfs-nnha

shell

hadoop fs <args>
hadoop fs -ls hdfs://namenode:host/dir/file
hadoop fs -ls /dir/file
#本地
hadoop fs -ls file:///root/
hadoop fs -ls [-h] [-R] <args>
hadoop fs -mkdir [-p] <paths>
hadoop fs -put [-f] [-p] <localfile> <dst>
hadoop fs -get [ignorecrc] [-crc] [-p] [-f] <src> <localdst>
hadoop fs -appendToFile <localfile> <dst>
hadoop fs -cat [-ignoreCrc] URI
hadoop fs -tail [-f] URI
hadoop fs -chgrp [-R] GROUP URI
hadoop fs -chmod 777 URI
hadoop fs -chown user:grp URI
hadoop fs -cp URI URIDst
hadoop fs -mv URISrc URIDst
hadoop fs -getmerge URI/* localfile
hadoop fs -rm -r URI
hadoop fs -df -h URI
hadoop fs -du  URI
hadoop fs -setrep -w num -R URI

NameNode

  • 存储HDFS元数据(块列表/位置),目录树,和跟踪集群中的文件

  • 块信息在DataNode的位置在启动时,由DataNode上报

  • 单点

  • 数据存在内存,因此需要配置大内存的机器

hadoop-namenode

DataNode

  • 负责存储数据
  • NameNode和DataNode保持不断通讯
  • 启动时汇报自己持有的块列表
  • 关闭某个DataNode不会影响数据和集群的可用性,NameNode会安排其他DataNode进行副本复制和响应
  • 需要大量磁盘空间
  • 定期向NameNode发送心跳,默认3s,NameNode长时间没有收到心跳,会认为DataNode失效
  • DataNode定期汇报块信息,默认6h
  • 块大小默认128M

工作机制

hadoop-work
  • client请求上传文件
  • NameNode检查目录是否存在/文件是否存在
  • client请求第一个block该上传到些DataNode
  • NameNode返回副本个数的DataNode地址给client。策略为本地/同机架/不同机架/存储容量
  • client请求第一个DataNode建立pipeline,DataNode之间建立pipe,A->B->C
  • client向A上传第一个block,以packet上传,默认大小64k,package会从client->A->B->C流的方式传输
  • 确认后上传第二个block...
  • client向NameNode询问文件所在位置
  • NameNode返回文件部分或者全部的block列表,列表经过排序,策略为拓扑结构距离client近的靠前,心跳机制超时汇报的靠后
  • client选取靠前的DataNode读取block,为每个block启用一个线程下载
  • 读取完这批block,会请求下一批block读取
  • 读完一个block会进行checksum校验,出现错误时,client会通知NameNode,然后会从列表中的下一个DataNode请求block
  • 读完所有的block后,client合并成一个文件

Java API

  • 提供跟shell类似的接口

  • 提供流式处理的接口

    效率更高

YARN

yarn-overview

异常

  • RM出现异常,由备份RM结果,新RM通知AM重新启动
  • NM出现异常,RM通知AM,AM进行任务再调度
  • AM出现异常,RM重启AM,由于RM已经记录了AM任务状态信息,已完成的任务不会再运行
yarn-rmha

MapReduce

核心思想:分而治之。把巨型任务切割成小任务,任务之间没有依赖关系,并对小文件进行分布式并行计算;再把小任务的结果进行汇总计算,并最终得出结果,根据块的多少来决定Map的数量,根据程序指定的数量来决定reduce的数量,多于一个reduce程序,会把结果切割成多个结果文件;多于一个reduce程序,map输出将根据key的hash,进行分区处理,先分区保存在本地,再发送给reduce,reduce收集完后,进行汇总并排序并进行处理

hadoop-MR
序列化和反序列化

如果使用自定义类型,则需要实现hadoop提供的序列化和反序列接口,因为java的序列化效率低下

相关文章

网友评论

      本文标题:初识Hadoop2.x

      本文链接:https://www.haomeiwen.com/subject/sggwcktx.html