Hadpoo基本配置,公钥与密钥,集群相关配置

Hadpoo基本配置,公钥与密钥

  • HDFS概念
  • Hadoop实操演练
  • Paramiko模块
  • 公钥私钥
  • JDK环境准备
  • Hadoop环境准备
  • Hadoop目录结构
  • 官方案例
  • 伪分布式模式
  • 配置日志采集
  • 完全分布式(开发重点)
  • 集群群起
  • 单点启动(了解)
  • 集群时间同步(了解)

HDFS概念

  ⼀个⽂件系统,通过⽬录树来定位⽂件; 其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各 ⾃的⻆⾊

优点:

1.高容错性

2.适合处理大数据量

3.可以构建在廉价机器上

缺点:

1.不适合低延时数据访问

2.无法高效的对大量小文件进行存储

3.支持数据append(追加)

HDFS文件块

可以最多存储3个副本块

HDFS存储数据的数据块大小

  1.X版本最小是64M其它版本是128M

'''数据块大小使用默认128M即可,不需要修改'''

热备与冷备

  热备:不停服更新
  冷备:停服更新

热数据与冷数据

  热数据:使用频率较高的数据

  冷数据:使用频率较低的数据

保存副本节点选择

两个备份在同一个机架,另一个备份在其他机架

 

Hadoop实操演练

"""
何为快照?
    给虚拟机保存当下的状态 之后可以回退到保存的状态
什么时候用快照?
    在对虚拟机执行一些比较危险的操作之前 可以先快照之后还可以返回
"""

如何快速生成多台虚拟机

先将需要克隆的机器关机

链接克隆与完整克隆

链接克隆:

效率高,但是需要保证原设备不能坏

完整克隆:

速度较慢,但是克隆完成后克隆机与原机器之间再无关系

克隆步骤

点击虚拟机-->管理-->克隆

 

 选择虚拟机当前状态

 

选择连结克隆-->点击下一页

 

 更改虚拟机,安装地址不要在c盘-->点击完成

 

网卡信息的修改

如果遇到文件无法打开问题,就需要删除特定的文件,详细操作看昨日博客操作(本人暂时还未碰到)

# vim /etc/sysconfi/network-scripts/ifcfg-ens33

  

# systemctl restart network

主机名称修改(可以不做)

# hostnamectl set-hostname 新的名称
# bash

关闭防火墙

systemctl stop firewalld # 临时关闭
systemctl disable firewalld # 悠久关闭
reboot # 重启
systemctl status firewalld # 查看防火墙状态
systemctl restart network  # 重启网卡

配置映射关系

vim /etc/hosts # 打开配置文件

拔高:

如何利用xshell通过主机名的方式链接虚拟机?

修改宿主机hosts文件映射关系即可

1.找到host文件并打开,如果无法打开要设置相关权限

 2.复制以下内容到文件中

10.0.0.201    ds691
10.0.0.202    ds692
10.0.0.203    ds693
10.0.0.204    ds694

 

公钥私钥

# 比用户名密码的方式更加安全
通过ssh远程连接服务器并执行想要命令 类似于Xshell 链接服务器有两种方式:
1.用户名和密码连接服务器
2.公钥私钥连接服务器

前期文件准备

# 在opt目录下创建两个文件夹
mkdir software # 存放压缩文件
mkdir module # 存放解压之后的文件

 

将JDK的Hadoop压缩包传入

方式1(拖拽直接上传):

下载对应插件

yum install lrzsz -y

验证是否安装成功

rpm -qa lrzsz

方法2:.python中的paramiko模块

 

Paramiko模块

paramiko模块支持上面两种连接服务器的方式:
1.用户名和密码连接服务器
2.公钥私钥连接服务器

安装

pip3 install paramiko

Paramiko远程执行命令

# 用户名和密码的方式
import paramiko
# 创建ssh对象
ssh = paramiko.SSHClient()
# 允许链接不在know_hosts文件中主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 链接服务器
ssh.connect(hostname='10.0.0.201'
,port=22,username='root'
,password='112233aacc')
# 执行命令
stdin, stdout, stderr =ssh.exec_command('ip a')
# 获取结果
res = stdout.read()
# 基于网络传输 该结果是一个bytes类型
print(res.decode('utf-8'))
# 断开链接
ssh.close()

 

 

公钥私钥方式

首先你要产生你自己的公钥和私钥,然后将你的公钥上传到 服务器保存 之后就可以通过私钥来链接

下列代码用于linux环境,需要在主机下载一个git编程环境,输入

