34
Hadoop 第讲 @ 瑞友科技IT应用研究院池建强 Weibo: @池建强 Twitter: @sagacity

Hadoop-分布式数据平台

Embed Size (px)

DESCRIPTION

在云计算和大数据大行其道的今天,Hadoop及其相关技术起到了非常重要的作用,是这个时代不容忽视的一个技术平台。事实上,由于其开源、低成本和和前所未有的扩展性,Hadoop正成为新一代的数据处理平台。

Citation preview

Page 1: Hadoop-分布式数据平台

Hadoop 第⼀一讲 @瑞友科技IT应用研究院池建强

Weibo: @池建强Twitter: @sagacity

Page 2: Hadoop-分布式数据平台

大数据胜于好算法

‣ 如果数据足够多,可能产生出意想之外的应用‣ 无论算法好坏,更多的数据总能带了来更好的推荐效果

Page 3: Hadoop-分布式数据平台

大数据存储和分析遇到的问题

‣ 磁盘容量的增长远远大于磁盘读取速度‣ 1TB的磁盘,数据传输速度100MB/s,读⼀一遍2.5H‣ 写数据就更慢了...

Page 4: Hadoop-分布式数据平台

解决之道

‣ 磁盘数据并行读写‣ 分布式文件系统,冗余‣ MapReduce

Page 5: Hadoop-分布式数据平台

2004年,Google发表论文,向全世界介绍了MapReduce2005年初,为了支持Nutch搜索引擎项目,Nutch的开发者基于Google发布的MapReduce报告,在Nutch上开发了⼀一个可工作的MapReduce应用2005年中,所有主要的Nutch算法被移植到MapReduce和NDFS(Nutch Distributed File System )环境来运行2006年2月,Apache Hadoop项目正式启动以支持MapReduce和HDFS的独立发展2007年,百度开始使用Hadoop做离线处理,目前差不多80%的Hadoop集群用作日志处理2008年,淘宝开始投入研究基于Hadoop的系统--云梯,并将其用于处理电子商务相关数据。云梯1的总容量大概为9.3PB,包含了1100台机器,每天处理约18000道作业,扫描500TB数据2008年1月,Hadoop成为Apache顶级项目2008年7月,Hadoop打破1TB数据排序基准测试记录。Yahoo的⼀一个Hadoop集群用209秒完成1TB数据的排序,比上⼀一年的纪录保持者保持的297秒快了将近90秒项目演化...

Page 6: Hadoop-分布式数据平台

Hadoop提供了⼀一个可靠的共享存储和分析系统。HDFS实现存储,MapReduce实现分析处理

Page 7: Hadoop-分布式数据平台

Google App Engine——Runtime,OpenAPI

MapReduce BigTable

GFS

Chubby

Page 8: Hadoop-分布式数据平台

Google App Engine——Runtime,OpenAPI

MapReduce BigTable

GFS

Chubby

Hadoop

MapReduce HBase/Hive

HDFS

PigZooKeeper

Page 9: Hadoop-分布式数据平台

传统关系型数据库 MapReduce

数据大小 GB PB

访问 交互式和批处理 批处理更新 多次读写 ⼀一次写入多次读取结构 静态模式 动态模式完整性 高 低横向扩展 非线性 线性

Page 10: Hadoop-分布式数据平台

Hadoop生态圈Hadoop生态圈Common

分布式文件系统和通用I/O的组件与接口(序列化,Java RPC和持久化数据结构)

Avro 支持高效的跨语言RPC和持久数据存储的序列化系统MapReduce 分布式数据处理模型和执行环境,运行在大型商用机集群

HDFS 分布式文件系统,用于大型商用机集群

PIG数据流语言和运行环境,检索大型数据集,Pig运行在MapReduce和HDFS的集群上

Hive分布式、按列存储的数据仓库。Hive管理HDFS中存储的数据,并提供基于SQL的查询语言(由运行时引擎翻译成MapReduce作业)

HBase分布式、按列存储的数据库。HBase使用HDFS作为底层存储,同时支持MapReduce的批量式计算和点查询(随机读取)

ZooKeeper 分布式、可用性高的协调服务。提供类似分布式锁的基础服务

Sqoop 在数据库和HDFS之间高效传输数据的工具

Page 11: Hadoop-分布式数据平台

Hadoop支持多种语言,包括Java/C/Python/Ruby

Page 12: Hadoop-分布式数据平台

MapReduce

Page 13: Hadoop-分布式数据平台

MapReduce

Page 14: Hadoop-分布式数据平台

MapReduce对数据采用的是运行时解释的方式,所以对非结构化和半结构化数据非常有效MapReduce输入的键和值并不是数据固有的属性,而是有分析数据的人员来选择的

Page 15: Hadoop-分布式数据平台

0067011990999991950051507004+68750+023550FM-12+038299999V0203301N00671220001CN9999999N9+00001+999999999990043011990999991950051512004+68750+023550FM-12+038299999V0203201N00671220001CN9999999N9+00221+999999999990043011990999991950051518004+68750+023550FM-12+038299999V0203201N00261220001CN9999999N9-00111+999999999990043012650999991949032412004+62300+010750FM-12+048599999V0202701N00461220001CN0500001N9+01111+999999999990043012650999991949032418004+62300+010750FM-12+048599999V0202701N00461220001CN0500001N9+00781+99999999999

