This commit is contained in:
ranwenjie
2021-03-19 13:28:48 +08:00
parent d046cbc2f0
commit aca4ace0cd
10 changed files with 232 additions and 89 deletions
@@ -0,0 +1,21 @@
## Hash映射,分而治之
这里的`Hash映射`是指通过一种映射散列的方式,将海量数据均匀分布在对应的内存或更小的文件中
使用hash映射有个最重要的特点是: `hash值相同的两个串不一定一样,但是两个一样的字符串hash值一定相等`。哈希函数如下:
```
int hash = 0;
for (int i=0;i<s.length();i++){
hash = (R*hash +s.charAt(i)%M);
}
```
大文件映射成多个小文件。具体操作是,比如要拆分到100(M)个文件:
1. 对大文件中的每条记录求hash值,然后对M取余数,即 `hash(R)%M`,结果为K
2. 将记录R按结果K分配到第K个文件,从而完成数据拆分
这样,两条相同的记录肯定会被分配到同一个文件。
@@ -0,0 +1,28 @@
### 分布处理之Mapreduce
MapReduce是Google提出的一个软件架构,用于大规模数据集(大于1TB)的并行运算。概念“Map(映射)”和“Reduce(归纳)”,及他们的主要思想,都是从函数式编程语言借来的,还有从矢量编程语言借来的特性。MapReduce的伟大之处就在于让不熟悉并行编程的程序员也能充分发挥分布式系统的威力。
##### Mapreduce工作原理
举一个例子:10年内所有论文(当然有很多很多篇)里面出现最多的几个单词。
我们把论文集分层N份,一台机器跑一个作业。这个方法跑得快,但是有部署成本,需要把程序copy到别的机器,要把论文分N份,且还需要最后把N个运行结果整合起来。这其实就是Mapreduce本质。
map函数和reduce函数是交给用户实现的,这两个函数定义了任务本身。
* map函数:接受一个键值对(key-value pair),产生一组中间键值对。MapReduce框架会将map函数产生的中间键值对里键相同的值传递给一个reduce函数。Map操作是可以高度并行的。
* reduce函数:接受一个键,以及相关的一组值,将这组值进行合并产生一组规模更小的值(通常只有一个或零个值)。
##### Hadoop
谷歌技术有"三宝",GFS、MapReduce和大表(BigTable)。
Hadoop实际上就是谷歌三宝的开源实现,Hadoop MapReduce对应Google MapReduce,HBase对应BigTable,HDFS对应GFS。HDFS(或GFS)为上层提供高效的非结构化存储服务,HBase(或BigTable)是提供结构化数据服务的分布式数据库,Hadoop MapReduce(或Google MapReduce)是一种并行计算的编程模型,用于作业调度。
Hadoop 使用java实现。