Spark、RDD、Hive 、Hadoop-Hive 和传统关系型数据库区别

  • Hive Hadoop

  • Hive 和传统关系型数据库区别

Spark 概念

  • 基于内存的分布式计算框架

  • 只负责算 不负责存

  • spark 在离线计算 功能上 类似于mapreduce的作用

  • MapReduce的缺点

    • 运行速度慢 (没有充分利用内存)
    • 接口比较简单,仅支持Map Reduce
    • 功能比较单一 只能做离线计算
  • Spark优势

    • 运行速度快
    • 自身生态比较完整
      • spark sql
      • spark streaming
      • spark mllib Spark ML
    • api 比较丰富
    • 使用各种语言进行操作

RDD 的概念

  • 弹性分布式数据集

  • spark当中对数据的抽象

  • 所有spark中对数据的操作最终都会转换成RDD的操作

    • spark sql
    • spark streaming
    • spark ml 、spark mllib
  • RDD 分布式的 可容错 可以进行并行计算

  • rdd 的存储可以对比HDFS

    • hdfs 数据拆分成多个block rdd 拆分成多个partition
    • 读取的时候 spark 加载hdfs数据 1个block 对应 spark rdd的一个partition
    • 写数据的时候 spark 1个partition 可能对应多个block
  • RDD是不可变的

    • 父RDD 生成一个子 RDD 父RDD的状态不会变化
    • 从容错的角度去做这样的设计

