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