第一章的主要内容包含:
概要:由于数据价值越来越大,越来越多的公司存储海量数据,hadoop提供了这样的一个环境,运用分布式系统来管理数据,实现数据的有效的存储和管理。其主要利用mapreduce的模型来进行管理。其中面临的挑战是一般的用户如何和hadoop的底层系统进行交互,sql是结构化的查询语言,hive提供了一个用sql和hadoop交互沟通的语言方式,基本和sql相同但又不尽相同。
Hive适合静态数据处理,更适合数据仓库存储数据,做简单的分析。因为他没有办法做实时的联机数据交互请求(oltp,online transaction processing)的交易处理,即双方都需有即时的反馈和更正;也不知何做实时的联机数据分析(olap online analytic processing),分析可以做,但无法做到实时,这时用hbase可能会更好。
1.hadoop中mapreduce的工作原理--优点是大数据处理,更适合做数据仓库存储,很难做实时响应和更新。
2.hive和hadoop之间的关系,hive是如何和hadoop交互的;
3.其他与hive有相同功能的项目--Pig
4.具备hive数据库不具备的功能的其他数据库--Hbase;
5.其他语言的介绍
1.Hadoop的mapreduce工作原理。
mapreduce为计算模型,将单个任务分成多个并行的小任务--通过map先对数据做简单处理,按照规则分发给reducer进行处理,之后把任务再合并起来,输出最终的结果。
举例:wordcount程序
不同的文件对应给不同的mapper,mapper按照需求的结果对每一行的数据进行处理输出key-value,然后mapper就行sort和shuffle的过程,即将所有的key-value做排序,同样的key给到同一个reducer,一个reducer里可能有很多key-value对,但是同一个key只能在同一个reducer里。然后reducer把相同的key,和可能的value的集合放在一起,按照命令进行计算,最后输出结果。
2.hive和hadoop的关系。
hive的访问方式有以下几种:CLI(command line interface)、HWI(hive web interface)、(可编程访问的)JDBC ODBC和a thrift server
之后的查询和命令进入到drive模块,drive会对需求进行重编和最优化然后执行,他执行的时候不是直接生成mapreduce,而是生成了一些通用的模块,像是翻译成了XML语言,XML语言再驱动整个计算过程(个人理解)。
hive和hadoop的交互主要通过jobtracker的交互,jobtracker将任务编程mapreduce进行处理。
hive的数据主要存储在metastone里,一般会存储表模式(table schema)和其他系统的表模式。
hadoop的数据主要存储在hdfs里(hadoop distributed filesystem),通过namenode对它进行管理(第二章会介绍,感觉namenode就是存储表结构的)。
3.pig
hive如果对数据进行处理尤其是复杂的处理一般需要嵌套语句,需要很多中间过程和临时表。
Pig类似hive,是yahoo开发的,它是直接写一堆声明,这堆声明会按照数据流将数据从一种形态变为另一种形态,更直观方便。即可以进行复杂的计算,但是他的语言不是sql,学习成本比较高。(理解它的意思,但是具体还是不是特别知道)
4.Hbase
数据库类型,具有hive不具备的数据库特性--实时响应,行级别更新及交互操作。
Hbase的原理是也是分布式系统存储数据,但会利用内存缓存技术来存储中间数据的变化,这样可以更新日志,并且每一行都有一个唯一的id,这样就可以快速的查询到行级别,同时也可以做到查询同一列在不同时间的变化。
另hbase是列存储的,这块儿一般懂,感觉就是存列的名字,然后抽取的,需要后续再看。
5.其他
hadoop的高级语言库(应该是更灵活,不懂):casading\casalog\crunch
非mapreduce的分布式处理工具:spark\strom\kafka 即既可以进行分析,也可以做数据存储的语言
其他数据处理(适用小数据量,算法包更完善):R\matlab\octave\mathematica\scipy,numpy