Hadoop集群搭建
一、准备工作:
- 首先准备好三台虚拟机:master,node1,node2。
- 时间同步,jdk1.8
java -version
-
修改主机命
-
三台分别执行 vim /etc/hostname 并将内容指定为对应的主机名
-
关闭防火墙:systemctl stop firewalld
- 查看防火墙状态:systemctl status firewalld
- 取消防火墙自启:systemctl disable firewalld
-
静态IP配置
-
直接使用图形化界面配置(不推荐)
-
手动编辑配置文件进行配置
1、编辑网络配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet BOOTPROTO=static HWADDR=00:0C:29:E2:B8:F2 NAME=ens33 DEVICE=ens33 ONBOOT=yes IPADDR=192.168.190.100 GATEWAY=192.168.190.2 NETMASK=255.255.255.0 DNS1=192.168.190.2 DNS2=223.6.6.6 需要修改:HWADDR(mac地址) IPADDR(根据自己的网段,自定义IP地址) GATEWAY(根据自己的网段填写对应的网关地址) 2、关闭NetworkManager,并取消开机自启 systemctl stop NetworkManager systemctl disable NetworkManager 3、重启网络服务 systemctl restart network
-
-
免密登录
# 1、生成密钥 ssh-keygen -t rsa # 2、配置免密登录 ssh-copy-id master ssh-copy-id node1 ssh-copy-id node2 # 3、测试免密登录 ssh node1
-
配置好映射文件:/etc/hosts
192.168.190.100 master 192.168.190.101 node1 192.168.190.102 node2
二、搭建Hadoop集群
1、上传安装包并解压
# 使用xftp上传压缩包至master的/usr/local/soft/packages/
cd /urs/local/soft/packages/
# 解压
tar -zxvf hadoop-2.7.6.tar.gz -C /usr/local/soft/
2、配置环境变量
vim /etc/profile
JAVA_HOME=/usr/local/soft/jdk1.8.0_171
HADOOP_HOME=/usr/local/soft/hadoop-2.7.6
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
# 重新加载环境变量
source /etc/profile
3、修改Hadoop配置文件
-
cd /usr/local/soft/hadoop-2.7.6/etc/hadoop/
-
core-site.xml
<property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/soft/hadoop-2.7.6/tmp</value> </property> <property> <name>fs.trash.interval</name> <value>1440</value> </property>
-
hadoop-env.sh
export JAVA_HOME=/usr/local/soft/jdk1.8.0_171
-
hdfs-site.xml
<property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property>
-
mapred-site.xml.template
# 1、重命名文件 cp mapred-site.xml.template mapred-site.xml # 2、修改 <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property>
-
slaves
node1 node2
-
yarn-site.xml
<property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property>
4、分发Hadoop到node1、node2
cd /usr/local/soft/
scp -r hadoop-2.7.6/ node1:`pwd`
scp -r hadoop-2.7.6/ node2:`pwd`
5、格式化namenode(第一次启动的时候需要执行)
hdfs namenode -format
6、启动Hadoop集群
start-all.sh
7、检查master、node1、node2上的进程
-
master:
[root@master soft]# jps 2597 NameNode 2793 SecondaryNameNode 2953 ResourceManager 3215 Jps
-
node1:
[root@node1 jdk1.8.0_171]# jps 11361 DataNode 11459 NodeManager 11559 Jps
-
node2:
[root@node2 ~]# jps 11384 DataNode 11482 NodeManager 11582 Jps
8、访问HDFS的WEB界面
http://master:50070
9、访问YARN的WEB界面
http://master:8088
三、Hadoop相关知识点
1.什么是hadoop:
- hadoop是适合海量数据的分布式存储和分布式计算的平台。
2.hadoop组件:
- 主要包含三个组件hdfs、mapreduce、yarn
- hdfs是一个分布式存储框架,适合海量的数据存储。
- mapreduce是一个分布式计算框架,适合海量数据计算。
- yarn是一个资源调度平台,负责给计算框架分配计算资源
HDFS
- hdfs是具有主从结构。hdfs集群是由单个名称节点组成,主服务器管理文件系统名称空间,并控制客户机对文件的访问。此外,还有许多数据节点,通常是集群中的每个节点一个,他们管理连接到运行他们的节点的存储。
- 在分布式存储系统中,分散在不同节点中的数据可能属于一个文件。
- 为了组织众多的文件,把文件可以放到不同的文件夹中,文件夹可以一级一级的包含。我们把这种组织形式称为命名空间。命名空间管理整个服务器集群中的所有文件。
- 在集群中:主节点负责命名空间,而从节点夫怎存储真实数据,这种形式就称为主从结构。
Block块
- 文件上传前需要进行分块,这个块就是block块,一般为128mb。如果一个文件不满128mb,那么它就是一个block块。
Packet
- packet则是第二大的单位,他是client端向datanode之间传数据的基本单位,默认大小为64kb。
主从结构
- 主从结构:
- 主节点:namenode
- 从节点:datanode
- namenode负责接收用户请求,是用户操作的入口,维护文件系统的目录结构,称为命名空间。
- datanode负责存储数据。
YARN
- 主从结构:
- 主节点,ResourceManager
- 从节点,NodeManager
- ReduceManager,负责集群资源的分配与调度,MR、Storm、Spark等应用必须实现这个接口才能被RM管理。
- NodeManager负责单节点资源的管理(cpu、内存)
MAPERDUCE
- 主从结构
- 主节点,只有一个MRAppMarter
- 从点,就是具体的task
- MRAappMaster负责接收客户端提交的计算任务,把计算任务分给nodemanager的Container中执行。
- Task责是负责处理数据。
hadoop的特点:
- 扩容能力:能可靠的处理pb级别的数据,如果数据量不够用那么增加节点就行了。
- 成本低:由普通机器组成的服务器集群。
- 高效率:通过分发计算程序,可在所有的分节点上并行的处理。
- 可靠性:能够自动的维护数据的多副本,并且在任务失败后能够自动的重新部署计算任务。
Mapreduce
- mapreduce是分布式运行的,由两个阶段组成:Map和Reduce。
原理
- 首先文件分为多个切片,一个切片对应一个Map任务。然后Map任务把数据给Shuffle,最终由Shuffle处理好数据之后再发给Reduce形成一个个part部分。
Shuffle解析
- 首先map任务运行完之后将数据写到 buffer in memory(环形缓冲区,默认大小为100M,当写入数据达到80%的时候那么缓冲区将会锁定,进行反向溢写磁盘。)里面。因为我们处理数据实在内存中执行的,如果直接将数据写入内存,那么效率将会非常低,所以要有一个缓冲区。
- 环形缓冲区的数据出来之后,它会在磁盘上生成一个文件,进行分区,排序。
- 之后相同的数据(key)会进入到同一个reduce任务,放入同一个分区中来。通过hashpartition进行计算不同key的哈希值,最后对哈希值进行reduce取余,结果有多少种就会产生几个分区。
- 每个map任务都会产生三个分区,把对应的分区数据全部拉来进行合并(合并过程中也会产生排序)。最终将结果交给Reduce进行数据处理。(在此也会将数据先放在内存中,大小不确定,占70%reduce可使用的堆内存。)