"""
mac
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub
username@hostname
cat ~/.ssh/id_rsa
windows
1.下载git并安装(提供windows环境的linux操作
界面)
https://git-scm.com/
2.右键git bash here进入git终端(相当于linux
界面)
ssh-keygen -t rsa
3.拷贝公钥至远程服务器
ssh-copy-id -i 公钥文件路径
username@hostname
"""

将提示信息输入

ssh 'root@10.0.0.201'

 

 

 

python方法:

# 公钥和私钥(先讲公钥保存到服务器上)
import paramiko
# 读取本地私钥
private_key =
paramiko.RSAKey.from_private_key_file('a.tx
t')
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.Au
toAddPolicy())
# 连接服务器
ssh.connect(hostname='10.0.0.21'
, port=22,
username='root'
, pkey=private_key)
# 执行命令
stdin, stdout, stderr =
ssh.exec_command('ls /')
# 获取命令结果
result = stdout.read()
print(result.decode('utf-8'))
# 关闭连接
ssh.close()

 

JDK环境准备

1.将解压之后的放入module

tar -zxvf jdk[按TAB键]tar.gz -C /opt/module/

2.环境变量配置

vim /etc/profile

添加内容:

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

3.使环境变量生效

source /etc/profile

4.查看是否有效

java -version

 

 

Hadoop环境准备

1.在software文件中,解压文件

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

2.环境变量配置

vim /etc/profile

添加内容

##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

3.使环境变量生效

source /etc/profile

4.查看是否有效

hadoop

 

 

Hadoop目录结构

 

 bin:

主要服务
hadoop 管理整个hadoop集群
hdfs 管理数据存储
yarn 管理资源调度

etc:

hadoop配置文件

sbin:

hadoop启动停止、整个集群启动停止

share:

说明文档/手册,大量使用案例

 

官方案例

Grep过滤代码

# 进入hadpood
# cd hadpood
#
1.创建input文件夹 [jason@hadoop101 hadoop-2.7.2]$ mkdir input # 2.将Hadoop 的xml配置文件复制到input文件夹内 [jason@hadoop101 hadoop-2.7.2]$ cp etc/hadoop/*.xml input/ # 3.从多个文件内过滤出符号条件的文件内容 [jason@hadoop101 hadoop-2.7.2]$ bin/hadoop jar share/hadoop/mapreduce/hadoopmapreduce-examples-3.2.1.jar grep input/output 'dfs[a-z.]+' # 4.查看输出结果 [jason@hadoop101 hadoop-2.7.2]$ cat output/*

之WordCount(重要)代码

# 1.创建wcinput文件夹
伪分布式模式
[jason@hadoop101 hadoop-2.7.2]$ mkdir wcinput
# 2.在wcinput 文件下创建一个wc.input 文件
[jason@hadoop101 hadoop-2.7.2]$ cd wcinput
[jason@hadoop101 wcinput]$ touch wc.input
# 3.编辑wc.input文件
[jason@hadoop101 wcinput]$ vim wc.input

添加文件内容

hadoop yarn
hadoop mapreduce
jason
jason

回到 Hadoop 目录/opt/module/hadoop-2.7.2执行程序

[jason@hadoop101 hadoop-2.7.2]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput/ wcoutput/
# 5.查看结果
cat wcoutput/part-r-00000

 

伪分布式模式

1./etc/hadoop路径下

vim core-site.xml

复制插入

<!-- 指定 HDFS 中 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:9000</value>
</property>
<!-- 指定 Hadoop 运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop2.7.2/data/tmp</value> </property>

2./etc/hadoop路径下

vim hadoop-env.sh

复制插入

2.1 新建连接查看并拷贝
echo $JAVA_HOME
2.2 修改hadoop-env.sh文件中的JAVA_HOME
export JAVA_HOME = ...

3./etc/hadoop路径下

vim hdfs-site.xml

复制插入

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

4.退出到hadoop根目录下(hadoop-2.7.2)

# 格式化 NameNode(第一次启动时格式化,以后就不要总格式化)
bin/hdfs namenode -format
# 启动 NameNode
sbin/hadoop-daemon.sh start namenode
# 启动 DataNode
sbin/hadoop-daemon.sh start datanode

5.查看是否启动成功

jps

5.2虚拟机ip地址,端口号50070

eg:10.0.0.201:50070

6.浏览器界面Browse Directory

bin/hdfs dfs -mkdir -p /user/jason/input
# 与linux操作基本一致
bin/hdfs dfs -ls /

7.将hadoop-2.7.2路径下的wcinput文件上传到 hdfs路径下

bin/hdfs dfs -put wcinput/wc.input
/user/jason/input

8.在hdfs上实现字符统计

bin/hadoop jar
share/hadoop/mapreduce/hadoop-mapreduceexample-2.7.2.jar wordcount
/user/jason/input /user/jason/output

