一、在操作前,先明白几个概念,避免操作linux的时候混淆
概念一:命名
机器名 对机器起的名字
用户名username 机器上登陆用户的名字
主机名hostname 为了方便通过网络访问对应机器,对IP地址取的别名
-
在后面的环境搭建过程中有三台机器,为了方便,在命名上,配置如下
机器列表 机器名 用户名 主机名 机器1(对集群做一些临时操作可能会用到) worker1 root(最高权限用户)
user(普通用户)worker1 机器2 worker2 root(最高权限用户)
user(普通用户)worker2 机器3 worker3 root(最高权限用户)
user(普通用户)worker3
概念二:用户
- 一台机器可以有很多个用户,但是只有一个权限最高的用户,每个用户都有一个用户文件夹作为<span style="color:red">用户根目录(~/)</span>存放数据,<strong>所以不同用户登陆时候,访问到的<span style="color:red">用户根目录(~/)</span>是不同的</strong>
概念三:存储
- 一般来讲不分盘,只有一个盘(当然你也可以进行分区,只不过没必要),用户仅仅是机器的使用者,只有使用权,只有root用户才有操作机器所有功能、目录的能力,相当于占有权。Windows实际上也类似,只是我们平时使用的时候基本一人一个电脑,磁盘被分了很多个,而且创建的用户基本都只有一个而且是管理员权限,所以有一种我的电脑任我操作的感觉。
概念四:需要了解的部分目录结构
目录 | 目录路径 | 操作权限 |
---|---|---|
电脑根目录 | / | root权限 |
root用户主目录 | /root | root权限 |
普通用户们所在位置目录 | /home | root权限 |
普通用户1主目录 | /home/普通用户1 | 普通用户1权限 |
-
root身份的时候:
目录 目录路径 root用户主目录 /root 或 ~/ 普通用户1主目录 /home/普通用户1/ -
普通用户1身份的时候:
目录 目录路径 普通用户1主目录: ~/ 或 /home/普通用户1/ 无权操作超过普通用户1主目录以上级别的目录内容或其他用户主目录内容
二、下面开始搭建环境
(虚拟机已装好或者已经拥有几台可以使用的centos7系统的机器)
2.1 网络配置【在每台机器都要操作】
-
手动更改ip地址(在设置里面图形化操作)假设有三台机器更改ip为
机器 ip worker1 192.168.150.100 worker2 192.168.150.101 worker3 192.168.150.102 -
以root权限进行各类操作
-
进入root用户身份
$ su – root//(回车后要输入root密码,在安装时候设置的root密码)
-
用文档编辑器编辑网络配置,打开文档进行编辑
$ gedit /etc/sysconfig/network/ //在里面添加上如下内容(表示使用网络,主机名改为对应机器的主机名,比如在worker1上操作就改为worker1) NETWORKING=yes HOSTNAME=master //保存并关闭
-
让配置生效并修改hostname:
$ hostname worker1(每台机器分别改为对应主机名)
-
2.2 关闭防火墙【<span style="color:red">在每台机器都要操作</span>】
(为了方便才关闭,如果是公司生产环境,建议将特定端口打开而不要关闭防火墙)
-
查看防火墙状态:
firewall-cmd --state
-
关闭防火墙:
systemctl stop firewalld.service #停止firewall
-
禁止firewall开机启动:
systemctl disable firewalld.service (禁用防火墙)
(所有机器都要关闭、禁用)
2.3 配置host【<span style="color:red">在每台机器都要操作</span>】
-
打开host文件进行编辑
$ gedit /etc/hosts
-
在里面添加如下内容:
192.168.150.100 worker1 192.168.150.101 worker2 192.168.150.102 worker3
2.4 同步时钟(可以忽略,为了防止机器们协同工作时的时间记录不匹配所产生的错误,一般安装虚拟机的时候或者联网的时候会自动同步时间,所以一般不需要手动同步了)【<span style="color:red">在每台机器都要操作</span>】
-
用vi编辑配置
$crontab -e //进入vi编辑模式 //按i键(代表insert)进如输入模式
-
输入下面代码
0 1 * * * /usr/sbin/ntpdate cn.pool.ntp.org
-
结束编辑
//按esc键退出输入模式 //输入 :wq(冒号wq)代表保存并退出
-
然后进行同步
$ /usr/sbin/ntpdate cn.pool.ntp.org
2.5 配置免密码登陆(user用户登陆各台worker机器不用输入密码)
(方便在后面开启hadoop服务的时候省的输入多次密码造成阻碍)
所有机器都要开启ssh证书登陆功能
2.5.1 查看ssh服务状态、建立目录
检测ssh服务状态
$ sudo service sshd status-
在所有机器上,以普通用户身份查看根目录下是否有 .ssh文件夹
-
进入普通用户根目录
$ cd ~/
-
列出目录下所有文件、文件夹
$ ll -a
-
如果看见有.ssh就ok;如果没有则创建
$ mkdir .ssh
-
2.5.2 配置ssh无密码登录
-
进入.ssh文件夹
$ cd ~/.ssh
-
秘钥生成和配置
-
方法零(推荐):
-
生成密钥
$ ssh-keygen -t rsa //生成秘钥,指定使用rsa加密方式
- 一路回车键直到生成
-
拷贝公钥给需要免密登录的各台机器
ssh-copy-id 用户名@对应的主机名或者对应的ip地址
-
比如发送到主机名为worker2的机器上:
$ ssh-copy-id user@worker2
-
然后该确认确认,该输密码输密码。
-
去worker1机器上重启终端命令行
-
测试:
$ ssh worker2或者其他主机名 //如果不需要输入密码,那么就成功了
-
-
-
方法一:
-
生成免密签名
$ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa //指定加密方式为dsa无密码放在~/.ssh目录下,id_dsa为文件名
- 一路回车键直到生成
-
重命名id_dsa.pub为authorized_keys
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
-
将authorized_keys同时发送到其他几台需要被免密登陆的机器的.ssh目录中
$ scp authorized_keys 用户名@对应的主机名或者对应的ip地址:~/.ssh/authorized_keys
-
比如发送到主机名为worker2的机器上:
$ scp authorized_keys user@worker2:~/.ssh/authorized_keys
-
然后该确认确认,该输密码输密码。
-
然后去被免密登陆的机器上(自己、worker2、worker3)更改权限
//(用普通用户身份) $ chmod 700 ~/.ssh $ chmod 600 ~/.ssh/*
-
去worker1机器上重启终端命令行
-
测试:
$ ssh worker2或者其他主机名 //如果不需要输入密码,那么就成功了
-
-
-
方法二:
-
生成密钥
$ ssh-keygen -t rsa //生成秘钥,指定使用rsa加密方式
- 一路回车键直到生成
-
在worker1机器上进入.ssh目录
$ cd ~/.ssh
-
将id_rsa.pub文件重命名为authorized_keys同时发送到自己机器和其他几台需要被免密登陆的机器的.ssh目录中
$ scp id_rsa.pub 用户名@对应的主机名或者ip地址:~/.ssh/authorized_keys
-
比如发送到主机名为worker2的机器上:
$ scp id_rsa.pub user@worker2:~/.ssh/authorized_keys
-
然后该确认确认,该输密码输密码。
-
然后去被免密登陆的机器上(自己、worker2、worker3)更改权限
//(用普通用户身份) $ chmod 700 ~/.ssh $ chmod 600 ~/.ssh/*
-
去worker1机器上重启终端命令行
-
测试:
$ ssh worker2或者其他主机名 //如果不需要输入密码,那么就成功了
-
-
以后就可以直接使用
ssh 主机名
在一台机器上登陆另一台机器对其他电脑操作-
如果不行,在尝试做以下操作
$ gedit /etc/ssh/sshd_config //在最后加上以下内容并保存 RSAAuthentication yes PubkeyAuthentication yes //(上述内容原本是注释掉的,为了方便就不找出来了,直接手动加上) //(所有机器都要做)
-
2.6 安装java开发环境【在每台机器都要操作】
下载对应版本的jdk
-
安装java(我们将java安装在根目录的usr目录,所以需要root身份权限)
-
进入root用户身份
$ su – root(回车后要输入root密码,在安装时候设置的root密码)
-
usr下创建java目录
$ mkdir /usr/java
-
将jdk安装包移动到java目录中解压(假设一开始安装包下载在了桌面上)
-
进入桌面目录
$ cd /home/master/桌面
-
移动
$ mv 安装包的文件名 /usr/java
-
进入java目录
$ cd /usr/java
-
解压
$ tar -xvf 安装包的文件名
-
-
-
配置环境变量(为了让user普通用户生效新装的java,我们更改user用户的环境变量配置文件)
-
打开环境变量的配置文件并编辑
$ gedit /home/user/.bash_profile
-
在里面添加如下内容
export JAVA_HOME=/usr/java/刚刚解压的文件夹名字(即jdk安装包的名字)/ export PATH=$JAVA_HOME/bin:$PATH
-
使得环境变量生效
$ source /home/master/.bash_profile
-
检测是否成功
$ java -version
如果输出的版本号与自己下载的相同,那就对了
-
2.7 Hadoop安装与配置(由于我们把hadoop安装在普通用户根目录下,所以不需要最高权限,所以下面的操作为了方便全部采用图形化操作,当然命令行也行)【在每台机器都要操作】
- 将安装包放在worker1机器的user用户根目录下并解压到当前路径
- 比如解压完以后文件夹叫hadoop-2.9.0
- 在worker1机器的user用户根目录下,新建两个文件夹,叫hdfs、hadoopTemp
- 配置hadoop环境变量(为了让系统能通过命令找到hadoop可执行文件)
-
文本编辑器打开环境变量配置文件(此环境变量文件仅对user普通用户起作用)
$ gedit /home/master/.bash_profile
-
添加内容
export HADOOP_HOME=/home/master/Hadoop-2.9.0 export PATH=$PATH:$HADOOP_HOME/bin
-
Hadoop配置[去hadoop安装(解压)的地方(/home/master/Hadoop-2.9.0)找文件]
-
找:/etc/hadoop/hadoop-env.sh,添加或修改内容:
export JAVA_HOME=java安装路径
-
找/etc/hadoop/yarn.env.sh,添加或修改内容:
export JAVA_HOME=java安装路径
-
找/etc/hadoop/core-site.xml,添加内容
<configuration> <property> <name>fs.default.name</name> <value>hdfs://worker1:9000</value> <description>配置HDFS服务地址及端口</description> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/user/hadoopTemp</value> <description>配置临时文件存放地址</description> </property> </configuration>
-
找/etc/hadoop/hdfs-site.xml,添加内容
<configuration> <property> <name>hdfs.name.dir</name> <value>/home/user/hdfs/name</value> <description>存放hdfs名字空间元素</description> </property> <property> <name>hdfs.data.dir</name> <value>/home/user/hdfs/data</value> <description>存放hdfs数据物理空间</description> </property> <property> <name>hdfs.replication</name> <value>1</value> <description>副本个数,小于机器数量</description> </property> </configuration>
-
找/etc/hadoop/mapred-site.xml,添加内容
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
-
找/etc/hadoop/yarn-site.xml,添加内容
<configuration> <property> <name>yarn.nodemanager.aux-service</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>worker1:18088</value> <description>hadoop的webapp访问地址</description> </property> </configuration>
-
找/etc/hadoop/slave文件,设置slave(worker1作为老大,其他worker作为小弟节点配置到hadoop中)
//内部添加 worker1 worker2 worker3 //为什么会有worker1?老大既作为老大,也和小弟一起做任务
【针对在每台机器都要操作的安装环境,建议先把一台装完,然后把解压好的目录、环境变量文件直接拷贝发送到另外几台设备】
-
-
2.8 启动hadoop与测试
-
格式化namenode(第一次启动执行)在hadoop安装的根目录下执行:
bin/hdfs namenode -format
-
启动Hadoop,在hadoop安装的根目录下执行:
-
启动NameNode和DataNode进程
sbin/start-dfs.sh
-
启动ResourceManager和NodeManager进程
sbin/start-yarn.sh
-
-
检测是否启动成功
jps
-
如果出现如下信息,说明启动成功
5509 NodeManager 5833 Jps 4683 NameNode 4796 DataNode 5421 ResourceManager 4943 SecondaryNameNode
访问Hadoop的webapp服务
- 在浏览器中输入:http://master:18088(刚刚自己配置的地址)