tonglin0325的个人主页

kerberos相关

1.Kerberos介绍

Kerberos是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。这个词又指麻省理工学院为这个协议开发的一套计算机软件。软件设计上采用客户端/服务器结构,并且能够进行相互认证,即客户端和服务器端均可对对方进行身份认证。可以用于防止窃听、防止重放攻击、保护数据完整性等场合,是一种应用对称密钥体制进行密钥管理的系统。

全文 >>

Airflow使用指南

1.只执行单个任务

将downstream和recursive按钮的点击状态取消,然后点击clear,最后选择Ignore All Deps,然后点击run

2.从一个任务开始,执行它以及它的下游任务

将downstream和recursive按钮的点击状态取消,然后点击clear,最后选择Ignore Task Deps,然后点击run

其他:调度工具airflow的介绍和使用示例

3.airflow命令行

1
2
https://airflow.apache.org/docs/apache-airflow/stable/cli-and-env-variables-ref.html#dags

1.第一次登录创建airflow用户

1
airflow users create --username airflow --role Admin --password airflow --email airflow@xxx.com --lastname airflow --firstname airflow 

2.根据dag id删除一个dag

1
2
airflow dags delete {dag_id}

3.触发一个airflow dag

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
airflow dags trigger --help
usage: airflow dags trigger [-h] [-c CONF] [-e EXEC_DATE] [-r RUN_ID]
[-S SUBDIR]
dag_id

Trigger a DAG run

positional arguments:
dag_id The id of the dag

optional arguments:
-h, --help show this help message and exit
-c CONF, --conf CONF JSON string that gets pickled into the DagRun's conf attribute
-e EXEC_DATE, --exec-date EXEC_DATE
The execution date of the DAG
-r RUN_ID, --run-id RUN_ID
Helps to identify this run
-S SUBDIR, --subdir SUBDIR
File location or directory from which to look for the dag. Defaults to '[AIRFLOW_HOME]/dags' where [AIRFLOW_HOME] is the value you set for 'AIRFLOW_HOME' config you set in 'airflow.cfg'

airflow dags trigger -e '2022-07-19T08:00:00' your_dag_id

注意execution_time要在start_date和end_date之间,否则会报

1
2
ValueError: The execution_date [2022-07-19T08:00:00+00:00] should be >= start_date [2022-07-20T00:00:00+00:00] from DAG's default_args

4.airflow按start_date和end_date触发backfill任务

1
2
airflow dags backfill -s 2022-01-01 -e 2022-01-10 DAG_ID

执行的任务是从2022-01-01到2022-01-09,包含startr_date,不包含end_date  

5.测试airflow task

4.airflow会的connection配置参数

1
2
3
4
from airflow.hooks.base import BaseHook

connection = BaseHook.get_connection("username_connection")
password = connection.password

5.在airflow界面上触发特定execution date的任务

点击DAG Runs

全文 >>

Superset配置hive数据源

1.在uri中配置 hive://localhost:10000/default

2.查询

3.如果你的hive集群是带有kerberos认证的,hive数据源需要这样配置

1
2
hive://xxx:xxx/default?auth=KERBEROS&kerberos_service_name=hive

如果在连接的时候报了如下的错

1
2
Could not start SASL: b'Error in sasl_client_start (-1) SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure

那就就是你没有用keytab进行认证

1
2
kinit -kt xxx.keytab xxx@XXXX

全文 >>

Superset配置mysql数据源

1.添加mysql数据源

测试连接的时候遇到

1
2
No module named 'MySQLdb'"

安装mysqlclient

1
2
pip install mysqlclient

如果遇到

1
2
ERROR: /bin/sh: 1: mysql_config: not found

安装

1
2
sudo apt-get install libmysqlclient-dev python3-dev

添加mysql的url

1
2
mysql://root:xxxx@localhost/mysql?charset=utf8

测试ok

全文 >>

Hadoop学习笔记——HDFS

1.查看hdfs文件的block信息

不正常的文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
hdfs fsck /logs/xxx/xxxx.gz.gz -files -blocks -locations
Connecting to namenode via http://xxx-01:50070/fsck?ugi=xxx&files=1&blocks=1&locations=1&path=%2Flogs%2Fxxx%2Fxxx%2F401294%2Fds%3Dxxxx-07-14%2Fxxx.gz.gz
FSCK started by xxxx (auth:KERBEROS_SSL) from /10.90.1.91 for path xxxxx.gz.gz at Mon Jul 15 11:44:13 CST 2019
Status: HEALTHY
Total size: 0 B (Total open files size: 194 B)
Total dirs: 0
Total files: 0
Total symlinks: 0 (Files currently being written: 1)
Total blocks (validated): 0 (Total open file blocks (not validated): 1)
Minimally replicated blocks: 0
Over-replicated blocks: 0
Under-replicated blocks: 0
Mis-replicated blocks: 0
Default replication factor: 3
Average block replication: 0.0
Corrupt blocks: 0
Missing replicas: 0
Number of data-nodes: 99
Number of racks: 3
FSCK ended at Mon Jul 15 11:44:13 CST 2019 in 0 milliseconds

全文 >>

Ubuntu16.04安装Superset

**Superset **是Airbnb 开源的大数据可视化平台

其支持的datasource

1
2
https://superset.incubator.apache.org/index.html?highlight=datasource

类似的开源项目Zeppelin所支持的datasource

1
2
https://zeppelin.apache.org/docs/0.8.0/quickstart/sql_with_zeppelin.html

全文 >>

Ubuntu16.04安装CDH 5.16.2

