Hadoop学习之旅

  • Hadoop 概述
    • 介绍
    • Hadoop 优势
    • Hadoop 组成
    • HDFS 架构
    • MapReduce 架构
    • YARN 架构
    • 大数据技术生态体系
    • 推荐系统框架图
  • 配置服务器
    • 修改服务器名
      • 修改主机名称
      • 查看主机名称
    • 修改映射 hosts 文件
      • 修改映射 hosts 文件
      • 查看映射 hosts 文件
    • 安装 epel-release
    • 安装 net-tool
    • 安装 vim
    • 关闭防火墙
    • 关闭防火墙开机自启
    • 卸载服务器自带的 JDK
      • 查看是否有JDK
      • 删除JDK
    • 配置用户
    • 创建文件夹
    • 安装JDK
      • 解压 JDK
      • 配置 JDK 环境变量
      • 测试 JDK
    • 安装 Hadoop
      • 解压
      • 环境变量
      • 测试安装
      • Hadoop 目录结构
    • 重启服务器
  • Hadoop 运行模式
    • 本地运行模式(玩具)
      • 准备工作
      • 执行程序
      • 查看结果
    • 完全分布式运行模式
      • 准备
      • scp(secure copy) 安全拷贝
      • rsync 远程同步工具
        • 测试
      • 集群分发脚本 xsync
        • 需求:
        • 需求分析:
        • 脚本实现
        • 测试
      • SSH 无密登录配置
        • 免密登录原理
        • 生成公钥和私钥
        • 将公钥拷贝到要免密登录的目标机器上
        • .ssh
        • ssh 连接
        • 无密传输
      • 集群配置
        • 集群部署规划
        • 配置文件说明
        • 配置集群
        • 分发配置好的 Hadoop 配置文件
        • 查看文件分发
      • 群起集群
        • 配置 workers
        • 启动集群
        • 集群基本测试
      • 配置历史服务器
        • 配置 mapred-site.xml
        • 分发配置
        • 启动历史服务器
      • 配置日志的聚集
      • 集群启动/停止方式总结
      • 编写 Hadoop 集群常用脚本
      • 常用端口号说明
      • 常用的配置文件
      • 集群时间同步
        • 需求
        • 时间服务器配置(必须 root 用户)
        • 其他机器配置(必须 root 用户)

我一口气整™三台云服务器(有钱豪横)

cpucode100 2核 4 G
cpucode101 1核 2 G
cpucode102 2核 4 G

期间被黑客攻击当了肉鸡 , 挖矿 , 对进行杀死, 没有用, mmp有计划任务(关键老子也找不到这计划在那) , 杀死再来, 最后我实在没有办法了 , 使用重装大法干掉了她们(Linux 博大精深, 我还是太菜了, 流下了技术的眼泪), 我对它们恨之入骨 , 所以这些暴露公网的, 记得配置防火墙的, 但由于这些组件的端口太多了, 所以我进行源IP进行拦截 , 如 : xxx.xxx.xxx.0/24

查看自己 ip , 这个IP 可能不准 , 如果不准 , 具体还是要问运营商了 , 我使用学校的 wifi 是没有毛病的

https://tool.lu/ip/

Hadoop 概述

介绍

Hadoop是一个由Apache基金会所开发的分布式系统基础架构
解决 : 海量数据的存储和海量数据的分析计算问题

Hadoop创始人Doug Cutting

Google是Hadoop的思想之源( Google在大数据方面的三篇论文)

GFS —> HDFS
Map-Reduce —> MR
BigTable —> HBase

Hadoop 优势

  • 高可靠性
  • 高扩展性
  • 高效性
  • 高容错性

高可靠性: Hadoop底层维护多个数据副本, 所以即使Hadoop某个计算元素或存储出现故障, 也不会导致数据的丢失

高扩展性:在集群间分配任务数据, 可方便的扩展数以千计的节点

高效性:在MapReduce的思想下, Hadoop是并行工作的, 以加快任务处理速度

