hadoop 现场演示与编程过程

36
云云云云云云云云云 1/35 Hadoop 现现现现现现现现现 现现 现现 现现现 现现现现现现

Upload: giona

Post on 20-Mar-2016

129 views

Category:

Documents


6 download

DESCRIPTION

Hadoop 现场演示与编程过程. 朱军 刘锴 傅雷扬 安徽农业大学. 主要内容. 实验平台简介 Hadoop 环境搭建 MapReduce 编程. 实验平台简介. 采用 XenServer 分布式部署 Hadoop 浪潮 380D 5 台虚拟机( CentOS ) 采用 VirtualBox 分布式部署 Hadoop PC 5 台虚拟机( CentOS ). 采用 XenServer 分布式部署 Hadoop. 采用 VirtualBox 分布式部署 Hadoop. Hadoop 环境搭建. Hadoop 的三种部署模式 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Hadoop 现场演示与编程过程

云计算可靠性研究组1/35

Hadoop 现场演示与编程过程朱军 刘锴 傅雷扬

安徽农业大学

Page 2: Hadoop 现场演示与编程过程

云计算可靠性研究组2/35

主要内容

◆ 实验平台简介◆ Hadoop 环境搭建◆ MapReduce 编程

Page 3: Hadoop 现场演示与编程过程

云计算可靠性研究组3/35

实验平台简介◆ 采用 XenServer 分布式部署 Hadoop

● 浪潮 380D

● 5 台虚拟机( CentOS )◆ 采用 VirtualBox 分布式部署 Hadoop

● PC

● 5 台虚拟机( CentOS )

Page 4: Hadoop 现场演示与编程过程

云计算可靠性研究组4/35

采用 XenServer 分布式部署 Hadoop

Page 5: Hadoop 现场演示与编程过程

云计算可靠性研究组5/35

采用 VirtualBox 分布式部署 Hadoop

Page 6: Hadoop 现场演示与编程过程

云计算可靠性研究组6/35

Hadoop 环境搭建◆ Hadoop 的三种部署模式◆ Hadoop 完全分布式部署◆ HDFS 节点故障演示

Page 7: Hadoop 现场演示与编程过程

云计算可靠性研究组7/35

Hadoop 的三种部署模式1 、单机模式2 、伪分布式模式3 、完全分布式模式

Page 8: Hadoop 现场演示与编程过程

云计算可靠性研究组8/35

IP/hosts:210.45.176.46 hadoop1.ahau.edu.cn210.45.176.47 hadoop2.ahau.edu.cn210.45.176.48 hadoop3.ahau.edu.cn210.45.176.49 hadoop4.ahau.edu.cn210.45.176.50 hadoop5.ahau.edu.cnNamenode/Jobtracker: hadoop1.ahau.edu.cnSecendnamenode: hadoop2.ahau.edu.cndatanode/tasktracker:

hadoop2.ahau.edu.cn hadoop3.ahau.edu.cn hadoop4.ahau.edu.cn

New datanode: hadoop5.ahau.edu.cn

Hadoop 完全分布式部署

Page 9: Hadoop 现场演示与编程过程

云计算可靠性研究组9/35

完全分布式部署步骤一、安装配置 Java 环境二、配置 SSH 免密码登录三、安装配置 Hadoop

Page 10: Hadoop 现场演示与编程过程

云计算可靠性研究组10/35

安装配置 JAVA1 、安装 jdk

bin/jdk-6u27-x64.bin

2 、修改环境变量vim ~/.bash_profileJAVA_HOME=/usr/local/jdk1.6.0_27export $JAVA_HOME$PATH=$PATH:$JAVA_HOME/bin

Page 11: Hadoop 现场演示与编程过程

云计算可靠性研究组11/35

配置 SSH 免密码登录1 、生成密钥

ssh-keygen -t rsa

2 、拷贝密钥ssh-copy-id -i ~/.ssh/id_rsa.pub root@remotehost

Page 12: Hadoop 现场演示与编程过程

云计算可靠性研究组12/35

安装配置 Hadoop1 、解压 Hadoop

2 、从 src 复制配置文件示例3 、修改 hadoop-evn.sh 、 core-site.xml 、 hd

fs-site.xml 、 mapred-site.xml 、 masters、 slaves

Page 13: Hadoop 现场演示与编程过程

云计算可靠性研究组13/35

core-site-xml

