hadoop(离线数据分析处理)

Spark 实时数据

  1. 构建Hadoop集群
  2. HDFS操作与编程
  3. MapReduce程序设计及优化
  4. MapReduce高级应用及
  5. 方便
    hadoop的优势:
  6. 弹性-易扩展和卸载
  7. 健壮-自动恢复和监测
  8. 简单-编写并行分布式代码

Hadoop Common

为Hadoop其他项目提供一些常用的工具,如配置工具Configuration,远程过程过程调用RPC序列化机制,Hadoop抽象文件系统FileSystem等。

FileSystem可以透明的看到散落在个节点的“文件”(合在一起的)。

MapReduce

(半成品框架)用于并行计算,运行作业

zookeeper

一个分布式服务框架,解决了分布式计算中的一致性问题。

可用于解决分布式应用中遇到的数据管理问题,如统一命名服务、状态同步服务、集群管理、分布式应用配置等

pig

数据流语言和运行环境,用以检索非常庞大的数据集。且运行在HDFS和MapReduce之上。

Hive

数据仓库框架。

Hive管理HDFS中存储的数据,并提供基于SQL表中的操作。

Flume

数据采集,常用作日志采集器

Sqoop

SQL-to-Hadoop的缩写。

Mahout

机器学习和数据挖掘的库,提供聚类、回归测试和统计建模常见算法的MapReduce实现。

集群入口

HDFS

:9870

MapReduce

:8088

Hadoop修改文件:

core-site.xml

mapred-site.xml

yarn-site.xml

hdfs-site.xml

hadoop的三种启动模式

  1. 独立模式(Local或Standalone Mode)
  1. 默认情况下,hadoop处于该模式,用于开发和调试
  1. 伪分布式()
  1. 运行在同一台机器上
  1. 全分布式(Full-Distributed)
  1. 运行在一个集群上

Namenode维护整个文件系统(matedata)

  1. 文件权限,类型,大小,链接号,文件最后修改时间,文件名
  2. 文件分块顺寻,文件块存储的从节点计算机的IP,块的编号,UUID,备份因子等

管理两个文件

fsimage:
存储的某个时刻整个文件系统的树状层次结构,从根路径开始
存在形式两种
启动主节点的时候在把fsimage文件加载到内存
在本地也会有fsimage文件对应
edits:
记录用户的行为
e.g.:上传文件的过程中cluster奔溃,再次启动时cluster中的数据将不会完整,再次启动时将会检查edits中的用户行为,将会继续执行

注意:上传文件的时候并不会立刻在fsimage中添加对应文件元信息,edits文件达到阈值的时候edits将会和fsimage文件合并。

保证可靠性的措施

  1. 冗余条件
  2. 副本存放
  3. 心跳检测

sequenceFile 二进制文件

可以类比map集合

  1. 存储的是二进制文件
  2. 存储的是数据都是key-value类型,要求key不能重复
  3. 存储的对象必须序列化
  4. 序列化使用的是hadoop自己封装的序列化,实现writable
  5. 内部的数据可以进行压缩
  6. 存入数据的键值类型读取的时候

sequenceFile中:

  1. header
  1. 文件的seq标记,key-value的类型 压缩格式
  1. record
  1. 一个record就是一个key-value
  2. record length = key length+value length
  3. key length
  4. key
  5. value
  1. 同步标记 读取数据的时候可以跳过多个record 直接从sync标记后开始读取

基于Record的压缩策略,可支持三种压缩的类型

  1. NONE:
  1. record length = key length+value length
  2. key length
  3. key
  4. value
  1. RECORD:值压缩,只对value进行压缩
  1. record length = key length+value length
  2. key length
  3. key
  4. compressed value
  1. BLOCK:两个同步标记之间的所有键值进行压缩
  1. number of records 键值对的组数
  2. Compressed key length 压缩的键的长度
  3. compressed keys 压缩的所有的键值
  4. Compressed values length 压缩的值的长度
  5. Compressed values 压缩的所有的值

writable

  1. serializable中
  1. transient修饰的值 序列化的时候值会恢复默认值

MapReduce

  1. 数据分块后,块与块之间不可以存在依赖
  1. TextInputFormat 作为"读取器"
  1. 一行一行的度
  2. key作为偏移量
  3. value作为值
  1. shuffle(洗牌)
  1. 分组的过程
  2. key相同的归为一组,key作为一个,value划在一个组中。
  1. 中间洗牌,一组结果调用一次reduce
  2. TextOutputFormat 作为"写出器"

分区

基于hashcode值分区,计算hashcode/reduce个数 并取余=划分的值

SequenceFileOutputFormat

job.setPartitionerClass();

等价于重写了key中的hashcode

job.setPartitionerClass(TotalOrderPartitioner.class);

TotalOrderPartitioner.class和采样器结合使用

采样器:在客户端运行,随机采集进入map的key值,均匀的分成指定的区域范围。范围的个数不是分区的个数,当分区个数小于区域个数,区域合并,分区个数大于区域个数,reduce多于范围个数的reduce空闲。

构建采样器

在客户端执行采样器
获取采样生成的范围文件 _partitioner.lst(sequenceFile个数的数据)

mapper

  1. chainMapper.addPammer()

链式map任务

  1. inverseMapper
  2. regexMapper
  3. TokenCounterMapper

reducer

  1. chainreducer:链式reduce任务,可以再交给map进行 二次处理
  2. IntSumreducer/LongSumReducer。累加求和

采样器构建流程

  1. 构建采样器

// 构建采样器
        InputSampler.RandomSampler<LongWritable, Text> sampler = new InputSampler.RandomSampler<LongWritable, Text>(1, 100, 2);
        // 将采样器写到分区文件中
        InputSampler.writePartitionFile(job,sampler);

        String path = TotalOrderPartitioner.getPartitionFile(conf);
//        System.out.println("file:" + path);
        // 将采样文件有客户端分发值所有map所在的计算机节点
        job.addCacheFile(new URI(path));