第六天 - 安装第二、三台CentOS - SSH免密登陆 - hadoop全分布式安装、配置、集群启动
第六天 - 安装第二、三台CentOS - SSH免密登陆 - hadoop全分布式安装、配置、集群启动
一、安装另外两台CentOS
具体安装过程可参考第一天的步骤
安装过程中需要注意的点
- 需要为虚拟机配置2G内存,首次配置完成后点击虚拟机右键设置,添加ISO镜像文件
- 在安装过程中需要对虚拟机设置主机名SZ02及SZ03、IP地址等,具体如下图所示。
- 无需图形界面,只需选择安装Basic Server即可
-
安装完成后在虚拟机右键设置中将网路适配器改为仅主机模式
二、对虚拟机进行设置
往第二、第三台新增bigdata用户
可以在Xshell工具选项中勾选发送键输入到所有的会话,此功能是在一个会话界面中输命令,所有会话窗口都能接收到相同的命令
单台可以通过黄色条的右边ON/OFF按钮进行开关控制
增加bigdata用户并设置密码
useradd bigdata
passwd bigdata
两台机器通过su - bigdata进行测试是否创建成功
增加三台CentOS之间的hosts映射
vi /etc/hosts
192.168.128.121 SZ01
192.168.128.122 SZ02
192.168.128.123 SZ03
使用ping SZ01/SZ02/SZ03进行互通性测试
增加Windows的hosts映射
使用ping进行测试
ssh工具
SSH,安全的网络传输协议,即使密码被半路拦截,信息也不会泄露;
Linux中已经安装了SSH工具,并且默认开启了相关服务;
主要作用,远程登录到另外的机器;
连接过程:
-
命令格式:ssh {userName}@{hostName},使用当前用户连接机器hostName,并且使用目标机器的userName用户连接;
ssh aaa@qq.com
首次连接,接收来自目标机器的验证信息,输入yes,加入到可信列表(known_hosts),可信列表文件存储在发起连接请求的机器上;
连接时需要输入目标机器,目标用户的密码
成功建立连接
-
连接成功后查看主机名和IP地址,显示的是SZ02
-
退出连接
exit
再次连接就不需要存可信列表了
- 可信列表存储的位置及文件内容
用户家目录下的.ssh/known_hosts
-
当两台机器远程登录时,如果使用的用户与目标机器用户相同,则可以省略用户名
一台机器的公钥、私钥
- 公钥,私钥成对出现,公钥可以通过生成后发送给其他机器,而私钥只能本机拥有
- 通过公钥加密的,需要用私钥解密;通过私钥加密的,需要用公钥解密
- 保证安全性例子(机器A向机器B发送邮件)
- 机器A获取到机器B的公钥
- 机器A向机器B发送使用机器B的公钥加密过邮件
- 在机器B接收到机器A发送的邮件后需要利用B的私钥解密才行,这样即使邮件被别人拦截了,也没有机器B的私钥进行解密,这样就保证了安全性
ssh免密登陆
免密登陆的原理:将机器A的公钥发送给机器B,机器B使用机器A的公钥加密一串字符后将字符发送给机器A,机器A通过私钥解析这一串字符,解析成功则能认证通过这是机器A,即可对机器B进行免密登陆,如果无法解析则说明此台机器不是机器A,所以机器B不允许登录。
-
免密登陆步骤(使用bigdata用户操作)
-
获取SZ01的公钥(公钥只需获取一次即可)
ssh-****** -t rsa
在此过程中使用默认配置即可,即一路回车直到生成RSA文件
-
将SZ01的公钥发送给机器SZ02
ssh-copy-id aaa@qq.com
输入SZ02中bigdata用户的密码
-
测试
ssh SZ02
-
-
可以查看SZ02中获取到的SZ01中的公钥文件
cat ~/.ssh/authorized_keys
在SZ01、SZ02、SZ03三台机器互相配置免密登陆(包括自身机器)
三、hadoop安装、配置
hadoop简介(来自百度百科):
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
hadoop的安装
使用Xftp将hadoop-2.7.2.tar.gz上传至bigdata用户家目录下
-
解压缩到当前文件夹
tar -zxvf hadoop-2.7.2.tar.gz
-
安装完成,查看文件夹中包含的文件,hadoop的配置文件目录在etc/hadoop中
sbin以及bin目录下是可执行脚本文件,其中sbin目录中存放启停hadoop的命令文件,bin目录中存放操作hadoop的命令文件
hadoop的配置
-
环境变量的配置
-
编辑环境变量的配置文件
vi ~/.bash_profile
在用户环境变量文件中添加如下图三个箭头指向的内容
-
刷新配置文件
source ~/.bash_profile
-
使用hadoop命令查看版本测试环境变量是否配置成功
hadoop version
-
-
配置文件的配置
此配置文件配置为全分布式
配置文件的目录在~/hadoop-2.7.2/etc/hadoop
总共需要配置6个文件
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
hadoop-env.sh
slaves
-
core-site.xml
<configuration> <!-- Hadoop文件系统依赖的基础配置 --> <property> <name>hadoop.tmp.dir</name> <value>/home/bigdata/hadoop/data</value> </property> <!-- NameNode结点的URI(包括协议、主机名称、端口号) --> <property> <name>fs.defaultFS</name> <value>hdfs://SZ01:8020</value> </property> <!-- 开启回收站机制,可以设置文件彻底删除的时间,默认为0,单位为分钟 --> <property> <name>fs.trash.interval</name> <value>60</value> </property> </configuration>
-
hdfs-site.xml
在生产环境中,linux系统盘上安装了hadoop软件,另准备一个单独存储数据的磁盘,linux将该磁盘挂载到了某个目录(如data)下,hadoop中配置文件将文件存放目录改到data目录下,即如下配置文件中的dfs.datanode.data.dir
<configuration> <!-- secondarynamenode的http服务器地址和端口 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>SZ01:50090</value> </property> <!-- 默认块复制 --> <property> <name>dfs.replication</name> <value>3</value> </property> <!-- 关闭权限校验 --> <property> <name>dfs.permissions</name> <value>false</value> </property> <!-- namenode的http服务器地址和端口 --> <property> <name>dfs.namenode.http-address</name> <value>SZ01:50070</value> </property> <!-- datanode结点被指定要存储数据的本地文件系统路径 --> <property> <name>dfs.datanode.data.dir</name> <value>file:///home/bigdata/hadoop/data/dfs/dn</value> </property> </configuration>
权限校验 – dfs.permissions – 默认是开启状态
bigdata用户启动hadoop软件,此时bigdata用户拥有最高权限,在开发阶段将此项关闭
-
mapred-site.xml
需要将mapred-site.xml.template重命名为mapred-site.xml
mv mapred-site.xml.template mapred-site.xml
<configuration> <!-- MapReduce JobHistory进程通信主机、端口 --> <property> <name>mapreduce.jobhistory.address</name> <value>SZ01:10020</value> </property> <!-- MapReduce JobHistory的web界面主机、端口 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>SZ01:19888</value> </property> <!-- 以yarn方式运行MapReduce --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
-
yarn-site.xml
<configuration> <!-- resourcemanager的主机名 --> <property> <name>yarn.resourcemanager.hostname</name> <value>SZ01</value> </property> <!-- resourcemanager提供给nodemanager的地址 --> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>SZ01:8031</value> </property> <!-- resourcemanager中应用程序管理器界面的地址 --> <property> <name>yarn.resourcemanager.address</name> <value>SZ01:8032</value> </property> <!-- 调度器接口的地址 --> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>SZ01:8030</value> </property> <!-- 分配给容器的物理内存量(75%) --> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>1536</value> </property> <!-- NodeManager上运行的附属服务,配置成mapreduce_shuffle才可运行MR --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
yarn.nodemanager.resource.memory-mb
当计算式能够调度的系统最大内存量(75%),所以需要虚拟机的最低内存应设置为2G
-
hadoop-env.sh添加JAVA_HOME目录
-
slaves指定管辖的机器(datanode节点),在其中添加三个datanode节点地址
-
如果搭建伪分布式,则改动下图中的内容即可
四、SZ02、SZ03的配置
卸载预装软件、关闭防火墙
Xshell中在SZ02和SZ03会话中开启”发送键输入到所有会话”功能,接下来的命令只需在SZ02会话中输入即可
注意:需要使用root用户操作
-
卸载系统预装的jdk:
-
使用rpm查找jdk包
rpm -qa|grep jdk
-
依次卸载这两个包
rpm -e –nodeps java-1.6.0-openjdk-1.6.0.35-1.13.7.1.el6_6.x86_64
rpm -e –nodeps java-1.7.0-openjdk-1.7.0.79-2.5.5.4.el6.x86_64
-
再次查找,已无这两个包,卸载完成
rpm -qa|grep jdk
-
-
关闭系统防火墙
service iptables stop
在生产环境下,如果是在公有云租用了服务器,可以指定在局域网内开启端口,而外网的访问则完全关闭端口,这是通过网络安全组的设置实现的;而私有云则是通过局域网路由器控制端口的访问权限。
启动集群前的准备
-
将SZ01中的jdk、hadoop、用户环境变量发送至SZ02、SZ03
scp命令:远程发送文件/文件夹,基于ssh
在SZ01中使用bigdata用户进行以下操作:
scp -r /home/bigdata/jdk1.8.0_171 bigdata@SZ02:/home/bigdata/ scp -r /home/bigdata/jdk1.8.0_171 bigdata@SZ03:/home/bigdata/ scp -r /home/bigdata/hadoop-2.7.2 bigdata@SZ02:/home/bigdata/ scp -r /home/bigdata/hadoop-2.7.2 bigdata@SZ03:/home/bigdata/ scp /home/bigdata/.bash_profile bigdata@SZ02:/home/bigdata/ scp /home/bigdata/.bash_profile bigdata@SZ03:/home/bigdata/
在SZ02、SZ03中查看jdk、hadoop版本,验证是否传输成功
-
对namenode进行格式化
在SZ01中进行操作
hadoop namenode -format
格式化过程中没有出现ERROR的提示即代表格式化成功。
每次格式化都会在hadoop/data/dfs/name/current中生成一个新的VERSION文件,每次格式化后的clusterID都与以前不同,相当于建立了一个新的集群
cat hadoop/data/dfs/name/current/VERSION
启动集群
使用SZ01进行操作
进入hadoop安装目录下的sbin目录
cd hadoop-2.7.2/sbin/
执行启动命令
start-all.sh:启动dfs和yarn进程
start-dfs.sh:单独启动dfs
start-yarn.sh:单独启动yarn
启动dfs:
./start-dfs.sh
打印的信息中提示启动日志存放在/home/bigdata/hadoop-2.7.2/logs/hadoop-bigdata-xxxnode-SZ0x.out中,如果有某一节点未启动,可以通过日志文件进行查看排错
启动成功后,三台机器的进程信息如下:
SZ01:NameNode, SecondaryNameNode. DataNode
SZ02:DataNode
SZ03:DataNode
启动yarn:
./start-yarn.sh
启动成功后,在上一步的基础上,各个节点的进程中多了一下进程:
SZ01:ResourceManager, NodeManager
SZ02:NodeManager
SZ03:NodeManager
集群中进程的作用
hdfs和yarn的作用:
hdfs:hadoop分布式文件系统,负责hadoop集群中的数据存储工作
yarn:作业调度和资源管理
hdfs:
- namenode:每个集群中的主节点
- datanode:标志当前机器是数据存储节点
- secondarynamenode:管理用户操作镜像的进程:用户镜像,文件做存储时没有实时写入硬盘,当文件大小超过一定额度时才会将文件写入硬盘
yarn:
- resourcemanager:计算阶段的任务调度,负责同步各个nodemanager的计算结果
- nodemanager:数据计算节点