Hadoop学习笔记(1)

Hadoop介绍

  • 如何保存比服务器硬盘大的文件?
      例如一个文件600G,有三台硬盘各500G的服务器,如何存储数据?
      谷歌提出了GFS分布式文件系统,将文件切片分别存在不同的服务器,每个切片保存多个供容错使用的副本。待客户端调用时,将切片整合,并提供给用户。
      相应的开源实现为HDFS。Hadoop学习笔记(1)_第1张图片
  • 如何提升计算效率?
      例如计算1+2+…+10000000,现有三台计算机,如何提高计算效率?
      谷歌提出了MapReduce分布式计算,采用了分治思想,将计算任务分割成为多个小的计算任务,每个服务器完成一部分,最后进行整合,得出结果。
      相应的开源实现为MAPREDUCE
    Hadoop学习笔记(1)_第2张图片
  • HDFS与MAPREDUCE合称为独立项目HADOOP
      广义上讲HADOOP是一个大数据生态圈,狭义上说HADOOP是一个软件,包括HDFS分布式文件系统,MAPREDUCE分布式计算系统和Yarn分布式集群资源管理。

Hadoop的架构模型

Hadoop 1.x

Hadoop学习笔记(1)_第3张图片

  • NameNode:集群主节点,管理元数据(文件大小,位置,权限),管理集群中的各种数据。
  • secondaryNameNode:用于Hadoop中元数据信息的辅助管理。
  • DataNode:集群中的从节点,主要用于存储集群中的各种数据。
  • JobTracker:接收用户计算任务,把任务分配给TaskTracker
  • TaskTracker:执行JobTracker分配的计算任务

Hadoop 2.x

第一种:NameNode与ResourceManager单节点结构模型

Hadoop学习笔记(1)_第4张图片

  • NameNode:集群主节点,管理元数据(文件大小,位置,权限),管理集群中的各种数据。
  • secondaryNameNode:用于Hadoop中元数据信息的辅助管理。
  • DataNode:集群中的从节点,主要用于存储集群中的各种数据。
  • ResourceManager:等价于JobTracker。负责接收请求,负责资源分配。
  • NodeManager:负责执行主节点AppMaster分配的任务。
  • 不能很好的解决单点故障问题。

第二种:NameNode单节点与ResourceManager高可用架构模型

Hadoop学习笔记(1)_第5张图片

  • Zookeeper使用Watch机制监控ResourceManager主节点是否宕机,若ResourceManager主节点宕机,会立刻通知ResourceManager备份节点接管主节点任务。

NameNode高可用与ResourceManager单节点架构模型

Hadoop学习笔记(1)_第6张图片

  • Zookeeper使用Watch机制监控NameNode Active节点是否宕机,若NameName Active节点宕机,会立刻通知NameNode Standby节点接管Active节点任务。
  • 元数据信息管理实现NameNode之间元数据的同步,使得当NameNode Active节点宕机后NameNode Standby节点可以立刻接管Active节点任务。

NameNode高可用与ResourceManager高可用架构模型

安装Hadoop

重新编译Hadoop

  • 为什么重新编译Hadoop?
      Apache所给的hadoop没有提供C程序访问接口,所以在使用本地库的时候会出问题,所以需要对Hadoop源码包重新编译。
      编译详情查看源码包下的BUILDING.txt

安装Hadoop

  • 集群规划
服务器IP 123.56.157.13 81.70.93.231 106.13.104.1
NameNode
SecondaryNameNode
DataNode
ResourceManager
NodeManager
  • 上传Hadoop安装包并解压
tar -zxvf hadoop-2.9.2.tar.gz -C /others/services/
cd /others/services/hadoop-2.9.2
  • 修改core-site.xml配置文件
cd /others/services/hadoop-2.9.2/etc/hadoop
vim core-site.xml

  在configuration节点下添加/修改


<property>
	<name>fs.default.namename>
	<value>hdfs://123.56.157.13:8020value>
property>

<property>
	<name>hadoop.tmp.dirname>
	<value>/others/services/hadoop-2.9.2/hadoop-data/tempDatasvalue>
property>

<property>
	<name>io.file.buffer.sizename>
	<value>4096value>
property>

<property>
	<name>io.file.buffer.sizename>
	<value>4096value>
property>
  • 配置hdfs-site.xml
vim hdfs-site.xml

  在configuration节点下添加/修改