浏览器可视化查看或者命令查看

bin/hdfs dfs -cat /user/jason/ouput/p*

补充:

"""
补充
针对已经格式化NameNode想再次格式化,
第一步先用jps查看进程是否已经关闭
第二步将hadoop-2.7.2目录下的data和logs删除
"""

 

伪分布的YARM配置

1.在hadoop-2.7.2路径下

cd etc/hadoop
vim yarn-env.sh

2.修改配置

export JAVA_HOME=/opt/module/jdk1.8.0_144

3.编辑文件内容

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>hadoop101</value>
</property>

4.在hadoop路径下

vim mapred-env.sh

5.修改配置

export JAVA_HOME=/opt/module/jdk1.8.0_144

6.修改文件名

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

7.编辑文件内容

vim mapred-site.xml

复制插入

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

8.在hadoop-2.7.2路径下启动yarn

sbin/yarn-daemon.sh start resourcemanager

9.在hadoop-2.7.2路径下启动NodeManager

sbin/yarn-daemon.sh start nodemanager

10.查看服务是否正常启动

jps

11.查看mapreduce服务

10.0.0.201:8088

跑服务查看平台变化

1.在hadoop-2.7.2路径下先删除之前的output文件

bin/hdfs dfs -rm -r /user/jason/output

2.再次运行wordcount案例

hadoop jar share/hadoop/mapreduce/hadoopmapreduce-examples-2.7.2.jar wordcount /user/jason/input/ /user/jason/output/

 

配置日志采集

1.在hadoop路径下编辑文件

vim yarn-site.xml

复制插入

<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregationenable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置 7 天 -->
<property>
<name>yarn.log-aggregation.retainseconds</name>
<value>604800</value>
</property>
'''
注意:开启日志聚集功能,需要重新启动 NodeManager 、ResourceManager 和 HistoryManager。
'''

代码操作:

[jason@hadoop101 hadoop-2.7.2]$ sbin/yarndaemon.sh stop resourcemanager
[jason@hadoop101 hadoop-2.7.2]$ sbin/yarndaemon.sh stop nodemanager
[jason@hadoop101 hadoop-2.7.2]$ sbin/mrjobhistory- daemon.sh stop historyserver

3.启动 NodeManager 、ResourceManager 和 HistoryManager

[jason@hadoop101 hadoop-2.7.2]$ sbin/yarndaemon.sh start resourcemanager
[jason@hadoop101 hadoop-2.7.2]$ sbin/yarndaemon.sh start nodemanager
[jason@hadoop101 hadoop-2.7.2]$ sbin/mrjobhistory- daemon.sh start historyserver

 

完全分布式(开发重点)

准备工作

1)准备 3台客户机

2)安装 JDK

3)配置环境变量

4)安装 Hadoop

5)配置环境变量

6)配置集群

7)单点启动

8)配置 ssh

9)群起并测试集群

详细:

# 1)准备 3台客户机(关闭防火墙、静态 ip、主机名称)
# 克隆机器修改主机名和主机IP地址
# 2)安装 JDK
# 利用scp命令拷贝数据文件至三个客户机
scp -r /opt/module
root@hadoop102:/opt/module
scp -r /opt/module
root@hadoop103:/opt/module
scp -r /opt/module
root@hadoop104:/opt/module

3)配置环境变量 1.利用scp命令拷贝环境变量文件至三个客户机

scp /etc/profile
root@hadoop102:/etc/profile
scp /etc/profile
root@hadoop103:/etc/profile
scp /etc/profile
root@hadoop104:/etc/profile

4)扩展:集群分发脚本
复制文件到所有节点的相同目录下
1.在/usr/local/bin下创建sync文件并填写以下内容

[jason@hadoop102 ~]$ cd /usr/local/bin
     [jason@hadoop102 bin]$ touch xsync 
     [jason@hadoop102 bin]$ vi xsync

复制插入

"""
      文件内容
      #!/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=103; host<105; host++)); do
          echo ------------------- hadoop$host --------------
          rsync -rvl $pdir/$fname $user@hadoop$host:$pdir 
      done
      """

2.修改权限

chmod 777 xsync

3.测试

在当前机器随便找一个其他机器没有的目录

xsync test/

5)集群配置

'''在102上修改,然后用xsync脚本直接同步'''

1.配置 core-site.xml(修改主机名即可),复制插入

"""
<!-- 指定 HDFS 中 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:9000</value>
</property>
<!-- 指定 Hadoop 运行时产生文件的存储目录 --
>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop2.7.2/data/tmp</value>
</property>
"""

2.HDFS 配置文件

1.配置 hadoop-env.sh