CDH安装官方参考文档:

1
2
https://www.cloudera.com/documentation/enterprise/5-16-x/topics/configure_cm_repo.html

如果是在生产环境进行安装,建议查看cloudera官方提供的机型建议

1
2
https://docs.cloudera.com/documentation/enterprise/release-notes/topics/hardware_requirements_guide.html

同时还在CDH的角色分布建议,参考:如何给Hadoop集群划分角色

全文 >>

docker安装和使用

1.安装的docker版本

1
2
3
docker -v
Docker version 17.03.2-ce

2.查看本地的镜像

1
2
docker images

3.拉取镜像

1
2
docker pull centos:7

4.编写Dockerfile

1
2
3
FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html

5.build Dockerfile

1
2
docker build -t . xxx # 镜像的名字

或者

1
2
docker build -f ./Dockerfile . -t xxx:xxxx

bash

1
2
docker run -i -t ubuntu:15.10 /bin/bash

将容器中的8080端口映射到本机的18080端口

1
2
docker run -p 18080:8080 -it xxxx:v1.0.0dev /bin/bash

如果是多个端口,使用多个-p

1
2
-p 18080:8080 -p 18081:8081

参数

1
2
3
-it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
--rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm 可以避免浪费空间

6.运行

1
2
docker run xxx # 镜像的名字

7.查看自己镜像的id

1
2
docker ps

8.列出所有的容器,包括exit状态的容器

1
2
docker ps -a

9.查看内网ip地址等运行情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
docker inspect id | grep IP 
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.5",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"IPAMConfig": null,
"IPAddress": "172.17.0.5",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,

9.请求nginx

1
2
3
curl 172.17.0.5:80
<h1>Hello, Docker!</h1>

10.如果想要镜像不退出,然后进行镜像中

1
2
3
# run
ENTRYPOINT ["/bin/bash","-c","cat /hosts.txt >> /etc/hosts &amp;&amp; bash /sleep.sh"]

sleep.sh内容

1
2
3
4
5
6
7
#!/usr/bin/env bash

while true;
do
sleep 10000;
done

或者

1
2
ENTRYPOINT ["/bin/bash","-c","while true; do sleep 10000; done"]

然后执行

1
2
docker run  --network=host xxxx

查看id

1
2
docker ps

进入镜像中

1
2
docker exec -it xxxx bash

11.删除container,先停再删

1
2
3
docker stop 3f6822d8f262
docker rm 3f6822d8f262

12.使用docker命令从pod向宿主机拷贝文件

1
2
docker cp pod_id:/tmp/abc /tmp/

使用docker命令从宿主机向pod中拷贝文件

1
docker cp ./xx-xx pod_id:/home/xxx  

13.mac使用docker的时候配置仓库

1
2
3
4
https://registry.docker-cn.com
http://docker.mirrors.ustc.edu.cn
http://hub-mirror.c.163.com

注意:mac版本docker升级到高版本后Daemon选项没了,需要在docker engine中填写json配置

14.ubuntu配置docker仓库,在/etc/docker目录下新建daemon.json,内容

1
2
3
4
{
"registry-mirrors": ["https://registry.docker-cn.com","http://docker.mirrors.ustc.edu.cn","http://hub-mirror.c.163.com","https://3laho3y3.mirror.aliyuncs.com","http://f1361db2.m.daocloud.io"]
}

重启docker服务

1
2
sudo systemctl restart docker

15.查看docker的磁盘使用情况

1
2
3
4
5
6
7
lintong@master:~$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 31 1 19.17GB 19.11GB (99%)
Containers 1 1 0B 0B
Local Volumes 48 0 0B 0B
Build Cache 0 0 0B 0B

清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)

1
2
3
4
5
6
7
8
9
docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all build cache
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B

如果有2个镜像的id相同,则删除的时候会报

1
2
3
docker rmi 85f602b72c3c
Error response from daemon: conflict: unable to delete 85f602b72c3c (must be forced) - image is referenced in multiple repositories

此时应该找到2个id相同的镜像,然后一个个进行删除

1
2
3
4
docker images | grep 85f602b72c3c
xxxxx v0.9.1 85f602b72c3c 6 weeks ago 2.65GB
xxxxx <none> 85f602b72c3c 6 weeks ago 2.65GB

删除第一个

1
2
docker rmi xxxxx:v0.9.1

再删除另一个

1
2
docker rmi 85f602b72c3c

15.使用 Docker 容器应该避免的 10 个事情

1
2
3
4
5
6
7
8
9
10
11
1.不要在容器中存储数据 &ndash;  容器可能被停止,销毁,或替换。
2.不要将你的应用发布两份 &ndash; 一些人将容器视为虚拟机。
3.不要创建超大镜像 &ndash; 一个超大镜像只会难以分发。
4.不要使用单层镜像
5.不要为运行中的容器创建镜像
6.不要只使用&ldquo;最新&rdquo;标签
7.不要在单一容器中运行超过一个进程
8.不要在镜像中存储凭据
9.使用非root用户运行进程
10.不要依赖IP地址

参考:10 things to avoid in docker containers

16.docker设置时区

1
2
3
4
5
6
7
8
ENV TZ=Asia/Shanghai
# ENV TZ=America/Los_Angeles

RUN echo ${TZ} > /etc/timezone \
&amp;&amp; ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime \
&amp;&amp; apt update \
&amp;&amp; apt install -y tzdata

17.ubuntu镜像换源

1
2
3
4
5
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list &amp;&amp; \
sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list &amp;&amp; \
apt-get clean &amp;&amp; \
apt-get update