大数据Hadoop之分布式模式
资料
Hadoop集群常用端口 Hadoop集群常用端口
Q:NameNode是什么?
A:NameNode 是一个通常在 HDFS 实例中的单独机器上运行的软件。 它负责管理文件系统名称空间和控制外部客户机的访问。NameNode 决定是否将文件映射到 DataNode 上的复制块上。对于最常见的 3 个复制块,第一个复制块存储在同一机架的不同节点上,最后一个复制块存储在不同机架的某个节点上。NameNode本身不可避免地具有SPOF(Single Point Of Failure)单点失效的风险,主备模式并不能解决这个问题,通过Hadoop Non-stop namenode才能实现100% uptime可用时间。
- Q:DataNode如何理解?
A:DataNode 也是一个通常在 HDFS实例中的单独机器上运行的软件。Hadoop 集群包含一个 NameNode 和大量 DataNode。DataNode 通常以机架的形式组织,机架通过一个交换机将所有系统连接起来。Hadoop 的一个假设是:机架内部节点之间的传输速度快于机架间节点的传输速度。
DataNode 响应来自 HDFS 客户机的读写请求。它们还响应来自 NameNode 的创建、删除和复制块的命令。NameNode 依赖来自每个 DataNode 的定期心跳(heartbeat)消息。每条消息都包含一个块报告,NameNode 可以根据这个报告验证块映射和其他文件系统元数据。如果 DataNode 不能发送心跳消息,NameNode 将采取修复措施,重新复制在该节点上丢失的块。
Q:如何理解Google集群系统原型?
A:Google的数据中心使用廉价的Linux PC机组成集群,在上面运行各种应用。核心组件是3个:
(a) GFS(Google File System)。一个分布式文件系统,隐藏下层负载均衡,冗余复制等细节,对上层程序提供一个统一的文件系统API接口。Google根据自己的需求对它进行了特别优化,包括:超大文件的访问,读操作比例远超过写操作,PC机极易发生故障造成节点失效等。GFS把文件分成64MB的块,分布在集群的机器上,使用Linux的文件系统存放。同时每块文件至少有3份以上的冗余。中心是一个Master节点,根据文件索引,找寻文件块。详见Google的工程师发布的GFS论文。
(b) MapReduce。Google发现大多数分布式运算可以抽象为MapReduce操作。Map是把输入Input分解成中间的Key/Value对,Reduce把Key/Value合成最终输出Output。这两个函数由程序员提供给系统,下层设施把Map和Reduce操作分布在集群上运行,并把结果存储在GFS上。
(c) BigTable。一个大型的分布式数据库,这个数据库不是关系式的数据库。像它的名字一样,就是一个巨大的表格,用来存储结构化的数据。配置
如果不能查看,看如下帖子处理 http://www.cnblogs.com/zlslch/p/6604189.html
伪分布式模式
Hadoop运行模式
Hadoop运行模式包括:本地模式、伪分布式模式以及完全分布式模式
启动HDFS并运行MapReduce程序
伪分布式只有一台 ,且按照完全分布式的流程来搭建的。
配置:core-site.xml
<!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name><!--本地的文件系统--> <value>hdfs://cznczaihadoop101:9000</value><!--默认是本地的,然后将其改成hdfs--> </property> <!-- 指定Hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-2.10.0/data/tmp</value> </property><!--改到了hadoop目录下-->
配置:hadoop-env.sh
如果没法获取路径 就要 source etc/profile root@cznczaihadoop101:/opt/module/hadoop-2.10.0# java -version java version "1.8.0_241" Java(TM) SE Runtime Environment (build 1.8.0_241-b07) Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode) root@cznczaihadoop101:/opt/module/hadoop-2.10.0# echo $JAVA_HOME /opt/module/jdk1.8.0_241
hadoop集群上的副本有3
我们修改为2 只要添加立即备份 原来只有一份配置:hdfs-site.xml
<!-- 指定HDFS副本的数量 --> <property> <name>dfs.replication</name> <value>1</value> </property>
格式化NameNode(第一次启动时格式化,以后就不要总格式化)
root@cznczaihadoop101:/opt/module/hadoop-2.10.0# bin/hdfs namenode -format
启动NameNode
root@cznczaihadoop101:/opt/module/hadoop-2.10.0# sbin/hadoop-daemon.sh start namenode
启动DataNode
root@cznczaihadoop101:/opt/module/hadoop-2.10.0# sbin/hadoop-daemon.sh start datanode
查看进程
JPS
查看是否运行
http://192.168.47.101:50070/
使用
创建路径
root@cznczaihadoop101:/opt/module/hadoop-2.10.0# bin/hdfs dfs -mkdir -p /user/cznczai/input
上传文件HDFS
root@cznczaihadoop101:/opt/module/hadoop-2.10.0# bin/hdfs dfs -put wcinput/wc.input /user/cznczai/input
权限 所有者 组 大小 时间 副本数 块大小【溢出为新块】测试运行
# bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.0.jar wordcount /user/cznczai/input/wc.input /user/cznczai/ouput
伪分布式 Log日志查看和NN格式化
格式化NameNode
- 查看进程有没有关掉 jps
- 删除 data logs 目录
- 格式化
为什么不能一直格式化NameNode,格式化NameNode,要注意什么
data记录的是实实在在集群上的数据
name文件夹 namenode的数据
有相同的集群id 如果其中一个对不上对面 就会出错
原因
启动YARN并运行MapReduce程序
- 配置yarn-env.sh
配置一下JAVA_HOME
- 配置yarn-site.xml
vim etc/hadoop/yarn-site.xml<!-- Reducer获取数据的方式 shuffle--> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定YARN的ResourceManager的地址 服务器地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>cznczaihadoop101</value> </property>
- 配置:mapred-env.sh
- 配置: (用mv命令 对mapred-site.xml.template重新命名为) mapred-site.xml
<!-- 指定MR运行在YARN上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
- 启动集群[namenode 和 datanode 已经启动了]
root@cznczaihadoop101:/opt/module/hadoop-2.10.0# sbin/yarn-daemon.sh start resourcemanager root@cznczaihadoop101:/opt/module/hadoop-2.10.0# sbin/yarn-daemon.sh start nodemanager