一、Hadoop
1、Hadoop发展史
由Doug Cutting根据Google 的3 篇论文 Hadoop (HDFS MapReduce Hbase)编写而成,使用java语言编写,是一个分布式的大数据处理框架,它有很好的伸缩性,可扩展性,编程模型很简单。
2、概念
HDFSHadoop是一个分布式的大数据处理框架,它有很好的伸缩性,可扩展性,编程模型很简单.
3、 Hadoop包括四大模块
1)Hadoop commons 工具类提供了相关工具 支撑下面3个模块
2)HDFS 一个高可靠、高吞吐量的分布式文件系统。
3)Yarn 任务管理,资源调度
4)MapReduce 一个分布式的离线并行计算框架。
4、HDFS介绍
4.1 HDFS相关概念
HDFS它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
4.2 HDFS组成
1)HDFS集群包括,NameNode和DataNode以及Secondary Namenode。
2)NameNode负责管理整个文件系统的元数据,以及每一个路径(文件)所对应的数据块信息。
3)DataNode 负责管理用户的文件数据块,每一个数据块都可以在多个datanode上存储多个副本。
4)Secondary NameNode用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照。
4.3 HDFS 文件块大小
HDFS中的文件在物理上是分块存储(block),块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,老版本中是64M
HDFS的块比磁盘的块大,其目的是为了最小化寻址开销。如果块设置得足够大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。因而,传输一个由多个块组成的文件的时间取决于磁盘传输速率。
如果寻址时间约为10ms,而传输速率为100MB/s,为了使寻址时间仅占传输时间的1%,我们要将块大小设置约为100MB。默认的块大小实际为64MB,但是很多情况下HDFS使用128MB的块设置。
块的大小:10ms100100M/s = 100M
二、Hadoop单机版安装
1、hadoop.apache.org 下载所需hadoop版本,本次选择2.7.2
2、linux安装hadoop
本文linux选择CentOS release 6.10 (Final)
1)关闭防火墙
service iptables stop // [centos 6.x 系统]
chkconfig iptables off // [关闭自启动]
2)查看防火墙转态
[root@hadoop102 ~]# chkconfig iptables --list
iptables 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
3)关闭SELIinux 安全套件
[root@hadoop102 ~]# vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled # 修改此处为disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
4)修改主机名
vi /etc/sysconfig/network
5)配置网络映射
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.31.102 hadoop102
6)安装JDK,确保jdk版本在1.7及以上
3、解压缩Hadoop
1)放置在 /opt/module/
tar -zxf hadoop-2.7.2.tar.gz -C /opt/module/
2)打开/etc/profile文件:在profie文件末尾配置jdk路径
# HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
3)让修改文件生效
source /etc/profile
4)修改hadoop配置文件
vi /opt/module/hadoop-2.7.2/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.7.0_79 //配置java的环境变量
5)配置:core-site.xml
vi /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml
<configuration>
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
</configuration>
~
6)配置hdfs-site.xml
<!-- 指定HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
7)配置yarn-site.xml
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
8)配置mapred-site.xml ( mapred-site.xml.template改名为 mapred-site.xml)
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
4、启动HDFS 还有 Yarn
//在hadoop目录下执行
bin/hdfs namenode –format // 格式化namenode 只执行一次
sbin/hadoop-daemon.sh start namenode //启动namenode
sbin/hadoop-daemon.sh start datanode //启动datanode
sbin/yarn-daemon.sh start resourcemanager //启动resourcemanager
sbin/yarn-daemon.sh start nodemanager //启动 nodemanager
// jps 作用:只会查看java相关进程
[root@hadoop102 hadoop-2.7.2]# jps
31726 DataNode
31645 NameNode
32059 NodeManager
32198 Jps
31820 ResourceManager
5、访问HDFS/Yarn web管理页面
Hdfs: http://hadoop1:50070
yarn: http://hadoop1:8088
6、定义Hadoop HDFS Yarn的 启动 停止脚本
vi hadoop-start.sh
sbin/hadoop-daemon.sh start namenode
sbin/hadoop-daemon.sh start datanode
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
vi hadoop-stop.sh
sbin/hadoop-daemon.sh stop namenode
sbin/hadoop-daemon.sh stop datanode
sbin/yarn-daemon.sh stop resourcemanager
sbin/yarn-daemon.sh stop nodemanager
// 注意: 新创建的脚本没有可执行权限, chmod 744 修改可执行权限
chmod 744 hadoop-start.sh
// 脚本启动
./hadoop-start.sh
7.为什么不能一直格式化NameNode,格式化NameNode,要注意什么?
格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。所以,格式NameNode时,一定要先删除data数据和log日志,然后再格式化NameNode。
三、HDFS的高级功能
1、HDFS NameNode数据的持久化
开启安全模式: bin/hdfs dfsadmin -safemode enter|leave|get
(1)FSImage|EdisLog 默认存储位置
/opt/module/hadoop-2.7.2/data/tmp/dfs/data/current
(2)设置FSImage|EdisLog 存储路径
在hdfs-site.xml文件中
dfs.namenode.edits.dir 设置edisLog
dfs.namenode.name.dir 设置FSImage
2、SecondaryNameNode
(1)作用:辅助NameNode 合并 FSImage 和 EdisLog
注意:NameNode 和 SecondaryNameNode 不能放置到一个节点
hdfs-site.xml
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop103:50090</value>
</property>
(2)还原NameNode数据
NameNode存储 FSImage 和 EdisLog 所在的硬盘 出现了问题.
可以通过SecondaryNameNode 部分还原 FSImage 和 EdisLog
//配置EdisLog FSImage的位置
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp/dfs/name/fs</value>
</property>
<property>
<name>dfs.namenode.edits.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp/dfs/name/edits</value>
</property>
(3)SecondryNameNode还原NameNode
//执行命令还原
sbin/hadoop-daemon.sh start namenode –importCheckpoint
四、MapReduce
1、MapReduce是大数体系下的一种分布式运算模型,处理 大数据相关的业务 (类似于Service)
2、MapReduce 核心实现思路
3、Hadoop集群中 启动 Yarn集群
(1)ResouceManager 最好 不要和 NameNode放置在同一台物理节点
//yarn-site.xml (配置ResouceManager 所在的主机,然后同步集群中的每一个节点)
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop102</value>
</property>
(2)启动yarn集群 ResouceManager所在的节点
sbin/start-yarn.sh
sbin/stop-yarn.sh