配置 xsync 集群分发脚本

  • 在一台虚拟机上搭建环境后使用分发脚本就可以将相同的环境搭建到其他虚拟机器上

1. 脚本实现

  1. cd /usr/local/bin
  2. # 创建 xsync
  3. vim xsync
  4. #在 xsync 文件中编写如下代码
  5. #1 获取输入参数个数,如果没有参数,直接退出 pcount=$#
  6. if((pcount==0)); then
  7. echo no args;
  8. exit;
  9. fi
  10. #2 获取文件名称
  11. p1=$1 fname=`basename $p1` echo fname=$fname
  12. #3 获取上级目录到绝对路径
  13. pdir=`cd -P $(dirname $p1); pwd` echo pdir=$pdir
  14. #4 获取当前用户名称
  15. user=`whoami`
  16. #5 循环
  17. #10.0.0 + host + 端口号
  18. for((host=13; host<15; host++)); do
  19. echo ------------------- hadoop$host --------------
  20. rsync -rvl $pdir/$fname $user@10.0.0$host:$pdir
  21. done

Screen Shot 2021-01-15 at 14.57.36.png

配置集群

1. 集群部署规划

10.0.0.12 10.0.0.13 10.0.0.14
HDFS NameNode DataNode DataNode SecondaryNameNode DataNode
YARN NodeManager ResourceManager
NodeManager
NodeManager

2. 集群的配置

2.1 在 hadoop-node1 上配置核心配置文件 core-site.xml

  1. vim /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml
  2. # 配置以下文件
  3. <configuration>
  4. <!-- 指定 HDFS NameNode 的地址 -->
  5. <property>
  6. <name>fs.defaultFS</name>
  7. <value>hdfs://10.0.0.12:9000</value>
  8. </property>
  9. <!-- 指定 Hadoop 运行时产生文件的存储目录 -->
  10. <property>
  11. <name>hadoop.tmp.dir</name>
  12. <value>/opt/module/hadoop-2.7.2/data/tmp</value>
  13. </property>
  14. </configuration>

2.2 配置 hadoop-node1 上的 hadoop-env.sh 文件(HDFS 配置)

  1. cd /opt/module/hadoop-2.7.2/etc/hadoop
  2. vim hadoop-env.sh
  3. # 修改如下内容
  4. # 路径设置为jdk的路径
  5. export JAVA_HOME=/opt/module/jdk1.8.0_271/

2.3 配置 hadoop-node1 上的 hdfs-site.xml 文件 (HDFS 配置)

  1. cd /opt/module/hadoop-2.7.2/etc/hadoop
  2. vim hdfs-site.xml
  3. #在文件中修改如下内容
  4. <configuration>
  5. <property>
  6. <name>dfs.replication</name>
  7. <value>3</value>
  8. </property>
  9. <!-- 指定 Hadoop 辅助名称节点主机配置 -->
  10. <property>
  11. <name>dfs.namenode.secondary.http-address</name>
  12. <value>10.0.0.14:50090</value>
  13. </property>
  14. </configuration>

2.4 配置 yarn-env.sh (YARN 配置)

  1. cd /opt/module/hadoop-2.7.2/etc/hadoop
  2. vim yarn-site.xml
  3. #增加如下内容
  4. <configuration>
  5. <!-- Reducer 获取数据的方式 -->
  6. <property>
  7. <name>yarn.nodemanager.aux-services</name>
  8. <value>mapreduce_shuffle</value>
  9. </property>
  10. <!-- 指定 YARN ResourceManager 的地址 -->
  11. <property>
  12. <name>yarn.resourcemanager.hostname</name>
  13. <value>10.0.0.13</value>
  14. </property>
  15. </configuration>

2.5 配置 mapred-env.sh (MR 配置)

  1. cd /opt/module/hadoop-2.7.2/etc/hadoop
  2. vim mapred-env.sh
  3. # 配置jdk路径
  4. export JAVA_HOME=/opt/module/jdk1.8.0_271/

2.6 配置 mapred-site.xml (MR 配置)

  1. cd /opt/module/hadoop-2.7.2/etc/hadoop
  2. cp mapred-site.xml.template mapred-site.xml
  3. vim mapred-site.xml
  4. # 修改如下内容
  5. <configuration>
  6. <!-- 指定 MR 运行在 Yarn -->
  7. <property>
  8. <name>mapreduce.framework.name</name>
  9. <value>yarn</value>
  10. </property>
  11. </configuration>

2.6 在集群上分发配置好的 hadoop 配置文件

  1. xsync /opt/module/hadoop-2.7.2/


配置 SSH 无密登录

  • 基本语法:ssh 另一台电脑的 ip 地址


1. 进入home目录下的 .ssh 目录

  1. cd ~
  2. cd .ssh

2. 生成公钥和私钥

  1. ssh-keygen -t rsa
  2. # 敲3次会车
  3. # 就会生成两个文件 id_rsa(私钥) 和 id_rsa.pub(公钥)

3. 将公钥拷贝到要免密登录的目标机器上

  1. ssh-copy-id 10.0.0.12
  2. ssh-copy-id 10.0.0.13
  3. ssh-copy-id 10.0.0.14
  • 还需要在 hadoop-node2 和 hadoop-node3 进行同样的操作


群起并测试集群

  • 单结点启动只适合集群较少的情况

1. 配置 slaves 文件

  1. cd /opt/module/hadoop-2.7.2/
  2. vim etc/hadoop/slaves
  3. # 配置需要启动的集群
  4. 10.0.0.12
  5. 10.0.0.13
  6. 10.0.0.14

2. 将该文件同步到其他集群节点

  1. cd /opt/module/hadoop-2.7.2/
  2. xsync etc/hadoop/slaves

3. 启动集群

3.1 如果是第一次启动需要格式化 NameNode

(注意格式化之前,一定要先停止上次 启动的所有 namenode 和 datanode 进程,然后再删除 data 和 log 数据)

  1. hadoop namenode -format

3.2 启动 HDFS

  1. # 在hadoop-node1上启动
  2. cd /opt/module/hadoop-2.7.2/
  3. start-dfs.sh

3.3 启动 Yarn

  1. # 在hadoop-node2上启动
  2. cd /opt/module/hadoop-2.7.2/
  3. start-yarn.sh

3.4 查看启动结果

hadoop-node1
Screen Shot 2021-01-15 at 15.31.17.png
hadoop-node2
Screen Shot 2021-01-15 at 15.31.36.png
hadoop-node3 Screen Shot 2021-01-15 at 15.31.49.png

集群基本测试

  • 启动服务后 (start-dfs.sh 和 start-yarn.sh)

1. 上传文件到服务器

  1. hdfs dfs -mkdir -p /usr/etime/input
  2. hdfs dfs -put wcount1.input /usr/etime/input
  3. # 由于我已经上传过一次所以文件以及存在

Screen Shot 2021-01-15 at 15.34.12.png

2. 在 chrome 上查看上传的文件

  1. ![Screen Shot 2021-01-15 at 15.35.26.png](https://cdn.nlark.com/yuque/0/2021/png/8430534/1610696130281-35f3265e-e58f-472b-bba2-c2ea38d48eac.png#align=left&display=inline&height=1040&margin=%5Bobject%20Object%5D&name=Screen%20Shot%202021-01-15%20at%2015.35.26.png&originHeight=1040&originWidth=2880&size=176571&status=done&style=none&width=2880) <br />