分享知识,分享快乐

0%

Apache Kyuubi on CDH 部署

https://shmily-qjj.top/ee1c2df4/

Apache Kyuubi on Spark 在 CDH 上的深度实践

https://www.slidestalk.com/openLooKeng/22

vi kyuubi-env.sh

1
2
3
4
5
6
7
8
9
export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera
export SPARK_HOME=/opt/cloudera/parcels/CDH/lib/spark3
export FLINK_HOME=/opt/cloudera/parcels/FLINK
export HIVE_HOME=/opt/cloudera/parcels/CDH/lib/hive
export HADOOP_CONF_DIR=/etc/hadoop/conf
export YARN_CONF_DIR=/etc/hadoop/conf
export KYUUBI_JAVA_OPTS="-Xmx10g -XX:+UnlockDiagnosticVMOptions -XX:ParGCCardsPerStrideChunk=4096 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSConcurrentMTEnabled -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSInitiatingOccupancyOnly -XX:+CMSClassUnloadingEnabled
-XX:+CMSParallelRemarkEnabled -XX:+UseCondCardMark -XX:MaxDirectMemorySize=1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./logs -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -Xloggc:./logs/kyuubi-server-gc-%t.log -XX:+Us
eGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=5M -XX:NewRatio=3 -XX:MetaspaceSize=512m"

vi conf/kyuubi-defaults.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
kyuubi.frontend.bind.host                10.0.0.1
kyuubi.frontend.protocols THRIFT_BINARY
kyuubi.frontend.thrift.binary.bind.port 10009
#
# kyuubi.engine.type SPARK_SQL
# kyuubi.engine.share.level USER
# kyuubi.session.engine.initialize.timeout PT3M
#
kyuubi.ha.addresses zk1:2181,zk2:2181,zk3:2181
kyuubi.ha.namespace kyuubi

# 不指定 spark就是local模式运行了
spark.master=yarn
spark.submit.deployMode=cluster


kyuubi.authentication=LDAP
kyuubi.authentication.ldap.baseDN=dc=org
kyuubi.authentication.ldap.domain=apache.org
kyuubi.authentication.ldap.binddn=uid=kyuubi,OU=Users,DC=apache,DC=org
kyuubi.authentication.ldap.bindpw=kyuubi123123
kyuubi.authentication.ldap.url=ldap://hostname.com:389/

重启

1
2
3
4
5
注意 :kyuubi 停止的时候   spark on yarn的  kyuubi_application  并没有停掉,   需要在yarn里kill,  这样重启  才能加载新加入的jar包和新的配置文件。

sudo -u hdfs bin/kyuubi start
sudo -u hdfs bin/kyuubi stop
sudo -u hdfs bin/kyuubi restart
阅读全文 »

CDH6.3.2 升级 Spark3.3.0 版本

https://juejin.cn/post/7140053569431928845

根据上面的文档进行部署 还有下列操作需要补充

上传到要部署 spark3 的客户端机器

1
2
3
tar -zxvf spark-3.3.0-bin-3.0.0-cdh6.3.2.tgz -C /opt/cloudera/parcels/CDH/lib
cd /opt/cloudera/parcels/CDH/lib
mv spark-3.3.0-bin-3.0.0-cdh6.3.2/ spark3

配置 conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
shell复制代码cd /opt/cloudera/parcels/CDH/lib/spark3/conf
## 开启日志
mv log4j2.properties.template log4j2.properties
## spark-defaults.conf 配置
cp /opt/cloudera/parcels/CDH/lib/spark/conf/spark-defaults.conf ./

# 修改 spark-defaults.conf
vim /opt/cloudera/parcels/CDH/lib/spark3/conf/spark-defaults.conf
删除 spark.extraListeners、spark.sql.queryExecutionListeners、spark.yarn.jars
添加 spark.yarn.jars=hdfs://ns1/user/spark/3versionJars/*

hadoop fs -mkdir -p /spark/3versionJars
cd /opt/cloudera/parcels/CDH/lib/spark3/jars
hadoop fs -put *.jar hdfs://ns1/user/spark/3versionJars

