最近比较忙,之后会整理一下TiDB&TiSpark的学习心得,以及经历过的坑。
首先这边先贴2篇官方说明文档:
- [TiSpark 快速入门指南](https://github.com/pingcap/docs-cn/blob/master/tispark/tispark-quick-start-guide.md)
- [TiSpark 用户指南](https://github.com/pingcap/docs-cn/blob/master/tispark/tispark-user-guide.md)
可以参考官方文档,下载ansible大礼包,这边就不多赘述了。
## TiSpark 在 TiDB-Ansible 相关内容
- `tidb-ansible/roles/local/templates/binary_packages.yml.j2`
- 此处为 tispark 下载连接,jar 包下载 [传送门](http://download.pingcap.org/tispark-0.1.0-SNAPSHOT-jar-with-dependencies.jar)
- `tidb-ansible/conf/spark-defaults.yml`
- tispark 配置文件信息,文件配置示例 [Github](https://github.com/wsabc01/tidb-ansible/blob/tiSparkConf/conf/spark-defaults.yml) 格式为 `key: value`
- `tidb-ansible/roles/tispark/tasks/main.yml`
- tispark 安装步骤
## 部署 TiSpark 集群
- 确定目标节点已经安装 java 1.8 以上版本
- 在目标节点执行`java -version` 查看
- 修改 inventory.ini 文件
- spark_master 与 spark_slaves 为空时,默认安装在第一台 tidb `{{deploy}}/spark` 目录下,该安装模式为 standalone
- 以下为 spark 安装示例,非 standalone 模式
```YML
[spark_master]
spark-24 ansible_host=10.30.1.24 deploy_dir=/data3/deploy
[spark_slaves]
spark-25 ansible_host=10.30.1.25 deploy_dir=/data3/deploy
spark-26 ansible_host=10.30.1.26 deploy_dir=/data3/deploy
```
此处deploy_dir 为你想在spark_master&spark_slaves上安装spark的路径。
- TiSpark 配置文件参数说明,按实际需求进行修改 `tidb-ansible/conf/spark-defaults.yml`
- 已经安装 Spark ,修改 `{{deploy}}/spark/conf/spark-defaults.conf`
```conf
spark.tispark.table.scan_split_factor: 2
# 每个 Region 被切割成多少块,比如 8 就是说一个 Region 切 8 块;默认一个 Region 一个块
spark.tispark.task_per_split: 4
# 每个 Spark Task 使用多少并发量去并行读取块
spark.locality.wait: 0s
# spark 每次调度等多久,等一个本地计算
spark.tispark.pd.addresses: 10.30.1.24:2379,10.30.1.25:2379,10.30.1.26:2379
# 指定 PD 信息
spark.tispark.grpc.framesize: 1564087970
spark.tispark.grpc.timeout_in_sec: 100
spark.tispark.meta.reload_period_in_sec: 60
spark.tispark.plan.allowaggpushdown: true
spark.tispark.index.scan_batch_size: 500000
spark.tispark.index.scan_concurrency: 2
spark.tispark.table.scan_concurrency: 256
# 新版本下分别控制索引 / 扫表读取的并发线程数
spark.tispark.request.command.priority: Normal
# 新版本下对 TiKV 请求的优先级,如果是 OLTP 集群,请设定为 Low ,大小写敏感,可选有 High,Normal,Low
```
这边配置注意 spark.tispark.pd.addresses 这个变量,需要把TiDB的集群中所有的PD全部配置上。
- `tidb-ansible/conf/spark-env.yml` spark 环境变量信息
- 已经安装 spark 的修改 {{deploy_dir}}/conf/spark-env.sh 文件
- 根据机器配置调整 spark 所占用的 CPU & RAM,示例如下:
```CONF
SPARK_EXECUTOR_CORES=5
# cores 建议配置成核数
SPARK_EXECUTOR_MEMORY=5g
# 控制每个 Executor 占用多少内存,机器无其他服务时,建议总内存 80%
SPARK_WORKER_CORES=5
SPARK_WORKER_MEMORY=5g
```
这边要注意配置的参数,和集群机器的配置要吻合,不然之后会报错“资源分配不够”,又得重新修改、部署。
### 安装 / 运维
- 执行 `ansible-playbook -i inventory.ini deploy.yml` 安装所有 TiDB 组件
- 以下为单独安装 spark 组件
- 执行 `ansible-playbook -i inventory.ini deploy.yml -l spark_master,spark_slaves`
- 启动/停止
- 执行 `ansible-playbook -i inventory.ini start_spark.yml` 启动集群
- 执行 `ansible-playbook -i inventory.ini stop_spark.yml` 停止集群
### 运行方式如下
1. 通过 spark-shell 运行
- 登陆 10.30.1.24 机器
- 进入目录 `cd /data1/deploy/spark/bin`
- 执行 `./spark-shell`
- 下载 TiSpark-SQL [传送门](https://github.com/pingcap/tispark/tree/master/scripts)
- 将文件保存导 `{{deploy}}/spark/bin` 下,赋予执行权限
- 登陆 10.30.1.24 机器
- 进入目录 `cd /data1/deploy/spark/bin`
- 执行 `./tispark-sql`
- 直接输入 sql 语句,如 `show databases;`
ps:如果突然发现中间有部分内容配置错误,需要修改的,需要从修改的地方,重新部署一遍之后的配置。