1-HDFS+MapReduce
作者:互联网
Hadoop的框架最核心的设计就是:HDFS,MapReduce(mr)
HDFS1.0
-
hdfs: 分布式文件系统,主要用于存储海量数据
MapReduce: 用户海量数据的计算 -
hdfs 本身是一个master slave 架构 namenode(nn) 是主 datanode(dn) 是从
SecondaryNameNode(snn) 并不是nn的一个备份 -
namenode 是一个进程, 在某一个节点上维护了一块内存区域
内存中维护2份重要的数据(namenode 和 datanode 通过心跳机制进行通讯的)
(1) 文件名->block数据块的映射关系(mapping关系)
(2) block->datanode 节点的映射关系
本质:通过block数据库找到数据真正的位置 -
数据块的副本数:3个
-
hadoop 集群不适合存储大量的小文件
(1) 对于集群而言硬盘资源存在严重的浪费
(2) nn内存资源有限,造成nn 内存压力
(3) 如果存储过大的文件,启动mr 的时候,并发能力不够,导致MR任务执行过慢 -
1.0中只有一个nn
-
什么情况下使用机架感知?
hadoop 集群规模很大的时候
目的:希望不同节点之间的通讯能够发生在同一个机架之内,而不是跨机架(节省网络传输的IO和带宽)
为了提高容错能力 -
数据完整性: 检测数据是否损坏
crc32算法产生校验和(校验码)
(1) client写校验和,dn 来校验
(2) dn存在后台进程DataBlockScanner : 定期检查 -
hdfs可靠性
(1) 心跳 dn-nn
(2) 数据完整性 crc32
(3) 副本-数据冗余
(4) 空间回收机制 -skipTrash
(5) SNN -
hdfs 不适合场景
(1) 存储小文件
(2) 文件被修改
(3) 大量随机读
MR1.0
- mr在1.0中 包括主(jobtracker) 从(tasktracker)
主:分配任务 从: 具体干活
hdfs 存储集群 mr 计算集群
主:namenode -> jobtracker
从: datanode -> tasktracker
就近原则:本地化 数据不移动,任务(代码逻辑)移动
HDFS2.0
-
HA来解决单节点故障问题(使用两个NN 一个是 activate NN 一个是standbyNN)
-
数据一致性如何保证?
(1) 共享文件系统
(2) dn 向两个NN发送心跳 -
故障转移: 利用zookeeper来保证的
-
JN: 利用了NFS, 保证机器个数为2n+1
优点:便于选举,投票,达到数据统一存储
QJM: 少数服从多数
(1)不用做额外的共享配置,节约成本
(2)系统配置很灵活(自动支持的) -
集群部署
(1)NN和JN 配置在不同的节点上
(2)FC和NN在相同的节点上
(3)hadoop 2.0中 RM(相当于jobtracker)和NN在相同的节点上
(4)NM (相当于tasktracker)和DN在相同的节点上 就近原则
(5)zookeeper 独立维护一套集群 -
联邦机制
本质:突破NN本身内存资源的瓶颈,不在受某一个NN 内存的限制
解决的问题:(1)高可用 (2)内存资源不足
关键点:每个NN共享所有的DN -
快照 数据备份,灾备
-
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