<property> <name>hadoop.tmp.dir</name> <value>/home/grid/hadoop/tmp</value> # 设定 Hadoop 临时目录 <description> </description> </property><property> <name>fs.default.name</name> <value>hdfs://hadoop1.ahau.edu.cn:9100</value> # 设置文件系统路径</property></configuration> <property><name>heartbeat.recheck.interval</name> # 节点间心跳检测间隔时间,默认 10 分钟<value>1000</value></property>

Page 14: Hadoop 现场演示与编程过程

云计算可靠性研究组14/35

hdfs-site-xml

<property> <name>dfs.relplication</name> ##HDFS 的副本数,默认为 3 ,如果 DataNode 的数量小于这个值会有问题 <value>2</value> </property><property><name>dfs.permissions</name> ## 是否对 dfs 中的文件进行权限控制<value>false</value></property>

Page 15: Hadoop 现场演示与编程过程

云计算可靠性研究组15/35

mapred-site-xml

<property> <name>mapred.job.tracker</name> <value>hadoop1.ahau.edu.cn:9200</value> ## 设置 MapReduce Job 运行的主机和端口 </property>

Page 16: Hadoop 现场演示与编程过程

云计算可靠性研究组16/35

masters/slaves 配置masters :指定 Secondnamenode 的主机名slaves :指定 datanode/tasktracker 的主机名将 Hadoop 目录同步到所有节点服务器

Page 17: Hadoop 现场演示与编程过程

云计算可靠性研究组17/35

启动 Hadoop1. 格式化分布式文件系统bin/hadoop namenode -format2 、关闭所有节点的防火墙及 Selinux3 、在 namenode 上执行bin/start-all.sh4 、查看进程运行情况$JAVA_HOME/bin/jps

Page 18: Hadoop 现场演示与编程过程

云计算可靠性研究组18/35

查看 Hadoop 运行状态HDFS 状态:http://hadoop1.ahau.edu.cn:50070/MapReduce 状态 :http://hadoop1.ahau.edu.cn:50030/查看文件系统情况 :

bin/hadoop dfsadmin -report

列出文件系统目录 :bin/hadoop fs -ls hdfs://hadoop1.ahau.edu.cn:9100/

Page 19: Hadoop 现场演示与编程过程

云计算可靠性研究组19/35

一、增加 HDFS 节点1 、新节点 ip/hosts:210.45.176.50 hadoop5.ahau.edu.cn2 、在新节点上安装 Hadoop ,配置应与 NameNode 一致3 、若永久填加该节点,可修改 masters 和 slaves 文件4 、临时填加节点,执行命令:bin/hadoop-daemon.sh datanode start5 、查看 http://hadoop1.ahau.edu.cn:50070,已变为 4 个 live 节点二、新增节点故障演示1 、人为 Kill 掉新增节点的 datanode 进程2 、经过心跳检测时间后,查看 http://hadoop1.ahau.edu.cn:50070页面,新增节点消失

HDFS 节点故障演示

Page 20: Hadoop 现场演示与编程过程

云计算可靠性研究组20/35

MapReduce 编程◆ MapReduce 编程过程◆ 编程实例:矩阵相乘◆ 程序调试和发布

Page 21: Hadoop 现场演示与编程过程

云计算可靠性研究组21/35

MapReduce 编程过程◆就是继承类与实现接口的过程。这些类与接口来自于 Hadoop 的 Map-Reduce 框架,由框架控制其执行流程。◆Java 多态性:对象的引用型变量。编程过程的三个阶段:◆输入阶段◆计算阶段◆输出阶段

Page 22: Hadoop 现场演示与编程过程

云计算可靠性研究组22/35

MapReduce 编程过程

Page 23: Hadoop 现场演示与编程过程

云计算可靠性研究组23/35

与输入相关的几个抽象类◆InputFormat

文件分割,读取。 FileInputFormat 从文件中读取数据。◆InputSplits

定义了输入到单个 Map任务的输入数据。◆RecordReader

定义了如何从数据上转化为一个 (key,value)对,从而输出到 Mapper 类中。

Page 24: Hadoop 现场演示与编程过程

云计算可靠性研究组24/35

与计算相关的几个抽象类◆Mapper

map()方法处理输入 <K1, V1> ,产生输出 <K2, V2> 。◆Reducer

reduce()方法处理Map 的输入 <K2, list(V2)> ,产生输出<K3, V3> 。

