其他分享
首页 > 其他分享> > 1-HDFS+MapReduce

1-HDFS+MapReduce

作者:互联网

Hadoop的框架最核心的设计就是:HDFS,MapReduce(mr)

HDFS1.0

  1. hdfs: 分布式文件系统,主要用于存储海量数据
    MapReduce: 用户海量数据的计算

  2. hdfs 本身是一个master slave 架构 namenode(nn) 是主 datanode(dn) 是从
    SecondaryNameNode(snn) 并不是nn的一个备份

  3. namenode 是一个进程, 在某一个节点上维护了一块内存区域
    内存中维护2份重要的数据(namenode 和 datanode 通过心跳机制进行通讯的)
    (1) 文件名->block数据块的映射关系(mapping关系)
    (2) block->datanode 节点的映射关系
    本质:通过block数据库找到数据真正的位置

  4. 数据块的副本数:3个

  5. hadoop 集群不适合存储大量的小文件
    (1) 对于集群而言硬盘资源存在严重的浪费
    (2) nn内存资源有限,造成nn 内存压力
    (3) 如果存储过大的文件,启动mr 的时候,并发能力不够,导致MR任务执行过慢

  6. 1.0中只有一个nn

  7. 什么情况下使用机架感知?
    hadoop 集群规模很大的时候
    目的:希望不同节点之间的通讯能够发生在同一个机架之内,而不是跨机架(节省网络传输的IO和带宽)
    为了提高容错能力

  8. 数据完整性: 检测数据是否损坏
    crc32算法产生校验和(校验码)
    (1) client写校验和,dn 来校验
    (2) dn存在后台进程DataBlockScanner : 定期检查

  9. hdfs可靠性
    (1) 心跳 dn-nn
    (2) 数据完整性 crc32
    (3) 副本-数据冗余
    (4) 空间回收机制 -skipTrash
    (5) SNN

  10. hdfs 不适合场景
    (1) 存储小文件
    (2) 文件被修改
    (3) 大量随机读

MR1.0

  1. mr在1.0中 包括主(jobtracker) 从(tasktracker)
    主:分配任务 从: 具体干活
    hdfs 存储集群 mr 计算集群
    主:namenode -> jobtracker
    从: datanode -> tasktracker
    就近原则:本地化 数据不移动,任务(代码逻辑)移动

HDFS2.0

  1. HA来解决单节点故障问题(使用两个NN 一个是 activate NN 一个是standbyNN)

  2. 数据一致性如何保证?
    (1) 共享文件系统
    (2) dn 向两个NN发送心跳

  3. 故障转移: 利用zookeeper来保证的

  4. JN: 利用了NFS, 保证机器个数为2n+1
    优点:便于选举,投票,达到数据统一存储
    QJM: 少数服从多数
    (1)不用做额外的共享配置,节约成本
    (2)系统配置很灵活(自动支持的)

  5. 集群部署
    (1)NN和JN 配置在不同的节点上
    (2)FC和NN在相同的节点上
    (3)hadoop 2.0中 RM(相当于jobtracker)和NN在相同的节点上
    (4)NM (相当于tasktracker)和DN在相同的节点上 就近原则
    (5)zookeeper 独立维护一套集群

  6. 联邦机制
    本质:突破NN本身内存资源的瓶颈,不在受某一个NN 内存的限制
    解决的问题:(1)高可用 (2)内存资源不足
    关键点:每个NN共享所有的DN

  7. 快照 数据备份,灾备

  8. ACL

集群搭建(可以忽略)

一、集群配置 16G+512G

虚拟机内存 master slave1 slave2 2 1 1
虚拟机硬盘 master slave1 slave2 30G 25G 25G
192.168.172.101 master
192.168.172.102 slave1
192.168.172.103 slave2

二、安装步骤

1、保证java安装 /usr/local/src/jdk1.8.0_111
2、解压安装包:

tar -zxvf hadoop-2.6.1.tar.gz

3、修改hadoop 配置文件

vim /usr/local/src/hadoop-2.6.1/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/local/src/jdk1.8.0_111

vim /usr/local/src/hadoop-2.6.1/etc/hadoop/yarn-env.sh
export JAVA_HOME=/usr/local/src/jdk1.8.0_111

vim slaves
slave1
slave2
vim /usr/local/src/hadoop-2.6.1/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/src/hadoop-2.6.1/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/src/hadoop-2.6.1/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>

vim /usr/local/src/hadoop-2.6.1/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/src/hadoop-2.6.1/tmp</value>
</property>
</configuration>

cp mapred-site.xml.template mapred-site.xml

vim /usr/local/src/hadoop-2.6.1/etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

<property>
  <name>mapreduce.map.memory.mb</name>
  <value>1536</value>
</property>
<property>
  <name>mapreduce.map.java.opts</name>
  <value>-Xmx1024M</value>
</property>
<property>
  <name>mapreduce.reduce.memory.mb</name>
  <value>3072</value>
</property>
<property>
  <name>mapreduce.reduce.java.opts</name>
  <value>-Xmx2560M</value>
</property>
</configuration>

vim /usr/local/src/hadoop-2.6.1/etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8035</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
<property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
    <description>Whether virtual memory limits will be enforced for containers</description>
</property>
</configuration>

4、配置环境变量

vim ~/.bashrc  #用户级别的

vim /etc/profile  #全局生效的
export HADOOP_HOME=/usr/local/src/hadoop-2.6.1
export JAVA_HOME=/usr/local/src/jdk1.8.0_111
export PATH=$PATH:$JAVA_HOME/bin

# 刷新环境变量
source ~/.bashrc
bash

# master 节点的环境变量拷贝到slave(两两之间进行免密登录)
scp -rp ~/.bashrc root@slave1:/root/.bashrc
scp -rp ~/.bashrc root@slave2:/root/.bashrc

5、拷贝安装包

scp -rp /usr/local/src/hadoop-2.6.1 root@slave1:/usr/local/src
scp -rp /usr/local/src/hadoop-2.6.1 root@slave2:/usr/local/src

6、启动集群

# 初始化namenode
hadoop namenode -format

sh start-all.sh
sh stop-all.sh

7、观察
master
8086 SecondaryNameNode
8230 ResourceManager
7896 NameNode

slave
7185 DataNode
7273 NodeManager

通过命令测试 hadoop fs -ls /

浏览器观察 master:8088

标签:HDFS,src,MapReduce,hadoop,master,usr,local,2.6
来源: https://www.cnblogs.com/liutz/p/16311612.html