【Spark SQL】1、初探大数据及Hadoop的学习

news/2024/5/20 5:09:37 标签: hadoop, hdfs, mapreduce

初探大数据

  • centos 6.4
  • CDH5.7.0系列http://archive.cloudera.com/cdh5/cdh/5/

生产或测试环境选择对应CDH版本时,一定要采用尾号一样的版本

在这里插入图片描述
OOPTB

  • apache-maven-3.3.9-bin.tar.gz
  • Jdk-7u51-linux-x64.tar.gz
  • Zeppelin-0.7.1-bin.tgz
  • Hive-1.1.0-cdh5.7.0.tar.gz
  • hadoop-2.6.0-cdh5.7.0.tar.gz
  • Mysql-connector-java.5.1.27.bin.jar
  • Scala-2.11.8.tar.gz
  • spark-2.1.0-bin-2.6.0-cdh5.7.0
大数据概述
  • 数据量
  • 速度
  • 多样性、复杂性
  • 基于高度分析的新价值
Hadoop

一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储

Apache顶级项目 访问网站 projetName.apache.org

包括 HSFS/YARN/MapReduce

狭义Hadoop VS 广义Hadoop

  • 狭义的Hadoop:是一个适合大数据分布式存储HDFS、分布式计算MapReduce和资源调度YARN的平台
  • 广义的Hadoop:指的是Hadoop生态系统,Hadoop生态系统是一个很庞大的概念,hadoop是其中最重要最基础的一个部分;生态系统中的每一个子系统只解决某一个特定的问题域(甚至可能很窄),不搞统一型的一个全能系统,而是小而精的多个小系统

为什么选择haddoop作为大数据平台的解决方案?

  • 源码开源
  • 社区活跃,参与者很多
  • 涉及到分布式存储和计算的方方面面
HDFS

分布式文件系统(Hadoop Distributed File System)

HDFS概述

Hadoop分布式文件系统(HDFS)是一种分布式文件系统,设计用于在商用硬件上运行。 它与现有的分布式文件系统有许多相似之处。 但是,与其他分布式文件系统的差异很大。 HDFS具有高度容错能力,旨在部署在低成本硬件上。 HDFS提供对应用程序数据的高吞吐量访问,适用于具有大型数据集的应用程序。 HDFS放宽了一些POSIX要求,以实现对文件系统数据的流式访问。 HDFS最初是作为Apache Nutch网络搜索引擎项目的基础设施而构建的。 HDFS是Apache Hadoop Core项目的一部分

Assumptions and Goals

  • 硬件故障是常态而非例外。 HDFS实例可能包含数百或数千台服务器计算机,每台计算机都存储文件系统数据的一部分。 事实上,存在大量组件并且每个组件具有非平凡的故障概率意味着HDFS的某些组件始终不起作用。 因此,检测故障并从中快速自动恢复是HDFS的核心架构目标。
  • 运行在HDFS上的应用程序需要对其数据集进行流访问。它们不是通常在通用文件系统上运行的通用应用程序。HDFS更多的是为批处理而设计的,而不是用户的交互使用。重点是数据访问的高吞吐量,而不是数据访问的低延迟。
  • 在HDFS上运行的应用程序具有大型数据集。 HDFS中的典型文件大小为千兆字节到太字节。 因此,HDFS被调整为支持大文件。 它应该为单个集群中的数百个节点提供高聚合数据带宽和扩展。 它应该在单个实例中支持数千万个文件。
  • HDFS应用程序需要一次只读一次读取文件的访问模型。 除了追加和截断之外,无需更改创建,写入和关闭的文件。 支持将内容附加到文件末尾,但无法在任意点更新
  • 如果应用程序在其操作的数据附近执行,则计算所请求的计算效率更高。 当数据集的大小很大时尤其如此
  • HDFS的设计便于从一个平台移植到另一个平台。 这有助于广泛采用HDFS作为大量应用程序的首选平台。

NameNode and DataNodes

HDFS具有主/从架构。 HDFS集群由单个NameNode,一个管理文件系统命名空间的主服务器和管理客户端对文件的访问组成。 此外,还有许多DataNode,通常是群集中每个节点一个,用于管理连接到它们运行的节点的存储。 HDFS公开文件系统命名空间,并允许用户数据存储在文件中。 在内部,文件被分成一个或多个块,这些块存储在一组DataNode中。 NameNode执行文件系统命名空间操作,如打开,关闭和重命名文件和目录。 它还确定了块到DataNode的映射。 DataNode负责提供来自文件系统客户端的读写请求。 DataNode还根据NameNode的指令执行块创建,删除和复制。

在这里插入图片描述

