[Big Data]Hadoop详解一
从数据爆炸开始。。。
一、 第三次工业革命
- 纽约证券所交易 每天 1TB
- FaceBook一千亿照片 1PB
- 腾讯 每天 300TB
- 淘宝 每天 pv20亿 数据量 50TB
- ......
三、 海量数据存储与分析
- 1990 年 一个磁盘 1370MB 速度4.4MB/s 用时5分钟
- 2010 年 一个磁盘 1TB 速度 100MB/s 用时两个半
- 如果把1TB存储到100个磁盘,每个存储1%,并行读取,用时不到两分钟。
- 如果一个我们有100个1TB数据集,100个1TB磁盘,那么我们以磁盘共享的方式把每个数据集分布到100个磁盘中,这样边会大大提高每个数据集的读取速率。
- 硬盘故障:因为文件系统有多个磁盘,那么任意一个磁盘发生故障的概率就变得很高。(采取数据备份)
- 数据分析:某些分析任务需要结合大部分数据共同完成,那么我们的文件系统就要保证对来自多个数据源的数据进行分析的准确性。
四、 Hadoop-一个可靠的分布式共享存储和分析系统
4.1 简要介绍

4.2 历史起源:Apache的子项目的子项目
Cutting:他先领导创立了Apache的项目Lucene,然后Lucene又衍生出子项目Nutch,Nutch又衍生了子项目Hadoop。
Lucene是一个功能全面的文本搜索和查询库,Nutch目标就是要视图以Lucene为核心建立一个完整的搜索引擎,并且能达到提到Google商业
搜索引擎的目标。网络搜索引擎和基本文档搜索区别就在规模上,Lucene目标是索引数百万文档,而Nutch应该能处理数十亿的网页。因此Nutch就
面临了一个极大的挑战,即在Nutch中建立一个层,来负责分布式处理、冗余、故障恢复及负载均衡等等一系列问题。。。
曙光的到来:2004年,Google发表了两篇论文来论述Google文件系统(GFS)和MapReduce框架,并且使用了这两项技术来拓展自己
的搜索系统,于是Doug
Cutting看到了这两篇论文的价值并带领他的团队便实现了这个框架,并将Nutch移植上去,于是Nutch的可扩展性得到极大的提高。
Cutting它三个项目的名字由来,这个人很有意思,三个项目的名字都来源于他家庭,Lucene是他妻子的中间名也是她外祖母的名字,他儿子在很小的
时候总是把吃饭的词叫做Nutch,后来,他又把一个黄色大象毛绒玩具叫做Hadoop,这样大家就明白了为何好多关于Hadoop的资料中都能看到个黄
色的大象。
一个四IO通道的高端机,每个通道的吞吐量各为100MB/sec,读取4TB数据也要接近3小时,而用Hadoop,同样的数据被划分为较小的块(通
常为64MB),通过HDFS分不到群内的多台计算机上,集群可以并行存取数据,这样,一组通用的计算机比一台高端机要便宜。
Hadoop对待数据的理念与其不同。SETI@home需要服务器和客户端重复地传输数据,这种方式在处理密集数据时,会使得数据迁移变得十分困难。
而Hadoop则强调把代码向数据迁移,即Hadoop集群中既包含数据又包含运算环境,并且尽可能让一段数据的计算发生在同一台机器上,代码比数据更加
容易移动,Hadoop的设计理念即是把要执行的计算代码移动到数据所在的机器上去。
4.4 比较Hadoop和SQL数据库
拓展商用服务器的代价是非常昂贵的。要运行一个更大的数据库,就要一个更大的服务器,事实上,各服务器厂商往往会把其昂贵的高端机标称为“数据库级服务
器”,不过有时候有可能需要处理更大的数据集,但却找不到更大的机器,而更为重要的是,高端机对于许多应用并不经济。
关系型数据库需要将数据按照某种模式存放到具有关系型数据结构表中,但是许多当前的数据模型并不能很好的适应这些模型,如文本、图片、xml等,此外,大
型数据集往往是非结构化或半结构化的。而Hadoop以键值对作为最基本的数据单元,能够灵活的处理较少结构化的数据类型。
SQL从根本上说是一个高级声明式语言,它的手段是声明你想要的结果,并让数据库引擎判断如何获取数据。而在MapReduce程序中,实际的数据处理步
骤是由你指定的。SQL使用查询语句,而MapReduce使用程序和脚本。MapReduce还可以建立复杂的数据统计模型,或者改变图像数据的处理格
式。
五、 理解MapReduce
。它的最大的特点就是容易拓展到多个计算机节点上处理数据。在MapReduce中,原语通常被称作Mapper和Reducer。也许讲一个数据处理应
用分解为一个Mapper和Reducer是非常繁琐的,但是一旦你写好了一个Mapreduce应用程序,仅需通过配置,就可将其拓展到集群的成百上千
个节点上运行,这种简单的可拓展性使得Mapreduce吸引了大量程序员。
5.1 手动拓展一个简单单词计数程序
for each document in documentSet {
for each wordCount received from firstPhase {
multisetAdd (totalWordCount, wordCount);
}
- 如果数据集很大,中心存储服务器性能可能会跟不上,因此我们需要把文档分不到多台机器上存储。
- 还有一个缺陷是wordcount被存放在内存当中,同样,如果数据集很大一个wordcount就有可能超过内存容量,因此我们不能将其放在内存中,我们需实现一个基于磁盘的散列表,其中当然涉及大量编码。
- 第二阶段如果只有一台计算机,显然不太合理,若按照第一阶段的设计把第二阶段的任务也分布到多台计算机上呢?答案当然是可以的,但是我们必须将第
一阶段的结果按某种方式分区,使其每个分区可以独立运行在第二阶段的各个计算机上。比如第二阶段的A计算机只统计以a开头的wordcount,计算机B
统计wordcount-b分区,依次类推。
- 存储文件到多台计算机上
- 编写一个基于磁盘的散列表,使其不受计算机内存限制
- 划分来自第一阶段的中间数据
- 洗牌第一阶段分区到第二阶段合适的计算机上
5.2 相同程序在MapReduce中拓展
2.含键值对的列表被拆分,进而通过调用Mapper的Map函数对每个键值对<K1,V1>进行处理,Mapper
转换每个<K1,V1>,并将其结果并入<K2,V2>。在上面例子中,Mapper转换成的是一个<String
word,Integer count>的列表。
3.所有Mapper的输出被聚合在一个巨大的<K2,V2>列表中,所有共享K2的对被组织在一起成为一个新的键值对列
表<K2,List(V2)>,让reducer来处理每一个聚合起来的<K2,List(V2)>,并将处理转换
成<K3,V3>,MapReduce框架自动搜索所有<K3,V3>并将其写入文件中。
六、 运行第一个Hadoop程序——用Hadoop框架来统计单词
6.1首先安装JAVA JDK
- Hadoop需要1.6或更高版本
- 到oracle官网下载Linux版java安装包(rpm包)
- 查看是否已安装:java or java -version
- 卸载老版本 rpm -e jdk
- 安装jdk rpm -ivh jdk
- 配置环境变量
6.2 下载一个Hadoop稳定版本
# mkdir /usr/hadoop
# cd /usr/hadoop/
# wget http://apache.mesi.com.ar/hadoop/common/hadoop-1.2.1/hadoop-1.2.1.tar.gz
# tar -xzf hadoop-1.2.1.tar.gz
# mv hadoop-1.2.1 hadoop
# cd /usr/hadoop/hadoop/
# bin/hadoop
6.3 配置 Hadoop
编辑 core-site.xml
# vim conf/core-site.xml
#Add the following inside the configuration tag
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000/</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
编辑 hdfs-site.xml
# vim conf/hdfs-site.xml
# Add the following inside the configuration tag
<property>
<name>dfs.data.dir</name>
<value>/opt/hadoop/hadoop/dfs/name/data</value>
<final>true</final>
</property>
<property>
<name>dfs.name.dir</name>
<value>/opt/hadoop/hadoop/dfs/name</value>
<final>true</final>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
编辑 mapred-site.xml
# vim conf/mapred-site.xml
# Add the following inside the configuration tag
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
编辑 hadoop-env.sh
# vim conf/hadoop-env.sh
export JAVA_HOME=/opt/jdk1.7.0_17
export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true
设置 JAVA_HOME path
格式化 Name Node
$ cd /usr/hadoop/hadoop
$ bin/hadoop namenode -format
Use the following command to start all hadoop services.
[Big Data]Hadoop详解一的更多相关文章
- 【转载】salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解
salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解 建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schem ...
- 51单片机的idata,xdata,pdata,data的详解(转)
data: 固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小. bit :是指0x20-0x2f的可位寻址区idata:固定指前面0x00-0xff的2 ...
- 51单片机的idata,xdata,pdata,data的详解
data: 固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小. bit :是指0x20-0x2f的可位寻址区idata:固定指前面0x00-0xff的2 ...
- iptables Data filtering详解
内容简介防火墙的概述iptables简介iptables基础iptables语法iptables实例案例详解(一)防火墙的简介防火墙是指设置在不同网络或网络安全域之间的一系列部件的组合,它能增强机构内 ...
- Android vector Path Data画图详解
SVG是一种矢量图格式,是Scalable Vector Graphics三个单词的首字母缩写.在xml文件中的标签是,画出的图形可以像一般的图片资源使用,例子如下: <vector xmlns ...
- Hadoop详解一:Hadoop简介
从数据爆炸开始... 一. 第三次工业革命 第一次:18世纪60年代,手工工厂向机器大生产过渡,以蒸汽机的发明和使用为标志. 第二次:19世纪70年代,各种新技术新发明不断被应 ...
- salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解
建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schema Builder查看表结构以及多表之间的关联关系,可以登录后点击setup在左侧搜索框输入schema ...
- Spring Data Jpa 详解
前言: JPA全称Java Persistence API,即Java持久化API,它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据,结合其他ORM的使用,能达到简化开发 ...
- Spring Data Jpa 详解 (配置篇)
前言: JPA全称Java Persistence API,即Java持久化API,它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据,结合其他ORM的使用,能达到简化开发 ...
随机推荐
- PHP set_error_handler()函数的使用【转载】
我们写程序,难免会有问题(是经常会遇到问题 ),而PHP遇到错误时,就会给出出错脚本的位置.行数和原因.有很多人说,这并没有什么大不了.确实,在调试程序阶段,这确实是没啥的,而且我认为给出错误路径是必 ...
- php5.6之后的版本使用curl以@+文件名的方式上传文件无效的解决版本
使用curl上传文件使用file=@文件路径的方式,在php5.6以后的版本中无法使用了 官方文档给出明确解释 如果需要支持的话,可以将CURLOPT_SAFE_UPLOAD设置为false 或者使用 ...
- 解决在IIS中调用Microsoft Office Excel组件后进程无法正常退出的问题
来源:http://www.cnblogs.com/ahui/archive/2013/03/05/2944441.html 有一个项目用到Excel组件产生报表,本以为这个通用功能是个很简单的cas ...
- MySQL整理碎片
1 innodb引擎表 alter table TABLE_NAME engine='innodb'; 还有一种方法 optiize table TABLE_NAME; http://stackove ...
- iOS \'The sandbox is not sync with the Podfile.lock\'问题解决
iOS \'The sandbox is not sync with the Podfile.lock\'问题解决 HUANGDI 发表于 2015-02-27 09:51:13 问题描述: gith ...
- MyBatis-执行插入语句的时候返回主键ID到传入的参数对象中
<!-- 保存项目信息 --> <insert id="saveItem" parameterType="pd" useGeneratedKe ...
- java基础概念经典题目汇集
1.下面是People和Child类的定义和构造方法,每个构造方法都输出编号.在执行new Child("mike")的时候都有哪些构造方法被顺序调用?请选择输出结果 ( ) cl ...
- Hibernate 系列教程1-枚举单例类
你还在为不知道怎样正确使用Hibernate而纠结吗 你还在为不知道怎样配置映射文件而郁闷吗 枚举单例(Enum Singleton) 是实现单例模式的一种方式而已,不过写法简单,创建枚举默认也是线程 ...
- OC 消息机制本质
转载自:http://m.blog.csdn.net/blog/util_c/10287909 在Objective-C中,message与方法的真正实现是在执行阶段绑定的,而非编译阶段.编译器会将消 ...
- if __name__ == '__main__'在python中的应用
当你打开一个.py文件时,经常会在代码的最下面看到if __name__ == '__main__':,现在就来介 绍一下它的作用. 模块是对象,并且所有的模块都有一个内置属性 __name__.一个 ...