Fork me on GitHub

Hadoop学习笔记--不定时更

Hadoop学习笔记--不定时更

⭐1、大数据部门组织结构

⭐2、HDFS架构

1、NameNode(nn):存储文件的元数据,如文件名、文件目录结构、文件属性(生成时间、副本数、文件的权限等等),以及每个文件的块列表和块所在的DataNode等。
2、DataNode(dn):在本地文件系统存储文件块数据,以及块数据的校验和。
3、Secondary NameNode(2nn):用来监听HDFS状态的辅助后台程序,每隔一段时间获取HDFS的元数据的快照

⭐3、Yarn架构

1、ResourceManager(RM):
   ①.处理客户端请求
   ②.监控NodeManager
   ③.启动或监控ApplicationMaster
   ④.资源的分配与调度
2、NodeManager(NM)
   ①.管理单个节点上的资源
   ②.处理来自ResourceManager的命令
   ③.处理来自ApplicationMaster的命令
3、ApplicationMaster(AM)
   ①.负责数据的切分
   ②.为应用程序申请资源并分配给内部的任务
   ③.任务的监控与容错
4、Container
   ①.Container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等

⭐4、Hadoop集群配置

配置规划
master slave1 slave2
HDFS NameNode、DataNode DataNode SecondaryNameNode、DataNode
YARN NodeManager ResourceManager、NodeManager NodeManager

1、HDFS

👇hadoop-env.sh

~]# echo $JAVA_HOME
/usr/java/jdk1.8.0_144
## 修改JAVA_HOME 路径
export JAVA_HOME=/usr/java/jdk1.8.0_144

👇core-site.xml

<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
    <value>hdfs://master:9000</value>
</property>

<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
	<name>hadoop.tmp.dir</name>
	<value>/usr/hadoop/data/tmp</value>
</property>

👇hdfs-site.xml

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

<!-- 指定Hadoop辅助节点(SecondaryNameNode)主机配置 -->
<property>
      <name>dfs.namenode.secondary.http-address</name>
      <value>slave2:50090</value>
</property>

2、Yarn

👇yarn-env.sh

## 配置一下JAVA_HOME
export JAVA_HOME=/usr/java/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>slave1</value>
</property>

👇mapred-env.sh

## 配置一下JAVA_HOME
export JAVA_HOME=/usr/java/jdk1.8.0_144

👇mapred-site.xml (对mapred-site.xml.template重新命名为) mv mapred-site.xml.template mapred-site.xml

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

3、配置slave(群起)

👇slaves 路径:$HADOOP_HOME/etc/hadoop/slaves

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

## vim slaves
master
slave1
slave2

4、配置历史服务器

👇mapred-site.xml

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

<!-- 历史服务器web端地址 -->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>master:19888</value>
</property>
## 启动历史服务器
mr-jobhistory-daemon.sh start historyserver
## 查看历史服务器是否启动
jps
## 查看JobHistory
http://master:19888/jobhistory

5、配置日志的聚集

概念:应用运行完成以后,将程序运行日志信息上传到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>

6、Hadoop分发到各个节点

## xsync脚本详情见:7、脚本
xsync /usr/hadoop/

7、SHH免密登入

👇免密登入原理​

👇具体操作​(root用户)

## 1.生成公钥和私钥:
ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
## 2.将公钥拷贝到要免密登录的目标机器上(包括自己)
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2

## 注意:此时master可以免密登入master、slave1、slave2,但slave1、slave2不能反向登入master,还需要去slave1、slave2去重复执行上述操作

👇.ssh文件夹下(~/.ssh)的文件功能解释

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

⭐5、常用命令

1、HDFS

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

hdfs namenode -format

👇单节点单服务启动NameNode、DataNode

hadoop-daemon.sh start namenode
hadoop-daemon.sh start datanode

👇启动HDFS集群

start-dfs.sh

👇操作集群命令

## 创建一个input文件夹
hdfs dfs -mkdir -p /user/input
## 上传文件
hdfs dfs -put /user/input/wc.input
## 查看目录下内容
hdfs dfs -ls /user/input/
## 查看文件内容
hdfs dfs -cat /user/input/wc.input
## 下载文件到本地
hdfs dfs -get /user/input/wc.input ./input/
## 删除文件
hdfs dfs -rm (-r) /user/input/wc.input

