Hadoop总结
环境搭建
单节点
高可用
联邦
配置文件
hdfs-site.xml
hadoop-env.sh (配置java环境变量)
mapred-site.xml
mapred-env.sh (配置java环境变量)
yarn-site.xml
slaves (集群节点)
/etc/profile(hadoop环境变量)
启动集群
-
jobhistory
http://node01:19888/jobhistory
hadoop适用场景
存储大文件,
高吞吐量,
延迟高,
高容错性,
一次写入多次读取
不适用场景
实时分析
小文件
namenode元数据容量不够
多方读写,需要任意文件修改
HDFS采用追加(append-only)的方式写入数据。不支持文件任意offset的修改。不支持多个写入器(writer)
hadoop组件

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的思想核心是“分而治之”,适用于大量复杂的任务处理场景(大规模数据处理场景)。
- Map:
(k1; v1) → [(k2; v2)]
- Reduce:
(k2; [v2]) → [(k3; v3)]
天龙八部
1.Inputformat读取k1,v2
2.map读取k1,kv2
,输出k2,v2
3.shuffle阶段
分区
-- Partitioner
排序
-- WritableComparable<T>
规约
- 自定义一个 combiner 继承 Reducer,重写 reduce 方法
- 在 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