[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的使用,能达到简化开发 ...
随机推荐
- MySQL 的实时性能监控利器【转】
操作系统及MySQL数据库的实时性能状态数据尤为重要,特别是在有性能抖动的时候,这些实时的性能数据可以快速帮助你定位系统或MySQL数据库的性能瓶颈,就像你在Linux系统上使用「top,sar,io ...
- Flex4.6 DataGrid GridItemRenderer宣染器
本文转自:http://blog.sina.com.cn/s/blog_71848dcf01012ctl.html,稍作修改 <?xml version="1.0" enco ...
- groupbox 下的datagridview的列标题字体修改混乱
groupbox 下的datagridview的列标题字体修改混乱
- 根据XML文件生成XSD文件
在.net开发环境中查找XSD.exe文件,比如我的在C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin目录下,将该路径添加到Path中,打开控制台,到 ...
- win8上cmder文字重叠问题
1.用过ubuntu上的bash,zsh后发现win自带的cmd弱爆了,在网上搜索后找到了代替品cmder,下载安装后好发现中文错位的问题, 状况如下: 修复方法:把设置里面的Monospace选项勾 ...
- 字符函数库 cctype
<cctype> (ctype.h) Character handling functions This header declares a set of functions to cla ...
- GDT、GDTR、LDT、LDTR的理解
GDT是全局描述附表,主要存放操作系统和各任务公用的描述符,如公用的数据和代码段描述符.各任务的TSS描述符和LDT描述符.(TSS是任务状态段,存放各个任务私有运行状态信息描述符)LDT是局部描述符 ...
- 【转】对于JNI方法名,数据类型和方法签名的一些认识
[转]对于JNI方法名,数据类型和方法签名的一些认识 之前一直用jni,但是没有考虑Java重载函数,如何在jni-C++里命名,今天看到一篇文章,讲到了类型签名. 原文链接:http://www ...
- Loadrunner之脚本的调试和保存(六)
一.调试脚本 脚本录制完毕后,按F5键或单击菜单上的RUN按钮,可以运行脚本. 在VIRTUAL USER GENERATOR中运行脚本的作用,主要是查看录制的脚本能否正常通过,如果有问题 ...
- java断点
第一步: 用firefox运行程序,当点击保存,提示保存失败后,启动firebug 通过请求找到addNew.ezt出现错误,在eztnews.xml里通过ctrl+F查找找到请求执行的类和方法 找到 ...