在搭建的过程中一定要记得做一些快照,这样方便回滚。否则搭建错的时候就要从来来过,特别麻烦!
我主要用 1台 windows 电脑 和 1台 mac 电脑 共同搭建网络。
这里节点数一般 设置4个就行,1个 作为Namenode, 3个作为Datanode 就够了。
hostnamectl set-hostname node01 用来修改 虚拟机的名字,记得 reboot 重启。
1.网络设置问题
Windows 上 VMWARE + CENTOS 7 使用 Bridge 桥接的方式 设置网络。
可参考上一篇 02.Haoop 虚拟机 桥接与NAT之间区别 及桥接设置 。
简单回顾一下,设置的几个命令
1)设置 ip 地址等
vi /etc/sysconfig/network-scripts/ifcfg-ens33
也可能是 ifcfg-eth0, 不放心的话可以 到 network-scripts 里面去看一下,一般是第一个文件
2) 设置 网络的名称 hostname,这样相互 ping 就可以用名称来 ping
vi /etc/sysconfig/network
注意取名字的时候最好不要有 " _ ", 比如 node_01 ,最好取成 node01 否则可能 Hadoop 运行不起来。
GATEWAY 的话可写可不写,这里我把最后2位 隐去了。
3 )要让 每个节点(虚拟机)都知道其他节点的名称
vi /etc/hosts 把每个节点的 IP地址 和 名称 追加在后面。
在 ::1 这里输入 o (欧),就可以直接换行插入。
4)设置完之后需要启动一下。
service network restart
也建议 poweroff 一下,再重新开启,因为这样 hostname 就会变换
最后打开之后 互相ping 一下,以及看一下 hostname 节点的名字是否已经变成自己设置的了。
我用xshell, 打开了 检查了几个地方用红色标出来了。
a. 名字是否已经变为nodewind04
b.ping www.baidu.com 是否可以连通百度
c. ping nodewind05 是否可以连通 其他节点,并且用其他节点的名字来ping 通
d. 阿里云的服务器也顺便检查了一下是否可以ping 通
5) 检查是否关闭防火墙
CentOS 6.0 使用 iptables:
a. 关闭防火墙 sevice iptables stop
b. 设置开机不启动防火墙 chkconfig iptables off
CentOS 7.0 使用 firewall:
a. systemctl start firewalld.service #启动firewall
b. systemctl stop firewalld.service #停止firewall
c. systemctl disable firewalld.service #禁止firewall开机启动
6)检查是否关闭安全模式
vi /etc/selinux/config 设置 SELINUX=disabled
到这里网络设置就基本做完了,记得每个节点都需要把这些网络设置都完成。记得定期的做一下快照!
2. ssh 设置免密登入
免密登入主要是 Hadoop Namenode 可以无需密码访问各个节点。
在这里我选择了 Hadoop官网的 id_rsa.pub 的密钥。
1) ssh localhost 先用 ssh 进入 localhost 此时需要密码,用 ll -a 就可以看到隐藏文件 .ssh 文件
2) 需要在 ssh 中生存公钥,以及 把 公钥放入 authorized_keys 中,
a. ssh localhost 进入 ssh
b. ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa 生存公钥
c. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 把公钥追加到 authorized_keys 中去
d. chmod 0600 ~/.ssh/authorized_keys 如果权限有问题,需要修改权限。如果没有问题可以不用这句
e. exit 退出,再试一次 ssh localhost 是否可以免密进入
f. 把 Namenode 的公钥分发给 其他的节点,
在cd .ssh 目录下 scp id_rsa.pub nodewind05:`pwd`/nodewind04.pub
注意 nodewind04,nodewind05 都要先登入 ssh localhost,然后再输入scp 命令!!!
即把nodewind04 上的 id_rsa 公钥 发送到 nodewind05 上,并且改名为 nodewind04.pub
g. 在 nodewind05 上检查一下是否有 nodewind04.pub 文件,也需要追加一下 authorized_keys
cat nodewind04.pub >> authorized_keys
h. 在nodewind04 节点上,exit 退出localhost之后,ssh nodewind05
图片版说明:
- ssh localhost
- ll -a
- a,b 的指令,生成公钥:ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
- c 的指令,追加到 authorized_keys 中 :cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
- 指令 cd .ssh 里查看 是否 公钥和文件是否已经生成
- 发送 nodewind04 的公钥 到 nodewind05:
- nodewind04 和 nodewind05 都先 ssh localhost , 进入 cd .ssh
- 在 nodewind04 中发送公钥 scp id_rsa.pub nodewind05:`pwd`/nodewind04.pub
- 在 nodewind05 中查看 是否有 nodewind04.pub
- 在 nodewind05 中, 把公钥追同样也追加到 authorized_keys中去:cat nodewind04.pub >> authorized_keys
- 在 nodewind04节点 ,先退出nodewind04,再登入 ssh nodewind05 ,此时应该是免密登入。
- 最后每个 节点都需要用 做免密登入
3. 每个节点需要统一时间
在每个节点上设置
1)sudo yum install ntp
2) systemctl enable ntpd:
3) 修改启动参数,允许ntp服务在系统时间误差较大时也能正常工作
vi /etc/sysconfig/ntpd 设置 OPTIONS= "-g -x"
4)重新启动服务
service ntpd restart
5)将系统时间改为上海时间
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
6)查看时间 date
4. xshell 上传文件的设置
在每个节点上设置
1) yum -y install lrzsz
2) rpm -qa lrzsz
3) 使用 rz -y 命令上传文件,自动跳出上传窗口
4) 创建目录 mkdir software (自定义的名称)以后的压缩包就放在这个里面
5.JDK 和 HADOOP 安装包 & 环境变量的设置
1) 选择一个节点作为 Namenode(主节点),这里我用的是 nodewind04 作为 Namenode。
2)官网下载 hadoop-2.7.6.tar.gz 和 jdk-8u211-linux-x64.tar.gz 并使用 rz -y 命令上传
JDK 尽量选择 8.0的版本,Hadoop 也尽量选择 3.0之前的版本。
3)解压缩命令 tar -zxvf jdk-8u211-linux-x64.tar.gz 和 tar -zxvf hadoop-2.7.6.tar.gz
分别进入文件夹,输入 pwd 命令,看当前路径,记录一下路径:
(JDK) /root/software/jdk1.8.0_211
(Hadoop) /root/software/hadoop-2.7.6
4)配置环境变量 vi + /etc/profile “+” 号代表在文件的末尾添加。
export JAVA_HOME=/root/software/jdk1.8.0_211
export HADOOP_HOME=/root/software/hadoop-2.7.6
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
在末尾输入以上3句话。JDK 和 HADOOP 和绝对路径,
bin 和 sbin 都是系统的一些启动文件,开启时要用到,所以需要添加到 PATH里。
5)需要启动一下修改的文件 source /etc/profile
- 是否配置完成 JDK 环境变量: 输入 jps ,有返回值就说明完成,
或是 echo $JAVA_HOME 看是否路径设置一致
- 是否配置完成 HADOOP 环境变量:输入 hadoop version 查看是否安装,
或是 echo $HADOOP_HOME 看是否路径设置一致
6) 把主节点的 JDK 先发到其他的节点上:
a. JDK安装包分发,发送到同一个目录下: scp -r /root/software/jdk1.8.0_211 nodewind05:/root/software/
b. /etc/profile,也发送到同一个目录下:scp /etc/profile nodewind05:/etc/
这里不能用pwd,不在root下面,冒号后面不要与空格
c. 在nodewind05 中 source /etc/profile , jps, echo $JAVA_HOME
-r 代表复制整个目录,单复制一个文件就不要加 -r。
HADOOP 的文件还需要继续做一些设置,等设置完成之后再分发。
可以先做个快照,HADOOP的设置容易出错。
5.HADOOP 全分布式设置
1)在 HADOOP 中 设置 JAVA 环境变量
a. 打印 JAVA 路径 echo $JAVA_HOME 结果为:/root/software/jdk1.8.0_211
b. 进入 cd hadoop-2.7.6/etc/hadoop/ , 修改 3 个文件:vi hadoop-env.sh, vi mapred-env.sh, vi yarn-env.sh
把 export JAVA_HOME 路径改成 绝对路径: /root/software/jdk1.8.0_211 , 3个文件中各有1行需要修改。
c. vi core-site.xml 修改 core-site.xml 文件,就是要修改主节点 Namenode 的参数。
也都是在 cd hadoop-2.7.6/etc/hadoop/ 中。
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://nodewind04:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop/full</value>
</property>
</configuration>
*设置 主节点的 url, nodewind04 相当于是 url 路径。
*固定 hadoop 运行时产生文件的储存目录
d. vi hdfs-site.xml , 修改 hdfs 文件,主要是 修改 备份的数量 和 Secondary Namenode 的地址与主节点分开
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>nodewind05:50090</value>
</property>
</configuration>
*这里我只对每个文件 复制2份,一般为 3 份
*Secondary Namenode 我放在了 nodewind05 节点上。
e. vi slaves , 告诉 节点,哪些是 slaves (datanode)
把 localhost 去除,输入 nodewind05, nodewind06 ... 只要写 节点的 HOSTNAME就行
别把 nodewind04 (Namenode)写进去
f. Hadoop 文件初步修改完成。把 Namenode 中的 hadoop 文件分发到各个节点上去。
scp -r /root/software/hadoop-2.7.6 nodewind05:/root/software/ 也是发送到 software文件夹中
图片说明:
- 修改 vi hadoop-env.sh, vi mapred-env.sh, vi yarn-env.sh
- 修改 vi core-site.xml
- 修改 vi hdfs-site.xml
- 修改 vi slaves
6.主节点(Namenode)格式化及启动
1) 输入指令: hdfs namenode -format , 注意 在主节点上输入,我这里是 nodewind04
2) 输入指令:start-dfs.sh
图片如下:
- 输入 hdfs namenode -format ,看是否 successfully formatted, 以及运行文件存放的路径是否正确。
- 输入 start-dfs.sh , 看 Namenode, Datanode, Secondary Namenode 是否启动。
- 在每个节点 输入 jps , 查看进程,看 该节点的 node 是否被启动。
nodewind05 上有 1个 SecondaryNameNode 和 1个 DataNode
- 最后用 Namenode 的 ip 地址 访问网页版的 Hadoop
http://ip地址:50070