360 likes | 561 Views
Hadoop 现场演示与编程过程. 朱军 刘锴 傅雷扬 安徽农业大学. 主要内容. 实验平台简介 Hadoop 环境搭建 MapReduce 编程. 实验平台简介. 采用 XenServer 分布式部署 Hadoop 浪潮 380D 5 台虚拟机( CentOS ) 采用 VirtualBox 分布式部署 Hadoop PC 5 台虚拟机( CentOS ). 采用 XenServer 分布式部署 Hadoop. 采用 VirtualBox 分布式部署 Hadoop. Hadoop 环境搭建. Hadoop 的三种部署模式
E N D
Hadoop现场演示与编程过程 朱军 刘锴 傅雷扬 安徽农业大学 云计算可靠性研究组
主要内容 • 实验平台简介 • Hadoop 环境搭建 • MapReduce 编程 云计算可靠性研究组
实验平台简介 • 采用XenServer分布式部署Hadoop • 浪潮380D • 5台虚拟机(CentOS) • 采用VirtualBox分布式部署Hadoop • PC • 5台虚拟机(CentOS) 云计算可靠性研究组
采用XenServer分布式部署Hadoop 云计算可靠性研究组
采用VirtualBox分布式部署Hadoop 云计算可靠性研究组
Hadoop 环境搭建 • Hadoop的三种部署模式 • Hadoop完全分布式部署 • HDFS节点故障演示 云计算可靠性研究组
Hadoop 的三种部署模式 1、单机模式 2、伪分布式模式 3、完全分布式模式 云计算可靠性研究组
Hadoop完全分布式部署 IP/hosts: 210.45.176.46hadoop1.ahau.edu.cn 210.45.176.47hadoop2.ahau.edu.cn 210.45.176.48 hadoop3.ahau.edu.cn 210.45.176.49 hadoop4.ahau.edu.cn 210.45.176.50 hadoop5.ahau.edu.cn Namenode/Jobtracker: hadoop1.ahau.edu.cn Secendnamenode: hadoop2.ahau.edu.cn datanode/tasktracker: hadoop2.ahau.edu.cn hadoop3.ahau.edu.cn hadoop4.ahau.edu.cn Newdatanode: hadoop5.ahau.edu.cn 云计算可靠性研究组
完全分布式部署步骤 一、安装配置 Java环境 二、配置SSH免密码登录 三、安装配置Hadoop 云计算可靠性研究组
安装配置JAVA 1、安装jdk bin/jdk-6u27-x64.bin 2、修改环境变量 vim ~/.bash_profile JAVA_HOME=/usr/local/jdk1.6.0_27 export $JAVA_HOME $PATH=$PATH:$JAVA_HOME/bin 云计算可靠性研究组
配置SSH免密码登录 1、生成密钥 ssh-keygen -t rsa 2、拷贝密钥 ssh-copy-id -i ~/.ssh/id_rsa.pub root@remotehost 云计算可靠性研究组
安装配置Hadoop 1、解压Hadoop 2、从src复制配置文件示例 3、修改hadoop-evn.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、masters、slaves 云计算可靠性研究组
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> 云计算可靠性研究组
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> 云计算可靠性研究组
mapred-site-xml <property> <name>mapred.job.tracker</name> <value>hadoop1.ahau.edu.cn:9200</value> ##设置MapReduce Job运行的主机和端口 </property> 云计算可靠性研究组
masters/slaves 配置 masters:指定Secondnamenode的主机名 slaves:指定datanode/tasktracker的主机名 将Hadoop目录同步到所有节点服务器 云计算可靠性研究组
启动Hadoop • 格式化分布式文件系统 bin/hadoop namenode -format 2、关闭所有节点的防火墙及Selinux 3、在namenode上执行 bin/start-all.sh 4、查看进程运行情况 $JAVA_HOME/bin/jps 云计算可靠性研究组
查看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/ 云计算可靠性研究组
HDFS节点故障演示 一、增加HDFS节点 1、新节点ip/hosts: 210.45.176.50 hadoop5.ahau.edu.cn 2、在新节点上安装Hadoop,配置应与NameNode一致 3、若永久填加该节点,可修改masters和slaves文件 4、临时填加节点,执行命令: bin/hadoop-daemon.sh datanode start 5、查看http://hadoop1.ahau.edu.cn:50070,已变为4个live节点 二、新增节点故障演示 1、人为Kill掉新增节点的datanode进程 2、经过心跳检测时间后,查看http://hadoop1.ahau.edu.cn:50070页面,新增节点消失 云计算可靠性研究组
MapReduce 编程 • MapReduce编程过程 • 编程实例:矩阵相乘 • 程序调试和发布 云计算可靠性研究组
MapReduce编程过程 • 就是继承类与实现接口的过程。这些类与接口来自于Hadoop的Map-Reduce框架,由框架控制其执行流程。 • Java多态性:对象的引用型变量。 编程过程的三个阶段: • 输入阶段 • 计算阶段 • 输出阶段 云计算可靠性研究组
MapReduce编程过程 云计算可靠性研究组
与输入相关的几个抽象类 • InputFormat 文件分割,读取。FileInputFormat从文件中读取数据。 • InputSplits 定义了输入到单个Map任务的输入数据。 • RecordReader 定义了如何从数据上转化为一个(key,value)对,从而输出到Mapper类中。 云计算可靠性研究组
与计算相关的几个抽象类 • Mapper map()方法处理输入<K1, V1>,产生输出<K2, V2>。 • Reducer reduce()方法处理Map的输入<K2, list(V2)>,产生输出<K3, V3>。 • Combiner 实现Reducer接口,对map()输出进行规约。 • Partitioner 分发map()输出给不同的Reduce任务。 云计算可靠性研究组
与输出相关的几个抽象类 • OutputFormat 数据输出。FileOutputFormat输出到文件。 • RecordWriter 输出一个记录到文件中。 云计算可靠性研究组
其它重要类与接口 • Configuration类 读取配置文件。如:core-default.xml、core-site.xml等。 • Job类 配置、提交Job,控制其执行,查询其状态。 • Writable接口 序列化输入输出。任何Key, Value都需要实现它。 • WritableComparable接口 可比较的序列化输入输出。任何Key都需要实现它。 云计算可靠性研究组
编程实例:矩阵相乘 编程环境准备: • 安装配置Java环境 • 安装配置Hadoop • 安装Eclipse(Version: 3.5.2) • 安装插件hadoop-0.20.2-eclipse-plugin.jar 云计算可靠性研究组
map:计算各个Value值(求积) reduce:计算Key相同的所有Value的和(求和) 实例:矩阵相乘 将问题分解成MapReduce作业 X <(1,1), (a11, b11)>、 <(1,1), (a12, b21)> 、 <(1,1), (a13, b31)> Key Value 云计算可靠性研究组
实例:矩阵相乘 输入阶段 文件 MatrixInputFormat MatrixInputFormat重要方法: public int readFile(JobContext context); public List<InputSplit> getSplits(JobContext context); public RecordReader<IntPair, IntPair> createRecordReader(InputSplit split, TaskAttemptContext context) Matrix MatrixInputSplit 云计算可靠性研究组
框架调用关系: MatrixRecordReader.getCurrentKey(), … extends RecordReader Context.getCurrentKey(), … extends MapContext MatrixMulti.MatrixMapper.map() extends Mapper Mapper.run() TaskTracker(MapTask, ReduceTask) JobTracker 实例:矩阵相乘 计算阶段 MatrixInputSplit MatrixRecordReader MatrixRecordReader重要方法: public boolean nextKeyValue(); public IntPair getCurrentKey(); public IntPair getCurrentValue(); IntPair <Key, Value> MatrixMapper MatrixReducer FirstPartitioner 云计算可靠性研究组
MultipleOutputFormat方法及调用关系: DataOutputStream.write(int b), … LineRecordWriter.write(K key, V value) MultiRecordWriter.write(K key, V value); MultipleOutputFormat extends FileOutputFormat .getRecordWriter(TaskAttemptContext job); 实例:矩阵相乘 输出阶段 MatrixReducer MultipleOutputFormat LineRecordWriter 云计算可靠性研究组
程序调试和发布 程序调试 • 编写单元测试(Mockito)。 • 将调试语句记录到错误日志中。(StatusReporter) • 日志文件:分门别类存放在hadoop-version/logs目录下面,hadoop-username-service-hostname.log,尤其关注TaskTracker的log。 • 在单机上首先执行,看看是否能够正确执行,而后再在多机的集群系统上执行。 云计算可靠性研究组
程序调试和发布 程序发布 • 打包 jar, Ant… • 启动作业 hadoop jar job.jar MainClass input output • JobTracker http://host:50030/jobtracker.jsp • NameNode http://host:50070/dfshealth.jsp 云计算可靠性研究组
MapReduce 运行状态 云计算可靠性研究组
Hadoop Map/Reduce 运行状态 云计算可靠性研究组
谢谢! 云计算可靠性研究组