需要JDK、SSH
对于伪分布式,Hadoop会采取与集群相同的处理方式:按次序启动文件conf/slaves中记载的主机上的进程,只不过在伪分布式中Slave为localhost(自身)。
Hadoop从三个角度将主机划分为两种角色:
最基本Master和Slave
HDFS角度:NameNode和DataNode
MapReduce角度:JobTracker和TaskTracker
三种运行方式:
单机模式:无需配置,Hadoop被认为是一个单独的Java进程,用于调试
伪分布式:fs.default.name=hdfs://localhost:9000
dfs.replication=1
分布式:
格式化HDFS系统:hadoop namenode -format
HDFS web端口:50070
网络拓扑
通常来说,一个Hadoop集群体系结构由两层网络拓扑组成
Switch |
Switch1 |
Node1 |
Node2 |
||
Node3 |
||
Switch2 |
Node4 |
|
Node5 |
||
Node5 |
实际应用中,每个机架会有30-40台机器,这些机器共享一个1GB带宽的网络交换机;
在所有机架之上还有一个核心交换机或路由器,通常来说其网络交换能力为1GB或更高。
同一机架中机器节点之间的带宽资源肯定比不同机架中机器节点丰富,这也是Hadoop随后设计数据读写分发策略要考虑的一个重要因素。
在实际应用中,为了使Hadoop集群获得更高的性能,需要配置集群,使Hadoop能够感知其所在的网络拓扑结构——使Hadoop清晰的知道每台机器所在的机架。
在处理MapReduce任务时,优先选择在机架内部做数据传输,以充分利用网络带宽资源。
HDFS可以更加智能地部署数据副本,并在性能和可靠性间找到最优的平衡。
网络的拓扑结构、机器节点及机架的网络位置定位都是通过树结构来描述的。
通过树结构来确定节点间的距离,这个距离是Hadoop做决策判断时的参考因素。
在配置Hadoop时,Hadoop会确定节点地址和其网络位置的映射,此映射在代码中通过Java接口DNSToSwitchMapping实现,代码如下
public interface DNSToSwitchMapping{
public List<string> resolve(List<String> names);
}
在topology.node.switch.mapping.impl中的配置参数定义了一个DNSToSwitchMapping接口的实现,NameNode通过它确定完成任务的机器节点所在的网络位置。
系统有一个默认的接口实现ScriptBasedMapping,可以运行用户自定义的一个脚本去完成映射。如果没有定义映射,则将所有的机器节点映射到一个单独的网络位置中默认的机架上;如果定义了映射,则脚本位置由topology.script.file.name指定。
脚本获得一批IP,生成一个标准的网络位置。
Hadoop集群配置
Hadoop通过org.apache.hadoop.conf.configuration来读取配置文件
Hadoop运行定义最终参数(final parameter)——不能在进程中改变
允许参数传递,即定义了一个参数后,进行引用 ${basedir}
hadop-env.sh 为Hadoop守护进程设置环境变量
java路径
core-site.xml
fs.default.name
hdfs-site.xml
dfs.name.dir
dfs.data.dir
mapred-site.xml
yarn-site.xml
mapred-queues.xml
设置MapReduce系统的队列顺序,例如把用户分组,赋予不同级别,优先级高的job先执行
queue的有效性依赖于mapreduce.jobtracker.taskscheduler设置的调度规则(scheduler)
一些调度算法可能只需一个queue,复杂调度算法需要设置多个queue。
对queue的大部分修改无需重启系统。
通过logs目录下的日志文件对过往进行分析。
例如:NameNode和DataNode的namespaceID不一致
这个问题是由于两次或两次以上格式化NameNode造成的
两种解决办法:
1、删除DataNode所有资料
2、修改每个DataNode的namespaceID 位于dfs/data/current/VERSION文件中
或NameNode的namespaceID 位于dfs/name/current/VERSION文件中
实际应用场景:
重启坏掉的DataNode或JobTracker
动态加入DataNode或TaskTracker
hadoop-daemon.sh --config ./conf start datanode
hadoop-daemon.sh --config ./conf start tasktracker