大数据Hadoop入门,Hadoop安装与配置,HDFS伪分布式部署(一)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/ck784101777/article/details/102676795

一、概述(部署请跳到第二节)

1.大数据的由来

  随着计算机技术的发展,互联网的普及,信息的积累已经到了一个非常庞大的地步,信息的增长也在不断的加快,随着互联网,物联网建设的加快,信息更是爆炸式增长,收集检索,统计这些信息越发困难,传统的数据库结构难以应对这种变化,必须使用新的技术来解决这些问题

2.什么是大数据

-大数据指无法在一定时间范围内用常规工具进行捕捉,管理和处理的数据集合

-大数据需要新处理模式才能具有更强的决策力,洞察发现力和流程优化能力的海量,高增长率和多样化的信息资产

-大数据是指从各种各样类型的数据中,快速获取有价值的信息

3.大数据能做什么

-企业组织利用相关数据分析帮助他们降低成本,提高效率,开发新产品,做出更明智的业务决策等

-把数据集合并进行分析得出的信息和数据关系性,用来察觉商业趋势,判定研究质量,避免疾病扩散,打击犯罪或测定即使交通路况等

-大规模并行处理数据库,数据挖掘电网,分布式文件系统或数据库,云计算平和可扩展的存储系统

4.大数据特性

扫描二维码关注公众号,回复: 7642095 查看本文章

-Volume大体量

可从数百TB到数十数百PB,甚至是EB的规模

-Variety多样性

大数据包括各种各样格式和形态的数据

-Velocity时效性

很多大数据需要在一定的时间限度下得到及时处理

-Veracity准确性

处理的结果要确保一定的准确性

-Value大价值

大数据包含很多深度的价值,大数据分析挖掘和利用将带来巨大的商业价值

5.大数据与Hadoop

hadoop是什么

-hadoop是一种分析和处理海量数据的软件平台

-Hadoop是一款开源软件,使用JAVA开发

-Hadoop可以提供一个分布式基础架构

-具有高可靠性,高扩展性,高效性,高容错性,低成本

6.Hadoop起源

2003年Google陆续发布了3篇论文,分别是GFS,MapReduce,BigTable.此三大技术被成为Google的三驾马车,虽然没有公布源码,但发布了这三个产品的详细设计论

GFS:

GFS是一个可扩展的分布式文件系统,用于大型的,分布式的,对大量数据进行访问的应用,可以运行与廉价的普通硬件上,提供容错功能

MapReduce:

MapReduce是针对分布式平行计算的一套编程模型,由Map和Reduce组成,Map是映射,把指令分发到多个worker上,Reduce是规约,把worker计算出的结果合并

BigTable:

Bigtable是存储结构化数据,建立与GFS,Scheduler,Lock Service和MapReduce上

7.Hadhoop和Google的关系

Hadoop是Yahoo公司资助开发的,基于Google的三篇论文,使用Java开发,但是在性能上要比Google差很多,但是开源啊,老百姓都可以用,所以渐渐的就成为一种大数据的主流工具,后来Google开发的大数据工具也妥协了,选择兼容Hadoop

Hadoop是基于Google的三篇论文开发出来的,也有三大支撑技术,HDFS,MapReduce,Hbase

Hadoop与Google三篇论文的关系:

GFS-->HDFS

MapReduce-->MapReduce

BigTable-->Hbase

7.Hadoop常用组件

HDFS:Hadoop分布式文件系统(核心)

MapReduce:分布式计算框架(核心)

Yarn:集群资源管理系统(核心)

Zookeeper:分布式协作服务

Hbase:分布式列存数据库

Hive:基于Hadoop的数据仓库

Sqoop:数据同步工具

Pig:基于Hadoop的数据流系统

Mahout:数据挖掘算法库

Flume:日志收集工具

8.再来看看MapReduce,Yarn,HDFS之间的关系

HDFS分布式文件系统作为存储节点,Yarn管理存储在HDFS文件系统上的数据资源,MapReduce是一套程序,用于计算并整合数据资源

9.细谈HDFS

Hadoop集群其实就是HDFS集群,说到HDFS,下面来谈谈什么是HDFS

HDFS:其实就是个文件系统,和fastDFS类似,像百度云,阿里云等就是个文件存储系统,当然一般如果仅仅是为了用来存储文件的话直接fastDFS这个就已经够了,HDFS目的不单单是用来存储文件这么简单,它还涉及分布式计算等。