高容错性:能够自动将失败的任务重新分配

Hadoop 组成

在 Hadoop1.x 时 代 ,Hadoop中的MapReduce同时处理业务逻辑运算和资源的调度, 耦合性较大
在Hadoop2.x时代, 增加了Yarn。 Yarn只负责资源的调度 ,MapReduce 只负责运算
Hadoop3.x在组成上没有变化

HDFS 架构

Hadoop Distributed File System,简称 HDFS,是一个分布式文件系统

  • NameNode(nn) :存储文件的元数据, 如文件名, 文件目录结构, 文件属性( 生成时间、 副本数、文件权限) , 以及每个文件的块列表和块所在的DataNode等

  • DataNode(dn):在本地文件系统存储文件块数据, 以及块数据的校验和

  • Secondary NameNode(2nn): 每隔一段时间对NameNode元数据备份

MapReduce 架构

MapReduce 将计算过程分为两个阶段: Map 和 Reduce

  • Map 阶段并行处理输入数据

  • Reduce 阶段对 Map 结果进行汇总

YARN 架构

Yet Another Resource Negotiator 简称 YARN ,另一种资源协调者, 是 Hadoop 的资源管理器

  • ResourceManager( RM) :整个集群资源( 内存、 CPU等) 的老大

  • NodeManager( NM) :单个节点服务器资源老大

  • ApplicationMaster( AM) :单个任务运行的老大

  • Container:容器,相当一台独立的服务器,里面封装了任务运行所需要的资源, 如内存、 CPU、磁盘、网络等。

Note :

  • 客户端可以有多个
  • 集群上可以运行多个 ApplicationMaster
  • 每个 NodeManager 上可以有多个 Container

大数据技术生态体系

  • Sqoop: Sqoop 是一款开源的工具,主要用于在 Hadoop、 Hive 与传统的数据库(MySQL)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL, Oracle 等)中的数据导进到 Hadoop 的 HDFS 中,也可以将 HDFS 的数据导进到关系型数据库中

  • Flume: Flume 是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume 支持在日志系统中定制各类数据发送方,用于收集数据

  • Kafka: Kafka 是一种高吞吐量的分布式发布订阅消息系统

  • Spark: Spark 是当前最流行的开源大数据内存计算框架。可以基于 Hadoop 上存储的大数据进行计算

  • Flink: Flink 是当前最流行的开源大数据内存计算框架。 用于实时计算的场景较多

  • Oozie: Oozie 是一个管理 Hadoop 作业(job)的工作流程调度管理系统

  • Hbase: HBase 是一个分布式的、面向列的开源数据库。 HBase 不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库

  • Hive: Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的 SQL 查询功能,可以将 SQL 语句转换为MapReduce 任务进行运行。其优点是学习成本低,可以通过类 SQL 语句快速实现简单的 MapReduce 统计,不必开发专门的 MapReduce 应用,十分适合数据仓库的统计分析

  • ZooKeeper:它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等

推荐系统框架图

配置服务器

修改服务器名

修改主机名称

vim /etc/hostname

查看主机名称

cat /etc/hostname

修改映射 hosts 文件

修改所有服务器的 hosts 文件

修改映射 hosts 文件

vim /etc/hosts

在 cpucode102 上 , 注意 , 云服务必须使用内网ip

xxx.xxx.xxx.xxx cpucode100
xxx.xxx.xxx.xxx cpucode101
内网ip cpucode102

查看映射 hosts 文件

cat /etc/hosts

安装 epel-release

Extra Packages for Enterprise Linux 是为“红帽系”的操作系统提供额外的软件包,适用于 RHEL、 CentOS 和 Scientific Linux。相当于是一个软件仓库, 大多数 rpm 包在官方 repository 中是找不到的)

yum install -y epel-release

安装 net-tool

工具包集合,包含 ifconfig 等命令

yum install -y net-tools

安装 vim

编辑器

yum install -y vim

关闭防火墙

systemctl stop firewalld

