Hadoop运行环境搭建
两年前的笔记,会重新更新与实际不符的细节
虚拟机环境准备
1、安装一台虚拟机(最小化安装)。
yum安装一些必要的命令或环境(如果安装的是桌面版,则直接跳过这一步)
#切换root用户
su
#安装必要的环境
yum install -y epel-release
yum install -y psmisc nc net-tools rsync vim lrzsz ntp libzstd openssl-status tree iotop
2、修改虚拟机的ip(设置为静态IP)(设置的ip网段要和虚拟网络编辑器中的ip网段一致)
#在虚拟机的导航栏中,点击 编辑(下拉按钮),再点击虚拟网络编辑器,再点击 更改设置(需要管理员权限),点击VMnet8,点击NAT设置,查看网段或者修改网段,再点击DHCP设置,查看ip的起始地址和结束地址。
#注意这几个地方的网段一定反复检查确保一致。
#查看linux系统的所有网络接口(我们主要查看ens33),此刻的ip是动态的。
ifconfig 或者 ip addr show
#测试一下,虚拟机是否有网,ping一下百度(需要用到的快捷键 Ctrl + c,作用是终止进程)
ping www.baidu.com
#修改网络配置文件
vim /etc/sysconfig/network-scripts/ifcfg-ens33
#配置文件需要修改参数BOOTPROTO的值为status(就是设置为静态ip的意思),检查ONBOOT的值是否为yes(yes就是系统启动的时候网络接 口是否有效)
BOOTPROTO="static"
ONBOOT=yes
#添加以下参数项,IPADDR是配置的ip,GATEWAY是网关,DNS1是域名解析器,DNS2是备用的域名解析器。
IPADDR=192.168.143.130
GATEWAY=192.168.143.2
DNS1=192.168.143.2
DNS2=8.8.8.8
#重启网络,按修改的配置文件生效
(cento7以后管理服务用systemctl,service也能用,那是centos6以前版本管理服务用的)
(NetworkManager是取代network的,两者都是网络服务,两个同时运行在一些情况下会产生冲突)
(建议停掉network使用NetworkManager)
systemctl stop network
systemctl disable network
systemctl restart NetworkManager
#检查所有的网络接口,查看nes33对应的ip是否修改为指定的ip
(ipconfig命令已经被弃用)
ip addr show
3、配置虚拟机主机名
#查看主机名
hostname
#修改主机名
vim /etc/hostname
#注意注意注意,一定要重启修改主机名才会生效。
shutdown -r now
4、修改虚拟机的hosts文件
#在hosts文件中添加主机名和ip的映射
#打开hosts文件
vim /etc/hosts
#添加主机名和ip的映射关系
192.168.143.130 hadoop01
192.168.143.131 hadoop02
192.168.143.132 hadoop03
192.168.143.133 hadoop04
192.168.143.134 hadoop05
192.168.143.135 hadoop06
5、修改windom的映射文件。
路径 (C:\Windows\System32\drivers\etc\hosts)
#复制上面的路径找到hosts映射文件,添加如下映射关系
192.168.143.130 hadoop01
192.168.143.131 hadoop02
192.168.143.132 hadoop03
192.168.143.133 hadoop04
192.168.143.134 hadoop05
192.168.143.135 hadoop06
6、关闭防火墙
#查看防火墙的状态
systemctl status firewalld
#关闭防火墙
systemctl stop firewalld
#查看防火墙状态(确保防火墙已经关闭)
#关闭防火墙的开机自动启动服务
#查看防火墙是否是开机自动启动
systemctl is-enabled firewalld
#关闭防火墙的开机自动启动
systemctl disable firewalld
7、创建一个hadoop的登陆用户admiral
(登陆用户名随便起)
#添加用户
useradd admiral
#设置新用户的密码
passwd admiral
8、设置hadoop登陆用户具有root权限
#打开/etc/sudoers
vim /etc/sudoers
#在命令模式下,输入 :/wheel 回车定位到指定行“%wheel ALL=(ALL) ALL”
#添加如下代码(意思就是使admiral用户具有root权限,并且不需要输入密码)
admiral ALL=(ALL) NOPASSWD:ALL
9、在opt目录下创建module、software两个文件夹
#进入opt目录下
cd /opt
#创建module、software两个文件夹(module用来存储一些安装包,softwrae存储一些解压后安装的组件)
sudo mkdir module software
#修改目录module、software的所有者用户名和所属组名为hadoop01
sudo chown hadoop01:hadoop01 module/ software/
10、安装JDK
最小化安装的centos系统不自带jdk,直接安装jdk1.8;桌面版的centos自带jdk,需要先卸载自带的jdk,再安装jdk1.8
#卸载jdk
rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
#查看jdk是否卸载干净
rpm -qa | grep -i java
#将在windom下 下载的JDK安装包上传到linux中/opt/module下
我用的工具WinSCP进行的文件传输,可自行百度下载安装进行使用
#将JDK安装包解压到/opt/software目录下
sudo tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/software/
11、配置JDK的环境变量
#在/etc/profile.d/下新建一个配置文件my_env.sh
sudo vim /etc/profile.d/my_env.sh
#添加如下内容
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
#重启Xshell对话框或者source⼀下 /etc/profile.d/my_env.sh⽂件,使环境变量⽣效
source /etc/profile.d/my_env.sh
12、测试JDK是否安装成功
#查看jdk的版本信息
java -version
#如果没看到版本信息,可以重启一下在测试
#查看JAVA_HOME和PATH的值
echo $JAVA_HOME
echo $PATH
13、安装hadoop
#将hadoop压缩包上传到linux
#不加sudo可能会上传文件失败,因为普通用户没有权限上传文件到/opt目录下
sudo rz
#解压hadoop压缩包到/opt/module/目录下
#解压完就是安装完毕
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
#配置hadoop的环境变量
cd /etc/profile.d/my_env.sh
#加入以下内容
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin
#重启,让配置文件生效
shutdown -r now
14本地运行模式
hadoop默认配置就是本地运行模式
官方Grep案例
#进入hadoop目录下
cd /opt/module/hadoop-3.1.3
#查看hadoop目录下的文件
ls /opt/module/hadoop-3.1.3/
#创建要测试的输入文件夹input
mkdir /opt/module/hadoop-3.1.3/input
#将hadoop的所有xml文件复制到input文件夹下
cp /opt/module/hadoop-3.1.3/etc/hadoop/*.xml /opt/module/hadoop-3.1.3/input/
#进入到hadoop目录下
cd /opt/module/hadoop-3.1.3
#在share目录下执行mapreduce程序(注意output是自动在当前目录下生成)
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep input/ output dfs[a-z]+
#进入Hadoop目录下的output目录下
cd /opt/module/hadoop-3.1.3/output/
#查看output目录下的文件
ls
#利用less命令查看part-r-00000文件内容
less part-r-00000
官方wordcount案例
#进入hadoop目录下
cd /opt/module/hadoop-3.1.3
#创建测试文件夹wcinput
mkdir wcinput
#进入测试文件夹下,创建测试文件,在测试文件中随便写一些单词
cd wcinput
vim wc.input
#进入hadoop目录下执行mapreduce程序(输出文件在当前目录下)
cd /opt/module/hadoop-3.1.3
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wcinput/ wcoutput
#查看测试结果
cd wcoutput
less part-r-00000
15完全分布式模式
#先准备一台虚拟机(完成本地模式的搭建)
集群配置
#集群部署规划
#NameNode、SecondaryNameNode、ResourceManager分别部署在不同的节点上(ResourceManager比较消耗内存)
如下图:

配置集群
配置hadoop-env.sh
#在hadoop-env.sh中加入JAVA_HOME的路径
export JAVA_HOME=/opt/module/jdk1.8.0-212
核心配置文件core-site.xml
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop04:8020</value>
</property>
<!-- 指定hadoop数据的存储⽬录
官⽅配置⽂件中的配置项是hadoop.tmp.dir ,⽤来指定hadoop数据的存储⽬录,此次配置⽤的
hadoop.data.dir是⾃⼰定义的变量, 因为在hdfs-site.xml中会使⽤此配置的值来具体指定
namenode 和 datanode存储数据的⽬录
-->
<property>
<name>hadoop.data.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 下⾯是兼容性配置,先跳过 -->
<!-- 配置该admiral(superUser)允许通过代理访问的主机节点 -->
<property>
<name>hadoop.proxyuser.admiral.hosts</name>
<value>*</value>
</property>
<!-- 配置该admiral(superuser)允许代理的⽤户所属组 -->
<property>
<name>hadoop.proxyuser.admiral.groups</name>
<value>*</value>
</property>
<!-- 配置该admiral(superuser)允许代理的⽤户-->
<property>
<name>hadoop.proxyuser.admiral.users</name>
<value>*</value>
</property>
HDFS配置文件hdfs-site.xml
<!-- 指定副本数 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定NameNode数据的存储⽬录 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.data.dir}/name</value>
</property>
<!-- 指定Datanode数据的存储⽬录 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.data.dir}/data</value>
</property>
<!-- 指定SecondaryNameNode数据的存储⽬录 -->
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file://${hadoop.data.dir}/namesecondary</value>
</property>
<!-- 兼容配置,先跳过 -->
<property>
<name>dfs.client.datanode-restart.timeout</name>
<value>30s</value>
</property>
<!-- nn web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop04:9870</value>
</property>
<!-- 2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop06:9868</value>
</property>
YARN配置文件yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop05</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPAT
H_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
<!-- 取消虚拟内存的限制 -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
mapreduce配置文件mapred-site.xml
<!-- 指定MapReduce程序运⾏在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
16、启动集群
第一次启动格式化namenode
#如果集群是第一次启动需要格式化namenode,在格式化之前要删除data和logs两个目录下的所以文件。
hdfs namenode -format
#namenode格式化成功的标志
INFO common.Storage: Storage directory /opt/module/hadoop-3.1.3/data/name has been successfully formatted.
在namenode所在的节点上启动namenode
#在hadoop02上启动namenode
hdfs --daemon start namenode
#执行命令jps查看namenode是否成功启动
访问namenode、secondarynamenode、ResourceManager的web页面
#访问namenode的web页面
hadoop04:9870/
#访问ResourceManager的web页面
hadoop05:8088/
#访问secondarynamenode的web页面
hadoop06:9868/
❤格式化namenode需要注意的问题
#格式化namenode会产生新的集群id,导致datanode记录的集群id和刚生成的namenode的集群id不一致,datanode找不到namenode。
#所以格式化namenode时,一定要先删除每个节点的data和logs目录下的所有文件,然后再进行格式化。
❤出现错误看日志
#在进行开发时,遇到错误要通过日志文件去进行分析。
#hadoop的日志文件目录 /opt/module/hadoop-3.1.3/logs/
17、免密登录
#无密码配置
#配置免密
#在所有节点上生成公钥和私钥
ssh-keygen -t rsa
#会在~/.shh目录下生成两个文件就是公钥和私钥
18、群起集群
#配置workers文件
vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
#将workers中的内容替换成所有节点的主机名
hadoop04
hadoop05
hadoop06
😎#注意:workers文件中不可以有多余的空格和空行。
19、查看脚本
(19、20、21三个脚本都放在/usr/bin/目录下)
#!/bin/bash
for i in hadoop102 hadoop103 hadoop104
do
echo "==================== $i JPS ===================="
ssh $i /opt/module/jdk1.8.0_212/bin/jps
done
20、群起群停脚本
#!/bin/bash
if [ $# -lt 1 ]
then
echo "Input Args Error!!!"
exit
fi
case $1 in
start)
echo "===================== START HDFS ===================="
ssh hadoop102 /opt/module/hadoop-3.1.3/sbin/start-dfs.sh
echo "===================== START YARN ===================="
ssh hadoop103 /opt/module/hadoop-3.1.3/sbin/start-yarn.sh
;;
stop)
echo "===================== STOP YARN ===================="
ssh hadoop103 /opt/module/hadoop-3.1.3/sbin/stop-yarn.sh
echo "===================== STOP HDFS ===================="
ssh hadoop102 /opt/module/hadoop-3.1.3/sbin/stop-dfs.sh
;;
*)
echo "Input Args Error!!!"
;;
esac
21、集群分发脚本
#!/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
22、配置历史服务器
为了查看程序的历史运行情况,配置mapred-site.xml,增加如下内容
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
分发配置文件,即时更新。
23、配置日志聚集
未完待续!!!

8891

被折叠的 条评论
为什么被折叠?



