Hadoop
Hadoop:开源的分布式存储及计算框架。
📌 组件
组件名 | 作用 |
---|---|
HDFS | 分布式文件存储;大文件、海量数据 |
MapReduce | 批量处理引擎 |
Yarn | 资源调度管理 |
Hive | 查询引擎,提供类SQL的、对hdfs数据进行查询的接口 |
HBase | 列式键值对,非关系型(nosql)数据库 |
Sqoop | 数据获取,核心功能包括导入数据、导出数据 |
Flume | 开源日志系统 |
Kafka | 高度可扩展的分布式消息引擎 |
Flink | 实时数据处理引擎,支持批量计算 |
Spark | 快速批量数据处理引擎,以微批处理的方式,支持近实时处理 |
🚁 HDFS
-
优点:
- 存储大文件,将大文件分割为很多小块存储
- 流式数据读取,“write one read many”
- 分布式,具备良好的可扩展性
- 通过放开POSIX要求,极大改善数据读写性能
-
缺点/不适用的场景:
- 存储大量小文件(<1MB)
- 实时数据读取
- 需经常修改数据的场景
🚁 MapReduce
- 易于编程:程序员仅需描述需要做什么,而具体怎么做,由框架负责。
- 良好的扩展性:MapReduce框架支持分布式计算,通过添加机器达到扩展集群能力。
- 容错性:通过
计算迁移
或数据迁移
等策略提高集群的可用性和容错性。
🚁 Hive
-
优点:
- 海量结构化数据分许汇总
- 高可靠高容错
- 将复杂的MapReduce编写任务简化为SQL语句
- 灵活的数据存储:TextFile、SequenceFile、ORC、Parquet、CSV、自定义格式
- 可扩充UDF/UDAF/UDTF
-
缺点:
- 延迟较高,性能有提升空间
- 不支持事务类操作
🚁 HBase
- 优点:查找速度快,可分布式扩展
- 缺点:不适合随机更新,不适合做有插入更新的实时操作
🚁 Spark
- 通过分布式内存计算和DAG执行引擎提升数据处理能力,相比Hadoop MapReduce性能高10至100倍。
- 基于内存计算,可能会随之产生内存资源不足的问题。
- 提供多种语言开发接口,如Scala、Java、Python等。并且提供几十种高度抽象算子,可以很方便构建分布式的数据处理应用。
- 结合SQL、Streaming、MLlib、GraphX等形成数据处理栈,提供一站式数据处理能力。
- 完美契合Hadoop生态,Spark可以运行在Standalone、Yarn、Mesos、Kubernetes等集群上,能够接入HDFS、HBase等多种数据源,支持Hadoop MapReduce程序平滑转接。