关闭防火墙开机自启

systemctl disable firewalld.service

卸载服务器自带的 JDK

查看是否有JDK

rpm -qa | grep -i java
  • rpm -qa: 查询所安装的所有 rpm 软件包
  • grep -i:忽略大小写

删除JDK

rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
  • xargs -n1:表示每次只传递一个参数
  • rpm -e --nodeps:强制卸载软件

配置用户

创建 cpu 用户,并修改 cpu 用户的密码

useradd cpu
passwd cpu

配置 cpu 用户具有 root 权限, 方便后期加 sudo 执行 root 权限的命令

vim /etc/sudoers

修改 /etc/sudoers 文件,在 %wheel 这行下面添加一行

cpu ALL=(ALL) NOPASSWD:ALL

cpu 这一行不要直接放到 root 行下面,因为所有用户都属于 wheel 组,你先配置了 cpu 具有免密功能,但是程序执行到 %wheel 行时, 该功能又被覆盖回需要密码。所以 cpu 要放到%wheel 这行下面

创建文件夹

在/opt 目录下创建文件夹

cd /opt
mkdir module
mkdir software

修改 module、 software 文件夹的所有者和所属组均为 cpu用户

chown cpu:cpu module/
chown cpu:cpu software/

切换用户

su cpu

安装JDK

上传文件

下载 JDK

jdk-8u212-linux-x64.tar.gz

解压 JDK

到 /opt/module 目录下

tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/

配置 JDK 环境变量

新建/etc/profile.d/my_env.sh 文件

sudo vim /etc/profile.d/my_env.sh

添加如下内容

#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin

保存后退出

:wq

让新的环境变量 PATH 生效

source /etc/profile

测试 JDK

是否安装成功

java -version

安装 Hadoop

下载 Hadoop

hadoop-3.1.3.tar.gz

解压

安装文件到/opt/module 下面

tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/

环境变量

在 my_env.sh 文件末尾添加如下内容

sudo vim /etc/profile.d/my_env.sh
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

保存并退出

:wq

修改后的文件生效

source /etc/profile

测试安装

hadoop version

Hadoop 目录结构

  • bin 目录 :存放对 Hadoop 相关服务(hdfs, yarn, mapred)进行操作的脚本
  • etc 目录 : Hadoop 的配置文件目录,存放 Hadoop 的配置文件
  • lib 目录 :存放 Hadoop 的本地库(对数据进行压缩解压缩功能)
  • sbin 目录 :存放启动或停止 Hadoop 相关服务的脚本
  • share 目录 :存放 Hadoop 的依赖 jar 包、 文档、 和官方案例

重启服务器

reboot

Hadoop 运行模式

  • 本地模式
  • 伪分布式模式
  • 完全分布式模式

本地模式:单机运行,只是用来演示一下官方案例。 生产环境不用

伪分布式模式: 也是单机运行,但是具备 Hadoop 集群的所有功能, 一台服务器模拟一个分布式的环境。 缺钱的公司用来测试,生产环境不用

完全分布式模式: 多台服务器组成分布式环境。 生产环境使用

本地运行模式(玩具)

演示 官方 WordCount

准备工作

创建文件夹

mkdir wcinput

创建文件

cd wcinput
vim word.txt

文件中输入如下内容

cpucode cpu
code
cpuc cpucode
code
cpu

保存退出: :wq

执行程序

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount ./wcinput/ ./wcoutput

查看结果

cat wcoutput/part-r-00000

完全分布式运行模式

准备

  • 准备 3 台客户机(关闭防火墙、静态 IP、主机名称)
  • 安装 JDK
  • 配置环境变量
  • 安装 Hadoop
  • 配置环境变量
  • 配置集群
  • 单点启动
  • 配置 ssh
  • 群起并测试集群

scp(secure copy) 安全拷贝

scp 可以实现服务器与服务器之间的数据拷贝(from server1 to server2)