优化设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
spark.kryoserializer.buffer.max 512m
spark.serializer org.apache.spark.serializer.KryoSerializer
spark.authenticate false (关闭数据块传输服务SASL加密认证)
spark.io.encryption.enabled false (关闭I/O加密)
spark.network.crypto.enabled false (关闭基于AES算法的RPC加密)
spark.shuffle.service.enabled true (启用外部ShuffleService提高Shuffle稳定性)
spark.shuffle.service.port 7337 (这个外部ShuffleService由YarnNodeManager提供,默认端口7337)
spark.shuffle.useOldFetchProtocol true (兼容旧的Shuffle协议避免报错)
spark.sql.cbo.enabled true (启用CBO基于代价的优化-代替RBO基于规则的优化-Optimizer)
spark.sql.cbo.starSchemaDetection true (星型模型探测,判断列是否是表的主键)
spark.sql.datetime.java8API.enabled false
spark.sql.sources.partitionOverwriteMode dynamic
spark.sql.orc.mergeSchema true (ORC格式Schema加载时从所有数据文件收集)
spark.sql.parquet.mergeSchema false (根据情况设置,我们集群大多数都是parquet,从所有文件收集Schema会影响性能,所以从随机一个Parquet文件收集Schema)
spark.sql.parquet.writeLegacyFormat true (兼容旧集群)
spark.sql.autoBroadcastJoinThreshold 1048576 (当前仅支持运行了ANALYZE TABLE <tableName> COMPUTE STATISTICS noscan的Hive Metastore表,以及直接在数据文件上计算统计信息的基于文件的数据源表)
spark.sql.adaptive.enabled true (Spark AQE[adaptive query execution]启用,AQE的优势:执行计划可动态调整、调整的依据是中间结果的精确统计信息)
spark.sql.adaptive.forceApply false
spark.sql.adaptive.logLevel info
spark.sql.adaptive.advisoryPartitionSizeInBytes 256m (倾斜数据分区拆分,小数据分区合并优化时,建议的分区大小,与spark.sql.adaptive.shuffle.targetPostShuffleInputSize含义相同)
spark.sql.adaptive.coalescePartitions.enabled true (是否开启合并小数据分区默认开启,调优策略之一)
spark.sql.adaptive.coalescePartitions.minPartitionSize 1m (合并后最小的分区大小)
spark.sql.adaptive.coalescePartitions.initialPartitionNum 1024 (合并前的初始分区数)
spark.sql.adaptive.fetchShuffleBlocksInBatch true (是否批量拉取blocks,而不是一个个的去取,给同一个map任务一次性批量拉取blocks可以减少io 提高性能)
spark.sql.adaptive.localShuffleReader.enabled true (不需要Shuffle操作时,使用LocalShuffleReader,例如将SortMergeJoin转为BrocastJoin)
spark.sql.adaptive.skewJoin.enabled true (Spark会通过拆分的方式自动处理Join过程中有数据倾斜的分区)
spark.sql.adaptive.skewJoin.skewedPartitionThresholdInBytes 128m
spark.sql.adaptive.skewJoin.skewedPartitionFactor 5 (判断倾斜的条件:分区大小大于所有分区大小中位数的5倍,且大于spark.sql.adaptive.skewJoin.skewedPartitionThresholdInBytes的值)

将 CDH 集群的 spark-env.sh 复制到 /opt/cloudera/parcels/CDH/lib/spark3/conf 下:

阅读全文 »

HiveMetaStore状态不良导DDLSQL耗时200s以上

HMS进程报错:hive metastore server Failed to sync requested HMS notifications up to the event ID xxx

原因分析:查看sentry异常CounterWait源码发现传递的id比currentid大导致一直等待超时,超时时间默认为200s(sentry.notification.sync.timeout.ms)。 开启了hdfs-sentry acl同步后,hdfs,sentry,HMS三者间权限同步的消息处理。当突然大批量的目录权限消息需要处理,后台线程处理不过来,消息积压滞后就会出现这个异常。这个异常不影响集群使用,只是会导致create,drop table慢需要等200s,这样等待也是为了追上最新的id。我们这次同时出现了HMS参与同步消息处理的线程被异常退出,导致sentry的sentry_hms_notification_id表数据一直没更新,需要重启HMS。如果积压了太多消息,让它慢慢消费处理需要的时间太长,可能一直追不上,这时可以选择丢掉这些消息。

