Linux第8课:Hadoop原理及十步搭建集群
时间 2019-03-11下午3:30
主讲 张春志
地点 四楼电教室
Hadoop的发音是 [hædu:p],它并不是某几个英文的缩写,而是一个虚构的、玩具的名称。Hadoop的创始者Doug Cutting解释Hadoop的得名 :
“这个名字是我孩子给一个棕黄色的大象玩具命名的。我的命名标准就是简短,容易发音和拼写,没有太多的意义,并且不会被用于别处。小孩子恰恰是这方面的高手。”
可见,Hadoop自诞生起,就拥有“简洁、高效、人性化、个性化”的基因。令人欣喜的是,Hadoop不仅功能强大,而且是免费的、开源的,官方还有丰富的说明文档,网址是:
http://hadoop.apache.org/docs/r1.0.4/cn/index.html
在此,向为hadoop这项伟大的科技成果而无偿地作出贡献的人们致敬!

一、原理
1,Hadoop的特点
(1)可靠性,假设它计算元素和存储会失败,但它有多个工作数据副本,确保能够针对失败的节点重新处理,而不丢失数据。
(2)高效性,因为它以并行的方式工作,处理速度提升。
(3)可伸缩,能够处理 PB 级数据。
2,HDFS运行原理
Hadoop 的两大核心:HDFS(存储) 和 MapReduce(计算)

HDFS由Master和Slave两部分组成,一个集群当中,一台计算机为Master,其余均为Slave
在Master主机上,运行着NameNode,相当于大将,SecondaryNameNode,相当于副将,每台Slave节点上,运行着DataNode,相当于士兵。
一个Hadoop集群,类似于由大将、副将,及无数个士兵组成的一个战斗编队。
MapReduce另行安排课程讲解。
二、十步搭建Hadoop集群
无论多么复杂的事情,只要分步骤,就能提高效率。Hadoop集群的安装,在第5课作了详细介绍,下面,按步骤说明如下:
1,准备条件
服务器4台,均安装Centos7.6,规划主节点1个、从节点3个(从节点和子节点是相同概念,有时表述不够规范,但含义一样),分别是:
主节点:命名为master,ip是10.0.11.5
从节点:分别命名为slave1、slave2,slave3,分别对应IP地址10.0.11.7,10.0.11.8,10.0.11.9
使用root用户,不再创建新用户。
2,安装步骤
第一步:准备工作
(1)哪台做主节点,哪些做从节点,分别有多少硬盘容量,要明确。
yum install vim tree wget -y 安装必备的工具
(2)把第二块硬挂载好。需要格式化的,先格式化再挂载。
mkfs.ext4 /dev/vdb5
vim /etc/fstab
/dev/vdb5 /mnt/home ext4 defaults 0 1
(3)关闭防火墙,不要犹豫,关闭,防火墙就像一个保安,如果每个进出的人都盘查一遍,通行效率就会极大降低。要做防火墙也要在外围做,节点之间不能做。
systemctl stop firewalld.service; #停止firewall
systemctl disable firewalld.service; #禁止firewall开机启动
(4)关闭SELinux,也是安全方面的,关闭。
vim /etc/sysconfig/selinux
设置:SELINUX=disabled
(5)调好时间,同步北京时间
yum -y install ntp ntpdate
ntpdate asia.pool.ntp.org
clock --systohc
clock -w
(6)修改主机名,对于多台计算机,你不修改主机名的话,连谁谁谁都分不清了。
hostnamectl set-hostname slave2 #重启生效
第二步:IP和域名解析
vim /etc/hosts 末尾加入,每台都加
10.0.11.5 master
10.0.11.7 slave1
10.0.11.8 slave2
10.0.11.9 slave3
第三步:免密码登陆
注意:只需在master主节点上执行即可!因为:主节点与从节点的通信是通过ssh,而从节点与主节点的通信,是通过tcp。
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh-copy-id -i /root/.ssh/id_rsa.pub root@hadoop2
第四步:安装JAVA
yum -y install java-1.7.0-openjdk java-1.7.0-openjdk-devel
检查java的路径:/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.211-2.6.17.1.el7_6.x86_64
为每个节点都安装
第五步:下载Hadoop安装包
cd /usr/local/
wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz
tar zxvf hadoop-2.7.7.tar.gz
第六步:配置Hadoop
(1)配置env.sh
vim /usr/local/hadoop-2.7.7/etc/hadoop/hadoop-env.sh
文末加入:
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.211-2.6.17.1.el7_6.x86_64
export HADOOP_CONF_DIR=/usr/local/hadoop-2.7.7/etc/hadoop/
(2)配置节点属性
vim /usr/local/hadoop-2.7.7/etc/hadoop/slaves 删除原有localhost
slave1
slave2
slave3
vim /usr/local/hadoop-2.7.7/etc/hadoop/masters
master
(3)配置core-site.xml
vim /usr/local/hadoop-2.7.7/etc/hadoop/core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000/</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/mnt/home</value>
</property>
(4) hdfs-site.xml
vim /usr/local/hadoop-2.7.7/etc/hadoop/hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/mnt/home/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/mnt/home/hdfs/data</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
注:以上,只需手动建/home目录,至于后面的目录,系统会自建。
(5) mapred-site.xml
mv /usr/local/hadoop-2.7.7/etc/hadoop/mapred-site.xml.template /usr/local/hadoop-2.7.7/etc/hadoop/mapred-site.xml
vim /usr/local/hadoop-2.7.7/etc/hadoop/mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
(6)yarn-site.xml
vim /usr/local/hadoop-2.7.7/etc/hadoop/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>
第七步:将配置好的hadoop文件夹推送给每个子结点
scp -r /usr/local/hadoop-2.7.7 root@slave1:/usr/local
第八步:为每个节点配置环境变量
vim /etc/profile
export PATH=/usr/local/hadoop-2.7.7/bin:$PATH
export PATH=/usr/local/hadoop-2.7.7/sbin:$PATH
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.211-2.6.17.1.el7_6.x86_64
scp -r /etc/profile root@slave1:/etc/profile
source /etc/profile
第九步:在每个节点格式化文件系统
hdfs namenode -format
第十步:启动和检查
start-all.sh

