当前位置: 首页 > 编程日记 > 正文

云计算读书笔记(五)

Hadoop:Google云计算的开源实现

Hadoop是Apache开源组织的一个分布式计算机框架,可以在大量廉价的硬件设备组成的集群上运行应用程序,为应用程序提供一组稳定可靠的接口,旨在构建一个具有高可靠性和良好扩展性的分布式系统。

Hadoop的核心是HDFS,MapReduce和HBase,它们分别对应Google的云计算GFS,MapReduce和Bigtable。

Hadoop主要由以下几个子项目组成:

1)Hadoop Common:原来的Hadoop Core,这是整个Hadoop项目的核心

2)Avro:Hadoop的RPC方案

3)Vhukwa:一个用来管理大型分布式系统的数据采集系统

4)HBase:支持结构化数据存储的分布式数据库,是Bigtable的开源实现

5)HDFS:提供高呑吐量的分布式文件系统,是GFS的开源实现

6)Hive:提供数据摘要和查询功能键的数据仓库

7)MapReduce:大型数据的分布式处理模型

8)Pig:是在MapReduce上构建的一种高级的数据流语言

9)ZooKeeper:用于解决分布式系统中的一致性问题,是Chubby的开源实现

除了开源以外,hadoop还有很多优点:

1)可扩展

2)经济

3)可靠

4)高效

分布式文件系统HDFS

设计前提和目标:

1)处理硬件错误并快速自动恢复

2)流式的数据访问,应用程序以流式读为主,做批量处理,更注重数据访问的高吞吐量

3)超大规模数据集,支持大文件存储,一个单一的HDFS实例能够支撑数以千万计的文件,并且能在一个集群里扩展到数百个节点

4)简单一致性模型,应用程序一般对文件实行一次性写,多次读的访问模式

5)移动计算比移动数据更简单

6)异构软硬件平台间的可移植性

体系结构:

HDFS是一个主从结构的体系,HDFS集群有一个NameNode和很多个DataNode组成的。

NameNode管理文件系统的元数据,DataNode存储实际的数据。客户端联系NameNode以获取文件的元数据,而真正的文件I/O操作是直接和DataNode进行交互的。

HDFS的数据都是一次写入多次读取,典型的块大小是64MB

客户端从NameNode获得组成文件的数据块的位置列表,也就是知道数据块被存储在哪些DataNode上,然后客户端直接从DataNode上读取文件,NameNode不参与文件的传输

NameNode使用事件日志记录HDFS元数据的变化,使用映像文件存储文件系统的命名空间

保障可靠性措施:

1)冗余备份

2)副本存放

3)心跳检测,每个DataNode定期接受心跳包和块报告,收到心跳包说明该DataNode工作正常

4)安全模式,在系统启动时会进入一个安全模式,此时不会出现数据块的写操作

5)数据完整性检测,在HDFS文件创建时,计算每个数据块和校验和,并将校验和作为一个单独的隐藏文件保存在命名空间下。客户端获取文件时会做对应的校验检查,如果不同则客户端认为数据块有损坏,将从其它的DataNode获取数据块的副本

6)空间回收,当文件被删除时,会先被移到/trash目录里,只要还在这个目录里就可以很快恢复,目录的清空时间是可配置的

7)元数据磁盘失效,映像文件和事务日志是HDFS的核心数据结构

8)快照,快照支持某个时间的数据复制,当HDFS数据损坏时,可以回滚到过去一个已知正确的时间点。

提升性能的措施:

1)副本选择

2)负载均衡

3)客户端缓存

4)流水线复制

访问接口:

可以通过Java API,也可以使用C语言封装的API

1)org.apache.hadoop.conf:定义了系统参数的配置文件处理API

2)org.apache.hadoop.dfs:Hadoop分布式文件系统(HDFS)模块的实现

3)org.apache.hadoop.fs:定义了抽象的文件系统API

4)org.apache.hadoop.io:定义了通用的I/O API,用于针对网络,数据库,文件等数据对象做读/写操作

5)org.apache.hadoop.ipc:用于网络服务端和客户端的工具,封装了网络异步I/O的基础模块

6)org.apache.hadoop.mapred:Hadoop分布式计算系统(MapReduce)模块的实现

7)org.apache.hadoop.metrics:定义了用于性能统计信息的API,主要用于mapred和dfs模块

8)org.apache.hadoop.record:定义了针对记录的I/O API类及一个记录描述语言的翻译器