解决:

①可以通过设置sentry.notification.sync.timeout.ms参数调小超时时间,减小等待时间,积压不多的话可以让它自行消费处理掉。

②丢掉未处理的消息,在sentry的sentry_hms_notification_id表中插入一条最大值(等于当前消息的id,从notification_sequence表中获取) ,重启sentry服务。(notification_log 表存储了消息日志信息)

1
2
SELECT * from  NOTIFICATION_SEQUENCE
insert into SENTRY_HMS_NOTIFICATION_ID VALUES (14094172);

Hive开启自动获取表上次访问时间(lastAccessTime)

1
2
3
4
5
6
7
8
9
<property>
<name>hive.security.authorization.sqlstd.confwhitelist.append</name>
<value>hive\.exec\.pre\.hooks</value>
</property>

<property>
<name>hive.exec.pre.hooks</name>
<value>org.apache.hadoop.hive.ql.hooks.UpdateInputAccessTimeHook$PreExec</value>
</property>

Spark

阅读全文 »

迁移全量数据

关闭 GC。

为了保证增量迁移过程中新写入的数据不丢失,在开始备份之前,需要关闭上游集群的垃圾回收 (GC) 机制,以确保系统不再清理历史数据。

执行如下命令关闭 GC:

1
MySQL [test]> SET GLOBAL tidb_gc_enable=FALSE;

备份数据。

在上游集群中执行 BACKUP 语句备份数据:

1
MySQL [(none)]> BACKUP DATABASE * TO 's3://backup?access-key=minio&secret-access-key=miniostorage&endpoint=http://${HOST_IP}:6060&force-path-style=true' RATE_LIMIT = 120 MB/SECOND;

备份语句提交成功后,TiDB 会返回关于备份数据的元信息,这里需要重点关注 BackupTS,它意味着该时间点之前数据会被备份,后边的教程中,将使用 BackupTS 作为数据校验截止时间TiCDC 增量扫描的开始时间

恢复数据。

阅读全文 »

tidb常用操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
tiup cluster deploy tidb-test-v1 v6.5.2 ./topology.yaml --user root -p
tiup cluster list
tiup cluster clean tidb-test-v1 --all
# tiup cluster destroy tidb-test-v1
tiup cluster start tidb-test-v1 --init
tiup cluster display tidb-prod
tiup cluster stop tidb-test-v1
tiup cluster restart tidb-test-v1
tiup cluster edit-config tidb-test-v1
tiup cluster check tidb-test-v1 scale-out.yml --cluster --user root -p
tiup cluster check tidb-test-v1 scale-out.yml --cluster --apply --user root -p
tiup cluster scale-out tidb-test-v1 scale-out.yml --user root -p
tiup ctl:v6.5.2 pd -u http://172.20.192.70:2379 store limit all engine tiflash 200 add-peer
-- 如果你使用 TiUP 部署,可以用 tiup ctl:v<CLUSTER_VERSION> pd 代替 pd-ctl -u <pd_ip:pd_port> 命令。
tiup ctl:v6.5.2 pd store
tiup ctl:v6.5.2 pd -u http://172.20.192.70:2379 store limit store id 8487838 220 add-peer
tiup ctl:v6.5.2 pd -i -u http://172.20.192.70:2379
tiup cluster restart tidb-test-v1 -N 172.20.192.74:9090
tiup cluster reload tidb-test-v1
tiup install bench
tiup diag config clinic.token eyJrIjoicFpJaDJ1a042ZjQ0a2E2NyIsInUiOjYwMywiaWQiOjU3Nn0=
tiup diag collect tidb-test-v1

备份与恢复

如果是 BR 备份,还原之后是同名的;
dumplings 备份的话,可以在还原的时候指定 route 来设置要恢复到的数据库。

1
2
3
4
5
6
7
8
mycli -h172.20.192.70 -P4000 -uroot

BACKUP DATABASE test TO 's3://backup?access-key=minio&secret-access-key=miniostorage&endpoint=http://172.20.192.151:6060&force-path-style=true' RATE_LIMIT = 120 MB/SECOND;


