配置第一台虚拟机 hdp01

  1. 新建文件夹 vmOS, 专门用于存放虚拟机, 新建一个子文件夹 hdp02
  2. 在vmware中安装 CentOS 6.9
    1. https://blog.csdn.net/qq_33187206/article/details/80923967
    2. https://vault.centos.org/6.9/isos/x86_64/CentOS-6.9-x86_64-minimal.iso
  3. 主机名 hdp01
  4. 账号密码: root/hadoop

    配置集群的局域网

    让这个局域网和宿主机进行通信
  1. 普通局域网的交互方式

image.png

  1. 虚拟机集群的交互方式

image.png

  1. 配置过程

image.png

  1. 设置主机名

vi /etc/sysconfig/network
HOSTNAME=hdp01 这个名称要和主机名一致

  1. 设置VMWare产生的虚拟路由器(设置好网关的ip)
    1. 注意, 网关的字段要和宿主机上网ip的字段一致
    2. 如果是使用的dhcp, 则设置一个静态的ip给这台机器
    3. 在这里我的是192.168.1.1

image.png

  1. 设置宿主机的vmnet8网卡, 其网关为上面设置的那个, ip的字段一定要和网关的前三段一致

image.png

  1. 进入虚拟机, 设置网络属性

centos6:vi /etc/sysconfig/network-scripts/ifcfg-eth0
centos7:vi /etc/sysconfig/network-scripts/ifcfg-ens33
进行编辑
取消mac地址和uuid, 以便后来的虚拟机
设置自启动 ONBOOT=yes
设置启动自动更新配置, bootproto为静态 BOOTPROTO=static
设置

  • 网卡:DEVICE=eth0 / DEVICE=ens33
  • ip地址:网段要和网关的一致,且不能占用了已设置的:IPADDR``=192.168.1.10,
  • 网关 GATEWAY=192.168.1.2,
  • 子网掩码 NETMASK=255.255.255.0,
  • 域名解析服务器DNS1=114.114.114.114, DNS2=114.114.115.115

image.png

  1. 启动 eth0 网卡, 重启网络服务

centos6
ifconfig eth0 up
service network restart
centos7
ifconfig ens33 up
systemctl restart network

  1. 关闭防火墙服务

image.png

  1. 安装ssh工具

yum -y install openssh-clients
重启一下reboot

  1. 设置好域名映射 通过hosts文件

