Hadoop学习笔记(一):概述、运行模式、xsync集群分发脚本、SSH无密登录、集群时间同步

本文详细介绍了Hadoop的运行模式,包括本地模式、伪分布式和完全分布式,强调了集群配置和SSH无密登录的重要性。此外,还讲解了集群分发脚本xsync的编写和使用,以及集群时间同步的设置,帮助读者深入理解Hadoop的集群操作。
摘要由CSDN通过智能技术生成


本文通过学习尚硅谷视频(https://www.bilibili.com/video/BV1F5411e79W)整理学习笔记所得。

概述

  • Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
  • 主要解决海量数据的存储和海量数据的分析计算问题。
  • 广义上来说,Hadoop通常指一个更广泛的概念——Hadoop生态圈(Hadoop、Hive…)
  • Hadoop创始人Doug Cutting,图标来源于他儿子的玩具:飞起的大象。
  • 发展历史:Google是Hadoop的思想资源(三篇论文)。
    1. GFS --> HDFS (分布式文件系统)
    2. Map-Reduce --> MR
    3. BigTable --> HBase
  • 三大发行版本:Apache、Cloudera、Hortonworks
    1. Apache是最原始(最基础)的版本,对于入门学习最好,要自己配置版本。
    2. Cloudera(CDH)在大型互联网企业中用的较多,解决了版本兼容问题。(收费)
    3. Hortonworks文档较好。
  • 优势:
    1. 高可靠性:Hadoop底层维护多个数据副本(默认是3个),因此某个出现故障,也不会导致数据丢失。
    2. 高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点。
    3. 高效性:在MapReduce思想下,Hadoop是并行工作的,以加快任务处理速度。
    4. 高容错性:能够自动将失败任务重新分配。

Hadoop1.x和Hadoop2.x区别

在这里插入图片描述
在Hadoop1.x时代,Hadoop中的MapReduce同时处理业务逻辑运算和资源的调度,耦合性较大。在Hadoop2.x时代,增加了Yarn,Yarn只负责资源的调度,MapReduce只负责运算,解耦。

Hadoop组成

HDFS 数据存储

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

YARN 资源调度

在这里插入图片描述

MapReduce 计算

分为两个阶段:Map和Reduce。其中Map阶段是并行处理输入数据;Reduce阶段是对Map结果进行汇总。

大数据技术生态体系

在这里插入图片描述

目录结构

  • bin:存放hdfs、hadoop、yarn等服务。
  • etc:存放配置文件。
  • include:包含的其他文件,后缀“.h”。
  • lib、libexec:本地库。
  • LICENSE.txt:文件。
  • NOTICE.txt:通知文件。
  • README.txt:说明文件。
  • sbin:存放了大量集群启动停止脚本。
  • share:大量说明文档、开发案例。

安装

首先确保jdk安装完成,并配置JAVA_HOME路径。
安装hadoop2.7.2,使用$ tar -zxvf 压缩包命令解压,然后配置hadoop_home。
注意:这里最好保证hadoop和jdk安装包在同一目录下,方便后期搭建集群时进行拷贝。

运行模式

Hadoop运行模式包括:本地模式、伪分布式模式以及完全分布式模式。

官方文档:http://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SingleCluster.html

本地模式

官方 Grep 案例

  1. 在hadoop-2.7.2目录下,创建输入文件夹:$ mkdir input
  2. 将etc/hadoop目录下的xml文件复制到input目录下:$ cp etc/hadoop/*.xml input
  3. bin下的hadoop命令,jar表示执行一个java程序,grep过滤掉多个examples案例。输出的output文件夹必须原来不存在,否则会报FileAlreadyExistsException异常,可以自定义名字。执行input目录下的文件,将结果输出到output文件夹下。其中input、output分别是输入文件夹input路径 输出文件夹output路径。
    $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
  4. 查看输出结果:$ cat output/*

官方 WordCount 案例

设计统计、汇总的都与WordCount案例有关。

  1. 在hadoop-2.7.2目录下,创建wcinput输入文件夹:$ mkdir wcinput
  2. 进入wcinput目录下,创建查询关键词文件“wc.input”:$ cd wcinput+$ touch wc.input
  3. 编辑文件,添加要查询的关键词:$ vi wc.input
  4. 在wc.input文件中输入自己想要查询的关键字,多个关键字用空格隔开。
  5. 在hadoop-2.7.2目录下,执行程序:$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput
  6. 统计关键词出现次数,返回结果即次数,在wcoutput文件夹下执行命令:$ cat part-r-00000

伪分布式模式

所有配置信息完全是按照集群的方式搭建的,但只有一台服务器。

启动HDFS并运行MapReduce程序

(1)配置集群

  1. 配置/etc/hadoop/ hadoop-env.sh文件
    获取JAVA_HOME变量的路径:$ echo $JAVA_HOME
    找到文件中export JAVA_HOME=${JAVA_HOME},将${JAVA_HOME}改为实际JAVA_HOME的路径。这样远程使用的时候才不会出现失效的情况。
  2. 在hadoop-2.7.2/etc/hadoop/core-site.xml下配置NameNode地址:(配置了fs.defaultFS后,原先的本地运行模式就不能成功了,因为协议改为了hdfs,而且路径也变了)
    <configuration>
    	<!-- 指定HDFS中NameNode的地址, 由于实际只有一台服务器,为hadoop101添加了地址映射,实际hadoop101是localhost本机 -->
    	<!-- 若没有配置地址映射,则直接写localhost:9000 -->
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://hadoop101:9000</value>
        </property>
    	<!-- 指定Hadoop运行时产生文件的存储目录,系统会自动创建。要确保存储路径的内存大小足够大,若满了移动文件较复杂 -->
    	<!-- 默认是存储在/tmp/hadoop-${username}目录下 -->
    	<property>
    		<name>hadoop.tmp.dir</name>
    		<value>/opt/module/hadoop-2.7.2/data/tmp</value>
    	</property>
    </configuration>
    
  3. 配置副本数量:hadoop-2.7.2/etc/hadoop/hdfs-site.xml文件。默认副本数量是三个。
    注意:如果只有一台服务器,但是默认副本数量是3,仍然只会在这一台服务器上保存一份副本。但如果后期添加了服务器,会自动备份数据,实现一个数据三个副本。
    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>1</value>
        </property>
    </configuration>
    

(2)启动集群

  1. 格式化NameNode(第一次启动时才进行格式化,格式化会清空原来集群的数据):$ bin/hdfs namenode -format
    注意:格式化前要先查看进程是否关闭$ jps,若未关闭则关闭。然后清除多余数据,再进行格式化。若jps命令不生效,可能是JAVA_HOME配置的问题,配置完成之后需要先source一下文件才会生效。

DataNode在启动的时候会生成和NameNode一样的集群ID(clusterId),只有集群ID相同,NameNode和DataNode才能同时工作。而格式化操作会格式化NameNode,产生新的NameNode,同时生成新的集群ID。这会导致DataNode和NameNode的集群id不一致,从而导致DataNode、NameNode进程同时只能有一个能工作。使用$ rm -rf data/ logs/删除原先的数据。
因此不要频繁格式化数据,必要的格式化之前,应该先删除DataNode里面的信息(默认在/tmp目录下,如果自定义了目录,就要在自定义目录下删除数据)

  1. 启动NameNode:$ sbin/hadoop-daemon.sh start namenode
  2. 启动DataNode:$ sbin/hadoop-daemon.sh start datanode
    查看是否启动成功:$ jps。若启动成功,会返回namenode、datanode、jps。
    注意:jps命令属于JDK,如果JDK没有安装成功,则会提示没有这个命令。
    若jps不生效,则是因为全局变量hadoop java没有生效,需要执行$ source /etc/profile命令。

查询hadoop的集群情况,可以在网址输入:IP:50070查看,也可以输入上面在core-site文件下配置的namenode地址查看namenode情况。

(3)执行MapReduce程序
操作hdfs,固定写法:$ bin/hdfs dfs 要操作的命令

  • 创建一个多级目录的文件路径:$ bin/hdfs dfs -mkdir -p /user/atguigu/input
  • 查看根路径目录:$ bin/hdfs dfs -ls /
  • 查看多级目录:$ bin/hdfs dfs -lsr /
  • 将本地文件上传到指定路径中:$ bin/hdfs dfs -put 源数据路径 将数据上传到的路径
    例如将本地文件上传到hdfs的input路径上:$ bin/hdfs dfs -put wcinput/wc.input /user/atguigu/input

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值