tonglin0325的个人主页

ubuntu16.04安装minikube

使用原生包管理工具安装kubectl

1.更新 apt 包索引,并安装使用 Kubernetes apt 仓库所需要的包

1
2
3
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl

2.下载 Google Cloud 公开签名秘钥,如果有网络问题的话,可以手动下载apt-key.gpg文件,然后将其改名并移动到/usr/share/keyrings/kubernetes-archive-keyring.gpg目录

1
2
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

3.添加 Kubernetes apt 仓库:

1
2
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

如果报错,可以使用中科大的源

1
2
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

4.更新 apt 包索引,使之包含新的仓库并安装 kubectl:

1
2
3
sudo apt-get update
sudo apt-get install -y kubectl

参考

1
2
https://kubernetes.io/zh/docs/tasks/tools/install-kubectl-linux/

  

使用minikube在单机上启动一个K8S机器用于测试

1
2
https://github.com/kubernetes/minikube/releases/tag/v1.21.0

1.安装minikube

1
2
3
curl -LO https://github.com/kubernetes/minikube/releases/download/v1.21.0/minikube_1.21.0-0_amd64.deb
sudo dpkg -i minikube_1.21.0-0_amd64.deb

2.创建集群

1
2
minikube start

如果遇到The image ‘xxx’ was not found; unable to add it to cache的报错,可以使用如下命令

1
2
minikube start --image-mirror-country='cn'

删除集群

1
2
minikube delete

创建特定版本的集群

1
2
minikube start --kubernetes-version=v1.21.1

3.查看集群

1
2
3
4
5
6
7
8
9
10
11
12
kubectl get po -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-64897985d-9hqwg 1/1 Running 0 20h
kube-system etcd-minikube 1/1 Running 0 20h
kube-system kube-apiserver-minikube 1/1 Running 0 20h
kube-system kube-controller-manager-minikube 1/1 Running 0 20h
kube-system kube-proxy-gzjgt 1/1 Running 0 20h
kube-system kube-scheduler-minikube 1/1 Running 0 20h
kube-system storage-provisioner 1/1 Running 1 (20h ago) 20h
kubernetes-dashboard dashboard-metrics-scraper-58549894f-sztfp 1/1 Running 0 132m
kubernetes-dashboard kubernetes-dashboard-ccd587f44-bvdc9 1/1 Running 0 132m

minikube一些命令:K8s - Install Minikube in Linux

4.启动kubernetes-dashboard,需要在图形界面中

1
2
minikube dashboard

5.配置dashboard外网访问,address是你的运行minikube的机器ip,port是对外暴露的端口

1
2
kubectl proxy --port=10018 --address='192.168.xx.xx' --accept-hosts='^.*' &

此时就可以访问如下的网址来访问minikube dashboard

1
2
http://master:10018/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/#/workloads?namespace=_all

全文 >>

使用Presto parser解析SQL

Presto的语法解析器是使用ANTLR生成的

PrestoDB的parser g4语法文件

1
2
https://github.com/prestodb/presto/blob/master/presto-parser/src/main/antlr4/com/facebook/presto/sql/parser/SqlBase.g4

PrestoSQL(Trino)的parser g4语法文件

1
2
https://github.com/trinodb/trino/blob/master/core/trino-grammar/src/main/antlr4/io/trino/grammar/sql/SqlBase.g4

如果想在java代码中使用Presto的parser进行语法解析的话,可以引用下面的依赖

PrestoDB(Facebook版本)

1
2
3
4
5
6
<dependency>
<groupId>com.facebook.presto</groupId>
<artifactId>presto-parser</artifactId>
<version>0.285.1</version>
</dependency>

PrestoSQL(社区版本,350及其以下版本叫prestosql,以上改名为Trino)

1
2
3
4
5
6
<dependency>
<groupId>io.prestosql</groupId>
<artifactId>presto-parser</artifactId>
<version>330</version>
</dependency>

Trino(社区版本,版本从351开始)

1
2
3
4
5
6
<dependency>
<groupId>io.trino</groupId>
<artifactId>trino-parser</artifactId>
<version>351</version>
</dependency>

presto parser的使用

可以参考:《Hive、Spark、Presto SQL 输入输出表解析》

使用jmap排查java程序内存泄露

1.使用jmap命令生成内存快照文件(Heap Profile)

1
2
jmap -dump:format=b,file=heap.hprof ${pid}

如果生成快照的时候遇到如下报错

