2 Hadoop的安装与配置


需要JDKSSH

对于伪分布式,Hadoop会采取与集群相同的处理方式:按次序启动文件conf/slaves中记载的主机上的进程,只不过在伪分布式中Slavelocalhost(自身)。

 

Hadoop从三个角度将主机划分为两种角色:

最基本MasterSlave

HDFS角度:NameNodeDataNode

MapReduce角度:JobTrackerTaskTracker

 

三种运行方式:

单机模式:无需配置,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目录下的日志文件对过往进行分析。

例如:NameNodeDataNodenamespaceID不一致

这个问题是由于两次或两次以上格式化NameNode造成的

两种解决办法:

1、删除DataNode所有资料

2、修改每个DataNodenamespaceID  位于dfs/data/current/VERSION文件中

NameNodenamespaceID  位于dfs/name/current/VERSION文件中

 

实际应用场景:

重启坏掉的DataNodeJobTracker

动态加入DataNodeTaskTracker

hadoop-daemon.sh --config ./conf start datanode

hadoop-daemon.sh --config ./conf start tasktracker

你可能感兴趣的:(hadoop,分布式计算)