NameNode和DataNode是设计用于在商用机器上运行的软件。 这些机器通常运行GNU / Linux操作系统(OS)。 HDFS是使用Java语言构建的; 任何支持Java的机器都可以运行NameNode或DataNode软件。 使用高度可移植的Java语言意味着可以在各种计算机上部署HDFS。 典型部署具有仅运行NameNode软件的专用计算机。 群集中的每台其他计算机都运行一个DataNode软件实例。 该体系结构可以在同一台机器上运行多个DataNode,但在实际部署中很少出现这种情况。

群集中存在单个NameNode极大地简化了系统的体系结构。 NameNode是所有HDFS元数据的仲裁者和存储库。 系统的设计使用户数据永远不会流经NameNode。

HDFS支持传统的分层文件组织。 用户或应用程序可以在这些目录中创建目录并存储文件。 文件系统命名空间层次结构与大多数其他现有文件系统类似; 可以创建和删除文件,将文件从一个目录移动到另一个目录,或重命名文件。 HDFS支持用户配额和访问权限。 HDFS不支持硬链接或软链接。 但是,HDFS架构并不排除实现这些功能。

NameNode维护文件系统名称空间。 NameNode记录对文件系统命名空间或其属性的任何更改。 应用程序可以指定应由HDFS维护的文件的副本数。 文件的副本数称为该文件的复制因子。 该信息由NameNode存储。

HDFS旨在可靠地在大型群集中的计算机上存储非常大的文件。它将每个文件存储为一系列块。复制文件的块以实现容错。块大小和复制因子可根据文件进行配置。

除最后一个块之外的文件中的所有块都具有相同的大小

应用程序可以指定文件的副本数。复制因子可以在文件创建时指定,并可以在以后更改。 HDFS中的文件是一次写入的(除了追加和截断),并且在任何时候都有一个写入器。

NameNode做出有关块复制的所有决定。它定期从群集中的每个DataNode接收Heartbeat和Blockreport。收到心跳意味着DataNode正常运行。 Blockreport包含DataNode上所有块的列表

HDFS架构

1 Master(NameNode/NN) 带N个Slaves(DataNode/DN)

1个文件会被拆分为多个Block,根据blockSize。如130M文件,blockSize=128M,则被拆分为2个块,分别是128M和2M

NN:

  • 负责客户端请求和响应
  • 负责元数据(文件的名称、副本系数、Block存放的DN)的管理

DN:

  • 存储用户的文件对用的数据库(Block)
  • 要定期向NN发送心跳信息,汇报本身及其所有的block信息、健康状况

A typical deployment has a dedicated machine that runs only the NameNode software. Each of the other machines in the cluster runs one instance of the DataNode software.The architecture does not preclude running multiple DataNodes on the same machine but in a real deployment that is rarely the case.

NameNode+N个DataNode

建议:NN和DN是部署在不同的节点上

HDFS环境搭建

使用虚拟机的话 网络使用桥接模式

虚拟机最好关闭防护墙

  • 使用版本 hadoop02.6.0-cdh5.7.0

软件存放目录

/home/hadoop

  • software:存放的是安装的软件包
  • app:存放的是所有软件的安装目录
  • data:存放的是所有使用的测试数据目录
  • source:存放的是软件源码目录,比如spark
  1. 下载hadoop

  2. 下载jdk7u51 https://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html 选择7u51

    • tar -zxvf xx -C ~/app/
    • 配置环境变量
  3. 机器参数设置

    修改机器名/etc/systemconfig/network

    vi /etc/systemconfig/network
    NETWORKING=yes
    HOSTNAME=hadoop001
    

    设置IP和hostname的映射关系 /etc/hosts

    192.168.0.116 hadoop001

    127.0.0.1 localhost

    ssh免密码登录(此步骤不是必须的,但必须每次收动输入密码)

    ssh-keygen -t rsa

    cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

  4. HDFS配置修改 http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.7.0.tar.gz

    hadoop-env.sh

    core-site.xml

    hdfs-site.xml


    hadoop-2.6.0-cdh5.7.0/etc/hadoop下修改

    Hadoop-env.sh

    ​ expore JAVA_HOME=/home/hadoop/app/jdk1.7.0_51/

    Core-site.xml

    <configuration>
    	<property>
      	<name>fs.defaultFS</name>
        <value>hdfs://hadoop001:8020</value>
      </property>
      <property>
      	<name>hadoop.tmp.dir</name>
        <value>/home/hadoop/app/tmp</value>
      </property>
    </configuration>
    

    hdfs-site.xml

    <configuration>
    <property>
      <!--副本数-->
    	<name>dfs.replication</name>
      <value>1</value>
    </property>
      </configuration>
    
  5. 格式化HDFS

    这一步操作,只是在第一次时执行,每次如果都格式化的话,那么HDFS上的数据就会被清空

    在bin目录下 执行 ./hdfs namenode -format。如下表示格式化成功

