大数据

大数据介绍

大数据的由来

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

什么是大数据

大数据的定义:
-大数据指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产
-是指从各种各样类型的数据中,快速获取得有价值的信息
大数据能做什么:
-企业组织利用相关数据分析帮助他们降低成本、提高效率、开发新产品、做出更明智的业务决策等
-把数据集合并后进行分析得出的信息和数据关系性、用来察觉商业趋势、判定研究质量、避免疾病扩散、打击犯罪或测定即时交通路况等
-大规模并行处理数据库,数据挖掘电网,分布式文件系统或数据库,计算机平和可扩展的存储系统等

大数据特性

特性
大数据的5V特性是什么
-Volume(大体量): 可从数百TB到数十数百PB、甚至EB的规模
-Variety(多样性): 大数据包括各种格式和形态的数据
-Velocity(时效性):很多大数据需要在一定的时间限度下得到及时处理
-Veracity(准确性):处理的结果要保证一定的准确性
-Value(大价值): 大数据包含很多深度的价值,大数据分析挖掘和利用将带来巨大的商业价值

大数据与Hadoop

Hadoop是什么
-Hadoop是一种分析和处理海量数据的软件平台
-Hadoop是一款开源软件,使用JAVA开发
-Hadoop可以提供一个分布式基础架构
Hadoop特点:
-高可靠性、高扩展性、高效性、高容错性、低成本

Hadoop

Hadoop起源

1.2003年开始Google陆续发表了3篇论文
-GFS,MapReduce,BigTable
2.GFS
-GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用
-可以运行于廉价的普通硬件上,提供容错功能
3.MapReduce
-MapReduce是针对分布式并行计算的一套编程模型,由Map和Reduce组成,Map是映射,把指令分发到多个worker上,Reduce是规约,把worker计算出的结果合并
4.BigTable
-BigTable是存储结构化数据
-BigTable建立在GFS,Scheduler,Lock Service和MapReduce之上
-每个Table都是一个多维的稀疏图
5.GFS、MapReduce和BigTable三大技术被称为Google的三驾马车,虽然没有公布源码,但发布了这三个产品的详细设计论
6.Yahoo资助的Hadoop,是按照这三篇论文的开源Java实现的,但在性能上Hadoop比Google要差很多
-GFS —> HDFS
-MapReduce —> MapReduce
-BigTable —> Hbase

Hadoop组件

Hadoop常用组件

HDFS: Hadoop分布式文件系统(核心组件)
MapReduce: 分布式计算框架(核心组件)
Yarn: 集群资源管理系统(核心组件)
Zookeeper: 分布式协作服务
HBase: 分布式列数据库
Hive: 基于Hadoop的数据仓库
Sqoop: 数据同步工具
Pig:基于Hadoop的数据流系统
Mahout: 数据挖掘算法库
;Flume: 日志收集工具

Hadoop核心组件

核心组件

Hadoop生态系统

生态系统

HDFS结构

HDFS结构

HDFS角色及概念

Hadoop体系中数据存储管理的基础,是一个高度容错的系统,用于在低成本的通用硬件上运行
角色和概念: -Client -Namenode -Sconedarynode -Datanode
NameNode: 分配存储计算管理
-master节点,管理HDFS的名称空间和数据块映射信息,配置副本策略(处理存放几副本),处理所有客户端请求
Secondary NameNode:
-定期合并fsimage(存放记录,文件映射数据)和fsedits(补丁文件),推送给NameNode
-紧急情况下,可辅助恢复NameNode
但Sedcondary NameNode并非NameNode的热备
DataNode :存储的具体位置
-数据存储节点,存储实际的数据
-汇报存储信息给NameNode
(client问NameNode存储位置,NameNode返回信息给client,client进行位置存储,返回信息给NameNode存储完成)
Client:
-切分文件
-访问HDFS
-与NameNode交互,获取文件位置信息
-与Datanode交互,读取和写入数据
Block:
-每块缺省128MB大小
-每块可以多个副本

MapReduce结构

结构图

MapReduce结构及概念