vim /etc/hosts
image.png

  1. 设置win系统的hosts,之后就可以通过自己的ssh工具, 连接上系统

    更换镜像源

  2. 对于 centos6.x 除了原生的 http://vault.centos.org, 国内只有 http://mirrors.sohu.com/centos/6 内有源, 其它镜像源或者soho的 /6.x 内都没有

  3. 操作步骤
    1. 备份原镜像文件,以免出错后可以恢复
    2. 新建新的CentOS-Base.repo 到/etc/yum.repos.d/
      1. 将 $releasever 替换成指定的6, 不然会自动替换成6.9 ```sql

        CentOS-Base.repo

        #

        The mirror system uses the connecting IP address of the client and the

        update status of each mirror to pick mirrors that are updated to and

        geographically close to the client. You should use this for CentOS updates

        unless you are manually picking other mirrors.

        #

        If the mirrorlist= does not work for you, as a fall back you can try the

        remarked out baseurl= line instead.

        # #

[base] name=CentOS-6.9 - Base - 163.com baseurl=http://mirrors.sohu.com/centos/6/os/$basearch/

mirrorlist=http://mirrorlist.centos.org/?release=6.9&arch=$basearch&repo=os

gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

released updates

[updates] name=CentOS-6.9 - Updates - 163.com baseurl=http://mirrors.sohu.com/centos/6/updates/$basearch/

mirrorlist=http://mirrorlist.centos.org/?release=6.9&arch=$basearch&repo=updates

gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

additional packages that may be useful

[extras] name=CentOS-6.9 - Extras - 163.com baseurl=http://mirrors.sohu.com/centos/6/extras/$basearch/

mirrorlist=http://mirrorlist.centos.org/?release=6.9&arch=$basearch&repo=extras

gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

additional packages that extend functionality of existing packages

[centosplus] name=CentOS-6.9 - Plus - 163.com baseurl=http://mirrors.sohu.com/centos/6/centosplus/$basearch/

mirrorlist=http://mirrorlist.centos.org/?release=6.9&arch=$basearch&repo=centosplus

gpgcheck=1 enabled=0 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

contrib - packages by Centos Users

[contrib] name=CentOS-6.9 - Contrib - 163.com baseurl=http://mirrors.sohu.com/centos/6/contrib/$basearch/

mirrorlist=http://mirrorlist.centos.org/?release=6.9&arch=$basearch&repo=contrib

gpgcheck=1 enabled=0 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

  1. 1. 运行 `yum makecache` 生成缓存
  2. 10. 安装 vim
  3. 10. 使用 xftp 实现虚拟机和宿主机通文件
  4. <a name="DMrBF"></a>
  5. ## 安装JDK
  6. 1. 下载
  7. 1. [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)
  8. 1. jdk-8u***-**linux-x64.tar.gz**
  9. 1. 账号密码 **2696671285@qq.com/Oracle123**
  10. 2. 安装(解压)
  11. 1. 将安装jar包放到/opt/soft
  12. 1. 解包并解压缩到/usr/local
  13. `tar -zxvf jdk-8u271-linux-x64.tar.gz -C /usr/local`
  14. 1. 修改一个短一点的名字
  15. `mv jdk1.8.0_271/ jdk1.8`
  16. 3. 配置环境变量
  17. 1. 进入到系统的配置文件
  18. `vim /etc/profile`
  19. 1. 在最后添加
  20. - JAVA_HOME 环境变量
  21. - PATH环境变量中添加上 JAVA_HOME/bin 路径
  22. - 最后输出配置的 PATH JAVA_HOME
  23. ![image.png](https://cdn.nlark.com/yuque/0/2020/png/1774803/1607482084921-a774ae0d-42a3-451c-b0a0-a1a982b392c8.png#height=96&id=XsGtr&margin=%5Bobject%20Object%5D&name=image.png&originHeight=104&originWidth=366&originalType=binary&ratio=1&size=7113&status=done&style=none&width=339)
  24. 1. 注意, 一定要把原来的 PATH 添加上, 冒号为分隔符
  25. 1. 重新加载环境变量配置文件
  26. `source /etc/profile`
  27. 4. 测试
  28. `java -version`
  29. <a name="OE00g"></a>
  30. ## 安装hadoop 2.7.2
  31. 1. 下载
  32. 1. [https://archive.apache.org/dist/hadoop/common/hadoop-2.7.2/](https://archive.apache.org/dist/hadoop/common/hadoop-2.7.2/)
  33. 2. 安装(解压)
  34. 1. 将安装jar包放到/opt/soft
  35. 1. 解包并解压缩到/usr/local
  36. `tar -zxvf hadoop-2.7.2.tar.gz -C /usr/local/`
  37. 3. 配置
  38. 1. 进入到系统的配置文件
  39. `vim /etc/profile`
  40. 1. 在最后添加
  41. - HADOOP_HOME 环境变量
  42. - PATH环境变量中添加上 HADOOP_HOME/bin HADOOP_HOME/sbin 路径
  43. - 最后输出配置的 PATH HADOOP_HOME
  44. ![image.png](https://cdn.nlark.com/yuque/0/2020/png/1774803/1607482997037-81513f76-9962-4e3b-8937-05af7dea22dd.png#height=107&id=eusll&margin=%5Bobject%20Object%5D&name=image.png&originHeight=116&originWidth=555&originalType=binary&ratio=1&size=11306&status=done&style=none&width=511)
  45. 1. 注意, 一定要把原来的 PATH 添加上, 冒号为分隔符
  46. 1. 重新加载环境变量配置文件
  47. `source /etc/profile`
  48. 4. 测试
  49. `hadoop version`
  50. <a name="H99Dx"></a>
  51. # 克隆其它虚拟机
  52. 删除安装文件, 克隆出另外两个系统
  53. 1. 修改 `vim /etc/sysconfig/network` 中的 HOSTNAME, 分别为 hdp02, hdp03
  54. 1. `vim /etc/sysconfig/network-scripts/ifcfg-eth0` 修改ip地址, 顺延为 11, 12
  55. 1. 因为克隆出来的, 所以网卡还是以前那一个, mac地址不对, 因此需要删除掉旧的网卡
  56. `r``m -rf /etc/udev/rules.d/70-persistent-net.rules`
  57. 4. 关机, 修改网卡的mac地址
  58. ![image.png](https://cdn.nlark.com/yuque/0/2020/png/1774803/1607484129475-00af210e-e7c5-494a-ae63-1a79df75e273.png#height=309&id=CiaMQ&margin=%5Bobject%20Object%5D&name=image.png&originHeight=618&originWidth=767&originalType=binary&ratio=1&size=119788&status=done&style=none&width=383.5)
  59. 5. 启动, 更新网络服务
  60. `service network restart`
  61. <a name="bW7Gb"></a>
  62. # 免密登录
  63. 做各个机器之间的ssh免密登录, namenode 应该可以免密发送文件给自己 datanode
  64. 1. namenode生成密钥
  65. 1. `ssh-keygen -t rsa` 之后一直按enter
  66. 2. namenode, 为设置 namenode 登录某个机器设置免密
  67. `ssh-copy-id ``映射的域名`<br />如: `ssh-copy-id hdp02`
  68. 3. 之后就可以直接在 namenode 通过 ssh root@hdp02 免密登录这个 datanode
  69. <a name="Fr5sc"></a>
  70. # 集群配置
  71. 为所有的机器保存一个快照
  72. <a name="Vhcbh"></a>
  73. ## 伪分布式运行模式(namenode和datanode在同一台机器hdp01)
  74. <a name="ypH6d"></a>
  75. ### 配置集群
  76. 1. 配置:hadoop-env.sh
  77. 必须在hadoop-env.sh文件中设置Java的绝对路径<br />Linux系统中获取JDK的安装路径:`echo $JAVA_HOME`<br />`/usr/local/jdk1.8`<br />修改JAVA_HOME 路径<br />`export JAVA_HOME=/usr/local/jdk1.8`
  78. 2. 配置:core-site.xml
  79. ```xml
  80. <!-- 指定HDFS中NameNode的地址 -->
  81. <property>
  82. <name>fs.defaultFS</name>
  83. <value>hdfs://hadoop101:9000</value>
  84. </property>
  85. <!-- 指定Hadoop运行时产生文件的存储目录 -->
  86. <property>
  87. <name>hadoop.tmp.dir</name>
  88. <value>/opt/module/hadoop-2.7.2/data/tmp</value>
  89. </property>
  1. 配置:hdfs-site.xml

    1. <!-- 指定HDFS副本的数量 -->
    2. <property>
    3. <name>dfs.replication</name>
    4. <value>1</value>
    5. </property>

    启动集群

  2. hdp01 格式化NameNode(第一次启动时格式化,以后就不要总格式化)