9)org.apache.hadoop.tools:定义了一些通用的工具

10)org.apache.hadoop.util:定义了一些公用的API

分布式数据处理MapReduce

MapReduce是一种分布式的计算机模型,也是Hadoop的核心

逻辑模型:

将运行在大规模集群上的并行计算过程抽象为两个函数:Map和Reduce,也就是映射和化简

简单说MapReduce就是任务的分解与结果的汇总,Map把任务分解为多个任务,Reduce把分解后的结果汇总起来,得到最终结果

实现机制:

1,分布式并行计算,MapReduce框架由JobTracker和TaskTracker这两类服务调度的。JobTracker是主控服务,只有一个,负责调度和管理TaskTracker

2,本地计算

3,任务粒度,有利于数据的本地性,一个小数据集启动一个Map服务,M个Map任务可以在N台计算机上并行运行,用户可以指定Reduce任务的数量

4,Combine

5,分区,经过连接后可以把产生的中间结果按key的范围划分为R份

6,读取中间结果

7,任务管道

分布式数据化数据表HBase

HBase数据库是基于hadoop的项目,是针对Google的Bigtable的开源实现,它与Google的Bigtable相似

逻辑模型:

用户在表格里存储一系列的数据行,每行包含一个可排序的关键字,一个可选的时间戳及一些可能有数据的列

Hadoop的安装

可以使用虚拟机进行模拟,如果机器上没有安装SSH,安装SSH

配置安装JDK,详细步骤网上很多不一一操作了

到apache的hadoop网站上下载hadoop-0.20.2.tar.gz

使用ftp传到相应的服务器上,如果是虚拟机可以到共享文件夹下选择

复制到linux下的usr目录

tar -zxvf hadoop-0.20.2.tar.gz

解压后使用vi找到conf/hadoop-env.sh文件

打开


# The java implementation to use. Required.
# export JAVA_HOME=/usr/lib/j2sdk1.5-sun
export JAVA_HOME=/opt/jdk1.6.0_27# Extra Java CLASSPATH elements. Optional.
# export HADOOP_CLASSPATH=

安装步骤:

hadoop有三种运行模式:单机模式,伪分布式模式和完全分布式模式。

在调试阶段使用单机模式

查看并且运行示例