HDFS分布式系统有NameNode和DataNode,NameNode是整个文件系统目录,基于内存存储,存储的是一些文件的详细信息,比如文件名、文件大小、创建时间、文件位置等。Datanode是文件的数据信息,也就是文件本身,不过是分割后的小文件。上面图已经有做了介绍了,这里就不再赘述了。

角色:

-Client

切分文件,访问HDFS,与Namenode交互,获取文件位置信息,与DataNode交互,读取和写入数据

-Namenode

Master节点管理HDFS的名称空间和数据块映射信息,配置副本策略,处理所有客户端请求

-Secondarynode

定期合并fsimage和fsedits,推送给NameNode,紧急情况下可以协助恢复NameNode

-Datanode

数据存储节点,存储实际的数据,汇报存储信息给NameNode

HDFS工作原理,用文字有点难以表达,那么我就直接画个图吧:

观看顺序:

1)看主节点Namenode

它的首要作用就是分割大文件,将分割后的文件放到子节点datanode(假设为小文件*n),且记录第n个小文件的block_id(用于确认存放在哪个子节点上.并且备份子节点数-1份数据到其他子节点上

可以将其看做书本的目录,把一篇文章分为n个小节,记录页码

核心作用:分割 备份 定位

2)再看子节点datanode

主机点通过与子节点建立心跳确认子节点状态,若子节点宕机,则将自身的数据复制到其他节点

10.细谈Yarn

Yarn是一种新的 Hadoop资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。

Yarn角色:

-ResourceManager

处理客户端请求,启动/监控ApplicationMaster,监控NodeManager,资源分配与调度

-NodeManager

单个节点上的资源管理,处理来自ResourceManager的命令,处理来自ApplicationMaster的命令

-ApplicationMaster

数据切分,为应用程序申请资源,并分配给内部任务,任务监控与容错

-Container

对任务运行环境的抽象,封装了CPU,内存等,多维资源以及环境变量,启动命令等任务运行相关的信息资源分配与调度

-Client

用户与Yarn交互的客户端程序,提交应用程序,监控应用程序的状态,杀死应用程序等

11.细谈MapReduce

MapReduce角色与结构:

-JobTracker

Master节点只有一个,管理所有作业/任务的监控,错误处理等,将任务分解成一系列任务,并派发给TaskTracker

-TaskTracker

Slave节点,一般是多台,运行Map Task和Reduce Task,与JobTracker交互,汇报任务状态

-Map Task

解析每条数据记录,传递给用户编写的map()并执行,将输出结构写入本地磁盘,如果map-only作业,直接写入HDFS

-Reducer Task

从Map Task的执行结果中,远程读取输入数据,对数据进行排序,将数据按照分组传递给用户编写的reduce函数执行

Mapreduce工作原理:

MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。

弄懂MarReduce的关键在与弄懂Map函数和Reduce函数

Map将会生成一组键值对,以单个字符串作为键名,以1作为值

Reduce会归约Map生成的键值对,将相同键名的key归约在一起,将值累加,最终的得出某个键的总个数

map函数和Reduce函数是需要手动干预编写的,自己定义规则,以何种形式统计出数据就是大数据的核心,下图是使用wordcount方式统计字符串出现的个数

Mapreduce工作原理如下图:

MapReduce所编写好的程序将跑在各个DataNode上,这里有个概念就是计算向数据移动,也就是DataNode的数据文件存储在这里,我的程序发送到DataNode节点上去读取数据和分析数据就好了。期间会有出现各个DataNode之间进行数据发送,比如说节点DataNode1进行这台机读取数据时进行shuffle时需要把相同的key作为一组调用一次reduce,那么如果这时当然会有一些同key的在其他节点DataNode上的,所以就需要进行数据传送。Input这里的wordcount.txt就是DataNode上的文件数据。Split阶段是MapReduce一定会执行的,这是它的规则,而map阶段就是我们必须进行手动干预的,也就是编码对数据进行分析,分析成map文件,然后再shuffle阶段中自发进行数据派送,规则是以同样的key为一组调用reduce阶段进行数据压缩,reduce也是进行手动干预的,我们编码进行数据计算,计算同key的个数,统计完后就可以输出一个文件出来了,这整个过程数据的传输都是放在context这个上下文中。下面是借鉴网上的一张图,HDFS与MapReduce之间的关系协助大概就是这么个意思。

12.Hadoop生态系统

二、 hadoop部署,单机模式

1.hadoop的部署有三种模式

-单机

-伪分布式

-完全分布式

2.Hadoop单机模式安装与使用

需要安装JDK,并且配置Java环境