源自于Google的MapReduce论文,JAVA实现的分布式计算框架
角色概念:
-JobTracker
-TaskTracker
-Map Task
-Reducer Task
Jobtracker;
-Master节点只有一个
-管理所有作业/任务的监控、错误处理等
-将任务分解成一系列任务,并分派给TaskTracker
TaskTracker;
-Slave节点,一般是多台
-运行Map Task和Reduce Task
-并与JobTaskTracker交互,汇报任务状态
Map Task:解析每条数据记录,传递给用户编写的map()并执行,将输出结果写入本地磁盘
-如果为map-only作业,直接写入HDFS
Reducer Task: 从Map Task的执行结果中,远程读取输入数据,对数据进行排序,将数据按照分组传递给用户编写的Reduce函数执行

Yarn结构Yarn结构

Yarn角色及概念

Yarn是Hadoop的一个通用的资源管理系统
Yarn角色:
-Resourcemanager
-Nodemanager
-ApplicationMaster
-Container
-Client
Resourcemanager; -处理客户端请求
-启动/监控ApplicationMaster
-监控Nodemanager
-资源分配与调度
NodeManager
-单个节点上的资源管理
-处理来自ResourceManager的命令
-处理来自ApplicationMaster
Container:
-对任务运行环境的抽象,封装CPU、内存等
-多维资源以及环境变量、启动命令等任务运行相关的信息资源分配与调度
ApplicationMaster:
-数据切片
-为应用程序申请资源,并分配给内部任务
-任务监控与容错
Client:
-用户与Yarn交互的客户端程序
-提交应用程序、监控应用程序状态,杀死应用程序等
Yarn的核心思想:
将JobTracker和Tacker进行分离,它由下面几大构成组件:
-ResourceManager一个全局的资源管理器
-NodeManager每个节点(RM)代理
-ApplicationMaster表示每个应用
-每一个ApplicationMaster有多个Container在NodeManager上运行

Hadoop安装与配置

Hadoop介绍

Hadoop模式

Hadoop的部署模式有三种:单机 , 伪分布式 , 完全分布式

单机模式

Hadoop的单机模式安装非常简单
-获取软件 : http://hadoop.apache.org
安装配置Java环境,安装jps工具 : Openjdk和Openjdk-devel
-设置环境变量,启动运行
-Hadoop-env.sh
JAVA_HOME=“JAVA安装路径”
HADOOP_CONF_DIR=“hadoop配置文件路径”
Hadoop的单机模式安装很简单,只需要配置号环境变量即可运行,这个模式一般用来学习和测试Hadoop的功能
-测试 --统计词频

[root@nn01 ~]# yum -y install java-1.8.0-openjdk-devel
[root@nn01 hadoop]# tar -xf hadoop-2.7.7.tar.gz 
[root@nn01 hadoop]# mv hadoop-2.7.7 /usr/local/hadoop
[root@nn01 hadoop]# cd /usr/local/hadoop
[root@nn01 hadoop]# cd ./etc/hadoop/
[root@nn01 hadoop]# vim hadoop-env.sh
25 export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64    /jre"
33 export HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop"
[root@nn01 ~]# cd /usr/local/hadoop/
[root@nn01 hadoop]# ./bin/hadoop
Usage: hadoop [--config confdir] [COMMAND | CLASSNAME]
  CLASSNAME            run the class named CLASSNAME
 or
  where COMMAND is one of:
  fs                   run a generic filesystem user client
  version              print the version
  jar <jar>            run a jar file
                       note: please use "yarn jar" to launch
                             YARN applications, not this command.
  checknative [-a|-h]  check native hadoop and compression libraries availability
  distcp <srcurl> <desturl> copy file or directories recursively
  archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive
  classpath            prints the class path needed to get the
  credential           interact with credential providers
                       Hadoop jar and the required libraries
  daemonlog            get/set the log level for each daemon
  trace                view and modify Hadoop tracing settings
Most commands print help when invoked w/o parameters.
[root@nn01 hadoop]# mkdir /usr/local/hadoop/input
[root@nn01 hadoop]# ls
bin  etc  include  lib  libexec  LICENSE.txt  NOTICE.txt  input  README.txt  sbin  share
[root@nn01 hadoop]# cp *.txt /usr/local/hadoop/input
[root@nn01 hadoop]# ./bin/hadoop jar  \
 share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar  wordcount input output        //wordcount为参数 统计input这个文件夹,存到output这个文件里面(这个文件不能存在,要是存在会报错,是为了防止数据覆盖)