bin/hadoop jar hadoop-0.20.2-examples.jar wordcount input outputcat output/*

查看到的结果如下:

[root@LinuxServer hadoop-0.20.2]# cat output/*
hadoop 1
hello 2
world 1


相关文章:

自动跟随小车c语言,基于OpenCV的智能小车运动轨迹跟踪方法研究

摘要:随着人工智能技术的快速发展,智能小车开发受到越来越多研究者的关注,也已经成为一个重要的研究方向,而解决智能小车在路径规划中行驶的运动故障重要手段是对其进行的视频监控,但是智能小车的视频监控只能看到智能小车的行进状况而不进行相对应的处理,所以对智能…

JXJJOI2018_T1_market

题目描述 某天Lemon去超市买柠檬,他发现货架上有N个柠檬,每个柠檬都有一个重量Wi和价格Ci。 Lemon身上只带了S元钱,因此他想要买一个价格不超过S的柠檬回家,另外,他希望他买的那个柠檬的性价比尽量高。 性价比的定义是…

更好的Java虚拟机Zing: 更好的性能,无停顿,更快的启动

Zing虚拟机文档Understanding Java Garbage Collection(了解Java垃圾收集) 首先说明这个Zing是收费的,但是他也是优秀的,我觉得我们可以研究下他的一些思想对于怎么提高JVM,以及目前的JVM有什么缺陷是非常有帮助的。 中文版简介:…

c语言将水仙花数放入一维数组a中,全国计算机等级考试C语言考试程序设计题(13)...

在考生目录下,要求程序PROG.C的功能是:将所有的水仙花数保存到一维数组a中。(所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。例如:1531*1*15*5*53*3*3)#includevoid main(){void NONO( );//函数声明int a[10]{0},i…

[j2me]类似于OperaMini二级菜单界面演练[1]

拜朋友所赐,今日开始尝试如何绘制类似于Opera Mini的二级菜单,如下图所示:我自己的练习,还很幼稚,姑且记录如下:点击左软键,即可选中界面左下角的“选择”命令,二级菜单旋即弹出&…

宜人贷YEP技术、数据沉淀背后:金融科技迎来开放赋能时代

日前,“IFPI第十届金融科技决策者大会2018”在上海举办,宜人贷不仅入选了本届大会的“中国Fintech独角兽榜Top50”,推出的YEP共享平台也受到了众多金融机构的关注。从头部平台宜人贷全面开放金融科技能力来看,互联网金融行业历经混…

Redis源码和java jdk源码中hashcode的不同实现

一.redis实际上是使用了siphash 这个比较简单,我说的简单是指redis代码比较少不像jdk一样调用C代码调用栈非常深。 先看这个rehashing.c 主要就是dictKeyHash函数,需要调用dict.h头文件中定义的dictGenHashFunction #include "redis.h" #i…

android 7.0 短信监控,Android 7.0 监听网络变化的示例代码

Android7.0前,Android系统前网络切换时,会发广播,业务只要监听广播即可。public class NetChangeReceiver extends BroadcastReceiver {private static final String ANDROID_NET_CHANGE_ACTION "android.net.conn.CONNECTIVITY_CHANGE…

Mysql列类型-数值型

2019独角兽企业重金招聘Python工程师标准>>> 一、整数型: 1、取值范围: tinyint smallint mediumint int bigint 分别占用1、2、3、4、8个字节的存储空间 如:tinyint占用1个字节空间,它的取值范围&…

2018.10.22-dtoi1443奶牛逃亡(cowrun)

题目描述&#xff1a; Farmer John忘记修复他农场篱笆上的一个大洞&#xff0c;以至于篱笆围着的N&#xff08;1< N <1,000&#xff09;只奶牛从大洞中逃脱出来&#xff0c;并在农场里横冲直撞。每头在篱笆外的奶牛每分钟都将给他带来一美元的损失。FJ必须遍及每头奶牛、…

[转载]Linux 线程实现机制分析

自从多线程编程的概念出现在 Linux 中以来&#xff0c;Linux 多线应用的发展总是与两个问题脱不开干系&#xff1a;兼容性、效率。本文从线程模型入手&#xff0c;通过分析目前 Linux 平台上最流行的 LinuxThreads 线程库的实现及其不足&#xff0c;描述了 Linux 社区是如何看待…

Java12和Jdk12安装以及OpenJdk12源码

文档&#xff1a; JDK 12文档:https://docs.oracle.com/en/java/javase/12/ 下载&#xff1a; OracleJDK12下载&#xff1a;https://www.oracle.com/technetwork/java/javase/downloads/jdk12-downloads-5295953.html csdn上我下好的&#xff0c;速度较快&#xff1a;https…

android 获取视频大小,Android 获取视频缩略图(获取视频每帧数据)的优化方案

速度对比左边的图片是通过方式1右边的图片是通过方式2speed.gif速度优化&#xff0c;效果拔群。在缩小2倍的Bitmap输出情况下使用MediaMetadataRetriever 抽帧的速度&#xff0c;每帧稳定在 300ms左右。使用MediaCodecImageReader 第一次抽帧。大概是200ms ,后续每帧则是50ms左…

Msql的DML、DDL、DCL的区别

DML(data manipulation language)&#xff1a;它们是SELECT、UPDATE、INSERT、DELETE&#xff0c;这4条命令是用来对数据库里的数据进行操作的语言 DDL(data definition language)&#xff1a;主要的命令有CREATE、ALTER、DROP等&#xff0c;DDL主要是用在定义或改变表(TABLE)的…

JSR 133 Java内存模型以及并发编程的最权威论文汇总

Java内存模型 先看官方文档&#xff1a; https://docs.oracle.com/javase/specs/ JSR 133&#xff1a;Java TM内存模型和线程规范修订版&#xff1a;https://www.jcp.org/en/jsr/detail?id133 JSR&#xff1a;Java规范请求所有JSR的列表&#xff1a;https://jcp.org/en/jsr/…

ajax实现自动刷新页面实例

html部分&#xff1a;<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>ajax实现自动刷新</title> </head> <body onLoad"Autofresh()"> <p>现在的时间是&#xff1a…

android aliasactivity作用,android activity-alias 的作用

activity-alias是android里为了重复使用Activity而设计的。当在Activity的onCreate()方法里&#xff0c;执行getIntent().getComponent().getClassName();得到的可能不是这个Activity的名字&#xff0c;有可能是别名的名字&#xff0c;例如&#xff1a;在AndroidMenifest.xml有…

1024 程序员节 | 请对身边的程序猿好一点

程序员节起源程序员的工作我们都知道&#xff0c;编程嘛。但为什么程序员节要在1024呢&#xff1f;1024最早火起来是因为一个“不可描述”的论坛&#xff0c;那里的回帖机制是&#xff1a;新用户发过贴之后&#xff0c;过1024秒才能发一贴&#xff0c;如果没到1024秒就又发了一…

stackoverflow上一个最会举例子的专家

https://stackoverflow.com/ Premraj是stackoverflow上一个一个最会举例子的专家&#xff0c;我特意收集了他的一些有趣的举例&#xff1a; Java弱引用最精彩的解释 https://stackoverflow.com/questions/299659/whats-the-difference-between-softreference-and-weakrefere…

Java中的两个关键字——super、this

Java中的两个关键字——super、this 神话丿小王子的博客主页 一、super super 是java中方的一个关键字&#xff0c;用它可以引用父类中的成员&#xff1a; super可用于访问父类中定义的属性 super可用于调用父类中定义的成员方法 super可用于在子类构造器中调用父类的构造器 使…

android system window,Android控件的fitSystemWindows属性

官方描述&#xff1a;根据系统窗体里的元素比如状态栏来调整View的布局。如果被设为true&#xff0c;控件的padding将会被调整为顶部留出一个statusBar的空间。类似于伪代码paddingTop"statusBarHeight"。重点说明&#xff1a;当布局内容可以延伸到状态栏&#xff0c…

Nestjs OpenAPI(Swagger)

官方文档 用来描述api 转载于:https://www.cnblogs.com/ajanuw/p/9846589.html

Jdk11,Jdk12的低延迟垃圾收集器ZGC

https://wiki.openjdk.java.net/display/zgc/Main Z垃圾收集器&#xff0c;也称为ZGC&#xff0c;是一种可扩展的低延迟垃圾收集器&#xff0c;旨在实现以下目标&#xff1a; 暂停时间不超过10毫秒暂停时间不会随堆或实时设置大小而增加处理堆范围从几百M到几T字节大小 一目了…

Android项目驱动式开发教程 第2版,《Android项目驱动式开发教程》第一章开发入门.ppt...

《Android项目驱动式开发教程》第一章开发入门1.4 项目框架分析 4 android:versionName"1.0" > 5 8 第9行代码android:icon用来声明整个APP的图标&#xff0c;图片一般都放在drawable文件夹下&#xff0c;使用资源引用的方式。 第10行代码android:label用来声明整…

getLocationInWindow getLocationOnScreen getLeft , getTop, getBottom,getRight

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 最近做项目时&#xff0c;发现在activity的onCreate()和onResume()方法里调用View.getLocationInWindow() 时&#xff0c;View.getLocationInWindow()返回空值&#xff0c;觉得很奇怪&#xff0c;因…

使用reflector对.NET反编译

reflector的下载地址&#xff1a;https://www.cr173.com/soft/355285.html 反编译后的结果&#xff1a; 转载于:https://www.cnblogs.com/ZaraNet/p/9848355.html

协程和Java实现

多线程的性能问题&#xff1a; 1.同步锁。 2.线程阻塞状态和可运行状态之间的切换。 3.线程上下文的切换。 协程&#xff0c;英文Coroutines&#xff0c;是一种比线程更加轻量级的存在。正如一个进程可以拥有多个线程一样&#xff0c;一个线程也可以拥有多个协程。 协程&a…

LoadRunner 技巧之 手动关联与预关联

上一节介绍了关联的原理与自动关联&#xff0c;除了自动关联还有另外两种关联方式&#xff1a;手动关联与 预关联。 手动关联 如果脚本很长&#xff0c;那么我们想找到一…

android app文档,android App项目需求描述文档.docx

本app是给外卖配送员用的&#xff0c;系统后台根据一定的逻辑生成或者建立运单&#xff0c;本App读到后台的运单讲外卖送到定外卖的手中本文档所需详细资料请到/s/1jGGgtLG下载与后台交互的地方不用实现&#xff0c;有数据显示的自己把交互函数写好 返回的测试数据写在交互函数…

如何利用微信小游戏的分包加载机制突破4M代码包体积限制

相信大家度过了一个不错的端午假期&#xff0c;在端午前夕&#xff0c;即6月15日晚上&#xff0c;微信小游戏宣布支持分包加载功能&#xff0c;白鹭引擎在端午节后第一天正式支持分包加载机制。在正式向开发者介绍如何使用前&#xff0c;我先为各位解读一下我对微信提供这个 AP…