1)安装java环境

  1. [root@nn01 ~]# yum -y install java-1.8.0-openjdk-devel  #安装1.8以上的都可以
  2. [root@nn01 ~]# java -version  
  3. openjdk version "1.8.0_131"
  4. OpenJDK Runtime Environment (build 1.8.0_131-b12)
  5. OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
  6. [root@nn01 ~]# jps
  7. 1235 Jps

2)安装hadoop

安装hadoop需要用到几个包,可以到我的github上下载

[hadoop相关软件]https://github.com/ck784101777/hadoop

  1. [root@nn01 ~]# cd hadoop/
  2. [root@nn01 hadoop]# ls  //本例需要hadoop-2.7.7.tar.gz
  3. hadoop-2.7.7.tar.gz kafka_2.12-2.1.0.tgz zookeeper-3.4.13.tar.gz
  4. [root@nn01 hadoop]# tar -xf hadoop-2.7.7.tar.gz
  5. [root@nn01 hadoop]# mv hadoop-2.7.7 /usr/local/hadoop #无需安装直接放到目录下
  6. [root@nn01 hadoop]# cd /usr/local/hadoop
  7. [root@nn01 hadoop]# ls
  8. bin include libexec NOTICE.txt sbin
  9. etc lib LICENSE.txt README.txt share
  10. [root@nn01 hadoop]# ./bin/hadoop   //启动报错,JAVA_HOME没有找到
  11. Error: JAVA_HOME is not set and could not be found.
  12. [root@nn01 hadoop]#

3)解决报错问题

报错原因是没有配置好JAVA_HOME环境,默认是${JAVA....},修改如下

  1. [root@nn01 hadoop]# rpm -ql java-1.8.0-openjdk
  2. /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64/jre/bin/policytool
    /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64/jre/lib/amd64/libawt_xawt.so
  3.  
  4. [root@nn01 hadoop]# cd ./etc/hadoop/
  5. [root@nn01 hadoop]# vim hadoop-env.sh #25代表行数,set nu 查看行数
  6. 25 export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64 /jre"
  7. 33 export HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop" 

4)初次使用hadoop 

本例将使用hadoop的wordcount(统计词频)来统计单个文件中每个字符串出现的次数

格式:

./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar  wordcount  被统计目录或文件  输出目录

  1. [root@nn01 ~]# cd /usr/local/hadoop/ 
  2. [root@nn01 hadoop]# ./bin/hadoop  #再次执行不报错
  3. Usage: hadoop [--config confdir] [COMMAND | CLASSNAME]
  4. CLASSNAME run the class named CLASSNAME
  5. .......
  6.  
  7. [root@nn01 hadoop]# mkdir /usr/local/hadoop/input      #创建一个目录
  8. [root@nn01 hadoop]# ls
  9. bin etc include lib libexec LICENSE.txt NOTICE.txt input README.txt sbin share
  10. [root@nn01 hadoop]# cp *.txt /usr/local/hadoop/input
  11. [root@nn01 hadoop]# ./bin/hadoop jar \
  12. share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount input output    
  13.  //wordcount为参数 统计input这个文件夹,存到output这个文件里面(这个文件不能存在,要是存在会报错,是为了防止数据覆盖)
  14. [root@nn01 hadoop]# cat output/part-r-00000   //查看
  15. [root@nn01 output]# cat part-r-00000    #字符串 个数
    ""AS    2
    "AS    17
    "COPYRIGHTS    1
    "Contribution"    2
    "Contributor"    2
    "Derivative    1
    "GCC    1
    "Legal    1
    "License"    1
    "License");    2
    "Licensed    1
    "Licensor"    1

三、Hadoop伪分布式文件架构部署

伪分布式的配置和完全分布式配置类似,区别在与所有角色安装在一台机器上(Client,NameNode,Secondary NameNode)使用本地磁盘,一般生产环境都会使用完全分布式,伪分布式用来学习和测试Hadoop的功能

 

根据HDFS分布式文件架构图,我们需要至少4台主机,一台NameNode(Secondary NameNode),3台DataNode

整个流程如下:

-配置运行环境,四台主机

-配置域名解析

-在所有主机上安装JDK,JAVA环境

-主节点生成秘钥并发送到各个节点机,可以免密访问四个节点

-安装部署Hadoop,NameNode与DataNode

-修改配置文件slave

-修改配置文件core-site.xml

-修改配置文件hdfs-site.xml

-格式化分区

-测试

步骤一:运行环境准备

1)三台机器配置主机名为node1、node2、node3,配置ip地址(ip如图-1所示),yum源(系统源)

2)编辑/etc/hosts(四台主机同样操作,以nn01为例)