bin/hdfs namenode -format

  1. hdp01 启动NameNode

sbin/hadoop-daemon.sh start namenode

  1. hdp01 启动DataNode

sbin/hadoop-daemon.sh start datanode

查看集群

  1. 通过进程, 查看是否启动成功

    1. jps
    2. 13586 NameNode
    3. 13668 DataNode
    4. 13786 Jps
  2. web端查看HDFS文件系统

http://hdp01:50070/dfshealth.html#tab-overview
注意:如果不能查看,看如下帖子处理
http://www.cnblogs.com/zlslch/p/6604189.html

  1. 查看产生的Log日志

当前目录:${HADOOP_HOME}/logs

  1. total 60
  2. -rw-r--r--. 1 root root 23837 Dec 9 22:28 hadoop-root-datanode-hdp01.log
  3. -rw-r--r--. 1 root root 715 Dec 9 22:28 hadoop-root-datanode-hdp01.out
  4. -rw-r--r--. 1 root root 27555 Dec 9 22:28 hadoop-root-namenode-hdp01.log
  5. -rw-r--r--. 1 root root 715 Dec 9 22:28 hadoop-root-namenode-hdp01.out
  6. -rw-r--r--. 1 root root 0 Dec 9 22:28 SecurityAuth-root.audit
  1. 思考:为什么不能一直格式化 NameNode,格式化 NameNode,要注意什么?