RDD的创建

  • 创建RDD之前先要有spark context

    conf = SparkConf().setAppName(appName).setMaster(master)
    sc = SparkContext(conf=conf)
    
  • 通过内存中的数据创建RDD

    • data = [1, 2, 3, 4, 5]
      distData = sc.parallelize(data)
  • 创建RDD时可以指定 partition的数量(RDD会分成几份)一个partition会对应一个task,根据CPU的内核数来指定partition (1核对应2~4个partition)

  • 从文件创建RDD 可以是HDFS支持的任何一种存储介质

    • 可以从 hdfs 数据库(mysql) 本地文件系统 hbase 这些地方加载数据创建RDD
    • rdd = sc.textFile(‘file:///root/tmp/test.txt’)

RDD的三类算子

  • transformation
    • 所有的transformation 都是延迟执行的,只要不调用action 不会执行,只是记录过程
    • transformation 这一类算子返回值还是 rdd
    • rdd.transformation 还会得到新的rdd
  • action
    • 会触发之前的rdd所有的transformation
    • 获取最终的结果
  • persist
    • 数据存储,可以存到内存,也可以是磁盘

通过pycharm 链接centos环境

Spark、RDD、Hive 、Hadoop-Hive 和传统关系型数据库区别_第1张图片

Spark、RDD、Hive 、Hadoop-Hive 和传统关系型数据库区别_第2张图片
Spark、RDD、Hive 、Hadoop-Hive 和传统关系型数据库区别_第3张图片

ip地址统计案例

  • 广播变量

    • 如果多个task会用到同一份数据,默认每个task都会复制一份

    • 用到的数据如果只是查询可以通过广播变量保存,避免数据的反复复制

    • SparkContext可以创建广播变量

      广播变量= sc.broadcast()
      广播变量。value
      
  • mapPartitions

    • transformation操作
    • 类似map 但是map是一条一条传给里面函数的 mapPartitions 数据是一部分一部分传给函数的
    • 应用场景 数据处理的时候 需要连接其它资源 如果一条一条处理 会处理一条连一次, 一份一份处理可以很多条数据连一次其它资源 可以提高效率
  • 二分法查找

  • ip_transform 把223.243.0.0 转换成10进制的数字

spark standalone模式

  • Master

    • 主节点
    • 负责Worker状态管理
    • 响应client 提交来的Application
  • Worker

    • 管理自身资源
    • 运行Application对应的task
    • 启动图driver 执行application
  • Executor

    • task 最终执行的容器
  • Application

    • spark作业
  • Driver

    • 作业提交给spark的时候 先由一个Worker启动一个Driver来分析Application
    • DAGScheduler
      • task划分 交给TaskScheduler
      • 作业可以划分为多个stage
      • 每一个stage根据partition的数量决定由多少个task
    • TaskScheduler
      • 将task调度到对应的Executor上执行
  • Client

spark core总结

  • spark core是 spark生态最核心的部分

  • spark 生态

    • spark core mapreduce
    • spark sql 类似于hive
    • spark streaming storm、flink
    • spark ML 基于dataframe sparkmllib rdd
  • spark

    • 基于内存的 分布式计算框架
  • MapReduce 和 spark 优劣

    • spark 基于内存 算快
    • spark api 更丰富 比mapreduce 代码少
    • spark 生态完整
      • 离线计算 spark core spark sql
      • 实时计算/流式计算 spark streaming 准实时
      • 交互式计算 spark sql dataframe
      • 机器学习 spark ML
  • RDD

    • 弹性分布式数据集
    • 不可变 rdd->rdd2 rdd和rdd2的状态会分别保存
    • 弹性 存储弹性 分布式弹性 容错可以分多个partition存 每个partition有多个副本
    • 分布式
    • 并行计算
  • RDD创建

    • spark context
      • 在内存中 list iterable
      • 从文件中加载
      • 在创建rdd的时候可以指定partitons的数量 一个partition对应一个task
  • 三类算子

    • transformation
      • 返回rdd
      • 延迟执行 只要没调用action类算子 就不会执行 只是几下了执行计划
    • action
      • 获取结果
  • spark local模式 standalone

  • 广播变量

Hbase 回顾

  • 面向列 列式存储
    • 每一列数据是放到同一个文件中的, 列与列之间存储的位置并不连续
    • 数据是一行一行存的,每一行都是连续的
  • 非关系型数据 NoSQL
    • 关系型数据 非关系数据
  • 事务
    • 行级别事务 不是事务型数据库
  • CAP定理 CP系统
  • 行键(RowKey) 只有rowkey有索引
  • 列族(ColumnFamily) k:v数据库 查询性能类似的 k:v 放到同一个ColumnFamily中
  • 列修饰符(Column Qualifier) 在ColumnFamily下的 key:value对的key ColumnFamily:Column Qualifier:value

HBase表设计需要注意的问题

  • HBase的特点
    • 行级别事务, 如果对跨行事务,跨表事务有很高要求不适合用hbase
    • rowkey有索引
    • ColumnFamily 不宜过多
    • Column Qualifier可以用来存储信息
  • Rowkey是HBase表结构设计中很重要的环节, 直接影响到HBase的效率和性能
  • HBase的表结构比传统关系型数据库更灵活, 能存储任何二进制数据,无需考虑数据类型
  • 利用列标识(Column Qualifier)来存储数据
  • 衡量设计好坏的简单标准 是否会全表查询

HBase shell操作

Happybase 操作hbase

Hbase 需要调整的地方

①删除hadoop 上 /hbase目录

②修改 /root/bigdata/hbase/conf/regionservers

​ 只保留hadoop_master

③修改hbase-site.xml

<configuration>
        <property>
                <name>hbase.rootdirname>
                <value>hdfs://hadoop-master:9000/hbasevalue>
        property>
        <property>
                <name>hbase.cluster.distributedname>
                <value>truevalue>
        property>
        <property>
                <name>hbase.zookeeper.property.clientPortname>
                <value>只保留之前的第一个值value>
        property>

        <property>
                <name>hbase.zookeeper.property.dataDirname>
                <value>保留之前的内容value>
        property>
        <property>
                <name>hbase.unsafe.stream.capability.enforcename>
                <value>falsevalue>
        property>
configuration>

④start-hbase.sh 启动hbase

你可能感兴趣的:(#,spark,hadoop,spark,hive)