scp -r $pdir/$fname $user@$host:$pdir/$fname
  • scp : 命令
  • -r : 递归
  • $pdir/$fname : 要拷贝的文件路径/名称
  • $user@$host:$pdir/$fname : 目的地用户@主机:目的地路径/名称

note :

在 所有服务器 都要创建好的 /opt/module、/opt/software 两个目录

在 cpucode100 机器上

将 cpucode100 中/opt/module/jdk1.8.0_212 目录拷贝到 cpucode101 上

scp -r /opt/module/jdk1.8.0_212 root@cpucode101:/opt/module/

在 cpucode101 机器上

将 cpucode100 中/opt/module/hadoop-3.1.3 目录拷贝到 cpucode101 上

scp -r root@cpucode100:/opt/module/hadoop-3.1.3 /opt/module/

将 cpucode100 中/opt/module 目录下所有目录拷贝到 cpucode102 上

scp -r root@cpucode100:/opt/module/* root@cpucode102:/opt/module/

rsync 远程同步工具

rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。

rsync 和 scp 区别:

  • rsync 做文件的复制要比 scp 的速度快, rsync 只对差异文件做更新
  • scp 是把所有文件都复制过去
rsync -av $pdir/$fname $user@$host:$pdir/$fname
  • -a 归档拷贝
  • v 显示复制过程

测试

删除

rm -rf wcinput/ wcoutput/

在 cpucode102

同步 cpucode100 中的/opt/module/* 到 cpucode102

rsync -av root@cpucode100:/opt/module/* /opt/module

集群分发脚本 xsync

需求:

循环复制文件到所有节点的相同目录下

需求分析:

  • rsync 命令原始拷贝:
rsync -av /opt/module/* root@cpucode101:/opt/module
  • 期望脚本:xsync 要同步的文件名称

  • 期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径)

查看全局环境变量

echo $PATH

脚本实现

在 /usr/local/sbin/ 目录下创建 xsync 文件

cd /usr/local/sbin/

编辑

vim xsync
#!/bin/bash#1. 判断参数个数
if [ $# -lt 1 ]
thenecho Not Enough Arguement!exit;
fi#2. 遍历集群所有机器
for host in cpucode100 cpucode101 cpucode102
doecho ==================== $host ====================#3. 遍历所有目录,挨个发送for file in $@do#4. 判断文件是否存在if [ -e $file ]then#5. 获取父目录pdir=$(cd -P $(dirname $file); pwd)#6. 获取当前文件的名称fname=$(basename $file)ssh $host "mkdir -p $pdir"rsync -av $pdir/$fname $host:$pdirelseecho $file does not exists!fidone
done

强制保存退出

:wq!

修改脚本 xsync 具有执行权限

chmod 777 xsync

测试

用了 sudo,那么 xsync 一定要给它的路径补全

sudo /usr/local/sbin/xsync /etc/profile.d/my_env.sh

查看是否成功

cat /etc/profile.d/my_env.sh

让环境变量生效

source /etc/profile

SSH 无密登录配置

免密登录原理

生成公钥和私钥

ssh-keygen -t rsa

敲(三个回车),就会生成两个文件 id_rsa(私钥)、 id_rsa.pub(公钥)

cd /root/.ssh/

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

所有服务器配置

ssh-copy-id cpucode100
ssh-copy-id cpucode101
ssh-copy-id cpucode102

.ssh

  • known_hosts : 记录 ssh 访问过计算机的公钥(public key)
  • id_rsa : 生成的私钥
  • id_rsa.pub : 生成的公钥
  • authorized_keys : 存放授权过的无密登录服务器公钥

ssh 连接

ssh cpucode100

退回

exit

无密传输

传输 xsync 脚本

xsync ./xsync

集群配置

集群部署规划

注意:

  • NameNode 和 SecondaryNameNode 不要安装在同一台服务器
  • ResourceManager 也很消耗内存,不要和 NameNode、 SecondaryNameNode 配置在同一台机器上
cpucode100 cpucode101 cpucode102
HDFS NameNode SecondaryNameNode
DataNode DataNode DataNode
YARN ResourceManager
NodeManager NodeManager NodeManager

配置文件说明

Hadoop 配置文件分两类:

  • 默认配置文件
  • 自定义配置文件

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

默认配置文件 :

要获取的默认文件 文件存放在 Hadoop 的 jar 包中的位置
core-default.xml hadoop-common-3.1.3.jar/core-default.xml
hdfs-default.xml hadoop-hdfs-3.1.3.jar/hdfs-default.xml
yarn-default.xml hadoop-yarn-common-3.1.3.jar/yarn-default.xml
mapred-default.xml hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml

自定义配置文件:

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

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

配置集群

  • 核心配置文件
  • HDFS 配置文件
  • YARN 配置文件
  • MapReduce 配置文件

核心配置文件

core-site.xml

vim core-site.xml

文件内容 :

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration><!-- 指定 NameNode 的地址 --><property><name>fs.defaultFS</name><value>hdfs://cpucode100:8020</value></property><!-- 指定 hadoop 数据的存储目录 --><property><name>hadoop.tmp.dir</name><value>/opt/module/hadoop-3.1.3/data</value></property><!-- 配置 HDFS 网页登录使用的静态用户为 cpu --><property><name>hadoop.http.staticuser.user</name><value>cpu</value></property>
</configuration>

HDFS 配置文件

配置 hdfs-site.xml

vim hdfs-site.xml

文件内容 :

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration><!-- nn web 端访问地址--><property><name>dfs.namenode.http-address</name><value>cpucode100:9870</value></property><!-- 2nn web 端访问地址--><property><name>dfs.namenode.secondary.http-address</name><value>cpucode101:9868</value></property><!--指定 HDFS 的元信息存储目录--><property><name>dfs.namenode.name.dir</name><value>file:///opt/module/hadoop-3.1.3/dfs/name</value></property><!--指定 HDFS 的数据存储目录--><property><name>dfs.datanode.data.dir</name><value>file:///opt/module/hadoop-3.1.3/dfs/data</value></property><property><name>dfs.client.use.datanode.hostname</name><value>true</value></property>
</configuration>

YARN 配置文件

配置 yarn-site.xml

vim yarn-site.xml

文件内容 :

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration><!-- 指定 MR 走 shuffle --><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><!-- 指定 ResourceManager 的地址--><property><name>yarn.resourcemanager.hostname</name><value>cpucode102</value></property><property><name>yarn.resourcemanager.webapp.address</name><value>cpucode102:8888</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>
</configuration>

MapReduce 配置文件

配置 mapred-site.xml

vim mapred-site.xml

文件内容 :

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration><!-- 指定 MapReduce 程序运行在 Yarn 上 --><property><name>mapreduce.framework.name</name><value>yarn</value></property><property><name>yarn.app.mapreduce.am.env</name><value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value></property><property><name>mapreduce.map.env</name><value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value></property><property><name>mapreduce.reduce.env</name><value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value></property>
</configuration>

分发配置好的 Hadoop 配置文件

xsync /opt/module/hadoop-3.1.3/etc/hadoop/

查看文件分发

cat /opt/module/hadoop-3.1.3/etc/hadoop/core-size.xml

群起集群

配置 workers

vim /opt/module/hadoop-3.1.3/etc/hadoop/workers

note :
该文件中添加的内容结尾不允许有空格,文件中不允许有空行

内容:

cpucode100
cpucode101
cpucode102

同步所有节点配置文件

xsync /opt/module/hadoop-3.1.3/etc

启动集群

如果集群是第一次启动

需要在 cpucode100 节点格式化 NameNode

注意:
格式化 NameNode, 会产生新的集群 id, 导致 NameNode 和 DataNode 的集群 id 不一致,集群找不到已往数据。
如果集群在运行过程中报错,需要重新格式化 NameNode 的话, 一定要先停止 namenode 和 datanode 进程, 并且要删除所有机器的 data 和 logs 目录,然后再进行格式化。

hdfs namenode -format

启动 HDFS

./start-dfs.sh

在配置了 ResourceManager 的节点(cpucode102) 启动 YARN

./start-yarn.sh

查看进程

jps

错误 :

but there is no HDFS_NAMENODE_USER defined. Aborting operation.

Web 端查看 HDFS 的 NameNode

http://cpucode100地址:9870

Web 端查看 YARN 的 ResourceManager

http://cpucode102地址:8888

集群基本测试

上传文件到集群

上传小文件

创建目录

hadoop fs -mkdir /input

上传

hadoop fs -put $HADOOP_HOME/wcinput/word.txt /input

上传大文件

hadoop fs -put  /opt/software/jdk-8u212-linux-x64.tar.gz /

查看 HDFS 文件存储路径

pwd

/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-467004637-127.0.0.1-1637042927129/current/finalized/subdir0/subdir0

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

cat blk_1073741825

拼接

cat blk_1073741826>>tmp.tar.gz
cat blk_1073741827>>tmp.tar.gz

解压

tar -zxvf tmp.tar.gz

下载

hadoop fs -get /jdk-8u212-linux-x64.tar.gz ./

执行 wordcount 程序

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

配置历史服务器

为了查看程序的历史运行情况,需要配置一下历史服务器

配置 mapred-site.xml

vim mapred-size.xml

内容增加

 <!-- 历史服务器端地址 --><property><name>mapreduce.jobhistory.address</name><value>cpucode100:10020</value></property><!-- 历史服务器 web 端地址 --><property><name>mapreduce.jobhistory.webapp.address</name><value>cpucode100:19888</value></property>

分发配置

xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml

启动历史服务器

在 cpucode100

mapred --daemon start historyserver

查看 JobHistory

http://cpucode100地址:19888/jobhistory

配置日志的聚集

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到 HDFS 系统上

日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。

Note:
开启日志聚集功能, 需要重新启动 NodeManager 、 ResourceManager 和 HistoryServer。

配置 yarn-site.xml

vim yarn-site.xml

内容增加

 <!-- 开启日志聚集功能 --><property><name>yarn.log-aggregation-enable</name><value>true</value></property><!-- 设置日志聚集服务器地址 --><property><name>yarn.log.server.url</name><value>http://cpucode100:19888/jobhistory/logs</value></property><!-- 设置日志保留时间为 7 天 --><property><name>yarn.log-aggregation.retain-seconds</name><value>604800</value></property>

分发配置

xsync hadoop/

关闭 NodeManager 、 ResourceManager 和 HistoryServer

在 cpucode102

sbin/stop-yarn.sh

在 cpucode100

mapred --daemon stop historyserver

启动 NodeManager 、 ResourceManager 和 HistoryServer

在 cpucode102

./sbin/start-yarn.sh

在 cpucode100

mapred --daemon start historyserver

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

hadoop fs -rm -r /output

执行 WordCount 程序

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

查看日志

历史服务器地址

http://cpucode100地址:19888/jobhistory

历史任务列表

查看任务运行日志

运行日志详情

集群启动/停止方式总结

各个模块分开启动/停止(配置 ssh 是前提)

整体启动/停止 HDFS

start-dfs.sh/stop-dfs.sh

整体启动/停止 YARN

start-yarn.sh/stop-yarn.sh

各个服务组件逐一启动/停止

分别启动 / 停止 HDFS 组件

hdfs --daemon start/stop namenode/datanode/secondarynamenode

启动 / 停止 YARN

yarn --daemon start/stop resourcemanager/nodemanager

编写 Hadoop 集群常用脚本

Hadoop 集群启停脚本(包含 HDFS, Yarn, Historyserver): myhadoop.sh

cd /user/local/sbin
vim myhadoop.sh

内容 :

#!/bin/bashif [ $# -lt 1 ]
thenecho "No Args Input..."exit ;
ficase $1 in
"start")echo " =================== 启动 hadoop 集群 ==================="echo " --------------- 启动 hdfs ---------------"ssh cpucode100 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"echo " --------------- 启动 yarn ---------------"ssh cpucode102 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"echo " --------------- 启动 historyserver ---------------"ssh cpucode100 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")echo " =================== 关闭 hadoop 集群 ==================="echo " --------------- 关闭 historyserver ---------------"ssh cpucode100 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"echo " --------------- 关闭 yarn ---------------"ssh cpucode102 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"echo " --------------- 关闭 hdfs ---------------"ssh cpucode100 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)echo "Input Args Error..."
;;
esac

保存后退出,然后赋予脚本执行权限

chmod 777 myhadoop.sh

测试

myhadoop.sh stop

 myhadoop.sh start

查看三台服务器 Java 进程脚本: jpsall

cd /user/local/sbin
vim jpsall

内容 :

#!/bin/bash
for host in cpucode100 cpucode101 cpucode102
doecho =============== $host ===============ssh $host jps
done

保存后退出,然后赋予脚本执行权限

chmod 777 jpsall

发 /user/local/sbin目录,保证自定义脚本在三台机器上都可以使用

xsync /user/local/sbin

测试

jpsall

常用端口号说明

端口名称 Hadoop2.x Hadoop3.x
NameNode 内部通信端口 8020 / 9000 8020 / 9000 / 9820
NameNode HTTP UI 50070 9870
MapReduce 查看执行任务端口 8088 8088
历史服务器通信端口 19888 19888

常用的配置文件

Hadoop2.x Hadoop3.x
核心配置文件 core-site.xml core-site.xml
HDFS 配置文件 hdfs-site.xml hdfs-site.xml
YARN 配置文件 yarn-site.xml yarn-site.xml
MapReduce 配置文件 mapred-site.xml mapred-site.xml
slaves workers

集群时间同步

如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期和公网时间进行校准

如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差,导致集群执行任务时间不同步

需求

找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步, 生产环境根据任务对时间的准确程度要求周期同步。 测试环境为了尽快看到效果,采用 1 分钟同步一次。

时间服务器配置(必须 root 用户)

查看所有节点 ntpd 服务状态和开机自启动状态

sudo systemctl status ntpd
sudo systemctl start ntpd
sudo systemctl is-enabled ntpd

修改 cpucode100 的 ntp.conf 配置文件

sudo vim /etc/ntp.conf

修改内容如下

  • 修改 1(授权 192.168.10.0-192.168.10.255 网段上的所有机器可以从这台机器上查询和同步时间)

#restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap

改为

restrict 192.168.10.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
  • 修改 hadoop102 的/etc/sysconfig/ntpd 文件
sudo vim /etc/sysconfig/ntpd
  • 增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
  • 重新启动 ntpd 服务
sudo systemctl start ntpd
  • 设置 ntpd 服务开机启动
sudo systemctl enable ntpd

其他机器配置(必须 root 用户)

  • 关闭所有节点上(cpucode101, cpucode102) ntp 服务和自启动
sudo systemctl stop ntpd
sudo systemctl disable ntpd

在其他机器(cpucode101, cpucode102) 配置 1 分钟与时间服务器同步一次

sudo crontab -e

编写定时任务如下:

*/1 * * * * /usr/sbin/ntpdate cpucode100

