实习总结 - worldgreen/freamwork-test GitHub Wiki
- 创建表
- 字段什么意思,什么类型,最多多大长度,
- 主键和二级索引
- 查字段尽量用主键和二级索引
- 用数据库连接工具创建表
- 编码用utf-8mb4,可以显示表情
- 排序规则 utf8_general_cs
- tidb
- c3p0
- 参数意义:
- maxIdleTime 连接最多等待时间
- maxStatementsPerConnection 单个连接最大缓存Statement数
- maxStatements 数据源内加载的最大PreparedStatement数量
- acquireRetryAttempt 从数据库获取连接失败后重新获取次数
- acquireRetryDelay 两次连接中间隔多长时间
- autoCommitOnClose 连接关闭时默认将所以未提交的操作回滚
- checkoutTimeout 当连接池连接用完时,客户端调用getConnection()后等待的最大时间
- idleConnectionTestPeriod 隔多少秒检查连接池中的空闲连接
- numHelperThreads c3p0是异步的,通过多线程实现多个操作同时被执行
- acquireIncrement 连接池无连接可用时一次创建的连接个数
- initialPoolSize 连接池初始连接
- maxPoolSize 最大连接 插入数据库的线程池大小应该小于这个数,否则会有大量连接异常抛出
- minPoolSize 最小连接
- 参数意义:
- mybatis
- mybatis 多数据源问题,最终用的是sqlSessionTemplet
- generator 的使用
- maven
<dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <type>jar</type> <scope>test</scope> </dependency>
- generatorConfig
- maven
- mysql
- insert or update 主键冲突就更新,
- replace into
- insert ignore
- 函数
- left(str, index) 截取字符串
- concat(str,str,str) 连接字符串
- 数据库qps比较大时
- mysql主从复制和应用端读写分离
- 基本知识
- consumer的使用
- ConsumerConnector
- 基本知识
- consumer使用
- DefaultMQPushConsumer
- 每天定时删除7天以上log
- find 命令 用法
find /data/logs/didmapping-worker/ -mtime +7 -name "*.log.*" -exec rm -rf {} \;
- 显示当前目录磁盘使用情况
- du –sh *
- 显示系统磁盘使用情况
- df –h
- 显示文件的访问时间,修改时间,改变时间。
- stat 访问时间more, 修改时间 vim。改变时间 chmod
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操作数组