一、docker服务
1.docker服务查询:
systemctl status docker.service,显示active(running)
启动docker服务systemctl start docker.service
2.docker虚拟机创建:
docker-create xxx.conf
3.docker虚拟机启动:
cd /etc/docker/vsysconf
docker-start xxx.conf
4.docker虚拟机查看:
cd /etc/docker/vsysconf
docker ps
5.停止docker虚拟机:
docker xxx虚拟机名字NAMES
6.删除docker虚拟机:
docker rm 虚拟机编码CONTAINER ID
二、kafka
1.创建topic
bin/kafka-topics.sh --create --topic 主题名 --zookeeper IP地址:2181 --config max.message.bytes=12800000 --config flush.messages=1 --partitions 5 --replication-factor 1
2.查看topic
bin/kafka-topics.sh --list --zookeeper IP地址:2181
3.消费数据
./kafka-console-consumer.sh --bootstrap-server IP地址1:9092,IP地址2:9092,IP地址3:9092 --topic 主题名
三、dmp文件的导入导出
数据导出:
1.将数据库TEST完全导出,用户名system 密码manager, 实例名TEST 导出到D:\daochu.dmp中
exp system/manager@TEST file=d:\daochu.dmp full=y
2.将数据库中system用户与sys用户的表导出
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
3.将数据库中的表table1 、table2导出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)
4.将数据库中的表table1中的字段filed1以"00"打头的数据导出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"
数据导入:
1.将D:\daochu.dmp 中的数据导入 TEST数据库中。
imp system/manager@TEST file=d:\daochu.dmp
上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
在后面加上 ignore=y 就可以了。
2.将d:\daochu.dmp中的表table1 导入
imp system/manager@TEST file=d:\daochu.dmp tables=(table1)
四、端口
mysql:3306
redis:6379
storm:8080
flink:8081
五、切换用户
1.linux切换到其他用户
su - hadoop
2.linux创建该用户
(1)创建huser用户
sudo useradd -m huser
(2)设置用户huser的登录密码
sudo passwd huser
(3)给用户huser增加管理员权限
sudo adduser huser sudo
六、kafka在CDK中的地址
/opt/cloudera/parcels/CDH-6.3.2...../lib/kafka
七、yarn常用命令
yarn application
1、-list 列出所有 application 信息
示例:yarn application -list
2、-appStates <States> 跟 -list 一起使用,用来筛选不同状态的 application,多个用","分隔; 所有状态:ALL,NEW,NEW_SAVING,SUBMITTED,ACCEPTED,RUNNING,FINISHED,FAILED,KILLED
示例:yarn application -list -appStates RUNNING
3、-appTypes <Types> 跟 -list 一起使用,用来筛选不同类型的 application,多个用","分隔;如 MAPREDUCE
示例:yarn application -list -appTypes MAPREDUCE
4、-kill <Application ID> 杀死一个 application,需要指定一个 Application ID
示例:yarn application -kill application_1479736113445_2577
5、-status <Application ID> 列出 某个application 的状态
示例:yarn application -status application_1479736113445_2577
6、-movetoqueue <Application ID> 移动 application 到其他的 queue,不能单独使用
7、-queue <Queue Name> 与 movetoqueue 命令一起使用,指定移动到哪个 queue
示例:yarn application -movetoqueue application_1479736113445_2577 -queue other
八、maven外网
http://insecure.repo1.maven.org/maven2/
九、clickhouse官网
https://clickhouse.com/docs/zh/
十、SQL
1、修改数据库
修改表名: ALTER TABLE 旧表名 RENAME AS 新表名
添加字段: ALTER TABLE 表名 ADD 字段名 列属性[属性]
修改字段: ALTER TABLE 表名 MODIFY 字段名 列类型[属性]
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 列属性[属性]
删除字段: ALTER TABLE 表名 DROP 字段名
删除数据表: DROP TABLE [IF EXISTS] 表名
2、DML语句
插入数据: INSERT INTO 表名[(字段1,字段2,字段3,...)] VALUES('值1',‘值2’,‘值3’)
修改数据: UPDATE 表名 SET column_name=value [,column_name2=value2,...] [WHERE condition];
删除数据: DELETE FROM 表名 [WHERE condition]
TRUNCATE [TABLE] table_name;用于清空表数据,但表结构、索引、约束等不变
3、DQL语句 []括号是选填,{}括号是必填的
SELECT [ALL | DISTINCT]
{* | table.* | [table.field1[as alias1][,table.field2[as alias2]][,...]]}
FROM table_name [as table_alias]
[left | right | inner join table_name2] -- 联合查询
[WHERE ...] -- 指定结果需满足的条件
[GROUP BY ...] -- 指定结果按照哪几个字段来分组
[HAVING] -- 过滤分组的记录必须满足的次要条件
[ORDER BY ...] -- 指定查询记录按一个或多个条件排序
[LIMIT {[offset,]row_count | row_countOFFSET offset}];
-- 指定查询的记录从哪条至哪条
-- like结合使用的通配符 : % (代表0到任意个字符) _ (一个字符)
连接查询
INNER JOIN 如果表中有至少一个匹配,则返回行
LEFT JOIN 即使右表中没有匹配,也从左表中返回所有的行
RIGHT JOIN 即使左表中没有匹配,也从右表中返回所有的行
4、常用函数
数据函数:
SELECT ABS(-8); /*绝对值*/
SELECT CEILING(9.4); /*向上取整*/
SELECT FLOOR(9.4); /*向下取整*/
SELECT RAND(); /*随机数,返回一个0-1之间的随机数*/
SELECT SIGN(0); /*符号函数: 负数返回-1,正数返回1,0返回0*/
字符串函数:
SELECT CHAR_LENGTH('狂神说坚持就能成功'); /*返回字符串包含的字符数*/
SELECT CONCAT('我','爱','程序'); /*合并字符串,参数可以有多个*/
SELECT INSERT('我爱编程helloworld',1,2,'超级热爱'); /*替换字符串,从某个位置开始替换某个长度*/
SELECT LOWER('KuangShen'); /*小写*/
SELECT UPPER('KuangShen'); /*大写*/
SELECT LEFT('hello,world',5); /*从左边截取*/
SELECT RIGHT('hello,world',5); /*从右边截取*/
SELECT REPLACE('狂神说坚持就能成功','坚持','努力'); /*替换字符串*/
SELECT SUBSTR('狂神说坚持就能成功',4,6); /*截取字符串,开始和长度*/
SELECT REVERSE('狂神说坚持就能成功'); /*反转
日期函数:
SELECT CURRENT_DATE(); /*获取当前日期*/
SELECT CURDATE(); /*获取当前日期*/
SELECT NOW(); /*获取当前日期和时间*/
SELECT LOCALTIME(); /*获取当前日期和时间*/
SELECT SYSDATE(); /*获取当前日期和时间*/
-- 获取年月日,时分秒
SELECT YEAR(NOW());
SELECT MONTH(NOW());
SELECT DAY(NOW());
SELECT HOUR(NOW());
SELECT MINUTE(NOW());
SELECT SECOND(NOW());
-- 从含义上讲,count(1) 与 count(*) 都表示对全部数据行的查询。
-- count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。即不统计字段为null
的记录。
-- count(*) 包括了所有的列,相当于行数,在统计结果的时候,包含字段为null 的记录;
-- count(1) 用1代表代码行,在统计结果的时候,包含字段为null 的记录 。
/*
很多人认为count(1)执行的效率会比count(*)高,原因是count(*)会存在全表扫描,而count(1)
可以针对一个字段进行查询。其实不然,count(1)和count(*)都会对全表进行扫描,统计所有记录的
条数,包括那些为null的记录,因此,它们的效率可以说是相差无几。而count(字段)则与前两者不
同,它会统计该字段不为null的记录条数。
下面它们之间的一些对比:
1)在表没有主键时,count(1)比count(*)快
2)有主键时,主键作为计算条件,count(主键)效率最高;
3)若表格只有一个字段,则count(*)效率较高。
*/
5、事务
原子性(Atomic)
整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(ROLLBACK)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性(Consist)
一个事务可以封装状态改变(除非它是一个只读的)。事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少。也就是说:如果事务是并发多个,系统也必须如同串行事务一样操作。
其主要特征是保护性和不变性(Preserving an Invariant),以转账案例为例,假设有五个账户,每个账户余额是100元,那么五个账户总额是500元,如果在这个5个账户之间同时发生多个转账,无论并发多少个,
比如在A与B账户之间转账5元,在C与D账户之间转账10元,在B与E之间转账15元,五个账户总额也应该还是500元,这就是保护性和不变性。
隔离性(Isolated)
隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。
这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。
持久性(Durable)
在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
十一、Flink join实现机制
Flink双流join主要分为两大类:一类是基于原生state的connect算子操作,另一类是基于窗口的JOIN操作。其中基于窗口的JOIN可细分为window join和interval join两种。
原生state实现原理:底层原理依赖Flink的state状态存储,通过将数据存储到State中进行关联join,最终输出结果。
基于window的join原理:此类方式利用Flink的窗口机制实现双流join。通俗理解,将两条实时流中元素分配到同一个时间窗口中完成join。两条实时流数据缓存再window State中,当窗口触发计算时,执行join操作。
滚动窗口join、滑动窗口join、会话窗口join