简单的扫盲
hadoop 实现一个特别的计算模型 Mapreduce 可以将计算任务分割成多个处理单元然后分散到家用的或服务器级别的硬件机器上,从而降低成本并提供水平可伸缩性。
该计算模型下是hdfs(hadoop 分布式文件系统),该系统可插拔
(出现几了商用和开源的替代方案)
传统关系型数据库和结构化查询语句到hadoop的转移 采用Hive 查询语句(HiveQL)类似于SQL的一种方言 用于查询在hadoop集群中的数据。
hive 可以将大部分查询转换为mapreduce任务(job)
hive 使用与数据仓库应用程序 使用该程序进行相关静态数据分析,不需要快速响应给出结果,且数据本身不会频繁变化。
hive 本身不是一个完整的数据库,hadoop以及hdfs 设计本身约束和限制了hive工作, 最大限制是hive 不支持纪律级别的更新、插入和删除。但是可以通过查询生成新表或者将查询结果导入到文件中。
hive 是面向批处理系统,但是mapreduce任务的启动过程较为耗时,所以hive查询延迟比较严重。hive不支持事务。
hive 不支持OLPT,更接近成为OLAP工具
机分析处理(OLAP)系统与联机事务处理(OLTP)系统的区别
hive 最适合用于数仓。
1.1 Hadoop 和 MapReduce
MapReduce 是一种计算模型,用于分解大型数据处理任务,计算结果可以合并在一起计算最终结果。
Doung Cuuting 和他朋友根据两篇论发用 java 写的,大佬真会玩儿。
MapReduce = Map + Reduce
map将集合中元素从一种形式转化为另一种形式。 输入的键-值对 会被转换为多个 键-值对输出。
输入输出的键必须完全不同,输入输出的值可能完全不同。
Reduce 过程的目的是将值的集合转换成一个值(一组数值的平均数或加和)或者转换成另一个集合
某个键的所有键-值对都会被分发到同一个reduce中,该reducer最终会长生一个键-值对。输入输出的键可能不同。
job 不需要reduce 也可以无reduce过程
hadoop 决定如果将提交的job分解成多个对立的map和reduce任务(task)来执行,就会对这些task进行调度并为其分配合适的资源。
与此同时会监控每一个task 确保其完成,并重启一些失败的task。
hdfs 管理着集群中的数据,每个数据块(block)都会被荣誉备份(默认为3份),hdfs及其类似的文件系统使用的数据块通常为64MB或者其若干倍。
大数据块可以在硬盘上连续进行存储,可以保证最少的磁盘寻址来进行写入和读取,提高独写性能。(操作系统的基础知识啊)
举个?:word count算法
1.2 Hadoop 生态系统中的Hive
Hive 的交互方式有很多,本书中主要是CLI
图形界面 Karmasphere发布的产品,CLoudera提供的开源Hue ,Qubole 提供的Hive
Hive 中也带有 一个简单的网页界面 HWI,还有通过JDBC,ODBC和一个THrift服务器进行编程访问的几个模块。
所有的命令和查询都会进入到Driver(驱动模块),通过该模块对输入进行解析和编译,对需求的计算进行优化,然后按照指定的步骤执行(通常为启动多个mapreduce任务)
hive–>XML文件驱动–>内置原生的Mapper,Reducer
hive 本身并不会生成java mapreduce 算法程序。
1.2.1 Pig
数据流语言,不是一种查询语言。需要写一系列的生命语句来定义某些关系和其他一些关系之间的联系,每个新的关系都会执行新的数据转换过程,Pig会查找这些生命吗,然后创建一系列有次序的Mapredue,Pig常用于ETL过程,定制语言不是基于SQL。学习成本较高。
1.2.2 HBase
分布式,可伸缩的数据存储,支持行级别的更新快速查询和行级食物(不支持多行事务)。
没有类似于SQL的查询语言,hive 已经可以和hbase结合使用。
1.2.3 Cascading、Crunch及其他
一些hadoop 生态外,但是也可以在hadoop上提供不错的抽象减少对于特定任务的底层编码工作。
图灵完全性:具有无限存储能力的通用物理机器或编程语言
1.3 Java和Hive:词频统计算法。
略~