- 配置第一台虚拟机 hdp01
- 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.
- http://mirrorlist.centos.org/?release=6.9&arch=$basearch&repo=os">mirrorlist=http://mirrorlist.centos.org/?release=6.9&arch=$basearch&repo=os
- released updates
- http://mirrorlist.centos.org/?release=6.9&arch=$basearch&repo=updates">mirrorlist=http://mirrorlist.centos.org/?release=6.9&arch=$basearch&repo=updates
- additional packages that may be useful
- http://mirrorlist.centos.org/?release=6.9&arch=$basearch&repo=extras">mirrorlist=http://mirrorlist.centos.org/?release=6.9&arch=$basearch&repo=extras
- additional packages that extend functionality of existing packages
- http://mirrorlist.centos.org/?release=6.9&arch=$basearch&repo=centosplus">mirrorlist=http://mirrorlist.centos.org/?release=6.9&arch=$basearch&repo=centosplus
- contrib - packages by Centos Users
- http://mirrorlist.centos.org/?release=6.9&arch=$basearch&repo=contrib">mirrorlist=http://mirrorlist.centos.org/?release=6.9&arch=$basearch&repo=contrib
- 启动YARN并运行MapReduce程序(依旧单节点)
- 完全分布式运行模式(开发重点)
- !/bin/bash
- 1 获取输入参数个数,如果没有参数,直接退出
- 2 获取文件名称
- 3 获取上级目录到绝对路径
- 4 获取当前用户名称
- 5 循环
配置第一台虚拟机 hdp01
- 新建文件夹 vmOS, 专门用于存放虚拟机, 新建一个子文件夹 hdp02
- 在vmware中安装 CentOS 6.9
- 主机名 hdp01
- 账号密码: root/hadoop
配置集群的局域网
让这个局域网和宿主机进行通信
- 普通局域网的交互方式
- 虚拟机集群的交互方式
- 配置过程
- 设置主机名
vi /etc/sysconfig/network
HOSTNAME=hdp01
这个名称要和主机名一致
- 设置VMWare产生的虚拟路由器(设置好网关的ip)
- 注意, 网关的字段要和宿主机上网ip的字段一致
- 如果是使用的dhcp, 则设置一个静态的ip给这台机器
- 在这里我的是192.168.1.1
- 设置宿主机的vmnet8网卡, 其网关为上面设置的那个, ip的字段一定要和网关的前三段一致
- 进入虚拟机, 设置网络属性
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
- 启动 eth0 网卡, 重启网络服务
centos6ifconfig eth0 up
service network restart
centos7ifconfig ens33 up
systemctl restart network
- 关闭防火墙服务
- 安装ssh工具
yum -y install openssh-clients
重启一下reboot
- 设置好域名映射 通过hosts文件
vim /etc/hosts
设置win系统的hosts,之后就可以通过自己的ssh工具, 连接上系统
更换镜像源
对于 centos6.x 除了原生的 http://vault.centos.org, 国内只有 http://mirrors.sohu.com/centos/6 内有源, 其它镜像源或者soho的 /6.x 内都没有
- 操作步骤
- 备份原镜像文件,以免出错后可以恢复
- 新建新的CentOS-Base.repo 到/etc/yum.repos.d/
- 将 $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.
# #
- 将 $releasever 替换成指定的6, 不然会自动替换成6.9
```sql
[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. 运行 `yum makecache` 生成缓存
10. 安装 vim
10. 使用 xftp 实现虚拟机和宿主机通文件
<a name="DMrBF"></a>
## 安装JDK
1. 下载
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)
1. jdk-8u***-**linux-x64.tar.gz**
1. 账号密码 **2696671285@qq.com/Oracle123**
2. 安装(解压)
1. 将安装jar包放到/opt/soft
1. 解包并解压缩到/usr/local
`tar -zxvf jdk-8u271-linux-x64.tar.gz -C /usr/local`
1. 修改一个短一点的名字
`mv jdk1.8.0_271/ jdk1.8`
3. 配置环境变量
1. 进入到系统的配置文件
`vim /etc/profile`
1. 在最后添加
- JAVA_HOME 环境变量
- 在 PATH环境变量中添加上 JAVA_HOME/bin 路径
- 最后输出配置的 PATH 和 JAVA_HOME
![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)
1. 注意, 一定要把原来的 PATH 添加上, 冒号为分隔符
1. 重新加载环境变量配置文件
`source /etc/profile`
4. 测试
`java -version`
<a name="OE00g"></a>
## 安装hadoop 2.7.2
1. 下载
1. [https://archive.apache.org/dist/hadoop/common/hadoop-2.7.2/](https://archive.apache.org/dist/hadoop/common/hadoop-2.7.2/)
2. 安装(解压)
1. 将安装jar包放到/opt/soft
1. 解包并解压缩到/usr/local
`tar -zxvf hadoop-2.7.2.tar.gz -C /usr/local/`
3. 配置
1. 进入到系统的配置文件
`vim /etc/profile`
1. 在最后添加
- HADOOP_HOME 环境变量
- 在 PATH环境变量中添加上 HADOOP_HOME/bin 和 HADOOP_HOME/sbin 路径
- 最后输出配置的 PATH 和 HADOOP_HOME
![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)
1. 注意, 一定要把原来的 PATH 添加上, 冒号为分隔符
1. 重新加载环境变量配置文件
`source /etc/profile`
4. 测试
`hadoop version`
<a name="H99Dx"></a>
# 克隆其它虚拟机
删除安装文件, 克隆出另外两个系统
1. 修改 `vim /etc/sysconfig/network` 中的 HOSTNAME, 分别为 hdp02, hdp03
1. `vim /etc/sysconfig/network-scripts/ifcfg-eth0` 修改ip地址, 顺延为 11, 12
1. 因为克隆出来的, 所以网卡还是以前那一个, mac地址不对, 因此需要删除掉旧的网卡
`r``m -rf /etc/udev/rules.d/70-persistent-net.rules`
4. 关机, 修改网卡的mac地址
![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)
5. 启动, 更新网络服务
`service network restart`
<a name="bW7Gb"></a>
# 免密登录
做各个机器之间的ssh免密登录, namenode 应该可以免密发送文件给自己 datanode
1. 在namenode生成密钥
1. `ssh-keygen -t rsa` 之后一直按enter
2. 在 namenode, 为设置 namenode 登录某个机器设置免密
`ssh-copy-id ``映射的域名`<br />如: `ssh-copy-id hdp02`
3. 之后就可以直接在 namenode 通过 ssh root@hdp02 免密登录这个 datanode
<a name="Fr5sc"></a>
# 集群配置
为所有的机器保存一个快照
<a name="Vhcbh"></a>
## 伪分布式运行模式(namenode和datanode在同一台机器hdp01)
<a name="ypH6d"></a>
### 配置集群
1. 配置:hadoop-env.sh
必须在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`
2. 配置:core-site.xml
```xml
<!-- 指定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副本的数量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
启动集群
hdp01 格式化NameNode(第一次启动时格式化,以后就不要总格式化)
bin/hdfs namenode -format
- hdp01 启动NameNode
sbin/hadoop-daemon.sh start namenode
- hdp01 启动DataNode
sbin/hadoop-daemon.sh start datanode
查看集群
通过进程, 查看是否启动成功
jps
13586 NameNode
13668 DataNode
13786 Jps
web端查看HDFS文件系统
http://hdp01:50070/dfshealth.html#tab-overview
注意:如果不能查看,看如下帖子处理
http://www.cnblogs.com/zlslch/p/6604189.html
- 查看产生的Log日志
当前目录:${HADOOP_HOME}/logs
total 60
-rw-r--r--. 1 root root 23837 Dec 9 22:28 hadoop-root-datanode-hdp01.log
-rw-r--r--. 1 root root 715 Dec 9 22:28 hadoop-root-datanode-hdp01.out
-rw-r--r--. 1 root root 27555 Dec 9 22:28 hadoop-root-namenode-hdp01.log
-rw-r--r--. 1 root root 715 Dec 9 22:28 hadoop-root-namenode-hdp01.out
-rw-r--r--. 1 root root 0 Dec 9 22:28 SecurityAuth-root.audit
- 思考:为什么不能一直格式化 NameNode,格式化 NameNode,要注意什么?
cd data/tmp/dfs/name/current/
cat VERSION
clusterID=CID-f0330a58-36fa-4a2a-a65f-2688269b5837cd data/tmp/dfs/data/current/
clusterID=CID-f0330a58-36fa-4a2a-a65f-2688269b5837
注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。
所以,格式NameNode时,一定要先删除data数据和log日志,然后再格式化NameNode
操作集群
- 在HDFS文件系统上创建一个input文件夹
bin/hdfs dfs -mkdir -p /user/haniel/input
- 将测试文件内容上传到文件系统上
在 ${HADOOP_HOME}/ 下新建一个文件夹 wcinput, 在 wcinput 文件夹下新增一个文件 wc.input
hadoop yarn
hadoop mapreduce
haniel
haniel
将文件上传到HDFSbin/hdfs dfs -put wcinput/wc.input /user/haniel/input/
- 查看上传的文件是否正确
查看目录: hdfs dfs -ls /user/haniel/input/
查看内容: hdfs dfs -cat /user/haniel/input/wc.input
- 运行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
- 查看输出结果
命令行查看:hdfs dfs -cat /user/haniel/output/part-r-00000
浏览器查看:
- 将测试文件内容下载到本地
hdfs dfs -get /user/haniel/output/part-r-00000 ./wcoutput/
- 删除输出结果
hdfs dfs -rm -r /user/haniel/output
启动YARN并运行MapReduce程序(依旧单节点)
配置集群
- 配置 yarn-env.sh
写死 JAVA_HOMEexport JAVA_HOME=/usr/local/jdk1.8
配置 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>hdp01</value>
</property>
配置:mapred-env.sh
写死 JAVA_HOMEexport JAVA_HOME=/usr/local/jdk1.8
- 配置: (对mapred-site.xml.template重新命名为) mapred-site.xml
mv mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
<!-- 指定MR运行在YARN上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
启动集群
- 启动前必须保证NameNode和DataNode已经启动
- 启动ResourceManager
hdp01: sbin/yarn-daemon.sh start resourcemanager
- 启动NodeManager
hdp01: sbin/yarn-daemon.sh start nodemanager
集群操作
- YARN的浏览器页面查看
- 删除文件系统上的output文件
hdp01: bin/hdfs dfs -rm -R /user/``haniel``/output
- 执行MapReduce程序
hdp01: bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/haniel/input /user/``haniel``/output
- 查看运行结果,如图2-36所示
hdp01: bin/hdfs dfs -cat /user/haniel/output/*
配置历史服务器
为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下
配置 mapred-site.xml
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hdp01:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hdp01:19888</value>
</property>
启动历史服务器
hdp01: sbin/mr-jobhistory-daemon.sh start historyserver
- 查看历史服务器是否启动
jps
- 查看JobHistory
配置日志的聚集
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager 和 HistoryManager。
开启日志聚集功能具体步骤如下:
- 配置 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 、ResourceManager 和 HistoryManager
sbin/yarn-daemon.sh stop resourcemanager
sbin/yarn-daemon.sh stop nodemanager
sbin/mr-jobhistory-daemon.sh stop historyserver
- 启动NodeManager 、ResourceManager和HistoryManager
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
sbin/mr-jobhistory-daemon.sh start historyserver
- 删除HDFS上已经存在的输出文件
bin/hdfs dfs -rm -R /user/haniel/output
- 执行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
- 查看日志
配置文件说明
Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。
默认配置文件 | 要获取的默认文件 | 文件存放在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 |
自定义配置文件
- core-site.xml
- hdfs-site.xml
- yarn-site.xml
- mapred-site.xml
四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置
完全分布式运行模式(开发重点)
分析
- 准备3台客户机(关闭防火墙、静态ip、主机名称)
- 安装JDK
- 配置环境变量
- 安装Hadoop
- 配置环境变量
- 配置集群
- 单点启动
- 配置ssh
-
虚拟机准备
编写集群分发脚本xsync
scp(secure copy)安全拷贝
scp定义
- scp 可以实现服务器与服务器之间的数据拷贝
- 既不同机器之间的文件复制粘贴
基本语法
scp -r $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 递归 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
案例实操
在 hdp01 上,将 hdp01 中 /opt/module 目录下的软件拷贝到 hdp02 上。
sudo scp -r /opt/module root@hdp02:/opt/module
在 hdp03 上,将hadoop101服务器上的/opt/module目录下的软件拷贝到 hdp03 上
sudo scp -r root@hdp01:/opt/module root@hdp03:/opt/module
在 hdp03 上操作将 hdp01 中 /opt/module 目录下的软件拷贝到 hdp04 上
scp -r root@hdp01:/opt/module root@hdp04:/opt/module
- 注意:拷贝过来的/opt/module目录,别忘了在 hadoop102、hadoop103、hadoop104 上修改所有文件的,所有者和所有者组
将 hdp01 中 /etc/profile 文件拷贝到 hdp02 的 /etc/profile 上
sudo scp /etc/profile root@hdp02:/etc/profile
- 用rsync做文件的复制要比scp的速度快
- rsync只对差异文件做更新
- scp是把所有文件都复制过去。
基本语法
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
选项参数说明
选项 | 功能 |
---|---|
-r | 递归 |
-v | 显示复制过程 |
-l | 拷贝符号连接 |
案例实操
- 把 hdp01 机器上的/opt/software目录同步到hdp02服务器的root用户下的/opt/目录
rsync -rvl /opt/software/ root@hdp02:/opt/software
xsync集群分发脚本
- 需求:循环复制文件到所有节点的相同目录下
- 需求分析:
- rsync 命令原始拷贝:
rsync -rvl /usr/local root@hdp02:/opt/
- 期望脚本
xsync 要同步的文件名称
- 说明:在/home/haniel/bin这个目录下存放的脚本,haniel 用户可以在系统任何地方直接执行。
- 脚本实现
- 在/home/atguigu目录下创建bin目录,并在bin目录下xsync创建文件,文件内容如下:
hdp01: mkdir bin
hdp01: cd bin/
hdp01: touch xsync
hdp01: vi xsync
- 在该文件中编写如下代码
```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. 修改脚本 xsync 具有执行权限
hdp01: `chmod 777 xsync`
1. 调用脚本形式:xsync 文件名称
xsync /home/haniel/bin<br />注意:如果将xsync放到/home/haniel/bin目录下仍然不能实现全局使用,可以将xsync移动到/usr/local/bin目录下。
<a name="ghMm9"></a>
### 集群配置
1. 集群部署规划
| | hdp01 | hdp02 | hdp03 |
| --- | --- | --- | --- |
| HDFS<br /> | NameNode<br />DataNode | <br />DataNode | SecondaryNameNode<br />DataNode |
| YARN | <br />NodeManager | ResourceManager<br />NodeManager | <br />NodeManager |
2. 配置集群
1. 核心配置文件
配置core-site.xml<br />hdp01: `vim core-site.xml`<br />在该文件中编写如下配置
```xml
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hdp01:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop-2.7.2/data/tmp</value>
</property>
- HDFS配置文件
配置 hadoop-env.sh
hdp01: vim hadoop-env.sh
export JAVA_HOME=/usr/local/jdk1.8
配置 hdfs-site.xml
hdp01: vim hdfs-site.xml
在该文件中编写如下配置
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hdp03:50090</value>
</property>
- YARN配置文件
- 配置yarn-env.sh
hdp01: vim yarn-env.sh
export JAVA_HOME=/usr/local/jdk1.8
- 配置yarn-site.xml
hdp01: vim 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>hdp02</value>
</property>
- MapReduce配置文件
- 配置mapred-env.sh
hdp01: vim mapred-env.sh
export JAVA_HOME=/usr/local/jdk1.8
- 配置 mapred-site.xml
hdp01: cp mapred-site.xml.template mapred-site.xml
hdp01: vi mapred-site.xml
在该文件中增加如下配
<!-- 指定MR运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
- 在集群上分发配置好的Hadoop配置文件
hdp01: xsync /usr/local/hadoop-2.7.2/
4.查看文件分发情况
hdp02: cat /usr/local/hadoop-2.7.2/etc/hadoop/core-site.xml
集群单点启动
- 如果集群是第一次启动,需要格式化NameNode
hdp01: hadoop namenode -format
- 在 hdp01 上启动NameNode
hdp01: hadoop-daemon.sh start namenode
hdp01: jps
3461 NameNode
- 在hdp01、hdp02 以及 hdp03 上分别启动 DataNode
hdp01, hdp02, hdp03: hadoop-daemon.sh start datanode
jps
ssh另一台电脑的ip地址
- 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
- 无密钥配置
- 免密登录原理
- 生成公钥和私钥:
hdp01: ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)
- 将公钥拷贝到要免密登录的目标机器上
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服务器上。
- .ssh文件夹下(~/.ssh)的文件功能解释 | known_hosts | 记录ssh访问过计算机的公钥(public key) | | —- | —- | | id_rsa | 生成的私钥 | | id_rsa.pub | 生成的公钥 | | authorized_keys | 存放授权过得无密登录服务器公钥 |
群起集群
- 配置 slaves
/usr/local/hadoop-2.7.2/etc/hadoop/slaves
hdp01: vi slaves
在该文件中增加如下内容:
hdp01
hdp02
hdp03
去掉默认的localhost
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
同步所有节点配置文件
hdp01: xsync slaves
- 设置好域名映射 通过hosts文件
vim /etc/hosts
- 启动集群
- 如果集群是第一次启动,需要格式化NameNode(注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除data和log数据)
hdp01: bin/hdfs namenode -format
- 启动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
- 启动YARN
hdp02: sbin/start-yarn.sh
注意:NameNode和ResourceManger如果不是同一台机器,不能在NameNode上启动 YARN,应该在ResouceManager所在的机器上启动YARN。
jps
2386 ResourceManager
2485 NodeManager
2782 Jps
2255 DataNode
- web端查看 NameNode
- Web端查看 SecondaryNameNode
- http://hdp03:50090/status.html
- 查看 SecondaryNameNode 信息
集群基本测试
上传文件到集群
上传小文件<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`
上传文件后查看文件存放在什么位置
- 查看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
- 查看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 ./
集群启动/停止方式总结
- 各个服务组件逐一启动/停止
- 分别启动/停止HDFS组件
hadoop-daemon.sh start / stop namenode / datanode / secondarynamenode
- 启动/停止YARN
yarn-daemon.sh start / stop resourcemanager / nodemanager
- 各个模块分开启动/停止(配置ssh是前提)常用
- 整体启动/停止HDFS
start-dfs.sh / stop-dfs.sh
- 整体启动/停止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分钟,节省时间