◆Combiner实现 Reducer 接口,对 map()输出进行规约。

◆Partitioner分发 map()输出给不同的 Reduce任务。

Page 25: Hadoop 现场演示与编程过程

云计算可靠性研究组25/35

与输出相关的几个抽象类◆OutputFormat

数据输出。 FileOutputFormat输出到文件。◆RecordWriter输出一个记录到文件中。

Page 26: Hadoop 现场演示与编程过程

云计算可靠性研究组26/35

其它重要类与接口◆Configuration 类读取配置文件。如: core-default.xml 、 core-site.xml等。

◆Job 类配置、提交 Job ,控制其执行,查询其状态。

◆Writable 接口序列化输入输出。任何 Key, Value都需要实现它。

◆WritableComparable 接口可比较的序列化输入输出。任何 Key都需要实现它。

Page 27: Hadoop 现场演示与编程过程

云计算可靠性研究组27/35

编程实例:矩阵相乘编程环境准备:◆安装配置 Java 环境◆安装配置 Hadoop

◆安装 Eclipse(Version: 3.5.2)

◆安装插件 hadoop-0.20.2-eclipse-plugin.jar

Page 28: Hadoop 现场演示与编程过程

云计算可靠性研究组28/35

实例:矩阵相乘将问题分解成 MapReduce作业

232221

131211

aaaaaa

3231

2221

1211

bbbbbb

X

<(1,1), (a11, b11)> 、 <(1,1), (a12, b21)> 、 <(1,1), (a13, b31)>Key Value map:计算各个 Value 值(求积)

reduce:计算Key 相同的所有 Value 的和(求和)

Page 29: Hadoop 现场演示与编程过程

云计算可靠性研究组29/35

实例:矩阵相乘输入阶段

文件 MatrixInputFormatMatrix

MatrixInputSplit

MatrixInputFormat 重要方法:public int readFile(JobContext context);public List<InputSplit> getSplits(JobContext

context);public RecordReader<IntPair, IntPair>

createRecordReader(InputSplit split,TaskAttemptContext context)

Page 30: Hadoop 现场演示与编程过程

云计算可靠性研究组30/35

实例:矩阵相乘计算阶段MatrixInputSplit MatrixRecordReader

<Key, Value>IntPairMatrixMapperFirstPartitionerMatrixReducer

框架调用关系:MatrixRecordReader.getCurrentKey(), …

extends RecordReaderContext.getCurrentKey(), …

extends MapContextMatrixMulti.MatrixMapper.map()

extends MapperMapper.run()TaskTracker(MapTask, ReduceTask)JobTracker

MatrixRecordReader 重要方法:public boolean nextKeyValue();public IntPair getCurrentKey();public IntPair getCurrentValue();

Page 31: Hadoop 现场演示与编程过程

云计算可靠性研究组31/35

实例:矩阵相乘输出阶段

MatrixReducerMultipleOutputFormat

LineRecordWriter

MultipleOutputFormat 方法及调用关系:DataOutputStream.write(int b), …LineRecordWriter.write(K key, V value)MultiRecordWriter.write(K key, V value);MultipleOutputFormat extends FileOutputFormat

.getRecordWriter(TaskAttemptContext job);

Page 32: Hadoop 现场演示与编程过程

云计算可靠性研究组32/35

程序调试和发布程序调试◆ 编写单元测试( Mockito )。◆ 将调试语句记录到错误日志中。 (StatusReporter)◆ 日志文件:分门别类存放在 hadoop-version/logs目录下面, hadoop-username-service-hostnam

e.log ,尤其关注 TaskTracker 的 log 。◆ 在单机上首先执行,看看是否能够正确执行,而后再在多机的集群系统上执行。

Page 33: Hadoop 现场演示与编程过程

云计算可靠性研究组33/35

程序调试和发布程序发布◆ 打包

jar, Ant…◆ 启动作业

hadoop jar job.jar MainClass input output◆ JobTracker

http://host:50030/jobtracker.jsp◆ NameNode

http://host:50070/dfshealth.jsp

Page 34: Hadoop 现场演示与编程过程

云计算可靠性研究组34/35

MapReduce 运行状态

Page 35: Hadoop 现场演示与编程过程

云计算可靠性研究组35/35

Hadoop Map/Reduce 运行状态

Page 36: Hadoop 现场演示与编程过程

云计算可靠性研究组36/35

谢谢 !