修改任意机器时间

sudo date -s "2021-11-11 11:11:11"

1 分钟后查看机器是否与时间服务器同步

sudo date

Hadoop学习之旅相关推荐

  1. Hadoop学习之旅三:MapReduce

    MapReduce编程模型 在Google的一篇重要的论文MapReduce: Simplified Data Processing on Large Clusters中提到,Google公司有大量的 ...

  2. hadoop学习之旅1

    大数据介绍 大数据本质也是数据,但是又有了新的特征,包括数据来源广.数据格式多样化(结构化数据.非结构化数据.Excel文件.文本文件等).数据量大(最少也是TB级别的.甚至可能是PB级别).数据增长 ...

  3. 24.大数据学习之旅——spark手把手带你入门

    Spark介绍 Apache Spark™ is a fast and general engine for large-scale data processing. Spark Introduce ...

  4. 23.大数据学习之旅——scala进阶

    函数式编程的概念 编程范式 函数式编程是一种编程范式,我们常见的编程范式有: 1)命令式编程(Imperative programming),常见的面向对象编程是也是一种命令式编 程.比如java,c ...

  5. 基于设计模式的学习之旅-----访问者模式(附源码)

    基于设计模式的学习之旅-----访问者模式 1.初始访问者模式 2.什么是访问者模式 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 3.模 ...

  6. Hadoop学习笔记一 简要介绍

    Hadoop学习笔记一 简要介绍 这里先大致介绍一下Hadoop.     本文大部分内容都是从官网Hadoop上来的.其中有一篇介绍HDFS的pdf文档,里面对Hadoop介绍的比较全面了.我的这一 ...

  7. 我的hadoop学习之路

    Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS.HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上. Ha ...

  8. WCF学习之旅—WCF服务的WAS寄宿(十二)

    上接    WCF学习之旅-WCF服务部署到IIS7.5(九) WCF学习之旅-WCF服务部署到应用程序(十) WCF学习之旅-WCF服务的Windows 服务程序寄宿(十一) 八.WAS宿主 IIS ...

  9. Hadoop学习笔记(1) ——菜鸟入门

     Hadoop学习笔记(1) --菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分布式系统基础架构,由Apache基金会所开发.用户能够在不了解分布式底层细节的情况下.开发分布式 ...

  10. 基于 Android NDK 的学习之旅-----资源释放

    基于 Android NDK 的学习之旅-----资源释放 做上一个项目的时候因为与C引擎交互频繁,有时候会突然莫名其妙的的整个应用程序直接挂掉.因为我是学Java 开始的,所以对主动释放内存没多大概 ...