总体来看,由于操作还不熟练,常常忘记一些步骤,导致局部返工,安装用时一小时。
附1:动态添加子节点
1,子节点启动datanode
hadoop-daemon.sh start datanode
yarn-daemon.sh start nodemanager
2,刷新:
hdfs dfsadmin -refreshNodes
3,负载均衡:
start-balancer.sh

附2:配置NTP时间同步服务器
NTP协议是通过Server和Client的方式进行的,通讯的过程是:
1、主机需要启动这个NTP服务
2、Client会向NTP Server发送出调校时间的message
3、然后NTP Server会送出目前的标准时间给Client
4、Client接收了来自Server的时间后,会据以调整自己的时间,以实现网络校时。
一、时间服务器配置:
1,安装ntp
yum install -y ntp ntpdate
2,vim /etc/ntp.conf
只允许10.0.11.*段的IP地址来查询时间:
restrict 10.0.11.0 mask 255.255.255.0 nomodify notrap
文本添加:
server 127.127.1.0
fudge 127.127.1.0stratum10
3,vim /etc/sysconfig/ntpd
增加内容如下,退出并保存
SYNC_HWCLOCK=yes
4,命令
service ntpd start 启动
service ntpd restart 重启
service ntpd stop 停止
service ntpd status 查看状态
pgrep ntpd 检查ntp服务是否启动
chkconfig ntpd on 开机自动启动
5,本机校时
ntpd启动后,将无法使用 ntpdate asia.pool.ntp.org 实现本机校时,所以,要先停止服务再校时,再启动。
二、时间客户机配置:
使用定时任务 crontab -l 查看任务,以下为每60分钟执行一次。
crontab -e
*/10 * * * * /usr/sbin/ntpdate master
每10分钟执行一次的脚本。
修改时间检测:date-s"2017-9-11 11:11:11"
以上,确保了集群中每台计算机使用同样的时间。
网友评论