赞
踩
所谓的模板机是进行了一些最基础的配置,比如说进行主机名修改、网络配置、下载一些插件等准备工作。
不会创建虚拟机的可以通过Centos7.5安装配置及虚拟机搭建详细教程进行虚拟机创建。
[root@hadoop101 ~]# ping www.baiu.com
如果ping不通百度,可能是网络配置没有配置好,可以通过配置文件等修改。
//进入ip配置文件进行修改
[root@hadoop101 ~]# vim /etc/sysconfig/network-scripts/ifcfg-
ens33
关闭DHCP自动分配地址功能,并手动添加IPADDR、GETWAY、DNS1
配置。其中,IPADDR
是自己指定的ip地址,GETWAY
是网关,DNS1
是域名解析器。
//进入主机名配置文件:
[root@hadoop101 ~]# vim /etc/hostname
修改主机名为hadoop101
修改完之后重启虚拟机:
[root@hadoop101 ~]# reboot
注意:在企业开发时,通常单个服务器的防火墙是关闭的。公司整体对外会设置非常安全的防火墙
1、查看防火墙状态
[root@hadoop101 ~]# systemctl status firewalld
如果是活跃状态会如下图所示:
如果是活跃装态需要我们手动先关闭之后再设置成开机不自启状态,保证我们以后开机之后防护墙是关闭的。
//关闭防火墙
[root@hadoop101 ~]# systemctl stop firewalld
关闭之后再查看装态:
//设置防火墙开机不自启
[root@hadoop101 ~]# systemctl disable firewalld
查看防火墙开机不自启是否设置成功:
[root@hadoop101 ~]# systemctl is-enabled firewalld
当显示如下图所示即说明设置成功:
安装插件之前必须保证虚拟机可以正常上网。
注:Extra Packages for Enterprise Linux是为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux。相当于是一个软件仓库,大多数rpm包在官方 repository 中是找不到的)
[root@hadoop101 ~]# yum install -y epel-release
注意:如果Linux安装的是最小系统版,还需要安装如下工具;如果安装的是Linux桌面标准版,不需要执行如下操作。
[root@hadoop101 ~]# yum install -y vim net-tools psmisc nc rsync lrzsz ntp libzstd openssl-static tree iotop git
//创建自定义用户
[root@hadoop101 ~]# useradd zy
//设置密码
[root@hadoop101 ~]# passwd 123456
方便后期加sudo执行root权限的命令
//编辑etc目录下的sudoers文件
[root@hadoop101 ~]# vim /etc/sudoers
在文件中添加创建的用户并添加zy ALL=(ALL) NOPASSWD:ALL,如下图所示:
module
和software
目录//进入到根目录下的opt目录 并创建新的目录
[root@hadoop101 opt]# mkdir module
[root@hadoop101 opt]# mkdir software
[root@hadoop101 opt]# ll
[root@hadoop101 opt]# chown zy:zy /opt/module
[root@hadoop101 opt]# chown zy:zy /opt/software
// 查看文件所有者和所属组
[root@hadoop101 opt]# ll -ls
注意:如果你的虚拟机是最小化安装不需要执行这一步。
[root@hadoop101 opt]# rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
参数说明
rpm -qa | 查询所安装的所有的rpm软件包 |
---|---|
grep -i | 忽略大小写 |
– | – |
xargs -n1 | 表示每次只传递一个参数 |
– | – |
rpm -e --nodeps | 强制卸载软件 |
文件中的ip地址以及域名 自己根据自己的实际情况填写
192.168.100.101 hadoop101
192.168.100.102 hadoop102
192.168.100.103 hadoop103
192.168.100.104 hadoop104
192.168.100.105 hadoop105
192.168.100.106 hadoop106
192.168.100.107 hadoop107
192.168.100.108 hadoop108
至此,模板机正式创建完毕!
关闭hadoop101,克隆出三台虚拟机,分别是:hadoop102、hadoop103、hadoop104,具体克隆过程这里不再赘述。
分别启动三台虚拟机,并修改三台虚拟机的ip地址、主机名等信息,修改完成之后,重启虚拟机。具体修改细节参考第1章的内容。
windows中hosts文件路径为:C:\Windows\System32\drivers\etc。配置完成之后才可以使用远程连接工具例如Xshell
连接服务器进行操作。
具体卸载命令及操作,参见第一章,这里不再赘述。
因为Hadoop程序是用Java语言开发的,因此需要JDK环境才能运行。将XXX.tar.gz安装包上传到/opt/software上,并解压到/opt/module文件夹下。
//解压到指定目录下
[zy@hadoop102 software]$ tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
将hadoop的bin目录以及sbin目录配置到环境变量文件中,但是原则上不要修改系统自带的环境变量文件,使用另外提供的配置文件路径。
[zy@hadoop102 software]$ cd /etc/profile.d/
[zy@hadoop102 profile.d]$ sudo touch my_env.sh
[zy@hadoop102 profile.d]$ sudo vim my_env.sh
添加环境变量:
# 配置jdk的环境变量
export JAVA_HOME=/opt/module/jdk-8u212/
export PATH=$PATH:$JAVA_HOME/bin
配置完之后,重写加载配置文件使其生效
[zy@hadoop102 ~]$ source /etc/profile
检查jdk是否配置成功:
[zy@hadoop102 ~]$ jdk -version
同jdk的上传解压方法一样。
同样是将hadoop的环境变量添加到my_env.sh文件中
export HADOOP_HOME=/opt/module/hadoop-3.3.4/
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
同样需要source一下,使其生效。
[zy@hadoop102 ~]$ hadoop version
执行一个简单的MR程序进行测试:
[zy@hadoop102 hadoop-3.3.4]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount wcinput wcoutput
分发之前需要将module下所有文件和文件夹所属组和所属者改为zy
[zy@hadoop102 hadoop-3.3.4]$ sudo chown zy:zy -R /opt/module
将hadoop102上的/opt/module目录下的jdk以及hadoop都分发给hadoop103和hadoop104。
同时需要分发my_env.sh环境变量,该拷贝需要用到scp命令。
[zy@hadoop102 ~]$ scp -r /opt/module/ zy@hadoop103:/opt/module
[zy@hadoop102 ~]$ scp -r /opt/module/ zy@hadoop104:/opt/module
[zy@hadoop102 ~]$ sudo scp /etc/profile.d/my_env.sh zy@hadoop103:/etc/profile.d/
[zy@hadoop102 ~]$ sudo scp /etc/profile.d/my_env.sh zy@hadoop104:/etc/profile.d/
分发完毕之后,source一下使其生效。
在使用脚本之前需要配置免密,而且后续群起集群之时也需要进行免密配置,因此不如在这里先配置好,提高效率。
** 1)第一步:生成公钥和私钥 **
// 在家目录下执行下列命令 生成公钥和私钥
// 执行该命令一路回车即可
[zy@hadoop102 ~]$ ssh-keygen -t rsa
执行完上述命令之后,在/home/zy目录下会生成一个隐藏目录.ssh
// 查看隐藏目录
[zy@hadoop102 ~]$ ls -al
//进入隐藏目录
[zy@hadoop102 ~]$ cd /home/zy/.ssh/
//查看文件 会发现已经生成了公钥和私钥文件
[zy@hadoop102 .ssh]$ ll
2)第二步:将公钥拷贝到要免密登录的目标机器上
拷贝不仅要拷贝到其他及其上,比如拷贝到hadoop103、hadoop104,同时也要给自己拷贝一份。
// 将公钥拷贝到要免密登录的目标机器上
[zy@hadoop102 .ssh]$ ssh-copy-id hadoop102
[zy@hadoop102 .ssh]$ ssh-copy-id hadoop103
[zy@hadoop102 .ssh]$ ssh-copy-id hadoop104
3)第三步:在hadoop103和hadoop104上也执行上述第一步和第二步
切换到其他服务器,执行上述步骤,使三台节点达到无论谁访问谁都是免密的状态。
将自定义的脚本文件同一放在/home/zy/bin目录下,进入到该目录下创建一个mysync.sh文件,并添加可执行权限。
[zy@hadoop102 ~]$ cd /home/zy/bin
[zy@hadoop102 bin]$ touch mysync.sh
[zy@hadoop102 bin]$ vim mysync.sh
在文件中添加下述内容:
#!/bin/bash # 分发文件使用的 # 判空 if [ $# -lt 1 ] then echo "输入参数为空!!!" exit fi # 如果非空 遍历主机 for host in hadoop103 hadoop104 do # 参数可能多个 再嵌套一层循环 for file in $@ do # 判断file是否为存在 if [ -e $file ] # 如果文件存在 执行then then # 1. 获取文件的目录 # 但是传递的参数可能为软链接 所以先进入 pdir=$(cd -P $(dirname $file);pwd) # 2. 获取文件名 fname=$(basename $file) # 3. 使用ssh命令登录到对应主机上创建相同目录结构 # 但是传递的参数可能为软链接 所以先进入 ssh $host "mkdir -p $pdir" # 4. 使用rsync命令分发 rsync -av $pdir/$fname $host:$pdir # 如果不存在 则给出提示之后继续执行下一轮 else echo "输入的 $file 文件不存在" fi done done
// 进入指定目录下 修改5个配置文件
[zy@hadoop102 bin]$ cd /opt/module/hadoop-3.3.4/etc/hadoop/
[zy@hadoop102 hadoop]$ vim core-site.xml
在文件中添加下述内容:
<!-- 指定NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop102:8020</value> </property> <!-- 指定hadoop数据的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-3.3.4/data</value> </property> <!-- 配置HDFS网页登录使用的静态用户为atguigu --> <property> <name>hadoop.http.staticuser.user</name> <value>zy</value> </property>
<!-- nn web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- 2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
<!-- 指定MR走shuffle --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定ResourceManager的地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop103</value> </property> <!-- 环境变量的继承 --> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property>
下面的配置是针对于调度的,暂时可以先不配置:
<!-- 选择调度器 默认是容量调度器Capacity Scheduler--> <property> <description>The class to use as the resource scheduler.</description> <name>yarn.resourcemanager.scheduler.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value> </property> <!-- ResourceManager处理调度器请求的线程数量,默认是50;如果提交的任务数大于50,可以增加核值--> <!-- 但是不能超过3台*4线程 = 12 线程 (去除其他应用程序实际不能超过8)--> <property> <description>Number of threads to handle scheduler interface.</description> <name>yarn.resourcemanager.scheduler.client.thread-count</name> <value>4</value> </property> <!-- 是否让Yarn自动检测硬件进行配置 默认是flase 如果该节点有很多其他应用--> <!-- 建议手动配置。如果该节点没有其他应用程序,可以采用自动--> <property> <description>Enable auto-detection of node capabilities such as memory and CPU. </description> <name>yarn.nodemanager.resource.detect-hardware-capabilities</name> <value>false</value> </property> <!-- 是否将虚拟核数当作CPU核数,默认是false,采用物理cpu核数--> <property> <description>Flag to determine if logical processors(such as hyperthreads) should be counted as cores. Only applicable on Linux when yarn.nodemanager.resource.cpu-vcores is set to -1 and yarn.nodemanager.resource.detect-hardware-capabilities is true. </description> <name>yarn.nodemanager.resource.count-logical-processors-as-cores</name> <value>false</value> </property> <!-- 虚拟核数和物理核数乘数,默认是1.0--> <property> <description>Multiplier to determine how to convert phyiscal cores to vcores. This value is used if yarn.nodemanager.resource.cpu-vcores is set to -1(which implies auto-calculate vcores) and yarn.nodemanager.resource.detect-hardware-capabilities is set to true. The number of vcores will be calculated as number of CPUs * multiplier. </description> <name>yarn.nodemanager.resource.pcores-vcores-multiplier</name> <value>1.0</value> </property> <!-- NodeManager使用内存数,默认是8G 修改为2G内存--> <property> <description>Amount of physical memory, in MB, that can be allocated for containers. If set to -1 and yarn.nodemanager.resource.detect-hardware-capabilities is true, it is automatically calculated(in case of Windows and Linux). In other cases, the default is 8192MB. </description> <name>yarn.nodemanager.resource.memory-mb</name> <value>2048</value> </property> <!--nodemanager的CPU核数,不按照硬件环境自动设定时默认是8个,修改为2个--> <property> <description>Number of vcores that can be allocated for containers. This is used by the RM scheduler when allocating resources for containers. This is not used to limit the number of CPUs used by YARN containers. If it is set to -1 and yarn.nodemanager.resource.detect-hardware-capabilities is true, it is automatically determined from the hardware in case of Windows and Linux. In other cases, number of vcores is 8 by default.</description> <name>yarn.nodemanager.resource.cpu-vcores</name> <value>2</value> </property> <!-- 容器最小内存 默认是1G--> <property> <description>The minimum allocation for every container request at the RM in MBs. Memory requests lower than this will be set to the value of this property. Additionally, a node manager that is configured to have less memory than this value will be shut down by the resource manager. </description> <name>yarn.scheduler.minimum-allocation-mb</name> <value>1024</value> </property> <!-- 容器最大内存 默认8G 修改为2G--> <property> <description>The maximum allocation for every container request at the RM in MBs. Memory requests higher than this will throw an InvalidResourceRequestException. </description> <name>yarn.scheduler.maximum-allocation-mb</name> <value>2048</value> </property> <!-- 容器最小CPU核数 默认是1个--> <property> <description>The minimum allocation for every container request at the RM in terms of virtual CPU cores. Requests lower than this will be set to the value of this property. Additionally, a node manager that is configured to have fewer virtual cores than this value will be shut down by the resource manager. </description> <name>yarn.scheduler.minimum-allocation-vcores</name> <value>1</value> </property> <!-- 容器最大CPU数 默认是4个,修改为2个--> <property> <description>The maximum allocation for every container request at the RM in terms of virtual CPU cores. Requests higher than this will throw an InvalidResourceRequestException.</description> <name>yarn.scheduler.maximum-allocation-vcores</name> <value>2</value> </property> <!-- 虚拟内存检查,默认打开,修改为关闭--> <property> <description>Whether virtual memory limits will be enforced for containers.</description> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> <!-- 虚拟内存和物理内存设置比例,默认2.1--> <property> <description>Ratio between virtual memory to physical memory when setting memory limits for containers. Container allocations are expressed in terms of physical memory, and virtual memory usage is allowed to exceed this allocation by this ratio. </description> <name>yarn.nodemanager.vmem-pmem-ratio</name> <value>2.1</value> </property>
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
hadoop102
hadoop103
hadoop104
[zy@hadoop102 ~]$ myrsync.sh /opt/module/hadoop-3.3.4/etc/hadoop/
因为搭建的时候,将namenode设置在了hadoop102上,因此格式化需要在hadoop102上进行。
注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。
// 格式化命令
[zy@hadoop102 hadoop-3.3.4]$ hdfs namenode -format
格式化完成之后就可以群起集群了。
//在namenode所在节点上启动hdfs
[zy@hadoop102 ~]$ start-dfs.sh
// 在resourcemanager所在的节点启动yarn
[zy@hadoop102 ~]$ start-yarn.sh
// 查看服务是否已经开启
[zy@hadoop102 ~]$ jps
在浏览器中键入网址hadoop102:9870
访问hdfs的namonode服务。
在浏览器中键入网址hadoop102:2181
访问hdfs的datanode服务。
在浏览器中键入网址hadoop103:8088
访问yarn服务。
为了查看程序的历史运行情况,需要配置一下历史服务器。
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
[zy@hadoop102 ~]$ myrsync.sh /opt/module/hadoop-3.3.4/etc/hadoop
//重启yarn服务并开启历史服务功能
[zy@hadoop102 ~]$ stop-yarn.sh
//单台节点启动历史服务功能即可
[zy@hadoop102 ~]$ mapred --daemon start historyserver
// 查看服务是否启动
[zy@hadoop102 ~]$ jps
在浏览器中键入网址hadoop102:19888
访问historyserver服务的JobHistory。
修改yarn-site.xml并添加下列信息:
<!-- 开启日志聚集功能 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 设置日志聚集服务器地址 --> <property> <name>yarn.log.server.url</name> <value>http://hadoop102:19888/jobhistory/logs</value> </property> <!-- 设置日志保留时间为7天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property>
[zy@hadoop102 ~]$ myrsync.sh /opt/module/hadoop-3.3.4/etc/hadoop
注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryServer。
// 关闭yarn服务
[zy@hadoop102 ~]$ stop-yarn.sh
// 关闭history服务
[zy@hadoop102 ~]$ mapred --daemon stop historyserver
// 开启yarn服务
[zy@hadoop102 ~]$ start-yarn.sh
// 开启history服务
[zy@hadoop102 ~]$ mapred --daemon start historyserver
[zy@hadoop102 ~]$ jps
最后通过web端的历史服务器上hadoop102:19888
的历史任务查看日志信息。
[zy@hadoop102 ~]$ jps
[zy@hadoop102 ~]$ stop-yarn.sh
[zy@hadoop102 ~]$ stop-dfs.sh
[zy@hadoop102 ~]$ mapred --daemon stop historyserver
[zy@hadoop102 ~]$ jps
由于每次启动服务都要来回切换节点并且一条一条命令键入,因此可以编写一个shell脚本一键启动和关闭
在/home/zy/bin目录下创建一个myhadoop.sh文件,并增加可执行权限,在文件中添加以下内容:
#!/bin/bash # 启动集群 if [ $# -lt 1 ] then echo "参数为空!!!" exit; fi case $1 in "start") echo "==========启动hadoop集群==========" echo "----------启动hdfs----------" ssh hadoop102 "/opt/module/hadoop-3.3.4/sbin/start-dfs.sh" echo " --------------- 启动 yarn ---------------" ssh hadoop103 "/opt/module/hadoop-3.3.4/sbin/start-yarn.sh" echo " --------------- 启动 historyserver ---------------" ssh hadoop102 "/opt/module/hadoop-3.3.4/bin/mapred --daemon start historyserver" ;; "stop") echo " ============== 关闭 hadoop集群 ================" echo " --------------- 关闭 historyserver ---------------" ssh hadoop102 "/opt/module/hadoop-3.3.4/bin/mapred --daemon stop historyserver" echo " --------------- 关闭 yarn ---------------" ssh hadoop103 "/opt/module/hadoop-3.3.4/sbin/stop-yarn.sh" echo " --------------- 关闭 hdfs ---------------" ssh hadoop102 "/opt/module/hadoop-3.3.4/sbin/stop-dfs.sh" ;; *) echo "输入参数有误..." ;; esac
每次想要查看节点上启动的服务进程时,都需要输入三次jps并切换节点查看,有点不大方便。
因此可以编写一个shell脚本统一输入并查看,提高效率。
在/home/zy/bin目录下创建一个空文件jpsall.sh,并输入下列内容:
#!/bin/bash
# 所有结点执行jps
for host in hadoop102 hadoop103 hadoop104
do
echo "==========$host=========="
ssh $host "jps | grep -v Jps"
done
使用脚本启动服务
[zy@hadoop102 ~]$ myhadoop.sh start
[zy@hadoop102 ~]$ jpsall.sh
到此位置,hadoop集群的中心模式已经搭建完毕,后期会搭建高可用模式,符合公司的实际业务。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。