前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大数据_Hadoop初体验

大数据_Hadoop初体验

原创
作者头像
Pandolar
修改2022-01-04 10:27:29
9670
修改2022-01-04 10:27:29
举报
文章被收录于专栏:Pandolar个人学习

Apache Hadoop

Hadoop介绍

Hadoop简介

  • 狭义上:hadoop指的是Apache一款java开源软件,是一个大数据分析处理平台。
  • Hadoop HDFS:分布式文件系统。 解决了海量数据存储问题。
代码语言:txt
复制
    Hadoop Distributed File System (HDFS™)
  • Hadoop MapReduce:分布式计算框架。解决海量数据计算问题。
代码语言:txt
复制
    parallel processing of large data sets.
  • Hadoop YARN:集群资源管理和任务调度。
代码语言:txt
复制
    A framework for job scheduling and cluster resource management.
    
    #资源指的是和程序运行相关的硬件资源
    cpu ram内存
    
    #任务调度
    集群资源繁忙的时候 如何分配资源给各个程序  调度
    调度的关键是策略:先来后到  权重
  • 广义上:Hadoop指的是hadoop生态圈。
代码语言:txt
复制
  提供了大数据的几乎所有软件。
  采集、存储、导入、分析、挖掘、可视化、管理...
image-20211225095710933
image-20211225095710933

Hadoop起源发展

  • Hadoop之父--Doug Cutting 卡大爷
  • 起源项目Apache Nutch。 致力于构建一个全网搜索引擎。
  • Google也在做搜索,也遇到这些问题,内部解决了。
  • google不想开源软件,但是又憋的难受,怕被人不知道,写论文发表。
  • 前后写了3篇论文(谷歌是使用c实现的)。
代码语言:txt
复制
    谷歌分布式文件系统(GFS)------>HDFS
    谷歌版MapReduce 系统------>Hadoop MapReduce
    bigtable---->HBase
  • 基于论文的影响 Nutch团队实现了相应的java版本开源组件。
  • Nutch团队把HDFS和MapReduce抽取独立成为单独软件在2008年贡献给了Apache。开源。
  • Doug Cutting 看到他儿子在牙牙学语时,抱着黄色小象,亲昵的叫hadoop,他灵光一闪,就把这技术命名为 Hadoop,而且还用了黄色小象作为标示 Logo。

Hadoop特性优点

  • 分布式、扩容能力
代码语言:txt
复制
  不再注重单机能力 看中的是集群的整体能力。
  动态扩容、缩容。
  • 成本低
代码语言:txt
复制
  在集群下 单机成本很低 可以是普通服务器组成集群
  意味着大数据处理不一定需要超级计算机。
  • 高效率 并发能力
  • 可靠性
  • 通用性
代码语言:txt
复制
  #技术是相同的 业务不相同的
  #hadoop精准区分技术和业务。
  
  做什么?(what need to do)---->业务问题(20%)
  怎么做?(how to do)----->技术问题(80%)
  
  Hadoop把技术实现了 用户负责业务问题。
  
  原来大数据这么简单 可以这么玩。
image-20211225102607088
image-20211225102607088

Hadoop集群搭建

发行版本

  • 官方社区版本 Apache基金会官方
  • 版本新 功能最全的
  • 不稳定 兼容性需要测试 bug多
  • 商业版本 商业公司在官方版本之上进行商业化发行。著名:Cloudera、hotonWorks、MapR
  • 稳的一批 兼容性极好 技术支持 本地化支持 一键在线安装
  • 版本不一定是最新的 辅助工具软件需要收费
代码语言:txt
复制
    Cloudera发行的hadoop生态圈软件叫做CDH版本。
    Cloudera’s Distribution Including Apache Hadoop。
    
    https://www.cloudera.com/products/open-source/apache-hadoop/key-cdh-components.html
    
    Hortonworks Data Platform (HDP)
  • 本次使用的是Apache 3.3.0版本。
  • Hadoop本身版本变化
  • hadoop 1.x
代码语言:txt
复制
    只有hdfs mapreduce. 架构过于垃圾 性能不高 当下企业中没人使用了。
  • hadoop 2.x
代码语言:txt
复制
    hdfs  MapReduce  yarn.
  • hadoop 3.x
代码语言:txt
复制
代码语言:txt
复制
架构和2一样 性能做了优化
代码语言:txt
复制

