Hadoop总结

2019-08-17  本文已影响0人  你值得拥有更好的12138

环境搭建

单节点
高可用
联邦

配置文件

hdfs-site.xml
hadoop-env.sh (配置java环境变量)
mapred-site.xml
mapred-env.sh (配置java环境变量)
yarn-site.xml
slaves (集群节点)
/etc/profile(hadoop环境变量)

启动集群

hadoop适用场景

存储大文件,
高吞吐量,
延迟高,
高容错性,
一次写入多次读取

不适用场景

实时分析
小文件

namenode元数据容量不够

多方读写,需要任意文件修改

HDFS采用追加(append-only)的方式写入数据。不支持文件任意offset的修改。不支持多个写入器(writer)

hadoop组件

image.png

1.client

文件分割,命令管理

2.namenode

名称空间
数据块映射
配置副本策略
处理客户端读写请求

3.DataNode

存储实际的数据块
执行数据块的读写的操作

4.Secondary NameNode

辅助NameNode
定期合并fsimage 和 fsedits

常用命令

hdfs dfs :
-put
-mkdir
-rmr

hdfs空间配额

hdfs的安全模式

在安全模式状态下,文件系统只接受读数据请求,而不接受删除、修改等变更请求

hdfs  dfsadmin  -safemode  get #查看安全模式状态
hdfs  dfsadmin  -safemode  enter #进入安全模式
hdfs  dfsadmin  -safemode  leave #离开安全模式

HDFS基准测试

写入流程

1.namenode负责查找资源,返回资源列表
2.cllient负责分片
3.多台datanode使用管道连接

读取流程

1.namenode负责查找block列表
2.底层使用Socket Stream(FSDataInputStream)
3.client合并block文件
4.并行读取

edits and FsImage

edits操作日志
fsimage元数据的镜像
随着edits的内容增大,需要secondnamenode合并

hdfs Java API

1.首先配置本地的window环境
2.建立工程,导入依赖
3.主要的类
Configuration
FileSystem fs = FileSystem.get(conf)
FileSystem
4.获取文件系统

@Test
public void getFileSystem2() throws  Exception{
    FileSystem fileSystem = FileSystem.get(new URI("hdfs://node01:8020"), new       Configuration());
    System.out.println("fileSystem:"+fileSystem);
}

hdfs访问权限控制

<property>
    <name>dfs.permissions.enabled</name>
    <value>true</value>
</property>

MapReduce

思想在生活中处处可见。或多或少都曾接触过这种思想。MapReduce的思想核心是“分而治之”,适用于大量复杂的任务处理场景(大规模数据处理场景)。

天龙八部

1.Inputformat读取k1,v2
2.map读取k1,kv2,输出k2,v2
3.shuffle阶段
分区 -- Partitioner
排序 -- WritableComparable<T>
规约

  1. 自定义一个 combiner 继承 Reducer,重写 reduce 方法
  2. 在 job 中设置 `job.setCombinerClass(CustomCombiner.class)

分组 -- WritableComparator
4.reduce输出k3,v3
5.OutputFormat输出

运行模式

本地
集群提交,hadoop 命令jar包执行

计数器

context.getCounter(Counter.MY_REDUCE_INPUT_RECORDS).increment(1L);

MapTask 工作机制

ReduceTask 工作机制

yarn资源调度

资源调度

yarn调度器

FIFO
Capacity Sheduler
Fair Scheduler

上一篇 下一篇

猜你喜欢

热点阅读