2、Yarn

👇单节点启动

①.启动前必须保证NameNode和DataNode已经启动
②.启动ResourceManager	yarn-daemon.sh start resourcemanager
③.启动NodeManager		yarn-daemon.sh start nodemanager

👇群起集群

注意:在装有ResourceManager服务的节点上启动,即在slave1上启动

start-yarn.sh

👇Yarn的WebUI界面

http://slave1:8088

3、集群启动、停止方法总结

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

## 整体启动/停止HDFS
start-dfs.sh   /  stop-dfs.sh

## 整体启动/停止YARN  (在有ResourceManager服务的节点上)
start-yarn.sh  /  stop-yarn.sh

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

## 分别启动/停止HDFS组件
hadoop-daemon.sh  start / stop  namenode / datanode / secondarynamenode

## 启动/停止YARN
yarn-daemon.sh  start / stop  resourcemanager / nodemanager

⭐6、时间同步

⏰crontab 定时任务设置

语法:crontab -e 编辑crontab定时任务 crontab -l 查询crontab任务 crontab -r 删除当前用户所有的crontab任务

👇* * * * * 每个*的含义

含义 范围
第一个"*" 一小时当中的第几分钟 0-59
第二个"*" 一天当中的第几小时 0-23
第三个"*" 一个月当中的第几天 1-31
第四个"*" 一年当中的第几月 1-12
第五个"*" 一周当中的星期几 0-7(0和7都代表星期日)
特殊符号 含义
* 代表任何时间。比如第一个“*”就代表一小时中每分钟都执行一次的意思。
代表不连续的时间。比如“0 8,12,16 * * * 命令”,就代表在每天的8点0分,12点0分,16点0分都执行一次命令
- 代表连续的时间范围。比如“0 5 * * 1-6命令”,代表在周一到周六的凌晨5点0分执行命令
*/n 代表每隔多久执行一次。比如“*/10 * * * * 命令”,代表每隔10分钟就执行一遍命令

👇案例​

时间 含义
45 22 * * * 命令 每天在22点45分执行命令
0 17 * * 1 命令 每周1 的17点0分执行命令
0 5 1,15 * * 命令 每月1号和15号的凌晨5点0分执行命令
40 4 * * 1-5 命令 每周一到周五的凌晨4点40分执行命令
*/10 4 * * * 命令 每天的凌晨4点,每隔10分钟执行一次命令
0 0 1,15 * 1 命令 每月1号和15号,每周1的0点0分都会执行命令。注意:星期几和几号最好不要同时出现

👇时间同步原理

👇具体操作​(root用户)

## 检查ntp是否安装
rpm -qa|grep ntp

## 修改/etc/ntp.conf配置文件
## 修改1 (授权192.168.1.0-192.168.1.255网段上的所有机器可以从这台机器上查询和同步时间)
## 去掉注释,修改IP段
restrict 192.168.1.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
## 添加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 on

👇让其他节点十分钟同步一次

crontab -e

*/10 * * * * /usr/sbin/ntpdate master

⭐7、​常见问题

👇思考:为什么不能一直格式化NameNode,格式化NameNode时要注意什么?

格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。
所以,格式NameNode时,一定要先删除data数据和log日志,然后再格式化NameNode。
## 此处的data数据位置是在core-site.xml中配置的

⭐8、脚本​

👇rsync 远程同步工具

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

rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。

👇依赖rsync实现自动拷贝分发 vim xsync

脚本可放到/usr/local/bin 或任意已配置环境变量的目录下

#!/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=1; host<3; host++)); do
        echo ------------------- hadoop$host --------------
        rsync -rvl $pdir/$fname $user@slave$host:$pdir
done
##修改脚本 xsync 具有执行权限
chmod 777 xsync
posted @ 2020-11-02 15:14  记录大数据学习  阅读(94)  评论(0编辑  收藏  举报

作者:

出处:https://www.cnblogs.com/wozixiaoyao/p/11965398.html

版权:本文采用「署名-非商业性使用-相同方式共享 4.0 国际」知识共享许可协议进行许可。

觉得文章不错,点个关注呗!