1
2
3
4
5
6
7
8
9
Dumping heap to /mnt/tmp/heap.hprof ...
Exception in thread "main" java.io.IOException: Premature EOF
at sun.tools.attach.HotSpotVirtualMachine.readInt(HotSpotVirtualMachine.java:292)
at sun.tools.attach.LinuxVirtualMachine.execute(LinuxVirtualMachine.java:200)
at sun.tools.attach.HotSpotVirtualMachine.executeCommand(HotSpotVirtualMachine.java:261)
at sun.tools.attach.HotSpotVirtualMachine.dumpHeap(HotSpotVirtualMachine.java:224)
at sun.tools.jmap.JMap.dump(JMap.java:247)
at sun.tools.jmap.JMap.main(JMap.java:142)

添加如下参数就可以解决

1
jmap -J-d64 -dump:format=b,file=/mnt/tmp/heap.hprof ${pid}

参考:jmap -dump导出jvm堆内存信息时报错

2.使用Eclipse Memory Analyzer工具对hprof文件进行分析

如果机器的java版本是java8的话,需要注意MAT

全文 >>

Flink学习笔记——Flink SQL

flink官方从1.8.0开始提供Table&SQL API,参考

1
2
https://github.com/apache/flink/tree/release-1.8.0/flink-table

如果想使用Flink SQL的话,可以参考官方的get start文档,如下

1
2
https://nightlies.apache.org/flink/flink-docs-master/docs/dev/table/sql/gettingstarted/

找到flink的安装目录

1
2
cd /usr/lib/flink

首先需要启动一个flink集群,这里使用yarn-session模式来启动一个flink session集群,比如

1
2
./bin/yarn-session.sh -n 3 -s 5 -jm 1024 -tm 4096 -d

一旦flink集群启动,你就可以访问一个本地的FlinkUI

如下

也可以在YARN上看到flink session cluster的任务

这时再启动flink SQL

1
2
./bin/sql-client.sh

1
SELECT 'Hello World';

运行结果

默认的显示模式是表格模式,可以通过一下语句进行调整

1
2
3
4
SET sql-client.execution.result-mode = table;
SET sql-client.execution.result-mode = tableau;
SET sql-client.execution.result-mode = changelog;

tableau模式,更接近于spark sql的显示方式

changelog模式,变更日志模式(changelog mode)不会物化结果。可视化展示由插入(+)和撤销(-)组成的持续查询结果流。

参考:flink sql-client 菜鸟记录

全文 >>

Flink学习笔记——Standalone模式

Flink的部署方式有如下几种,本文主要介绍standalone模式

1
2
3
4
5
Yarn
Mesos
Docker/Kubernetes
Standalone

standalone模式的官方文档可以参考

1
2
https://nightlies.apache.org/flink/flink-docs-master/docs/deployment/resource-providers/standalone/overview/#standalone

进入flink的安装目录

1
2
/usr/lib/flink

启动一个standalone的flink集群

1
2
./bin/start-cluster.sh

这时可以在默认的8081端口查看FlinkUI

提交任务

1
2
./bin/flink run ./examples/streaming/TopSpeedWindowing.jar

关闭集群

1
2
./bin/stop-cluster.sh

linux os参数调优

1、net.core.somaxconn

net.core.somaxconn是Linux中的一个kernel参数,表示socket监听(listen)的backlog上限。什么是backlog呢?backlog就是socket的监听队列,当一个请求(request)尚未被处理或建立时,他会进入backlog。而socket server可以一次性处理backlog中的所有请求,处理后的请求不再位于监听队列中。当server处理请求较慢,以至于监听队列被填满后,新来的请求会被拒绝。在Hadoop 1.0中,参数ipc.server.listen.queue.size控制了服务端socket的监听队列长度,即backlog长度,默认值是128。而Linux的参数net.core.somaxconn默认值同样为128。当服务端繁忙时,如NameNode或JobTracker,128是远远不够的。这样就需要增大backlog,例如我们的3000台集群就将ipc.server.listen.queue.size设成了32768,为了使得整个参数达到预期效果,同样需要将kernel参数net.core.somaxconn设成一个大于等于32768的值。

参考:关于linux内核参数的调优,你需要知道

全文 >>

Presto学习笔记——Python客户端连接Presto

参考:三种客户端连接Presto

1.使用 presto-client

1
2
pip install presto-client==0.302.0

查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import presto

# demo about the usage of presto-python-client
conn = presto.dbapi.connect(
host='localhost',
port=8889,
user='hadoop',
catalog='xx_catalog',
schema='default'
)
cur = conn.cursor()
sql = "select * from xxx.xxx limit 10"
cur.execute(sql)
rows = cur.fetchall()
print(rows)