<property>
	<name>dfs.namenode.secondary.http-addressname>
	<value>123.56.157.13:50090value>
property>

<property>
	<name>dfs.namenode.http-addressname>
	<value>123.56.157.13:50070value>
property>

<property>
	<name>dfs.namenode.name.dirname>
	<value>file:///others/services/hadoop-2.9.2/hadoop-data/namenodeDatas,file:///others/services/hadoop-2.9.2/hadoop-data/namenodeDatas2value>
property>

<property>
	<name>dfs.datanode.data.dirname>
	<value>file:///others/services/hadoop-2.9.2/hadoop-data/datanodeDatas,file:///others/services/hadoop-2.9.2/hadoop-data/datanodeDatas2value>
property>

<property>
	<name>dfs.namenode.edits.dirname>
	<value>file:///others/services/hadoop-2.9.2/hadoop-data/nn/editsvalue>
property>

<property>
	<name>dfs.namenode.edits.dirname>
	<value>file:///others/services/hadoop-2.9.2/hadoop-data/nn/editsvalue>
property>

<property>
	<name>dfs.replicationname>
	<value>3value>
property>

<property>
	<name>dfs.permissionsname>
	<value>falsevalue>
property>

<property>
	<name>dfs.blocksizename>
	<value>134217700value>
property>
  • 配置hadoop-env.sh
vim hadoop-env.sh

  修改JAVA_HOME

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
  • 配置mapped-site.xml
cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml

  在configuration节点下添加/修改


<property>
	<name>mapreduce.job.ubertask.enablename>
	<value>truevalue>
property>

<property>
	<name>mapreduce.jobhistory.addressname>
    <value>123.56.157.13:10020value>
property>

<property>
    <name>mapreduce.jobhistory.webapp.addressname>
    <value>123.56.157.13:19888value>
property>
  • 配置yarn-site.xml
vim yarn-site.xml

  在configuration节点下添加/修改

<property>
	<name>yarn.nodemanager.aux-servicesname>
	<value>mapreduce_shufflevalue>
property>

<property>
	<name>yarn.resourcemanager.addressname>
	<value>123.56.157.13:8032value>
property>

<property>
	<name>yarn.log-aggregation-enablename>
	<value>truevalue>
property>

<property>
	<name>yarn.log-aggregation.retain-secondsname>
	<value>604880value>
property>

<property>
	<name>yarn.nodemanager.resource.memory-mbname>
	<value>20480value>
property>
<property>
	<name>yarn.scheduler.minimum-allocation-mbname>
	<value>2048value>
property>
<property>
	<name>yarn.nodemanager.vmem-pmem-rationame>
	<value>2.1value>
property>
  • 配置mapred-env.sh
vim mapred-env.sh

  修改JAVA_HOME

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
  • 修改slaves
vim slaves
123.56.157.13
81.70.93.231
106.13.104.1
  • 新建目录
mkdir -p /others/services/hadoop-2.9.2/hadoop-data/tempDatas
mkdir -p /others/services/hadoop-2.9.2/hadoop-data/namenodeDatas
mkdir -p /others/services/hadoop-2.9.2/hadoop-data/namenodeDatas2
mkdir -p /others/services/hadoop-2.9.2/hadoop-data/datanodeDatas
mkdir -p /others/services/hadoop-2.9.2/hadoop-data/datanodeDatas2
mkdir -p /others/services/hadoop-2.9.2/hadoop-data/nn/edits
mkdir -p /others/services/hadoop-2.9.2/hadoop-data/snn/name
mkdir -p /others/services/hadoop-2.9.2/hadoop-data/dfs/snn/edits
  • 安装包分发:将hadoop-2.9.2发送给另外两台主机
scp -i /root/accessKey/yun2.pem -r hadoop-2.9.2 [email protected]:/export/services/
scp -i /root/accessKey/yun2-k-Bk7tN41b.pem -r hadoop-2.9.2 [email protected]:/export/services/
  • 配置环境变量
vim ~/.bashrc
export HADOOP_HOME=/others/services/hadoop-2.9.2
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
  • 启动hadoop集群
# 第一次使用时需要格式化
hdfs namenode -format
start-dfs.sh

错误:端口50070,50090占用。解决方案:在core.xml与hdfs.xml中把namenode公网ip改为0.0.0.0(不知道为啥,但这样做就对了)

你可能感兴趣的:(hadoop)