配置hosts,使他们可以通过主机名通信

  1. [root@nn01 ~]# vim /etc/hosts
  2. 192.168.1.60 nn01
  3. 192.168.1.61 node1
  4. 192.168.1.62 node2
  5. 192.168.1.63 node3

3)安装java环境,在node1,node2,node3上面操作(以node1为例)

  1. [root@node1 ~]# yum -y install java-1.8.0-openjdk-devel

4)布置SSH信任关系

在DataNode上生成密钥对发送给各个节点

  1. [root@nn01 ~]# vim /etc/ssh/ssh_config //第一次登陆不需要输入yes
  2. Host *
  3. GSSAPIAuthentication yes
  4. StrictHostKeyChecking no
  5. [root@nn01 .ssh]# ssh-keygen
  6. [root@nn01 .ssh]# for i in 61 62 63 64 ; do ssh-copy-id 192.168.1.$i; done
  7. //部署公钥给nn01,node1,node2,node3

5)测试信任关系

无需密码登录证明建立了信任关系

  1. [root@nn01 .ssh]# ssh node1
  2. Last login: Fri Sep 7 16:52:00 2018 from 192.168.1.60
  3. [root@node1 ~]# exit
  4. logout
  5. Connection to node1 closed.
  6. [root@nn01 .ssh]# ssh node2
  7. Last login: Fri Sep 7 16:52:05 2018 from 192.168.1.60
  8. [root@node2 ~]# exit
  9. logout
  10. Connection to node2 closed.
  11. [root@nn01 .ssh]# ssh node3

步骤二:配置hadoop

环境配置文件:hadoop-env.sh

核心配置文件:core-site.xml

HDFS配置文件:hdfs-site.xml

节点配置文件:slaves

安装hadoop在第二节有介绍

1)修改slaves文件

在DataNode上修改

  1. [root@nn01 ~]# cd /usr/local/hadoop/etc/hadoop
  2. [root@nn01 hadoop]# vim slaves
  3. node1
  4. node2
  5. node3

2)hadoop的核心配置文件core-site

fs.defaultFS:文件系统配置参数

hadoop.tmp.dir:数据目录配置参数

  1. [root@nn01 hadoop]# vim core-site.xml
  2. <configuration>
  3. <property>
  4. <name>fs.defaultFS</name>
  5. <value>hdfs://nn01:9000</value>     #hdfs://自定义命名
  6. </property>
  7. <property>
  8. <name>hadoop.tmp.dir</name>
  9. <value>/var/hadoop</value>      #保存hadoop文件的目录
  10. </property>
  11. </configuration>
  12.  
  13. [root@nn01 hadoop]# mkdir /var/hadoop        //hadoop的数据根目录

3)配置hdfs-site文件

定义NameNode和SecondNode,在一台主机上,从节点设置3台

  1. [root@nn01 hadoop]# vim hdfs-site.xml
  2. <configuration>
  3. <property>
  4. <name>dfs.namenode.http-address</name>
  5. <value>nn01:50070</value>
  6. </property>
  7. <property>
  8. <name>dfs.namenode.secondary.http-address</name>
  9. <value>nn01:50090</value>
  10. </property>
  11. <property>
  12. <name>dfs.replication</name>
  13. <value>2</value>
  14. </property>
  15. </configuration>

4)同步配置到node1,node2,node3

使用rsync命令将hadoop同步到节点机上

  1. [root@nn01 hadoop]# for i in 62 63 64 ; do rsync -aSH --delete /usr/local/hadoop/
  2. \ 192.168.1.$i:/usr/local/hadoop/ -e 'ssh' & done
  3. [1] 23260
  4. [2] 23261
  5. [3] 23262

5)查看是否同步成功

  1. [root@nn01 hadoop]# ssh node1 ls /usr/local/hadoop/
  2. .............

步骤三:格式化

格式化namenode,验证是否存在角色,查看集群是否创建成功,有多少个节点

  1. [root@nn01 hadoop]# cd /usr/local/hadoop/
  2. [root@nn01 hadoop]# ./bin/hdfs namenode -format            //格式化 namenode
  3. [root@nn01 hadoop]# ./sbin/start-dfs.sh                             //启动
  4. [root@nn01 hadoop]# jps                                                  //验证角色
  5. 23408 NameNode
  6. 23700 Jps
  7. 23591 SecondaryNameNode
  8. [root@nn01 hadoop]# ./bin/hdfs dfsadmin -report        //查看集群是否组建成功
  9. Live datanodes (3):                                                   //有三个角色成功

猜你喜欢

转载自blog.csdn.net/ck784101777/article/details/102676795