[jason@hadoop102 hadoop]$ vi hadoopenv.sh

复制插入

"""内容(有就不用改了)
export
JAVA_HOME=/opt/module/jdk1.8.0_144
"""

2.配置 hdfs-site.xml(将伪分布式配置删除添加下列配置)

[jason@hadoop102 hadoop]$ vi hdfs-site.xml

复制插入

      """内容
      <!-- 指定 Hadoop 辅助名称节点主机配置 --> 
      <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop104:50090</value> 
      </property>
      """

3.YARN 配置文件 1.配置 yarn-env.sh

[jason@hadoop102 hadoop]$ vi yarnenv.sh
"""内容(有就不用改了)
export
JAVA_HOME=/opt/module/jdk1.8.0_144
"""

2.配置 yarn-site.xml(修改主机名即可)

[jason@hadoop102 hadoop]$ vi yarnsite.xml
"""内容
<!-- Reducer 获取数据的方式 -->
<property>
<name>yarn.nodemanager.auxservices</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 YARN 的 ResourceManager 的地
址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
"""

4.MapReduce 配置文件 1.配置 mapred-env.sh

[jason@hadoop102 hadoop]$ vi mapredenv.sh
"""内容(伪分布式配了就不用改了)
export
JAVA_HOME=/opt/module/jdk1.8.0_144
"""

2.配置 mapred-site.xml(伪分布式配了就不用改 了)

[jason@hadoop102 hadoop]$ cp mapredsite.xml.template mapred-site.xml
[jason@hadoop102 hadoop]$ vi
mapred-site.xml
"""内容
<!-- 指定 MR 运行在 Yarn 上 -->
<property>
集群单点启动
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
"""

3.在集群上分发配置好的 Hadoop 配置文件

[jason@hadoop102 etc]$ xsync hadoop/

4.查看文件分发情况

[jason@hadoop103 hadoop]$ cat /opt/module/hadoop2.7.2/etc/hadoop/core-site.xml

 

单点启动(了解)

1.如果集群是第一次启动,需要格式化 NameNode(我们不是 因为前面弄了伪分布式)

[jason@hadoop102 hadoop-2.7.2]$ hadoop namenode -format
"""
如果集群不是第一次启动,需要删除data和logs目录
[jason@hadoop102 hadoop-2.7.2]$ rm -rf data/ logs/
[jason@hadoop103 hadoop-2.7.2]$ rm -rf data/ logs/
[jason@hadoop104 hadoop-2.7.2]$ rm -rf data/ logs/
"""

2.在 hadoop102 上启动 NameNode和DataNode

[jason@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode
[jason@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode

3.去103和104启动datanode(namenode就一个)

$ sbin/hadoop-daemon.sh start datanode
$ sbin/hadoop-daemon.sh start datanode

4.浏览器验证

10.0.0.202:50070

 

集群群起

1.配置文件位置:

/opt/module/hadoop-2.7.2/etc/hadoop/slaves、

[jason@hadoop102 hadoop]$ vi slaves
"""内容(内容清空再添加)
hadoop102
hadoop103
hadoop104
"""
# 注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。

2.同步所有节点配置文件

[jason@hadoop102 hadoop]$ xsync slaves

3.将之前单节点启动的datanode、namenode全部退出

[jason@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop datanode
[jason@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop namenode

[jason@hadoop103 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop datanode

[jason@hadoop104 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop datanode

4.启动HDFS

[jason@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh

5.验证每个节点对于启动的服务

jps查看照着之前的表格比较不能出错

6.启动yarn(一定要在hadoop103上启动 因为rm在这里)

"""
这里需要将hadoop03的公钥分别发送给hadoop102、hadoop103、hadoop104
"""
[jason@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh

7.验证每个节点对于启动的服务

jpg

 

集群时间同步(了解)

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

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

简介步骤

(1)检查 ntp 是否安装
(2)修改 ntp 配置
    a)修改1(授权 192.168.1.0-192.168.1.255 网段上的所有机器可以从这台机器上查 询和同步时间)文件
    b)修改2(集群在局域网中,不使用其他互联网上的时间)
    c)添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群 中的其他节点提供时间同步)
(3)修改/etc/sysconfig/ntpd 文件
(4)重新启动 ntpd 服务
(5)设置 ntpd 服务开机启动

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

简介步骤

(1)在其他机器配置 1 分钟与时间服务器同步一次
(2)修改任意机器时间
(3)一分钟后查看机器是否与时间服务器同步
(4)主动同步时间

重要知识

分 时 日 月 周

返回目录

posted @ 2021-10-29 00:08  微纯册  阅读(323)  评论(0编辑  收藏  举报