Transcript Document

云计算平台Hadoop的部署
目录
• Hadoop简介
– HDFS (Hadoop Distributed File System)
– MapReduce
• Hadoop的部署
– 预备条件:ssh,jvm
– 参数设置:conf/*
– 启动hdfs和mapreduce
– 运行MapReduce任务
历史
• 2002-2004: Apache Nutch
• 2004-2006:
– Google 发表 GFS 和 MapReduce相关论文
– Apache 在Nutch中实现HDFS和MapReduce
• 2006-2008:
– Hadoop 项目从Nutch中分离
– 2008年7月,Hadoop赢得Terabyte Sort
Benchmark
Doug Cutting
Hadoop项目负责人
Hadoop简介
• 数据为中心(data-centered)
• 支持高可用的(high availability),可扩缩
(scalable)的分布式计算的开源软件
– 海量非结构的数据分析
– 日志分析
• Google, Facebook, Yahoo!, Amazon,
Baidu, Renren, Tencent…
– http://wiki.apache.org/hadoop/Powered
By
HDFS
• Fault-tolerant, 容错性
• Run on commodity hardware,在通用的机器上运行
• Scalable 可扩缩的
1个
namenode
多个
datanodes
http://hadoop.apache.org/hdfs/docs/current/hdfs_design.html
http://labs.google.com/papers/gfs.html
HDFS
• NameNode
–存贮HDFS的元数据(metadata)
–管理文件系统的命名空间(namespace)
» 创建、删除、移动、重命名文件和文件夹
–接收从DataNode来的Heartbeat 和 Blockreport
• DataNode
–存贮数据块
–执行从Namenode来的文件操作命令
–定时向NameNode发送Heartbeat和Blockreport
7
Heartbeat和Blockreport
Namenode
Metadata:
<1,(1,2)>
<2,(2,3) >
<3,(1,3)>
1,3
1
Datanode 1
3
1,2
1
Datanode 2
2
2,3
2
Datanode 3
3
Data Flow
• File Read
9
Data Flow
• File Write
10
MapReduce
• 编程模型(program model),软件包
• Map
– 把要处理的数据组合成一个个的<key,
value>对(pair)
• Reduce
– 把具有相同key的pair聚集在一起,计算一个
新的value,从而得到一个新的<key, value>
并输出。
Mapreduce
一个Jobtracker
控制
数据流
多个tasktrackers
MapReduce
• Jobtraker (Master)
– 接收任务(job)的提交
– 提供任务的监控(monitoring)和控制(control)
– 把job划分成多个tasks,交给Tasktracker执行,并管
理这些tasks的执行
• Tasktracker (Worker)
– 管理单个task的map任务和reduce任务的执行
Word count:
file0:
hello world
file1:
hello mapreduce
file2:
bye bye
file0
<“hello”, 1>
<0, “hello world”>
Input files
<“world”, 1>
file1
<“hello”, 1>
<0, “hello mapreduce”>
<“mpareduce”, 1>
<“hello”, 2>
<“world”, 1>
file2
<0, “bye bye”>
files
<line offset, line content>
<“mapreduce”, 1>
<“bye”, 2>
<word, count>
<“bye”, 2>
<word, count>
files
目录
• Hadoop简介
– HDFS (Hadoop Distributed File System)
– MapReduce
• Hadoop的部署
– 预备条件:ssh,jvm
– 参数设置:conf/*
– 启动hdfs和mapreduce
• 运行MapReduce任务
目标Hadoop 机群
Master
NameNode
Jobtracker
slave0
DataNode0
TaskTracker0
slave1
DataNode1
TaskTracker1
目录
• Hadoop简介
– HDFS (Hadoop Distributed File System)
– MapReduce
• Hadoop的部署
– 预备条件:ssh,jvm
– 参数设置:conf/*
– 启动hdfs和mapreduce
• 运行MapReduce任务
预备条件0
• 三台机器
– 操作系统相同,在同一局域网
• node50 ip:11.11.11.50
• node51 ip:11.11.11.51
• node52 ip:11.11.11.52
– 一个专门用于hadoop安装的用户
• hadoop
预备条件0
• 修改/etc/hosts, 添加三台机器的机器名和
ip映射(三台机器都要做)
– #vim /etc/hosts
预备条件0
• 创建专门用于hadoop安装的用户名(三台
机器都要做)
– #useradd –m hadoop
– #passwd hadoop
以#开头的命令是指在root权限下执行的命令
以$开头的命令是指在专门用于hadoop的用户下执行的命令
预备条件1
• jvm:Sun JavaTM 1.6.x
– 检查是否已经安装:
• $java –version 如果返回1.6则已经安装,否者要
下载java 1.6并且安装
– 安装java1.6
• 下载程序包
http://www.oracle.com/technetwork/java/javase/downloads/index.html
预备条件1
• 给下载下来的文件添加可执行权限
– #chmod 755 XXXXXX
• 执行文件,才生一个rpm文件
– ./XXXXXX
• 双击执行rpm文件
预备条件1
添加java环境变量
$vim ~/.bashrc
在文件最后添加以下三行
export JAVA_HOME=/usr/java/default
export CLASSPATH=.:JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin
$source ~/.bashrc
• 其中JAVA_HOME的位置要确认一下安装
的目录是否是这个位置
• 再次检查java版本
预备条件2
• 使master可以以无密码的方式ssh登录到
slaves上
– 生成各台机器的private key和public key
• $ssh-keygen (对所有提问按enter)
– 把master的public key拷贝到它自己和
slaves机器上,把slaves上的public key拷贝
到master上
• $ssh-copy-id XXX
预备条件2
目录
• Hadoop简介
– HDFS (Hadoop Distributed File System)
– MapReduce
• Hadoop的部署
– 预备条件:ssh,jvm
– 参数设置:conf/*
– 启动hdfs和mapreduce
• 运行MapReduce任务
Master节点下载hadoop0.20.2
• 从renren网镜像下载Hadoop文件
– $wget http://labs.renren.com/apachemirror//hadoop/core/stable/hadoop0.20.2.tar.gz
• 解压
• 重命名解压后的文件夹为hadoop
Master节点下载hadoop0.20.2
$wget http://labs.renren.com/apache.mirror//hadoop/core/stable/hadoop-0.20.2.tar.gz
$ tar –xf hadoop-0.20.2.tar.gz
$mv hadoop-0.20.2 hadoop
设置conf/*里的文件
• 1.
• 2.
• 3.
• 4.
• 5.
hadoop-env.sh
core-site.xml
mapred-site.xml
slaves
masters
conf/hadoop-env.sh
• 添加JAVA_HOME变量
– export JAVA_HOME=/usr/java/default
conf/core-site.xml
• 添加fs.default.name
Hdfs://node50:9000,
node50是主节点名
conf/mapred-site.xml
• 添加mapred.job.tracker
conf/slaves
• 添加slaves机器名
conf/masters
• 添加secondary master
同步hadoop文件夹
• 把hadoop文件夹复制到slaves节点的相同
位置
– $scp –r hadoop node51:~
– $scp –r hadoop node52:~
目录
• Hadoop简介
– HDFS (Hadoop Distributed File System)
– MapReduce
• Hadoop的部署
– 预备条件:ssh,jvm
– 参数设置:conf/*
– 启动hdfs和mapreduce
• 运行MapReduce任务
Hadoop的命令bin/*
dfs shell guide: http://hadoop.apache.org/common/docs/r0.20.2/hdfs_shell.html
hdfs的格式化(format)
• 格式化hdfs
– $hadoop namenode -format
启动hdfs和mapreduce
Hdfs的web界面
Jobtracker的web界面
目录
• Hadoop简介
– HDFS (Hadoop Distributed File System)
– MapReduce
• Hadoop的部署
– 预备条件:ssh,jvm
– 参数设置:conf/*
– 启动hdfs和mapreduce
• 运行MapReduce任务
准备WordCount.java
• http://hadoop.apache.org/common/docs/r0.20.2/mapred_tutorial.
html
• 把WordCount.java放到主节点的家目录下
• 编译WordCount.java,并打包生成的文件到wordcount.jar
准备输入文件夹
• 在hdfs中建立文件夹input
• 本地建立file01和file02,并把它上传到hdfs的input文件
夹中
运行WordCount
查看结果
Reference
• Google papers:
– MapReduce: http://labs.google.com/papers/mapreduce.html
– GFS: http://labs.google.com/papers/gfs.html
• Hadoop links:
– http://hadoop.apache.org/
– http://hadoop.apache.org/common/docs/r0.20.2/mapred_tuto
rial.html