要点如下:
- 1,服务器搭建: virtualBox + Centos7
- 2, centos7: 网络配置
- 3,centos 上安装jdk, hadoop
第一步: 安装centos, 配置网络
我使用ubuntu16 桌面版, 安装virtualbox后,创建虚拟机: 添加centos7镜像文件
点击 ‘start’, 开始安装centos7....
安装完成后, 需要关机,centos虚拟机还需以下配置:
- 默认只有一块网卡(NAT模式),且没有开启--->设置为开启, dhcp自动分配ip
- 为virtualbox添加虚拟网卡:host network manager
- 动态ip不方便管理虚拟机--->添加第二块网卡, 设置静态ip( 仅主机模式)
点击"File"---->host network manager : "create"
重启虚拟机, 配置网卡
- 登录后, 输入命令: ip addr --->查看现有的网络配置, 可以看到3个网卡【lo, enp0s3, enp0s8】
- 修改网络配置文件: cd /etc/sysconfig/network-scripts/ && ls
- 修改centos7主机名: vim /etc/hostname --> 改为:node
此时只有两个网络配置文件:ifcfg-enp0s3 ,ifcfg-lo ----->复制一份文件,对应刚添加的新网卡 enp0s8
- cp ifcfg-enp0s3 ifcfg-enp0s8
- vim ifcfg-enp0s3
注意:网卡enp0s8的网段要和 virtualbox的一致
重启网卡,再次查看网络: service network restart && ip addr
第二步:安装jdk, hadoop
因为centos7 mini版, 界面不美观,输入也不方便,所以我使用ubuntu 16 远程登录来控制虚拟机,具体操作如下
- 先配置ubuntu16 本机免密码登录, 再复制公钥到虚拟机centos7: ssh-keygen -t rsa -P ''"
- 使用scp 命令, 拷贝jdk , hadoop 压缩包到centos7虚拟机: scp jdk-8u171-linux-x64.tar.gz hadoop-2.7.3.tar.gz node:~
- 远程登录centos7, 解压文件, 配置环境变量: ssh node
伪分布式
- core-site.xml: 【namenode通信端口 + hdfs工作目录】
- hdfs-site.xml: 【block备份数】
- mapred-site.xml:【mapreduce的管理框架】
- yarn-site.xml: 【yarn服务器地址+ 指定的服务】
完全分布式
在伪分布基础上:(修改)
1,添加物理机: 分离datanode-->部署在多个slave节点
2, 配置slaves文件: 加入datanode主机名
3,修改系统ip映射: /etc/hosts--> 加入datanode 节点主机名ip映射
4,在master节点修改: hdfs-site.xml-->备份数3, 再同步master节点配置文件
5,删除工作目录, 重新格式化namenode
编写脚本:快速更改(克隆master机器后的slave机器) ip, hostname
#!/bin/bash
#修改Ip
if [[ -n $1 && -n $2 ]]
then
sed -i "[email protected][email protected]$2@g" /etc/sysconfig/network-scripts/ifcfg-enp0s8
service network restart
#修改hostname
echo "$1">/etc/hostname
#重启
reboot
else
echo "需要两个参数: ipX(slaveX)-->替换ipY...."
fi
第一种:不分离secondarynamenode ===>nm ,2nm 共用一个机器
在伪分布式的基础上, 修改slaves文件, 删除localhost--->替换为真实slave节点主机名; 重新format namenode即可
第二种:分离secondarynamenode ====>nm一台机器, 2nm一台机器
在第一种情况下,更改hdfs-site.xml:加入以下内容
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>某某主机名:50090</value>
</property>
(以root用户身份)编写脚本: 解压安装jdk, hadoop
#!/bin/bash
#脚本作用: 搭建hadoop伪分布式
#=======创建安装目录==========
mkdir -p /soft/{jdk,hadoop}
#解压文件
tar -zxvf jdk-8u171-linux-x64.tar.gz -C /soft/jdk
tar -zxvf hadoop-2.7.3.tar.gz -C /soft/hadoop
(cd /soft/jdk ; mv jdk* jdk8)
(cd /soft/hadoop ; mv hadoop* hadoop2.7)
#jdk,hadoop环境变量配置
echo "JAVA_HOME=/soft/jdk/jdk8" >> /etc/profile
echo "HADOOP_HOME=/soft/hadoop/hadoop2.7" >> /etc/profile
echo 'PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin' >> /etc/profile
source /etc/profile
echo 'export JAVA_HOME=/soft/jdk/jdk8'>>/soft/hadoop/hadoop2.7/etc/hadoop/hadoop-env.sh
#验证是否安装成功
java -version
hadoop version
#======修改主机名, hadoop配置文件=========
echo '127.0.0.1 node' >> /etc/hosts
#**********core-site.xml: 【namenode通信端口+ hdfs工作目录】******
echo '<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/centos/hadoop-tmp</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://node:9000</value>
</property>
</configuration>
'>/soft/hadoop/hadoop2.7/etc/hadoop/core-site.xml
#*************hdfs-site.xml:【block备份数】*************
echo '<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
'>/soft/hadoop/hadoop2.7/etc/hadoop/hdfs-site.xml
#**********mapred-site.xml:【mapreduce的管理框架】***********
echo '<?xml version="1.0"?>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
'>/soft/hadoop/hadoop2.7/etc/hadoop/mapred-site.xml
#**********yarn-site.xml【yarn服务器地址+ 指定的服务】*********
echo '<?xml version="1.0"?>
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
'>/soft/hadoop/hadoop2.7/etc/hadoop/yarn-site.xml
#===============格式化hdfs, 启动===================
#添加角色: centos
useradd -rms /bin/bash centos
echo -e 'centos\ncentos'|passwd centos
chown -R centos:centos /soft/
#切换角色: centos; 配置免密码登录
su centos
mkdir /home/centos/.ssh
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
ssh-copy-id node
hdfs namenode -format && start-all.sh && /soft/jdk/jdk8/bin/jps