实习总结 - worldgreen/freamwork-test GitHub Wiki

数据库

  1. 创建表
    • 字段什么意思,什么类型,最多多大长度,
    • 主键和二级索引
    • 查字段尽量用主键和二级索引
    • 用数据库连接工具创建表
    • 编码用utf-8mb4,可以显示表情
    • 排序规则 utf8_general_cs
  2. tidb
  3. c3p0
    • 参数意义:
      • maxIdleTime 连接最多等待时间
      • maxStatementsPerConnection 单个连接最大缓存Statement数
      • maxStatements 数据源内加载的最大PreparedStatement数量
      • acquireRetryAttempt 从数据库获取连接失败后重新获取次数
      • acquireRetryDelay 两次连接中间隔多长时间
      • autoCommitOnClose 连接关闭时默认将所以未提交的操作回滚
      • checkoutTimeout 当连接池连接用完时,客户端调用getConnection()后等待的最大时间
      • idleConnectionTestPeriod 隔多少秒检查连接池中的空闲连接
      • numHelperThreads c3p0是异步的,通过多线程实现多个操作同时被执行
      • acquireIncrement 连接池无连接可用时一次创建的连接个数
      • initialPoolSize 连接池初始连接
      • maxPoolSize 最大连接 插入数据库的线程池大小应该小于这个数,否则会有大量连接异常抛出
      • minPoolSize 最小连接
  4. mybatis
    • mybatis 多数据源问题,最终用的是sqlSessionTemplet
    • generator 的使用
      • maven
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <type>jar</type>
            <scope>test</scope>
        </dependency>
      • generatorConfig
  5. mysql
    • insert or update 主键冲突就更新,
    • replace into
    • insert ignore
    • 函数
      • left(str, index) 截取字符串
      • concat(str,str,str) 连接字符串
    • 数据库qps比较大时
      • mysql主从复制和应用端读写分离

kafka

  1. 基本知识
  2. consumer的使用
    • ConsumerConnector

rocketmq

  1. 基本知识
  2. consumer使用
    • DefaultMQPushConsumer

linux

  1. 每天定时删除7天以上log
    • find 命令 用法
    find /data/logs/didmapping-worker/ -mtime +7 -name "*.log.*" -exec rm -rf {} \;
  2. 显示当前目录磁盘使用情况
    • du –sh *
  3. 显示系统磁盘使用情况
    • df –h
  4. 显示文件的访问时间,修改时间,改变时间。
    • stat 访问时间more, 修改时间 vim。改变时间 chmod

spark

1 SparkSubmit

  • 解析传入参数
  • 反射拿到主类,运行主类

2 SparkContext

  • sparkEnv ActorSystem对象
  • taskScheduler 用来生产并发送task给executor
  • DAGScheduler 划分stage

3 taskScheduler.start()

  • 创建 client actor 向master注册任务信息
  • 创建 driver actor 接受executor 反向注册

4 client actor 和 master 通信

  • clientActor 讲任务信息封装到ApplicationDescription,传到master
  • master收到信息后把信息存的内存中并放入waittingApps 任务队列中
  • 开始执行这个任务时调用scheduler方法,进行资源调度,
  • 将调度好的资源封装为LaunchExecutor,并发给executor

5 master 和 worker 通信

  • worker收到master传的调度信息LaunchExecutor, 将信息封装为ExecutorRunner对象。
  • Executor.start

6 worker 和 driver 通信

  • Executor启动后向driver反向注册,注册成功后会创建一个线程池thread poll执行任务
  • 当所有executor注册完成后,意味着作业环境准备好了,sparkContext初始化完成

7 stage划分

  • 所有executor注册完成,driver初始化完成,继续执行我们提交的代码。
  • 当出发一个action 的 rdd算子时,就DAGScheduler划分stage
  • 将划分好的stage按分区生成task,封装到taskSet对象,TaskSet提交到taskScheduler
  • taskScheduler 对taskSet序列化,将taskSet封装到LaunchExecutor,并发给driverActor

8 driver分配任务

  • driver把LaunchExecutor 发送到Executor上

9 executor执行任务

  • executor拿到LaunchExecutor将其封装成TaskRunner对象
  • 从线程池获取线程执行TaskRunner
  • TaskRunner拿到反序列化器反序列TaskSet,执行App代码,也就是RDD

窄依赖:父RDD只被一个子RDD引用 map filter join 宽依赖:父RDD被不止一个子RDD引用 groupBy Action collect() saveAsTextFile, 每一个action触发一个job

partion 数:

  • task数和最后一个transformation数相同
  • 创建RDD可以指定partion数,默认spark.default.parallelism yarn模式下所有executor core和
  • 通过能够触发shuffle的transformatone修改 partion数 定义: 字段:1 index 序号,递增 2 hashcode 方法:1 compute 对每个partion计算 2 getPartions() 得到总共的partion,数据源是如何被切分的

rdd 只读的分区的数据集,RDD只有在执行action后才会触发真正的计算

  • 初始化:外部数据源和parallelize操作数组
⚠️ **GitHub.com Fallback** ⚠️