在这里插入图片描述

  1. 启动HDFS

    sbin/start-dfs.sh

在这里插入图片描述

验证是否启动成功:

jps

  • DataNode
  • SecondaryNameNode
  • NameNode

浏览器

在这里插入图片描述

hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html">HDFS shell常用命令使用
  • ls

    hadoop fs -ls /

    hadoop fs -ls -R / 递归查看

  • mkdir

    hadoop fs -mkdir test

    hadoop fs -mkdir -p /a/b 递归创建文件夹

  • put

    hadoop fs -put /home/hadoop/a.txt( 文件系统中的文件路径) /test 上传文件、文件夹至hdfs

  • get

    hadoop fs -get /tets/a.txt ~/app/(文件系统的路径) 将文件从hdfs拿到本地

  • rm

    hadoop fs -rm /test/a.txt 从hdfs上删除

    hadoop fs -rmr -a 递归删除目录

  • cat

    hadoop fs -cat /test/a.txt 查看文件内容

HDFS优缺点

优点:

  • 高容错
  • 适合批处理
  • 适合大数据处理
  • 可构建在廉价的机器上

缺点:

  • 不适合低延迟的数据访问(大文件分块,要访问文件 需访问到各个块)
  • 不适合小文件存储
MapReduce

不擅长实时计算,适合离线批处理

在这里插入图片描述


http://www.niftyadmin.cn/n/550954.html

相关文章

解决别人的android工程导不进自己的eclipse的问题(No projects are ...

为什么80%的码农都做不了架构师&#xff1f;>>> 每个android工程根目录下都会有.classpath和.project两个隐藏文件&#xff0c; 解决办法就是把自己eclipse建过的android项目的这两个文件拷到别人的项目根目录下&#xff0c;覆盖 重新导入eclipse即可。 转载于:ht…

【Spark SQL】2、YARN的学习

YARN概述 YARN的基本思想是将资源管理和作业调度/监视的功能分解为单独的守护进程。我们的想法是拥有一个全局ResourceManager&#xff08;RM&#xff09;和每个应用程序ApplicationMaster&#xff08;AM&#xff09;。应用程序可以是单个作业&#xff0c;也可以是作业的DAG。 …

微软面试+实习总结

checkout一周&#xff0c;总觉得应该写一篇总结&#xff0c;以作为今后找工作的借鉴。 细数起来从实习开始&#xff0c;在微软一共面了15面。 第一次报的是SDE&#xff0c;很幸运通过微软校招笔试&#xff0c;跟自己一起去笔试的大师兄都没有通过。得到的一个总结&#xff1a;在…

【Spark SQL】3、大数据数据仓库Hive的学习

大数据数据仓库Hive 产生背景 MapReduce编程的不变性HDFS上的文件缺失schema 用于处理海量结构化的日志数据统计问题 构建在Hadoop之上的数据仓库 Hive定义了一种类SQL查询语言:HQL(类似SQL但不完全相同) 通常用于进行离线数据处理 支持多种不同的压缩格式(GZIP、LZO、S…

数据结构----线性表

线性表 一、线性表抽象数据类型 1.1、定义 线性表是指n (n>0)个相同类型的数据元素a0,a1,...an-1所构成的有限线性序列&#xff0c;其一般描述为&#xff1a;LinearList(a0&#xff0c;a1&#xff0c;…&#xff0c;an&#xff0d;1) 1) 其中LinearList称为线性表的名称 2) …

【Spark SQL】4、Spark SQL的安装及简单使用

Spark MapReduce的局限性&#xff1a; 代码繁琐只能够支持map和reduce方法执行效率低下不适合迭代多次&#xff0c;交互式、流式的处理 Spark下载 选择package type为Source Code&#xff0c;随后下载spark-2.4.4.tgz 为了与学习一致&#xff0c;这里选择spark-2.1.0&#…

PostgreSQL流复制初始化异常处理一例

为什么80%的码农都做不了架构师&#xff1f;>>> 在初始化PostgreSQL的流复制时&#xff0c;记下参数不对发生的两个问题及处理办法。 环境&#xff1a; DB:PostgreSQL 9.1 VMWARE:6 前期准备略(包含热机和备机的安装及参数设置)。 问题1 参数配好启动备机时&#x…

【Spark SQL】5、DataFrameDataSet的简单使用

DataFrame与RDD的互操作 /*** DataFrame和RDD的互操作*/ object DataFrameRDDApp {def main(args: Array[String]) {val spark SparkSession.builder().appName("DataFrameRDDApp").master("local[2]").getOrCreate()//inferReflection(spark)program(sp…