最近大概地读了《Hadoop实战》,算是了解了Hadoop的皮毛吧,在此总结一下。
Hadoop安装
关于Hadoop安装我觉得这本书讲得挺详细的。
Hadoop的三种运行方式
本地模式 ---- 设置简单便于调试
伪分布模式
完全分布模式
Hadoop应用
大规模的数据处理分为三个阶段
数据收集
数据准备
数据表示
MapReduce模型
MapReduce应用
日志分析
海量数据排序
查找模式
执行MapReduce角色
JobTracker
TaskTracker
Job分为两阶段
<k1,v1> map <k2,v2> reduce <k3,v3>
MapReduce优化
combine函是用于在本地合并数据的函数,在有些情况下,map函数产生的中间数据会有很多重复的数据,所以MapReduce框架运行用户写的一个combine函数,用于本地合并,这会大大减少网络I/O操作的消耗。
Hadoop I/O
序列化的目的
进程通信
数据持续存储
SequenceFile类 与 MapFile类
HDFS
主要特点:处理超大文件、流式的访问数据、运行于廉价的商用机器集群不适合低延迟数据访问,无法高效存储大量小文件,不支持多用户写入与任意修改文件。
体系: 1个NameNode + n个DataNode
基本操作及其接口
命令行
JAVA API
Hadoop的管理
数据备份
节点管理
系统升级
Hive (数据抽取、转换、加载的工具)
Hadoop的重要子项目,它利用MapReduce编程技术,实现了部分SQL语句,提供了类SQL的编程接口
Hive的网络接口
通过Hive的网络接口可以更方便更直观的操作
Hive语法简介
HBase (基于列的映射数据库)
HBase是Apache Hadoop的数据库,能够对大型的数据提供随机、实时的读写访问
HBase客户端与HBase集群交互方法
利用HBase的MapReduce将map后<key,value> 放到数据库而不是普通文件,reduce从数据库取数据而不是文件。
Mahout
它是Apache Luceue(著名的开源搜索引擎)的子项目
主要目标是建立可伸缩的机器学习算法
包含聚类、分类、推荐引擎、频繁项集的挖掘
数据以向量的形式传播
算法应用
使用seqdirectory命令将待处理文件转化为序列文件
使用seq2sparse将序列文件转化为向量文件
使用kmean命令
建立一个推荐引擎
taste是Apache Mahout提供的一个协同过滤算法的高效实现
Pig
提供了一个支持大数据分析的平台
Pig Latin 语言与传统的关系数据库中的数据库操作语言相似,但其更侧重于数据的查询与分析
Zookeeper(协调平衡工具)
它是一个为分布式应用所设计的开源协调服务
目的是为了减轻分布式应用程序所承担的协调任务
主要用来控制集群中的数据,如管理Hadoop集群中的NameNode,以及HBase中的Master Election,Server之间的同步状态等
Avro(序列化系统)
它作为一个数据序列化的系统,为数据密集型动态应用程序提供了数据存储和交换的平台,他的最大特点就是模式和数据在一起。
提供以下一些特征和功能
丰富的数据结构类型
快速可压缩的二进制数据形式
存储持久数据的文件容器
远程过程调用
简单的动态语言结合功能
Chukwa(处理日志)
Chukwa作为Hadoop的子项目,技能帮助Hadoop处理其日志,也能利用MapReduce对日志进行分析处理。在Chukwa的帮助下,Hadoop用户能够清晰了解系统运行的状态,分析作业运行的状态及HDFS的文件存储状态,从而让我们对整个分布式系统状态有形象直观的了解。