最新文章

  1. 对话科大讯飞刘聪:深度学习在中国是否“过火”?
  2. 【Java 基础篇】【第一课】HelloWorld
  3. 如何在Vim中复制到剪贴板?
  4. SQL_server 的基本操作
  5. css中超级链接样式的设置顺序
  6. 浅谈UML的概念和模型之UML九种图
  7. 41、OrthoMCL和mcl软件进行基因家族分析
  8. C语言—sort函数比较大小的快捷使用--algorithm头文件下
  9. vue 页面引入多个内部js_.html多页页面引入vue.js怎么开发?
  10. 【…感激2008,部署我的2009…】
  11. 玩转spring boot——国际化
  12. 加强网站安全、重构公司的门户网站项目(C# VS2003)
  13. hdu acmsteps 2.1.3 Cake
  14. 集成电路布图设计独创性判断标准
  15. java一元抢购,拼多多1元抢购的步骤是什么?
  16. 一入IT深似海,从此都是考证人~耗时,耗力,耗财,耗头发考过的证书 千万不要忘了延续~
  17. Python如何进行中文注释
  18. A040_SpringMVC进阶_JSON
  19. 2020FME博客大赛——地下管线-雨水管网 三维可视化
  20. 【托业】toeic托业必背核心词汇_修正版

热门文章

  1. 网站抓取提示服务器错误,站长平台提示网站抓取异常是什么原因造成的?
  2. java版教材管理系统源码
  3. C语言练手项目--C 语言编写聊天室
  4. ubuntu下非常好用的PDF阅读器
  5. JMeter录制脚本和参数化
  6. 【高质量分享】Axure组件库_含大厂和个人博主
  7. 用什么软件测试电视分辨率,4k电视分辨率测试图
  8. 早教机器人刷固件_E-puck2机器人系列教程-固件修复升级
  9. 郭克华老师java视频教程下载地址
  10. 报错 xxx@1.0.0 dev D:\ webpack-dev-server --inline --progress --configbuild/webpack.dev.conf.js