话不多说,安装完全分布式的血泪史太长了,这次直接给自己把安装过程全部弄正确记录下来。所谓完美的安装过程。
创建新的虚拟机
ping
Ctrl+z 退出联网测试
1.安装epel-release
yum install -y epel-release
2.安装net-tools工具:包含ifconfig工具
yum install -y net-tools
3.安装ntp
yum install -y ntp
1.生成密钥
2.进入/root/.ssh,将公钥O导入
systemctl stop firewalld 关闭防火墙
systemctl disable firewalld.service 关闭防火墙开机自启动
1.创建atguigu用户
useradd atguigu
2.更改密码
passwd atguigu
3.添加atguigu sudo具有root权限
vim /etc/sudoers
在%wheel ALL=(ALL) ALL下一行添加:
atguigu ALL=(ALL) NOPASSWD:ALL
:wq!强制保存
1.切换到atguigu用户
su - atguigu
2.创建文件夹
sudo mkdir /opt/module //安装路径
sudo mkdir /opt/software //存放安装包
3.修改module、software文件夹的所有者和所属组均为atguigu用户
chown atguigu:atguigu /opt/module
chown atguigu:atguigu /opt/software
1.修改主机名称
vim /etc/hostname
- 配置Linux克隆机主机名称映射hosts文件,打开/etc/hosts
vim /etc/hosts 添加 192.168.10.100 hadoop100
3.修改windows的主机映射文件(hosts文件)
C:\Windows\System32\drivers\etc中 打开hosts文件并添加如下内容,然后保存 192.168.10.100 hadoop100
1.vim /etc/sysconfig/network-scripts/ifcfg-ens33
2.添加TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="static" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="ens33" IPADDR=192.168.10.100 PREFIX=24 GATEWAY=192.168.10.2 DNS1=192.168.10.2
4.保证Linux系统ifcfg-ens33文件中IP地址、虚拟网络编辑器地址和Windows系统VM8网络IP地址相同。
5.重启
reboot
1.解压jdk到/opt/module
tar -zxvf xxxxxxx -C /opt/module/
2.配置JDK环境变量
(1)新建/etc/profile.d/my_env.sh文件 sudo vim /etc/profile.d/my_env.sh (2)添加 #JAVA_HOME export JAVA_HOME=/opt/module/jdk1.8.0_212 export PATH=$PATH:$JAVA_HOME/bin (3)让新的环境变量PATH生效 source /etc/profile
1.解压安装文件到/opt/module下面
tar -zxvf hadoop-2.7.3.tar.gz -C /opt/module/
3.使环境变量生效
建立hadoop工作目录/var/hadoop
fs.defaultFS
hdfs://hadoop100:9000
hadoop.tmp.dir
/opt/hadoopTmp/
vi etc/hadoop/hdfs-site.xml
格式化hdfs命令:
hdfs namenode -format
成功
yarn配置
vi etc/hadoop/yarn-site.xml
yarn.resourcemanager.hostsname
BigData01
yarn.nodemanager.aux-services
mapreduce_shuffle
配置mapred-site.xml
mapreduce.framework.name
yarn
启动
hbase单机
hbase.zookeeper.quorum
localhost
hbase.zookeeper.property.clientPort
2181
hbase.unsafe.stream.capability.enforce
#使用我们电脑的文件系统,作为数据存储。
false
hbase.master.ipc.address
0.0.0.0
hbase.regionserver.ipc.address
0.0.0.0
克隆出 3台虚拟机 Hadoop102 hadoop103 hadoop104
打开虚拟机,ifconfig命令查看ip,方面在连接工具上连接虚拟机。
Root用户,更改各个虚拟机主机名(如hadoop102)
Root用户,配置各个虚拟机静态IP(如hadoop102)
使用这个配置信息,更改IP
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
IPADDR=192.168.10.102
PREFIX=24
GATEWAY=192.168.10.2
DNS1=192.168.10.2
此时已经修改成自己想要的ip
重启:reboot
进入C:\Windows\System32\drivers\etc路径找到hosts
1.修改windows的主机映射文件(hosts文件)
2.修改windows的主机映射文件(hosts文件)
要求:关闭防火墙,已配置静态IP,主机名称完善
看第三章
1.使用三种命令在主机之间传输文件
(1)scp
(2)rsync
(3)xsync
2.scp:可以实现服务器与服务器之间的数据拷贝,拷贝,拷贝!!
(1)语法:
scp -r $pdir/fname $user@hosr:$pdir/fname
命令 递归 文件路径/文件名称 目的地用户@主机:目的地路径/名称
(2)使用前提:虚拟机器中有相同文件夹或者文件,并且权限归自定义用户所有
案例:在hadoop102上 把/opt/module/hadoop-2.7.3目录拷贝到hadoop103,hadoop104
出现连接错误,需要将对应的IP加到/etc/hosts中。
解决问题后成功:
1.rsync:主要用于备份和镜像,速度快,可以变复制相同内容和支持符号链接的优点
2.rsync和scp区别:用rsync做文件的复制比scp复制所用时间短,rsync只对差异文件做复制,scp是复制所有文件。
3.基本语法:
rsync -av $pdir/$fname $user@host:$pdir/fname
命令 选项参数 文件路径/文件名 目的地用户@主机:目的地路径/名称
4.参数说明:
(1)-a 归档拷贝
(2)-v 显示复制过程
案例:
(1)删除hadoop103中的/opt/module/hadoop-2.7.3/bin文件(只是实验,平时不能随便删除bin目录)
补充知识点:删除安装的tar包
rm -r 安装包路径/安装包名称
(2)同步hadoop102中的/opt/module/hadoop-2.7.3/bin文件到hadoop103
1.需求:循环复制文件到所有节点的相同目录下
2.rsync原始命令拷贝
rsync -av /opt/module atguigu@hadoop103:/opt/
3.在/home/atguigu/bin 目录下创建xsync脚本
sudo vim xsync
!!!!!!注意粘贴一定要先按i,不然脚本可能没用!!!!!! #!/bin/bash #1. 判断参数个数 if [ $# -lt 1 ] then echo Not Enough Arguement! exit; fi #2. 遍历集群所有机器 for host in hadoop102 hadoop103 hadoop104 do echo ==================== $host ==================== #3. 遍历所有目录,挨个发送 for file in $@ do #4. 判断文件是否存在 if [ -e $file ] then #5. 获取父目录 pdir=$(cd -P $(dirname $file); pwd) #6. 获取当前文件的名称 fname=$(basename $file) ssh $host "mkdir -p $pdir" rsync -av $pdir/$fname $host:$pdir else echo $file does not exists! fi done done
4.给脚本赋予权限
chmod 777 xsync
文件赋予权限之后变成绿色,可以使用脚本了
主机之间互相登录不需要输入密码就可以登录
known_hosts文件中有访问数据,说明有主机访问过
4.现在配置hadoop102无密登录hadoop103ssh-keygen -t rsa (3次回车搞定)
原则:
(1)NameNode和SecondaryNode不要放在同一台机器上,因为都很耗费内存
(2)
hadoop配置文件有两类:
默认配置文件:
自定义配置文件:只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值
(1)默认配置文件:
要获取的默认文件 | 文件存放在Hadoop的jar包中的位置 |
---|---|
[core-default.xml] | hadoop-common-3.1.3.jar/core-default.xml |
[hdfs-default.xml] | hadoop-hdfs-3.1.3.jar/hdfs-default.xml |
[yarn-default.xml] | hadoop-yarn-common-3.1.3.jar/yarn-default.xml |
[mapred-default.xml] | hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml |
(2)自定义配置文件
core-site.xml
hdfs-site.xml
yarn-site.xml
mapred-site.xml
四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置。
1.core-site.xml
fs.defaultFS hdfs://hadoop102:8020 hadoop.tmp.dir /opt/module/hadoop-2.7.3/data hadoop.http.staticuser.user atguigu
dfs.namenode.http-address hadoop102:9870 dfs.namenode.secondary.http-address hadoop104:9868
yarn.nodemanager.aux-services mapreduce_shuffle yarn.resourcemanager.hostname hadoop103 yarn.nodemanager.env-whitelist JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME
4.mapred-site.xml
mapreduce.framework.name yarn
1.把/opt/module/hadoop-2.7.3/etc/hadoop文件分发给hadoop103,hadoop104
3.分发slaves
注意:首次启动,需要在hadoop102格式化NameNode
---------------------------------------------------------
(注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。)
---------------------------------------------------
1.在hadoop102格式化NameNode
1.进入/opt/module/hadoop-2.7.3/sbin,里面有启动命令
3.hadoop103输入命令启动resourcemanger
start-yarn.sh
(1) Web端查看HDFS的NameNode 浏览器中输入:
http://hadoop102:9870 查看HDFS上存储的数据信息
(2)Web端查看YARN的ResourceManager 浏览器中输入:
为了查看程序的历史运行情况,需要配置一下历史服务器。
3.在hadoop102 启动历史服务器
mr-jobhistory-daemon.sh start historyserver
4.查看进程jps,是否启动成功
yarn.log-aggregation-enable true yarn.log.server.url http://hadoop102:19888/jobhistory/logs yarn.log-aggregation.retain-seconds 604800 3.关闭NodeManager 、ResourceManager和HistoryServer
4.启动NodeManager 、ResourceManager和HistoryServer
5.查看日志:当有过作业就会有日志文件(这里还没有作业)历史服务器地址 http://hadoop102:19888/jobhistory
各个模块分开启动/停止(配置ssh是前提)常用
1.整体启动/停止HDFS
start-dfs.sh/stop-dfs.sh
2.整体启动/停止YARN
start-yarn.sh/stop-yarn.sh
3.整体启动/停止historyserver
mr-jobhistory-daemon.sh start/stop historyserver
各个服务组件逐一启动/停止
1.分别启动/停止HDFS组件
hdfs --daemon start/stop namenode/datanode/secondarynamenode
2.启动/停止YARN
yarn --daemon start/stop resourcemanager/nodemanager
1.进入atguigu/bin,创建myhadoop.sh脚本
cd /home/atguigu/bin
vim myhadoop.sh
2.加入如下内容
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " =================== 启动 hadoop集群 ==================="
echo " --------------- 启动 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-2.7.3/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-2.7.3/sbin/start-yarn.sh"
echo " --------------- 启动 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-2.7.3/bin/mapred --daemon start historyserver"
;;
"stop")
echo " =================== 关闭 hadoop集群 ==================="
echo " --------------- 关闭 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-2.7.3/bin/mapred --daemon stop historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-2.7.3/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-2.7.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
3.赋予脚本权限
chmod +x myhadoop.sh
1.进入·/home/atguigu/bin,创建jpsall文件
cd /home/atguigu/bin
vim jpsall
2. 输入
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =============== $host ===============
ssh $host jps
done
3.赋予脚本权限
chmod +x jpsall
4分发/home/atguigu/bin目录
xsync /home/atguigu/bin/
测试成功
1.安装ntp插件
yum install ntp
2.进入/etc 看到出现文件夹ntp,ntp.conf文件
syatemctl start ntpd
vim /etc/ntp.conf
5.编辑ntpd
vim /etc/sysconfig/ntpd
systemctl start ntpd
systemctl enable ntpd