Page 16: Hadoop-分布式数据平台

public class MaxTemperatureMapper extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> {

private static final int MISSING = 9999; //key:行偏移量; value:行文本 public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { String line = value.toString(); String year = line.substring(15, 19); ...... if (airTemperature != MISSING && quality.matches("[01459]")) { output.collect(new Text(year), new IntWritable(airTemperature)); } }}

Mapper

Page 17: Hadoop-分布式数据平台

public class MaxTemperatureReducer extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> {

public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { int maxValue = Integer.MIN_VALUE; while (values.hasNext()) { maxValue = Math.max(maxValue, values.next().get()); } output.collect(key, new IntWritable(maxValue)); }}

Reducer

Page 18: Hadoop-分布式数据平台

Combiner

map1: (1950, 0) map2: (1950, 30) (1950, 20) (1950, 20) (1950, 10)

combine: (1950, [20,30])

conf.setMapperClass(MaxTemperatureMapper.class);//指定合并函数conf.setCombinerClass(MaxTemperatureReducer.class);conf.setReducerClass(MaxTemperatureReducer.class);

Page 19: Hadoop-分布式数据平台

HDFS

Page 20: Hadoop-分布式数据平台

HDFS是Hadoop的首选分布式文件系统,同时Hadoop也可以支持其他文件系统,例如本地文件和其他分布式系统。

Page 21: Hadoop-分布式数据平台

超大文件—>1024G—>1T—>1024T—>1PHDSF是为大数据吞吐设计的,这可能会以时间延迟为代价HDFS的block默认为64M,Map任务通常⼀一次处理⼀一个块的任务

Page 22: Hadoop-分布式数据平台
Page 23: Hadoop-分布式数据平台

nodename存储文件的元数据,nodename是放在内存中的,所以文件存储的节点受限于namenode的内存大小。显示分布式系统的数据块结构:hadoop fsck / -files -blocks

Page 24: Hadoop-分布式数据平台

安装部署

Page 25: Hadoop-分布式数据平台

本地模式‣ JDK1.6‣ 无需运行守候进程‣ 默认配置文件无须修改‣ 在etc/hadoop/hadoop-env.sh设置JAVA_HOME‣ 执行:bin/hadoop version

Page 26: Hadoop-分布式数据平台

伪分布模式‣ 需要运行守候进程-sbin/startall.sh‣ 修改配置文件‣ 配置SSH ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

‣ 格式化HDFS文件系统‣ 查看分布式文件:hadoop -fs ls .‣ NameNode - http://localhost:50070/‣ JobTracker - http://localhost:50030/

Hadoop控制脚本依赖SSH来执行对整个集群的操作。

为了支持无缝工作,SSH安装好后需要允许运行hadoop的用户无需键入密码登录到集群内的机器。

创建公钥和私钥对,在集群间共享密钥对。

Page 27: Hadoop-分布式数据平台

全分布模式‣ 在至少两台机器安装hadoop 10.211.55.2-os x 10.211.55.7-linux

‣ 配置SSH: cd ~/.ssh scp authorized_keys 10.211.55.7:/home/chjq/.ssh

‣ 修改配置文件,增加Slave节点‣ 格式化全分布式HDFS文件系统‣ 查看分布式文件:hadoop -fs ls .‣ NameNode - http://10.211.55.2:50070/‣ JobTracker - http://10.211.55.2:50030/

Page 28: Hadoop-分布式数据平台

MapReduce和HDFS实践

Page 29: Hadoop-分布式数据平台
Page 30: Hadoop-分布式数据平台

如何运行第二章中Java的MaxTemperature例子?1、首先把所需数据提交到HDFS中。cd hadoop-bookhadoop fs -put input input

2、建立java项目,把相关例程中的java代码导入项目包括:MaxTemperature.javaMaxTemperatureMapper.javaMaxTemperatureReducer.javaMaxTemperatureWithCombiner.javaNewMaxTemperature.java

引入jar包:hadoop-core-1.0.0.jar编译通过,把源代码导出jar包,MaxTemperature.jar

Page 31: Hadoop-分布式数据平台

3、执行命令运行map/reduce任务以jar包的形式执行任务:hadoop jar MaxTemperature.jar MaxTemperature input/ncdc/sample.txt outputMaxTemperature是入口程序input/ncdc/sample.txt是HDFS上的数据文件可以采用目录方式处理多个数据,例如:hadoop jar MaxTemperature.jarMaxTemperature input/ncdc/*.txt outputhadoop jar MaxTemperature.jarMaxTemperature input/ncdc/* outputhadoop会自动遍历目录下的所有文件

output是存放输出结果目录

Page 32: Hadoop-分布式数据平台

4、查看执行结果输出数据写入output目录,其中每个reducer都有⼀一个输出文件,在这个例子中,包含⼀一个reducer,所以只能找到⼀一个文件,part-00000

hadoop fs -cat output/part-00000

Page 33: Hadoop-分布式数据平台

欲知后事如何且听下回分解

Page 34: Hadoop-分布式数据平台

Questions?

Follow me 微博:@池建强 | twitter: @sagacity