Hadoop集群

  • 通常是有hdfs集群和yarn集群组成。两个集群都是标准的主从架构集群。
  • 两个集群逻辑上分离 物理上在一起。(
image-20211225113719644
image-20211225113719644
  • HDFS集群:解决了海量数据存储 分布式存储系统
  • 主角色:namenode(NN)
  • 从角色:datanode(DN)
  • 主角色辅助角色"秘书角色":secondarynamenode (SNN)
  • YARN集群:集群资源管理 任务调度
  • 主角色:resourcemanager(RM)
  • 从角色:nodemanager(NM)

Hadoop部署模式、集群规划

  • 单机模式 Standalone
代码语言:txt
复制
  一台机器,所有的角色在一个java进程中运行。 适合体验。
  • 伪分布式
代码语言:txt
复制
  一台机器 每个角色单独的java进程。 适合测试
  • 分布式 cluster
代码语言:txt
复制
  多台机器  每个角色运行在不同的机器上  生产测试都可以
  • 高可用(持续可用)集群 HA - High Available
代码语言:txt
复制
  在分布式的模式下 给主角色设置备份角色  实现了容错的功能 解决了单点故障
  保证集群持续可用性。
  • image-20211225145052520
    image-20211225145052520
  • Hadoop集群的规划
  • 根据软件和硬件的特性 合理的安排各个角色在不同的机器上。
代码语言:txt
复制
- 有冲突的尽量不部署在一起
- 有工作依赖尽量部署在一起
- nodemanager  和datanode是基友
代码语言:txt
复制
    node1: namenode  datanode                    | resourcemanager  nodemanger
    node2:			 datanode   secondarynamenode|			        nodemanger
    node3:			 datanode                    |  		        nodemanger
  • Q:如果后续需要扩容hadoop集群,应该增加哪些角色呢?
代码语言:txt
复制
代码语言:txt
复制
node4:  datanode  nodemanger
代码语言:txt
复制
node5:  datanode  nodemanger
代码语言:txt
复制
node6:  datanode  nodemanger
代码语言:txt
复制
.....
代码语言:txt
复制

Hadoop源码编译

https://archive.apache.org/dist/

Apache软件基金会的所有软件所有版本的下载地址.

  • 源码下载地址
代码语言:txt
复制
  https://archive.apache.org/dist/hadoop/common/
  
  hadoop-3.3.0-src.tar.gz    source 源码包
  hadoop-3.3.0.tar.gz        官方编译后安装包
  • 对应java语言开发的项目软件来说,所谓的编译是什么?
代码语言:txt
复制
  xxx.java(源码)---->xxx.class(字节码)---->jar包
  • 正常来说,官方网站提供了安装包,可以直接使用,为什么要自己编译呢?
  • 修改源码之后需要重新编译。
  • 官方提供的最大化编译 满足在各个平台运行,但是不一定彻底兼容本地环境。
  • 某些软件,官方只提供源码。
代码语言:txt
复制
  native library 本地库。
  官方编译好的 Hadoop的安装包没有提供带 C程序访问的接口。主要是本地压缩支持、IO支持。
  • 怎么编译?
代码语言:txt
复制
  在源码的根目录下有编译相关的文件BUILDING.txt 指导如何编译。
  使用maven进行编译 联网jar.
  • 可以使用提供编译好的安装包
代码语言:txt
复制
  hadoop-3.3.0-Centos7-64-with-snappy.tar.gz

Hadoop具体安装部署

详细安装步骤参考课程资料:

《day02Hadoop基础\06软件\hadoop-3.3.0\Hadoop3.3.0Linux编译安装.md》

服务器基础环境准备

代码语言:txt
复制

ip、主机名

hosts映射 别忘了windows也配置

防火墙关闭

时间同步

免密登录 node1---->node1 node2 node3

JDK安装

代码语言:txt
复制

安装包目录结构

代码语言:txt
复制

#上传安装包到/export/server 解压

bin #hadoop核心脚本 最基础最底层脚本

etc #配置目录

include

lib

libexec

LICENSE.txt

NOTICE.txt

README.txt

sbin #服务启动 关闭 维护相关的脚本

share #官方自带实例 hadoop相关依赖jar

代码语言:txt
复制

配置文件的修改

官网文档:https://hadoop.apache.org/docs/r3.3.0/

  • 第一类 1个 hadoop-env.sh
  • 第二类 4个 core|hdfs|mapred|yarn-site.xml
  • site表示的是用户定义的配置,会覆盖default中的默认配置。
  • core-site.xml 核心模块配置
  • hdfs-site.xml hdfs文件系统模块配置
  • mapred-site.xml MapReduce模块配置
  • yarn-site.xml yarn模块配置
  • 第三类 1个 workers
  • image-20211225151801375
    image-20211225151801375

scp安装包到其他机器

代码语言:txt
复制

root@node1 server$ scp -r /export/server/hadoop root@node2:$PWD

root@node1 server$ scp -r /export/server/hadoop root@node3:$PWD

代码语言:txt
复制

Hadoop环境变量配置

代码语言:txt
复制

vim /etc/profile

HADOOP_HOME=/export/server/hadoop/

PATH=$PATH:$HADOOP_HOME/etc/hadoop

source /etc/profile

代码语言:txt
复制

hadoop namenode format

  • format准确来说翻译成为初始化比较好。对namenode工作目录、初始文件进行生成。
  • 通常在namenode所在的机器执行 执行一次。首次启动之前
代码语言:txt
复制
  #在node1 部署namenode的这台机器上执行
  
  hadoop namenode -format
  
  #执行成功 日志会有如下显示
  21/05/23 15:38:19 INFO common.Storage: Storage directory /export/data/hadoopdata/dfs/name has been successfully formatted.
  
  [root@node1 server]# ll /export/data/hadoopdata/dfs/name/current/
  total 16
  -rw-r--r-- 1 root root 321 May 23 15:38 fsimage_0000000000000000000
  -rw-r--r-- 1 root root  62 May 23 15:38 fsimage_0000000000000000000.md5
  -rw-r--r-- 1 root root   2 May 23 15:38 seen_txid
  -rw-r--r-- 1 root root 207 May 23 15:38 VERSION
  • Q:如果不小心初始化了多次,如何?
  • 现象:主从之间互相不识别。
  • 解决
代码语言:txt
复制
代码语言:txt
复制
#企业真实环境中    枪毙
代码语言:txt
复制
#学习环境
代码语言:txt
复制
删除每台机器上hadoop.tmp.dir配置指定的文件夹/export/data/hadoop-3.3.0。 
代码语言:txt
复制
重新format。
代码语言:txt
复制

Hadoop集群启动

单节点单进程逐个手动启动

  • HDFS集群
代码语言:txt
复制
  #hadoop2.x版本命令
  hadoop-daemon.sh start|stop  namenode|datanode|secondarynamenode
  
  #hadoop3.x版本命令
  hdfs --daemon start|stop namenode|datanode|secondarynamenode
  • YARN集群
代码语言:txt
复制
  #hadoop2.x版本命令
  yarn-daemon.sh start|stop resourcemanager|nodemanager
  
  #hadoop3.x版本命令
  yarn --daemon start|stop resourcemanager|nodemanager
  • 优点:精准的控制每个角色每个进程的启停。避免了群起群停(时间成本)。
  • image-20211225162307379
    image-20211225162307379

脚本一键启动

  • 前提:配置好免密登录。ssh
代码语言:txt
复制
  ssh-copy-id node1.itcast.cn
  ssh-copy-id node2.itcast.cn
  ssh-copy-id node3.itcast.cn
  • HDFS集群
代码语言:txt
复制
  start-dfs.sh 
  stop-dfs.sh 
  • YARN集群
代码语言:txt
复制
  start-yarn.sh
  stop-yarn.sh
  • 更狠的 - 首次启动集群
代码语言:txt
复制
  start-all.sh
  stop-all.sh
  
  [root@node1 ~]# start-all.sh 
  This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh

集群进程确认和错误排查

  • 确认是否成功
代码语言:txt
复制
  [root@node1 ~]# jps
  8000 DataNode
  8371 NodeManager
  8692 Jps
  8264 ResourceManager
  7865 NameNode
  • 如果进程不在 看启动运行日志!!!!!!!!!!!!!
代码语言:txt
复制
  #默认情况下 日志目录
  cd /export/server/hadoop-3.3.0/logs/
  
  #注意找到对应进程名字 以log结尾的文件

Hadoop初体验

  • Hadoop Web UI页面
  • HDFS集群 http://namenode_host:9870
  • YARN集群 http://resourcemanager_host:8088
代码语言:txt
复制
  http://node1:9870/dfshealth.html#tab-overview

初体验之HDFS

  • 本质就是存储文件的 和标准文件系统一样吗?
  • 也是有目录树结构,也是从根目录开始的。
  • 文件是文件、文件夹是文件夹(对于zk来说)
  • 和linux很相似
  • 上传小文件好慢。为什么慢?和分布式有没有关系?

体验之MapReduce+yarn

  • MapReduce是分布式程序 yarn是资源管理 给程序提供运算资源。 Connecting to ResourceManager
代码语言:txt
复制
  [root@node1 mapreduce]# pwd
  /export/server/hadoop-3.3.0/share/hadoop/mapreduce
  
  hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi  2 2
  • MR程序运行首先连接YRAN ResourceManager,连接它干什么的?要资源。
  • MR程序好像是两个阶段 ,先Map 再Reduce。
  • 数据量这么小的情况下,为什么MR这么慢? MR适合处理大数据场景还是小数据场景?

Hadoop辅助功能

MapReduce jobhistory服务

  • 背景
代码语言:txt
复制
  默认情况下,yarn上关于MapReduce程序执行历史信息、执行记录不会永久存储;
  一旦yarn集群重启 之前的信息就会消失。
  • 功能
代码语言:txt
复制
  保存yarn上已经完成的MapReduce的执行信息。
  • 配置
  • 因为需求修改配置。重启hadoop集群才能生效。
代码语言:txt
复制
    vim mapred-site.xml
    
    <property>
    	<name>mapreduce.jobhistory.address</name>
    	<value>node1:10020</value>
    </property>
    
    <property>
    	<name>mapreduce.jobhistory.webapp.address</name>
    	<value>node1:19888</value>
    </property>
  • scp同步给其他机器
代码语言:txt
复制
    scp /export/server/hadoop-3.3.0/etc/hadoop/mapred-site.xml node2:/export/server/hadoop-3.3.0/etc/hadoop/
    
    scp /export/server/hadoop-3.3.0/etc/hadoop/mapred-site.xml node3:/export/server/hadoop-3.3.0/etc/hadoop/
  • 重启hadoop集群
  • 自己手动启停jobhistory服务。
代码语言:txt
复制
代码语言:txt
复制
#hadoop2.x版本命令
代码语言:txt
复制
mr-jobhistory-daemon.sh start|stop historyserver
代码语言:txt
复制
#hadoop3.x版本命令
代码语言:txt
复制
mapred --daemon start|stop historyserver
代码语言:txt
复制
[root@node1 ~]# jps
代码语言:txt
复制
13794 JobHistoryServer
代码语言:txt
复制
13060 DataNode
代码语言:txt
复制
12922 NameNode
代码语言:txt
复制
13436 NodeManager
代码语言:txt
复制
13836 Jps
代码语言:txt
复制
13327 ResourceManager
代码语言:txt
复制

HDFS 垃圾桶机制

  • 背景 在windows叫做回收站
代码语言:txt
复制
  在默认情况下 hdfs没有垃圾桶 意味着删除操作直接物理删除文件。
  
  [root@node1 ~]# hadoop fs -rm /itcast/1.txt
  Deleted /itcast/1.txt
  • 功能:和回收站一种 在删除数据的时候 先去垃圾桶 如果后悔可以复原。
  • 配置
代码语言:txt
复制
  在core-site.xml中开启垃圾桶机制
  
  指定保存在垃圾桶的时间。单位分钟
  
  <property>
  	<name>fs.trash.interval</name>
  	<value>1440</value>
  </property>
  • 集群同步配置 重启hadoop服务。
代码语言:txt
复制
  [root@node1 hadoop]# pwd
  /export/server/hadoop-3.3.0/etc/hadoop
  [root@node1 hadoop]# scp core-site.xml node2:$PWD
  core-site.xml                                              100% 1027   898.7KB/s   00:00    
  [root@node1 hadoop]# scp core-site.xml node3:$PWD
  core-site.xml 
  • 垃圾桶使用
  • 配置好之后 再删除文件 直接进入垃圾桶
代码语言:txt
复制
    [root@node1 ~]# hadoop fs -rm /itcast.txt
    INFO fs.TrashPolicyDefault: Moved: 'hdfs://node1:8020/itcast.txt' to trash at: hdfs://node1:8020/user/root/.Trash/Current/itcast.txt
  • 垃圾桶的本质就是hdfs上的一个隐藏目录。
代码语言:txt
复制
    hdfs://node1:8020/user/用户名/.Trash/Current
  • 后悔了 需要恢复怎么做?
代码语言:txt
复制
    hadoop fs -cp /user/root/.Trash/Current/itcast.txt /
  • 就想直接删除文件怎么做?
代码语言:txt
复制
    hadoop fs -rm -skipTrash /itcast.txt
     
    [root@node1 ~]#  hadoop fs -rm -skipTrash /itcast.txt
    Deleted /itcast.txt

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Apache Hadoop
    • Hadoop介绍
      • Hadoop简介
      • Hadoop起源发展
      • Hadoop特性优点
    • Hadoop集群搭建
      • 发行版本
      • Hadoop集群
      • Hadoop部署模式、集群规划
      • Hadoop源码编译
    • Hadoop具体安装部署
      • 服务器基础环境准备
      • 安装包目录结构
      • 配置文件的修改
      • scp安装包到其他机器
      • Hadoop环境变量配置
      • hadoop namenode format
    • Hadoop集群启动
      • 单节点单进程逐个手动启动
      • 脚本一键启动
      • 集群进程确认和错误排查
    • Hadoop初体验
      • 初体验之HDFS
      • 体验之MapReduce+yarn
    • Hadoop辅助功能
      • MapReduce jobhistory服务
      • HDFS 垃圾桶机制
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档