cd data/tmp/dfs/name/current/
cat VERSION
clusterID=CID-f0330a58-36fa-4a2a-a65f-2688269b5837
cd data/tmp/dfs/data/current/
clusterID=CID-f0330a58-36fa-4a2a-a65f-2688269b5837
注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。
所以,格式NameNode时,一定要先删除data数据和log日志,然后再格式化NameNode

操作集群

  1. 在HDFS文件系统上创建一个input文件夹

bin/hdfs dfs -mkdir -p /user/haniel/input

  1. 将测试文件内容上传到文件系统上

在 ${HADOOP_HOME}/ 下新建一个文件夹 wcinput, 在 wcinput 文件夹下新增一个文件 wc.input

  1. hadoop yarn
  2. hadoop mapreduce
  3. haniel
  4. haniel

将文件上传到HDFS
bin/hdfs dfs -put wcinput/wc.input /user/haniel/input/

  1. 查看上传的文件是否正确

查看目录: hdfs dfs -ls /user/haniel/input/
查看内容: hdfs dfs -cat /user/haniel/input/wc.input

  1. 运行MapReduce程序

hadoop jar /usr/local/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/haniel/input/ /user/haniel/output

  1. 查看输出结果

命令行查看:hdfs dfs -cat /user/haniel/output/part-r-00000
浏览器查看:
image.png

  1. 将测试文件内容下载到本地

hdfs dfs -get /user/haniel/output/part-r-00000 ./wcoutput/

  1. 删除输出结果

hdfs dfs -rm -r /user/haniel/output

启动YARN并运行MapReduce程序(依旧单节点)

配置集群

  1. 配置 yarn-env.sh

写死 JAVA_HOME
export JAVA_HOME=/usr/local/jdk1.8

  1. 配置 yarn-site.xml

    1. <!-- Reducer获取数据的方式 -->
    2. <property>
    3. <name>yarn.nodemanager.aux-services</name>
    4. <value>mapreduce_shuffle</value>
    5. </property>
    6. <!-- 指定YARN的ResourceManager的地址 -->
    7. <property>
    8. <name>yarn.resourcemanager.hostname</name>
    9. <value>hdp01</value>
    10. </property>
  2. 配置:mapred-env.sh

写死 JAVA_HOME
export JAVA_HOME=/usr/local/jdk1.8

  1. 配置: (对mapred-site.xml.template重新命名为) mapred-site.xml

mv mapred-site.xml.template mapred-site.xml
vim mapred-site.xml

  1. <!-- 指定MR运行在YARN上 -->
  2. <property>
  3. <name>mapreduce.framework.name</name>
  4. <value>yarn</value>
  5. </property>

启动集群

  1. 启动前必须保证NameNode和DataNode已经启动
  2. 启动ResourceManager

hdp01: sbin/yarn-daemon.sh start resourcemanager

  1. 启动NodeManager

hdp01: sbin/yarn-daemon.sh start nodemanager

集群操作

  1. YARN的浏览器页面查看

http://hdp01:8088/cluster
image.png

  1. 删除文件系统上的output文件

hdp01: bin/hdfs dfs -rm -R /user/``haniel``/output

  1. 执行MapReduce程序

hdp01: bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/haniel/input /user/``haniel``/output

  1. 查看运行结果,如图2-36所示

