Hadoop7.06

昨日内容回顾

  • 大数据四大特征

    1.海量数据
    	数据的容量非常的大
        	1024GB = 1TB 1024TB = 1PB...
    2.高增长率
    	短时间内数据的增长速度特别快
        	天猫双十一
    3.多样性
    	数据的种类非常的多样
        	结构化数据 非结构化数据
    4.低价值密度
    	数据量越大从中获取到有效的数据效率越低(一定的前提条件)
    
  • 大数据应用场景

    应用在生活的方方面面
    人工智能
    	自动驾驶汽车 机器人 ...
    金融
    房地产
    商品营销
    ...
    
  • 大数据仓库之Hadoop

    2006在国外正式诞生
    
    作者是Doung Cutting  软件图标黄色的小象
    
  • Hadoop发行版本

    Apache  便于学习	2006
    Cloudera  用于商用	2008
    hortonworks  用于商用	2011
    
  • Hadoop重要组成

    Hadoop1.X
    	MapReduce  # 计算 + 资源调度  压力比较大
        HDFS  # 存储数据
        Common  # 公共方法
    Hadoop2.X与Hadoop3.X
    	MapReduce  # 计算 
        Yarn  # 资源调度
        HDFS  # 存储数据
        Common  # 公共方法
    
  • HDFS

    # 分布式文件管理系统
    NameNode
    	不存储真实数据 存的是数据的相关信息
    DataNode
    	存储真实数据
    Secondary NameNode
    	协助NameNode工作(数据备份 应急处理)
    ps:默认对数据有三个备份
    
  • Yarn

    # 资源调度系统
    Resource Manager  # RM
    	大老板 只能有一个
    Node Manager  # NM
    	小老板 可以有多个
    application master  # AppMr
    	员工	 可以有多个
    Container  # CR
    	办公所需要的各种资源
    
  • MapReduce

    # 将一个复杂的功能拆分成多个分配给不同的节点
    Map  拆分
    Reduce  汇总
    
  • Hadoop技术生态圈

    # 线上数据库是不能直接用于数据分析的 一般都需要先做数据的导出处理
    sqoop	结构化数据
    flume	非结构化数据
    kafka	视频、音频数据
    
    HBase  非关系型数据库
    
    Spark  对数据进行各种处理 功能比MapReduce更加强大
    
    R语言  老牌数据分析必备语言 目前正在被逐步淘汰
    

今日内容概要

  • 各大组成部分详解
  • Hadoop软件服务配置

今日内容详细

HDFS详细

⼀个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不⽅便管理和维护
HDFS只是分布式⽂件管理系统中的⼀种

HDFS的使⽤场景:适合⼀次写⼊,多次读出的场景,且不⽀持⽂件的修改。 
适合⽤来做数据分析,并不适合⽤来做⽹盘应⽤

优点
	⾼容错性
    	默认是三个副本
    适合处理⼤数据
    可构建在廉价机器上
缺点
	不适合低延时数据访问
    ⽆法⾼效的对⼤量⼩⽂件进⾏存储
    不⽀持并发操作文件
  
冷备与热备
	冷备  服务器关闭之后做备份
    热备  服务器继续提供服务内部同步备份
冷数据与热数据
	冷数据  不常用的数据
    热数据  常用的数据
 
HDFS中的⽂件在物理上是分块存储(Block),块的⼤⼩可以通过配置参数来规定,默认⼤⼩在Hadoop2.x/3.x版本中的128M,⽼版本中是64M

"""
面试题
1.为什么块的⼤⼩不能设置太⼩,也不能设置太⼤? 
    (1)HDFS的块设置太⼩,会增加寻址时间,程序⼀直在找块的开始位置; 
    (2)如果块设置的太⼤,从磁盘传输数据的时间会明显⼤于定位这个块开 
    始位置所需的时间。导致程序在处理这块数据时,会⾮常慢。 
    总结:HDFS块的⼤⼩设置主要取决于磁盘传输速率。

2.副本节点选择
	默认是三个副本 前两个位于相同机架不同节点
	另外一个一定要在不同机架上
"""

如何避免NameNode故障之后数据无法恢复访问的问题
	磁盘FsImage备份文件
    Edits文件(类似于日志文件)

MapReduce详细

优点
1.MapReduce 易于编程
它简单的实现⼀些接⼝,就可以完成⼀个分布式程序,这个分布式程序可
以分布到⼤量廉价的PC机器上运⾏。也就是说你写⼀个分布式程序,跟写
⼀个简单的串⾏程序是⼀模⼀样的。就是因为这个特点使得MapReduce编
程变得⾮常流⾏。
2.良好的扩展性
当你的计算资源不能得到满⾜的时候,你可以通过简单的增加机器来扩展
它的计算能⼒。
3.⾼容错性
MapReduce设计的初衷就是使程序能够部署在廉价的PC机器上,这就要求
它具有很⾼的容错性。⽐如其中⼀台机器挂了,它可以把上⾯的计算任务
转移到另外⼀个节点上运⾏,不⾄于这个任务运⾏失败,⽽且这个过程不
需要⼈⼯参与,⽽完全是由Hadoop内部完成的。
4.适合PB级以上海量数据的离线处理
可以实现上千台服务器集群并发⼯作,提供
数据处理能⼒。