[root@nn01 hadoop]#  cat   output/part-r-00000    //查看
伪分布式

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

Hadoop配置文件及格式

文件格式:
-Hadoop-env.sh
JAVA_HOME
HADOOP_CONF_DIR
-xml文件配置格式

关键字
变量值
描述

HDFS

HDFS分布式文件系统

完全分布式

系统规划:

主机角色软件
192.168.1.60 nn01NameNode,SecondaryNameNodeHDFS
1.61 node1DatanodeHDFS
1.62 node2DatanodeHDFS
1.63 node3DatanodeHDFS
搭建完全分布式

基础环境准备:
-新开启3台机器
-禁用SELinux SELINUX=disabled
-禁用firewalld
# systemctl stop firewall
#systemctl mask firewall
-安装java-1.8.0-openjdk-devel
在三台机器上配置/etc/hosts (所有主机都能ping通namenode的主机名,namenode能ping通所有节点)
java -version 验证java安装
jps 验证角色
配置SSH信任关系(NameNode)
-注意:不能出现要求输入yes的情况,每台机器都要能登录成功,包括本机!!!
-/etc/sshssh_config
StrictHostKeyChecking no
# ssh-keygen
#ssh-copy-id 192.168.1.$i

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

HDFS完全分布式系统配置:
-环境配置文件: hadoop-env.sh
-核心配置文件: core-site.xml
-HDFS配置文件: hdfs-site.xml
-节点配置文件:slaves
-hadoop 官方手册 ==https://hadoop.apache.org/docs/ ==
https://hadoop.apache.org/docs/r2.7.7/hadoop (name字段不可修改,value字段可以修改自定义的内容,description描述信息可以不写)
环境配置文件hadoop-env.sh
-Openjdk的安装目录:JAVA_HOME
-Hadoop配置文件的存放目录: HADOOP_CONF_DIR
核心配置文件core-site.xml
-fs.defaultFS : 文件系统配置参数
-hadoop.tmp.dir : 数据目录配置参数

[root@nn01 hadoop]# vim core-site.xml
<configuration>
 <property>
   <name>fs.defaultFS</name>    #默认的文件系统
   <value>hdfs://nn01:9000</value>   #使用每个主机的数据存储
 </peoperty>
 <property>
   <name>hadoop.tmp.dir</name>   #所有核心数据的存储路径
   <value>/var/hadoop</value>
 </property>
</configuration>

HEFS配置文件hdfs-site.xml
-NameNode:地址声明
dfs.namenode.http-address
Secondartnamenode : 地址声明
dfs.namenode.secondary.http-address
文件冗余份数:
dfs.replication

[root@nn01 hadoop]# vim core-site.xml
<configuration>
<property>
        <name>fs.defaultFS</name>
        <value>hdfs://nn01:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/var/hadoop</value>
    </property>
</configuration>
[root@nn01 hadoop]# mkdir /var/hadoop        //hadoop的数据根目录
    [root@nn01 hadoop]# vim hdfs-site.xml
    <configuration>
     <property>
            <name>dfs.namenode.http-address</name>
            <value>nn01:50070</value>
        </property>
        <property>
            <name>dfs.namenode.secondary.http-address</name>
            <value>nn01:50090</value>
        </property>
        <property>
            <name>dfs.replication</name>
            <value>2</value>
        </property>
    </configuration>

节点配置文件slaves
-只写Datanode节点的主机名称
node1
node2
node3
-同步配置
-Hadoop索引所有节点的配置参数完全一样,在一台配置好后,把配置文件同步到其他所有主机上

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

HDFS完全分布式配置:
-本机创建/var/hadoop文件夹
# mkdir /var/hadoop
-在那么node上执行格式化操作
# ./bin/hdfs namenode -format
-启动集群
# ./sbin/start-dfs.sh

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

节点验证:
-NameNode上
-bin/hdfs dfsadmin -report

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值