hdp01: bin/hdfs dfs -cat /user/haniel/output/*
image.png

配置历史服务器

为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下

  1. 配置 mapred-site.xml

    1. <!-- 历史服务器端地址 -->
    2. <property>
    3. <name>mapreduce.jobhistory.address</name>
    4. <value>hdp01:10020</value>
    5. </property>
    6. <!-- 历史服务器web端地址 -->
    7. <property>
    8. <name>mapreduce.jobhistory.webapp.address</name>
    9. <value>hdp01:19888</value>
    10. </property>
  2. 启动历史服务器

hdp01: sbin/mr-jobhistory-daemon.sh start historyserver

  1. 查看历史服务器是否启动

jps

  1. 查看JobHistory

http://hdp01:19888/jobhistory
image.png

配置日志的聚集

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager 和 HistoryManager
开启日志聚集功能具体步骤如下:

  1. 配置 yarn-site.xml

在该文件里面增加如下配置。

  1. <!-- 日志聚集功能使能 -->
  2. <property>
  3. <name>yarn.log-aggregation-enable</name>
  4. <value>true</value>
  5. </property>
  6. <!-- 日志保留时间设置7天 -->
  7. <property>
  8. <name>yarn.log-aggregation.retain-seconds</name>
  9. <value>604800</value>
  10. </property>
  1. 闭NodeManager 、ResourceManager 和 HistoryManager

sbin/yarn-daemon.sh stop resourcemanager
sbin/yarn-daemon.sh stop nodemanager
sbin/mr-jobhistory-daemon.sh stop historyserver

  1. 启动NodeManager 、ResourceManager和HistoryManager

sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
sbin/mr-jobhistory-daemon.sh start historyserver

  1. 删除HDFS上已经存在的输出文件

bin/hdfs dfs -rm -R /user/haniel/output

  1. 执行WordCount程序

hadoop jar /usr/local/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/haniel/input /user/``haniel``/output

  1. 查看日志

http://hdp01:19888/jobhistory

配置文件说明

Hadoop配置文件分两类:默认配置文件自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。

  1. 默认配置文件 | 要获取的默认文件 | 文件存放在Hadoop的jar包中的位置 | | —- | —- | | [core-default.xml] | hadoop-common-2.7.2.jar/ core-default.xml | | [hdfs-default.xml] | hadoop-hdfs-2.7.2.jar/ hdfs-default.xml | | [yarn-default.xml] | hadoop-yarn-common-2.7.2.jar/ yarn-default.xml | | [mapred-default.xml] | hadoop-mapreduce-client-core-2.7.2.jar/ mapred-default.xml |

  2. 自定义配置文件

    • core-site.xml
    • hdfs-site.xml
    • yarn-site.xml
    • mapred-site.xml

四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置

完全分布式运行模式(开发重点)

分析

  1. 准备3台客户机(关闭防火墙、静态ip、主机名称)
  2. 安装JDK
  3. 配置环境变量
  4. 安装Hadoop
  5. 配置环境变量
  6. 配置集群
  7. 单点启动
  8. 配置ssh
  9. 群起并测试集群

    虚拟机准备

    编写集群分发脚本xsync

    scp(secure copy)安全拷贝

  10. scp定义

    • scp 可以实现服务器与服务器之间的数据拷贝
    • 既不同机器之间的文件复制粘贴
  11. 基本语法

    1. scp -r $pdir/$fname $user@hadoop$host:$pdir/$fname
    2. 命令 递归 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
  12. 案例实操

    • hdp01 上,将 hdp01 中 /opt/module 目录下的软件拷贝到 hdp02 上。

      1. sudo scp -r /opt/module root@hdp02:/opt/module
    • hdp03 上,将hadoop101服务器上的/opt/module目录下的软件拷贝到 hdp03 上

      1. sudo scp -r root@hdp01:/opt/module root@hdp03:/opt/module
    • hdp03 上操作将 hdp01 中 /opt/module 目录下的软件拷贝到 hdp04 上

      1. scp -r root@hdp01:/opt/module root@hdp04:/opt/module
      • 注意:拷贝过来的/opt/module目录,别忘了在 hadoop102、hadoop103、hadoop104 上修改所有文件的,所有者和所有者组
    • hdp01 中 /etc/profile 文件拷贝到 hdp02 的 /etc/profile 上

      1. sudo scp /etc/profile root@hdp02:/etc/profile
      • 注意:拷贝过来的配置文件别忘了source一下/etc/profile,。

        sync 远程同步工具

        rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
        rsync 和 scp 区别
  • 用rsync做文件的复制要比scp的速度快
  • rsync只对差异文件做更新
  • scp是把所有文件都复制过去。

基本语法

  1. rsync -rvl $pdir/$fname $user@hadoop$host:$pdir/$fname
  2. 命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称

选项参数说明

选项 功能
-r 递归
-v 显示复制过程
-l 拷贝符号连接

案例实操

  • 把 hdp01 机器上的/opt/software目录同步到hdp02服务器的root用户下的/opt/目录
    1. rsync -rvl /opt/software/ root@hdp02:/opt/software

    xsync集群分发脚本

  1. 需求:循环复制文件到所有节点的相同目录下
  2. 需求分析:
    1. rsync 命令原始拷贝:

rsync -rvl /usr/local root@hdp02:/opt/

  1. 期望脚本

xsync 要同步的文件名称

  1. 说明:在/home/haniel/bin这个目录下存放的脚本,haniel 用户可以在系统任何地方直接执行。
    1. 脚本实现
  2. 在/home/atguigu目录下创建bin目录,并在bin目录下xsync创建文件,文件内容如下:

hdp01: mkdir bin
hdp01: cd bin/
hdp01: touch xsync
hdp01: vi xsync

  1. 在该文件中编写如下代码 ```bash

    !/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 in {‘02’,’03’}; do echo —————————- hdp$host ——————— rsync -rvl $pdir/$fname $user@hdp$host:$pdir done

  1. 1. 修改脚本 xsync 具有执行权限
  2. hdp01: `chmod 777 xsync`
  3. 1. 调用脚本形式:xsync 文件名称
  4. xsync /home/haniel/bin<br />注意:如果将xsync放到/home/haniel/bin目录下仍然不能实现全局使用,可以将xsync移动到/usr/local/bin目录下。
  5. <a name="ghMm9"></a>
  6. ### 集群配置
  7. 1. 集群部署规划
  8. | | hdp01 | hdp02 | hdp03 |
  9. | --- | --- | --- | --- |
  10. | HDFS<br /> | NameNode<br />DataNode | <br />DataNode | SecondaryNameNode<br />DataNode |
  11. | YARN | <br />NodeManager | ResourceManager<br />NodeManager | <br />NodeManager |
  12. 2. 配置集群
  13. 1. 核心配置文件
  14. 配置core-site.xml<br />hdp01: `vim core-site.xml`<br />在该文件中编写如下配置
  15. ```xml
  16. <!-- 指定HDFS中NameNode的地址 -->
  17. <property>
  18. <name>fs.defaultFS</name>
  19. <value>hdfs://hdp01:9000</value>
  20. </property>
  21. <!-- 指定Hadoop运行时产生文件的存储目录 -->
  22. <property>
  23. <name>hadoop.tmp.dir</name>
  24. <value>/usr/local/hadoop-2.7.2/data/tmp</value>
  25. </property>
  1. HDFS配置文件

配置 hadoop-env.sh
hdp01: vim hadoop-env.sh
export JAVA_HOME=/usr/local/jdk1.8
配置 hdfs-site.xml
hdp01: vim hdfs-site.xml
在该文件中编写如下配置

  1. <property>
  2. <name>dfs.replication</name>
  3. <value>3</value>
  4. </property>
  5. <!-- 指定Hadoop辅助名称节点主机配置 -->
  6. <property>
  7. <name>dfs.namenode.secondary.http-address</name>
  8. <value>hdp03:50090</value>
  9. </property>
  1. YARN配置文件
    1. 配置yarn-env.sh

hdp01: vim yarn-env.sh
export JAVA_HOME=/usr/local/jdk1.8

  1. 配置yarn-site.xml

hdp01: vim yarn-site.xml
在该文件中增加如下配置

  1. <!-- Reducer获取数据的方式 -->
  2. <property>
  3. <name>yarn.nodemanager.aux-services</name>
  4. <value>mapreduce_shuffle</value>
  5. </property>
  6. <!-- 指定YARN的ResourceManager的地址 -->
  7. <property>
  8. <name>yarn.resourcemanager.hostname</name>
  9. <value>hdp02</value>
  10. </property>
  1. MapReduce配置文件
    1. 配置mapred-env.sh

hdp01: vim mapred-env.sh
export JAVA_HOME=/usr/local/jdk1.8

  1. 配置 mapred-site.xml

hdp01: cp mapred-site.xml.template mapred-site.xml
hdp01: vi mapred-site.xml
在该文件中增加如下配

  1. <!-- 指定MR运行在Yarn上 -->
  2. <property>
  3. <name>mapreduce.framework.name</name>
  4. <value>yarn</value>
  5. </property>
  1. 在集群上分发配置好的Hadoop配置文件

hdp01: xsync /usr/local/hadoop-2.7.2/
4.查看文件分发情况
hdp02: cat /usr/local/hadoop-2.7.2/etc/hadoop/core-site.xml

集群单点启动

  1. 如果集群是第一次启动,需要格式化NameNode

hdp01: hadoop namenode -format

  1. 在 hdp01 上启动NameNode

hdp01: hadoop-daemon.sh start namenode
hdp01: jps
3461 NameNode

  1. 在hdp01、hdp02 以及 hdp03 上分别启动 DataNode

hdp01, hdp02, hdp03: hadoop-daemon.sh start datanode
jps

  1. 思考:每次都一个一个节点启动,如果节点数增加到1000个怎么办

    SSH无密登录配置

  2. 配置ssh

    1. 基本语法

ssh另一台电脑的ip地址

  1. ssh连接时出现Host key verification failed的解决方法

ssh 192.168.1.11
The authenticity of host ‘192.168.1.103 (192.168.1.103)’ can’t be established.
RSA key fingerprint is cf:1e:de:d7:d0:4c:2d:98:60:b4:fd:ae:b1:2d:ad:06.
Are you sure you want to continue connecting (yes/no)?
Host key verification failed.
解决方案:直接输入yes

  1. 无密钥配置
    1. 免密登录原理

image.png

  1. 生成公钥和私钥:

hdp01: ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)

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

hdp01: ssh-copy-id hdp01
hdp01: ssh-copy-id hdp02
hdp01: ssh-copy-id hdp03
注意:
还需要在hdp01 —> NameNode上采用root账号,配置一下无密登录到hdp01、hdp02、hdp03;
还需要在hdp02 —-> ResourceManager上采用atguigu账号配置一下无密登录到hdp01、hdp02、hdp03服务器上。

  1. .ssh文件夹下(~/.ssh)的文件功能解释 | known_hosts | 记录ssh访问过计算机的公钥(public key) | | —- | —- | | id_rsa | 生成的私钥 | | id_rsa.pub | 生成的公钥 | | authorized_keys | 存放授权过得无密登录服务器公钥 |

群起集群

  1. 配置 slaves

/usr/local/hadoop-2.7.2/etc/hadoop/slaves
hdp01: vi slaves
在该文件中增加如下内容:

  1. hdp01
  2. hdp02
  3. hdp03

去掉默认的localhost
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
同步所有节点配置文件
hdp01: xsync slaves

  1. 设置好域名映射 通过hosts文件

vim /etc/hosts
image.png

  1. 启动集群
    1. 如果集群是第一次启动,需要格式化NameNode(注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除data和log数据)

hdp01: bin/hdfs namenode -format

  1. 启动HDFS

hdp01: sbin/start-dfs.sh
hdp01: jps
4166 NameNode
4482 Jps
4263 DataNode
hdp02: jps
3218 DataNode
3288 Jps
hdp03: jps
3221 DataNode
3283 SecondaryNameNode
3364 Jps

  1. 启动YARN

hdp02: sbin/start-yarn.sh
注意:NameNode和ResourceManger如果不是同一台机器,不能在NameNode上启动 YARN,应该在ResouceManager所在的机器上启动YARN。
jps
2386 ResourceManager
2485 NodeManager
2782 Jps
2255 DataNode

  1. web端查看 NameNode
    1. http://hdp01:50070/dfshealth.html#tab-overview
  2. Web端查看 SecondaryNameNode
    1. http://hdp03:50090/status.html
    2. 查看 SecondaryNameNode 信息

集群基本测试

  1. 上传文件到集群

    1. 上传小文件<br />hdp01: `hdfs dfs -mkdir -p /user/haniel/input`<br />hdp02: `hdfs dfs -put wcinput/wc.input /user/``haniel``/input`<br /> 上传大文件<br />hdp01: `hadoop fs -put ~/CentOS-6.9-x86_64-minimal.iso /user/haniel/input`
  2. 上传文件后查看文件存放在什么位置

    1. 查看HDFS文件存储路径

hdp01.subdir0: pwd
/opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-938951106-192.168.10.107-1495462844069/current/finalized/subdir0/subdir0

  1. 查看HDFS在磁盘存储文件内容

cat blk_1073741825
hadoop yarn
hadoop mapreduce
atguigu
atguigu
(3)拼接
-rw-rw-r—. 1 atguigu atguigu 134217728 5月 23 16:01 blk_1073741836
-rw-rw-r—. 1 atguigu atguigu 1048583 5月 23 16:01 blk_1073741836_1012.meta
-rw-rw-r—. 1 atguigu atguigu 63439959 5月 23 16:01 blk_1073741837
-rw-rw-r—. 1 atguigu atguigu 495635 5月 23 16:01 blk_1073741837_1013.meta
[atguigu@hadoop102 subdir0]$ cat blk_1073741836>>tmp.file
[atguigu@hadoop102 subdir0]$ cat blk_1073741837>>tmp.file
[atguigu@hadoop102 subdir0]$ tar -zxvf tmp.file
(4)下载
[atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -get
/user/atguigu/input/hadoop-2.7.2.tar.gz ./

集群启动/停止方式总结

  1. 各个服务组件逐一启动/停止
    1. 分别启动/停止HDFS组件

hadoop-daemon.sh start / stop namenode / datanode / secondarynamenode

  1. 启动/停止YARN

yarn-daemon.sh start / stop resourcemanager / nodemanager

  1. 各个模块分开启动/停止(配置ssh是前提)常用
    1. 整体启动/停止HDFS

start-dfs.sh / stop-dfs.sh

  1. 整体启动/停止YARN

start-yarn.sh / stop-yarn.sh
4.3.8 集群时间同步
时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间。

配置时间同步具体实操:
1. 时间服务器配置(必须root用户)
(1)检查ntp是否安装
[root@hadoop102 桌面]# rpm -qa|grep ntp
ntp-4.2.6p5-10.el6.centos.x86_64
fontpackages-filesystem-1.41-1.1.el6.noarch
ntpdate-4.2.6p5-10.el6.centos.x86_64
(2)修改ntp配置文件
[root@hadoop102 桌面]# vi /etc/ntp.conf
修改内容如下
a)修改1(授权192.168.1.0-192.168.1.255网段上的所有机器可以从这台机器上查询和同步时间)
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap为
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
b)修改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
c)添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)
server 127.127.1.0
fudge 127.127.1.0 stratum 10
(3)修改/etc/sysconfig/ntpd 文件
[root@hadoop102 桌面]# vim /etc/sysconfig/ntpd
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
(4)重新启动ntpd服务
[root@hadoop102 桌面]# service ntpd status
ntpd 已停
[root@hadoop102 桌面]# service ntpd start
正在启动 ntpd: [确定]
(5)设置ntpd服务开机启动
[root@hadoop102 桌面]# chkconfig ntpd on
2. 其他机器配置(必须root用户)
(1)在其他机器配置10分钟与时间服务器同步一次
[root@hadoop103桌面]# crontab -e
编写定时任务如下:
/10 * /usr/sbin/ntpdate hadoop102
(2)修改任意机器时间
date -s "2017-9-11 11:11:11"
(3)十分钟后查看机器是否与时间服务器同步
date
说明:测试的时候可以将10分钟调整为1分钟,节省时间