mycli -h172.20.192.115 -P4000 -uroot

mysql> RESTORE DATABASE test FROM 's3://backup?access-key=minio&secret-access-key=miniostorage&endpoint=http://172.20.192.151:6060&force-path-style=true';

不停机升级

tiup cluster upgrade tidb-prod v6.5.3

重启grafana

tiup cluster restart tidb-prod -R grafana

备份

阅读全文 »

k8s-1.23.17离线安装

环境设置centos-7.9

init_env.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sudo modprobe br_netfilter
lsmod | grep br_netfilter

cat<<EOF> /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
systemctl stop firewalld
systemctl disable firewalld.service

sed -i '$acloudeon ALL=(ALL) NOPASSWD: NOPASSWD: ALL' /etc/sudoers

swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab

安装docker

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
tar -xvf rpm_docker_20.10.24.tar
yum localinstall docker/* -y
systemctl start docker
sudo cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://5il73zj3.mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com"
],
"insecure-registries": ["dockerhub.baofu.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl daemon-reload
systemctl restart docker
systemctl enable docker.service
systemctl status docker
docker -v
docker info|grep "Cgroup Driver"
docker load < images_k8s_core_1.23.17.tar
docker load < images_k8s_cni_flannel_0.15.0.tar
docker load < images_k8s_dashboard_v2.5.1.tar

安装k8s

主节点

1
2
3
4
5
6
7
8
9
10
11
12
13
tar -xvf rpm_k8s_1.23.17.tar
yum localinstall k8s/* -y
systemctl daemon-reload
systemctl start kubelet
systemctl enable kubelet
kubeadm init \
--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \
--kubernetes-version=v1.23.17 \
--pod-network-cidr=10.244.0.0/16
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f kube-flannel.yml

工作节点

阅读全文 »

安装 K8s 集群

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#注意系统内核升级到5.4 及以上。

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-ml
grub2-set-default 0
reboot


VERSION=`curl -s https://api.github.com/repos/labring/sealos/releases/latest | grep -oE '"tag_name": "[^"]+"' | head -n1 | cut -d'"' -f4`

wget https://mirror.ghproxy.com/https://github.com/labring/sealos/releases/download/${VERSION}/sealos_${VERSION#v}_linux_amd64.tar.gz \
&& tar zxvf sealos_${VERSION#v}_linux_amd64.tar.gz sealos && chmod +x sealos && mv sealos /usr/bin

#注意 master的cpu数量要大于1
sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.27.7 registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4 registry.cn-shanghai.aliyuncs.com/labring/cilium:v1.13.4 \
--masters 10.6.59.131,10.6.59.132,10.6.59.133 \
--nodes 10.6.59.134,10.6.59.135 -p "2haolou@64"

#要求hostname每个节点不一样
hostnamectl set-hostname node1

#重置集群
sealos reset
阅读全文 »

k8s高可用集群搭建-详细版

环境

系统: CenterOS 7.9

docker: 20.10.24

k8s: 1.23.17

目标

3个master节点、LoadBalancer、一个work节点

172.23.80.241 master1

172.23.80.242 master2

172.23.80.243 master3

阅读全文 »

在200-223上关闭VIP:
/sbin/ifconfig bond0:1 192.168.192.1 netmask 255.255.255.0 down

在200-223上启动VIP:
/sbin/ifconfig bond0:1 192.168.192.1 netmask 255.255.255.0 up

/sbin/arping -c 5 -U -I bond0 192.168.192.1 >/dev/null 2>&1

bond0:1 这是个别名

阅读全文 »

使用 Kubekey 一键 离线/在线 部署 kubernetes 集群

在线部署:

创建配置文件

./kk create config --with-kubesphere

1
2
3
4
5
6
./kk  init os -f ./config-sample.yaml  # 初始化集群机器,此操作会安装系统依赖,开启lpvs模块等。前提是确保对应node的网络通畅。

# 选择中文区下载(访问 GitHub 受限时使用)
export KKZONE=cn

./kk create cluster -f ./config-sample.yaml # 创建集群
阅读全文 »