作者:codejiwei
日期:2020-05-01
克隆虚拟机(克隆-完全复制)
修改克隆虚拟机的静态ip(物理ip地址)和主机名等
vim /etc/udev/rules.d/70-persistent-net.rules删除,修改为0,复制物理ip地址vim /etc/sysconfig/network-scripts/ifcfg-eth0 修改HWADDR=复制的物理ip地址;前提(ONBOOT=yes NM=CONTROLLED=yes BOOTROTO=static);修改IPADDR,修改GATEWAY=网关ip,DNS1=网关ip vim /etc/sysconfig/network 修改主机名 vim /etc/hosts 配置hosts节点,所有的节点ip+hostname关闭防火墙!!!(不然访问页面端口时会无法连接)
chkconfig iptables off 关闭防火墙
service iptables stop 关闭防火墙服务
查看防火墙自启情况:chkconfig iptables --list
查看防火墙服务 service iptables status
创建atguigu用户
useradd atguigu 创建用户passwd atguigu 创建密码配置atguigu具有root权限
vim /etc/sudoers 给用户root权限,以后用到root权限时使用sudo即可获得和root一样的权限 atguigu ALL=(ALL) ALL 如果有必要其实也可以将atguigu放到root组内,一般不 usermod -g root atguigu在/opt目录创建文件夹(以后的安装应用放在内)
sudo mkdir software 注意的是opt文件夹的操作权限是root!sudo mkdir module修改这两个文件夹的所有者为atguigusudo chown atguigu /software /module如果有jdk需要先卸载
查看Java软件安装情况: rpm -ga | java 如果jdk版本低于1.7,卸载 sudo rpm -e 软件包 查看jdk安装路径 which java导入JDK到/opt/software
可以使用Secure CRT 按alt+p,然后定位cd /opt/software然后拖拽要传输的.tar.gz文件也可以使用FileZilla或者xftp软件传输文件解压JDK
tar -zxf jdk-8…tar.gz -C /opt/module 解压到此目录,安装完成
配置java环境变量
vim /etc/profile
加入:export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH= P A T H : PATH: PATH:JAVA_HOME/bin
使环境变量生效:source /etc/profile
验证Java安装是否成功
java -version安装完成后就是本地模式
在Hadoop安装目录下创建wcinput文件夹
mkdir wcinput在此文件夹内创建一个wc.input文件
cd wcinput
touch wc.input
vim wc.input
加入内容:
hadoop yarn hadoop mapreduce atguigu atguigu回到/opt/module/hadoop-2.7.2,执行程序
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput查看结果
cat wcoutput/part-r-00000atguigu 2
hadoop 2
mapreduce 1
yarn 1
配置集群
配置hadoop-env.sh
修改JDK路径(注意所有的env.sh文件都是修改JAVA_HOME变量)export JAVA_HOME=/opt/module/jdk1.8.0_144配置core-site.xml
一个是HDFS的namenode地址:hdfs://hadoop101:9000一个是Hadoop运行时产生文件的存储目录:/opt/module/hadoop-2.7.2/data/tmp <!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop101:9000</value> </property> <!-- 指定Hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-2.7.2/data/tmp</value> </property>配置hdfs-site.xml
指定HDFS副本数量,默认是3个,会分布到不同的datanode节点上 <!-- 指定HDFS副本的数量 --> <property> <name>dfs.replication</name> <value>1</value> </property>启动集群
第一次启动需要格式化namenode bin/hdfs namenode -format 单个启动namenode守护进程 sbin/hadoop-daemon.sh start namenode 单个启动datanode sbin/hadoop-daemon.sh start datanode 查看集群 jps在web端查看HDFS文件系统
地址:192.168.255.101:50070或者是:hadoop101:50070端口号是:50070需要注意的是如果无法访问50070端口的原因: 可能是防火墙没有关闭chkconfig iptables offservice iptables stop查看产生的log日志
/opt/module/hadoop-2.7.2/logs
操作集群
在HDFS上创建一个input文件 hdfs dfs -mkdir -p /user/atguigu/input 将测试文件上传到HDFS文件系统 hdfs dfs -put /opt/module/hadoop-2.7.2/wcinput/wcinput /user/atguigu/input 查看上传文件是否正确 hdfs dfs -cat /user/atguigu/input/input 运行mapreduce程序 bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/atguigu/input/input /user/atguigu/output 查看输出结果 命令行查看hdfs dfs -cat /user/atguigu/output/*浏览器查看 可以将测试文件内容下载到本地 命令行下载hdfs dfs -get /user/atguigu/output/part-r-00000 ./wcoutput浏览器下载注意!!!此时无法下载的原因可能是本地的window主机并没有配置hosts在C:\Windows\System32\drivers\etc\hosts内添加 各节点的ip+hostname需要注意的是!下次再运行时需要删除output文件!!!
为什么不能多次格式化namenode也就是hdfs namenode -format
因为初次格式化会为namenode和datanode创建一样的clusterID,可以相互通信。
如果多次格式化或者不关掉namenode和datanode就格式化会导致clusterID不一致,集群找不到已往数据。
如果需要再次格式化namenode需要提前删除data数据和log日志。
配置集群的yarn
配置yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144配置yarn-site.xml
<!-- Reducer获取数据的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定YARN的ResourceManager的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop101</value> </property>配置mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144配置mapred.site.sh(将mapred-site.xml.template重命名)
<!-- 指定MR运行在YARN上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>启动集群
启动前namenode和datanode需已启动单个启动resourcemanager sbin/yarn-daemon.sh start resourcemanager 单个启动nodemanager sbin/yarn-daemon.sh start nodemanager集群操作
yarn的浏览器页面查看 192.168.255.101:8088或者hadoop101:8088 删除HDFS上的output文件执行mapreduce程序,wordcount程序为了查看程序的历史运行情况,需要配置历史服务器。
配置mapred-site.xml
<!-- 历史服务器端地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop101:10020</value> </property> <!-- 历史服务器web端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop101:19888</value> </property>启动历史服务器
sbin/mr-jobhistory-daemon.sh start historyserver
在web端查看
192.168.255.101:19888/jobhistory
配置日志和job历史都在yarn的192.168.255.101:8088上可以看到
开启日志聚集功能需要冲洗启动nodemanager、resourcemanager和historyserver配置yarn-site.xml
在里面添加
<!-- 日志聚集功能使能 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 日志保留时间设置7天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property>关闭nodemanager、sourcemanager和historyserver
yarn-daemon.sh -stop resourcemanager yarn-daemon.sh -stop nodemanager yarn-jobhistory-daemon.sh -stop historyserver启动nodemanager、sourcemanager和historyserver
yarn-daemon.sh -start resourcemanager yarn-daemon.sh -start nodemanager mr-jobhistory-daemon.sh -start historyserver删除HDFS上已经存在的output文件
hdfs dfs -rm -r /user/atguigu/output执行wordcount程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/atguigu/input /user/atguigu/output在web页面可以查看job执行进程、history处可以查看历史,进入后的log处可以查看日志信息
当配置好了ssh无密登录之后就可以在单个节点上群起集群了!集群的部署规划如下表:
hadoop102hadoop103hadoop104HDFSNameNode DataNodeDataNodeSecondaryNameNode DataNodeYARNNodeManagerResourceManager NodeManagerNodeManager为了合理分配计算机资源,所以将namenode放在hadoop102节点上,将resourcemanager放在hadoop103节点上,secondarynamenode放在hadoop104节点上。
配置core-site.xml
修改之前配置的hdfsnamenode的节点 <!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop102:9000</value> </property> <!-- 指定Hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-2.7.2/data/tmp</value> </property>配置hadoop-env.sh
修改JAVA_HOME
配置hdfs-site.xml
修改hdfs的副本数为3,添加secondary节点位置。 <property> <name>dfs.replication</name> <value>3</value> </property> <!-- 指定Hadoop辅助名称节点主机配置 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop104:50090</value> </property>配置yarn-env.sh
修改JAVA_HOME
配置yarn-site.xml
reducer获取数据方式为shuffle,修改resourcemanager为hadoop103 <!-- Reducer获取数据的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定YARN的ResourceManager的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop103</value> </property>配置mapred-env.sh
修改JAVA_HOME
配置mapred-site.xml
<!-- 指定MR运行在Yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>在一个节点上配置好文件之后,就可以使用xsync分配脚本,分发配置文件
xsync /opt/module/hadoop-2.7.2/
cat /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml
企业中不会先配置伪分布式,会直接按照上述配置分布式系统!
集群的单节点启动,如果首次启动也是需要格式化namenode。
单节点启动:hadoop-daemon.sh start namenode
hadoop-daemon.sh start datenode(各个节点上都需要启动)
yarn-daemon.sh start resourcemanager(在hadoop103上启动)
yarn-daemon.sh start nodemanager(在各个节点上都需要启动)
上述的单节点启动方式太麻烦了!!!
集群的群起
群起之前还需要配置/opt/module/hadoop…/etc/hadoop/slaves文件
在namenode节点(hadoop102上):start-dfs.sh 开启namenode和所有的datanode和secondarynode
在resourcemanager节点(hadoop103上):start-yarn.sh 开启resourcemanager和所有的nodemanager
如果配置好了历史服务器和日志聚集也可以启动单节点启动 mr-jobhistory-daemon.sh -start historyserver
时间同步会在集群中找一台服务器作为时间服务器,其他的节点都会跟他进行时间同步。比如每十分钟同步一次时间。
时间同步原理:
时间服务器配置(必须root用户)
检查ntp是否安装
rpm -qa |grep ntp # 如果没有安装可以使用rpm -i ntp去安装 # 也可以使用yum install ntp去安装修改ntp配置文件
vim /etc/ntp.conf # 在里面修改: 1. restrict 192.168.255.0 mask 255.255.255.0 nomodify notrap # 此网段的所有机器都能从这台机器上查询和同步时间 2.修改。集群在局域网中,不适用其他互联网上的时间。 server 0.centos.pool.ntp.org iburst server 1.centos.pool.ntp.org iburst server 2.centos.pool.ntp.org iburst server 3.centos.pool.ntp.org iburst为 #server 0.centos.pool.ntp.org iburst #server 1.centos.pool.ntp.org iburst #server 2.centos.pool.ntp.org iburst #server 3.centos.pool.ntp.org iburst 3.添加(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步) server 127.127.1.0 fudge 127.127.1.0 stratum 10修改/etc/sysconfig/ntpd文件
增加内容如下(让硬件时间与系统时间一起同步) SYNC_HWCLOCK=yes重启ntpd服务
service ntpd status # 查看ntpd服务 chkconfig ntpd --list # 查看ntpd服务开启启动情况 # 开启ntpd服务 service ntpd start # 开启自启ntpd服务 chkconfig ntpd on其他机器配置(必须root用户)
其他机器每十分钟同步一次时间
crontab -e # 创建定时任务 # 输入定时任务 */10 * * * * /usr/sbin/ntpdate hadoop102 每十分钟 与hadoop102进行同步时间。修改时间和查看时间
# 修改时间 date -s “2018-11-11 11:11:11” # -s修改时间 # 查看时间 date当配置好了一台服务器之后,没有必要也没有精力去配置其他机器,完全可以使用一些Linux操作比如scp,rsync,和集群分发脚本xsync去便捷配置环境。
突然想起,关机时按下的sync将数据保存到磁盘。
rsync 主要用于备份和镜像,速度快,只对差异文件做更新。scp是全部拷贝过去。rsync 语法: rsync -rvl 文件路径 目的用户@目的hostname:目的路径-r 递归拷贝-v 显示拷贝过程-l 拷贝符号连接 实例1: rsync -rvl /opt/software root@hadoop102:/opt/software思考:如果有1000个节点,上面的复制拷贝也是很麻烦。
xsync +要同步的文件名称
脚本的实现步骤:
在/home/atguigu目录下创建bin目录,并在bin目录下创建xsync文件
在文件中编写如下代码:
#!/bin/bash #1 获取输入参数个数,如果没有参数直接退出 pcount=$# if ((pcount==0));then echo no args; exit; fi #2 获取文件名称 p1=$1 fname=basename $p1 echo fname=$fname #3 获取上级目录到绝对路径 pdir='cd -p $(dirname $p1); pwd' echo pdir-$pdir #4 获取当前用户名称 user=`whoami` #5 循环 for((host=103; host<105; host++)); do echo ------------------- hadoop$host -------------- rsync -rvl $pdir/$fname $user@hadoop$host:$pdir done修改脚本文件权限
chmod 777 xsync
调用脚本形式:xsync 文件名称
xsync /home/atguigu/bin
如果xsync放到/home/atguigu/bin目录下仍然不能实现全局使用,就放在/usr/local/bin目录下。
设置好ssh无密登录就可以群起集群。
ssh基本语法:ssh 另一台电脑的ip
无密登录原理
服务器的公钥和私钥都放在~/.ssh文件下
生成公钥和私钥
ssh-keygen -t rsa
此时看到.ssh文件下面多了两个文件id_rsa(私钥);id_rsa.pub(公钥)
将公钥拷贝到要免密登录的机器上
ssh-copy-id hadoop102
ssh-copy-id hadoop103
也需要将公钥拷贝到本机!
上面是将hadoop102下的atguigu用户的公钥分发给各个节点,还需要将root用户的分发给各个节点;还需要将hadoop103atguigu的公钥分发给各个
known_hosts记录ssh访问过计算机的公钥(public key)id_rsa生成的私钥id_rsa.pub生成的公钥authorized_keys存放授权过得无密登录服务器公钥按照组件去分:
Hadoop:(★)
hadoop-env.shcore-site.xml fs.defaultFS namonode节点地址hadoop.tmp.dir hadoop运行时的产生的临时文件存储目录HDFS(★)
hdfs-site.xml
dfs.replication HDFS的副本数,默认为3dfs.namenode.secondary.http-address辅助名称节点主机配置YARN(★)
yarn-env.shyarn-site.xml yarn.nodemanager获取数据方式yarn.resourcemanager地址MapReduce(★)
mapred-env.shmapred-site.xml mapreduce.framework.name指定MR运行在YARN上历史服务器
mapred-site.xml mapreduce.jobhistory.address历史服务器地址mapreduce.jobhistory.webapp.address历史服务器web端地址日志聚集
yarn-site.xml yarn.log-aggregation-enable日志聚集功能开启yarn.log-aggregation.retain-seconds日志保留时间设置为7天注意只要是***-env.sh都是修改JAVA_HOME