缺点
1. 不擅⻓实时计算
MapReduce⽆法像MySQL⼀样,在毫秒或者秒级内返回结果。
2. 不擅⻓流式计算
流式计算的输⼊数据是动态的,⽽MapReduce的输⼊数据集是静态的,不能
动态变化。这是因为MapReduce⾃身的设计特点决定了数据源必须是静态 的。
3. 不擅⻓DAG(有向图)计算
多个应⽤程序存在依赖关系,后⼀个应⽤程序的输⼊为前⼀个的输出。在
这种情况下,MapReduce并不是不能做,⽽是使⽤后,每个MapReduce作业
的输出结果都会写⼊到磁盘,会造成⼤量的磁盘IO,导致性能⾮常的低下。

实操

集群:多台服务器组成的群体
如何在一台计算机上面模拟出多台计算机的效果?
	多台虚拟机
    
克隆
	链接克隆
    	速度快时间短 但是原虚拟机不能消失
    完整克隆
    	速度慢时间长 但是克隆出来之后跟原虚拟机没有半毛钱关系了
        
针对克隆出来的机器一定要修改IP地址并重启网卡
	尝试着ping外网和局域网

前期机器准备

  • 新建虚拟机并克隆出多台备用

  • 修改克隆机器相关配置文件

    # 可能性1
    vi /etc/sysconfig/network-scripts/ifcfg-eth0  # 修改主机名
    vi /etc/sysconfig/network-scripts/ifcfg-eth1  # 修改ip地址
    
    # 可能性2
    vi /etc/sysconfig/network-scirpts/ifcfg-ens33
    	'''
    	1.修改ip地址
    	2.ONBOOT改为yes
    	3.BOOTPROTO改为none
    	'''
    
  • 修改主机名(可选)

    hostnamectl set-hostname 主机名
    
    bash
    
  • 设置对应关系

    vim /etc/hosts
    """
    192.168.1.100 hadoop100
    192.168.1.101 hadoop101
    """
    # 注意多台机器之间都必须有映射关系才可互相查找
    
    # 要想在自己的浏览器里面访问映射主机名,需要修改windows系统的hosts文件
    """
    192.168.1.100 hadoop100
    192.168.1.101 hadoop101
    """
    
  • 关闭防火墙

    systemctl stop firewalld  # 临时关闭
    systemctl disable firewalld  # 然后reboot 永久关闭
    systemctl status  firewalld  # 查看防火墙状态
    
  • 重启网络

    systemctl restart network
    
  • xshell分别链接即可

前期文件准备

  • 在opt目录下创建两个文件夹

    mkdir software  # 存放压缩文件
    mkdir module  # 存放解压之后的文件Hadoop103
    
  • 将JDK个Hadoop压缩包传入

    方式1(拖拽直接上传):
    	1.下载对应插件
      	yum install lrzsz -y
        	# 验证是否安装成功
        	rpm -qa lrzsz
      2.python中的paramiko模块
    

Paramiko模块

通过ssh远程连接服务器并执行想要命令 类似于Xshell
链接服务器有两种方式
	1.用户名和密码连接服务器
	2.公钥私钥连接服务器
paramiko模块支持上面两种连接服务器的方式

# 安装
pip3 install paramiko

Paramiko远程执行命令

# 用户名和密码的方式
import paramiko
# 创建ssh对象
ssh = paramiko.SSHClient()
# 允许链接不在know_hosts文件中主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 链接服务器
ssh.connect(hostname='IP',port=22,username='root',password='jason123')
# 执行命令
stdin, stdout, stderr = ssh.exec_command('ip a')
# 获取结果
res = stdout.read()  # 基于网络传输 该结果是一个bytes类型
print(res.decode('utf-8'))
# 断开链接
ssh.close()
  
  
# 公钥私钥方式
首先你要产生你自己的公钥和私钥  然后将你的公钥上传到服务器保存  之后就可以通过私钥来链接
"""
  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
"""

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

Paramiko上传下载文件

# 用户名密码方式

import paramiko
# 用户名和密码
transport = paramiko.Transport(('172.16.219.168', 22))
transport.connect(username='root', password='jason123')
sftp = paramiko.SFTPClient.from_transport(transport)
# 上传文件
sftp.put("a.txt", '/data/tmp.txt')  # 注意上传文件到远程某个文件下 文件必须存在
# 下载文件
sftp.get('/data/tmp.txt', 'hahahha.txt')  # 将远程文件下载到本地并重新命令
transport.close()


# 公钥私钥方式
import paramiko
private_key = paramiko.RSAKey.from_private_key_file('a.txt')
transport = paramiko.Transport(('172.16.219.168', 22))
transport.connect(username='root', pkey=private_key)
sftp = paramiko.SFTPClient.from_transport(transport)
# 将location.py 上传至服务器 /tmp/test.py
sftp.put('/tmp/location.py', '/tmp/test.py')
# 将remove_path 下载到本地 local_path
sftp.get('remove_path', 'local_path')
transport.close()

公钥私钥

在实际工作中为了安全性考虑,很多时候我们并不会使用用户名密码的方式登录软件
而是采用公钥私钥的方式
https://zhuanlan.zhihu.com/p/31477508

JDK环境准备

# 1.将解压之后的放入module
tar -zxvf jdk...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环境待见需要依赖于java的jdk包

作业

1.完成课上所有环境配置
2.复习课程内容准备面试
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值