Hadoop运行环境搭建

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、配置日志聚集

未完待续!!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自学互联网

努力帮助更多的人

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值