ELK 专题
国内源真香
Syntactic sugar(语法糖)
POI ==> Poor Obfuscation Implementation(可怜的模糊实现?)
HSSF ==》 Horrible SpreadSheet Format(可怕的/糟糕的 Spreadsheet 格式。。。)
ODPS => 开放数据处理服务 =》 maxcompute
AutoCAD Drawing Database => AutoCAD 绘图数据库
three.js =》 3d 渲染引擎
UML ==> Unified Modeling Language
VPC ==> Virtual Private Cloud
MPP ==> Massively Parallel Processing
LDAP(Light Directory Access Portocol)
exactly-once 精确一次语义
DSL (Domain Specific Language)
elasticsearch 安装使用
1.编辑 /etc/security/limits.conf,追加以下内容(这几个步骤执行完毕后可能需要重新登录,直接切换一次用户即可)
* soft nofile 65535
* hard nofile 65535
* soft nproc 4096
* hard nproc 4096
2.编辑 /etc/sysctl.conf,追加以下内容
vm.max_map_count=655350
# 生效
sysctl -p
# exit 退出,重新登录生效
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.5.1/elasticsearch-analysis-ik-5.5.1.zip
写操作在主节点
读操作可以直接在从节点,从而达到负载均衡
bin/elasticsearch -d =》 daemon
9200 为 默认 Restful 访问端口
9300 为各个节点内部通信端口
GET /tnbs/_search
{
"query":{
"match_all":{}
}
}
DELETE /tnbs
kibana 安装使用
sudo rpm -ivh xxx.rpm
/usr/share/kibana
/etc/kibana/kibana.yml
安装Kibana时出现:
default index Error: Please specify a default index pattern
KbnError@http://localhost:5601/
解决的方法:
将配置文件kibana.yml中下面一项的配置放开(#注释符去掉)即可:
kibana.index: ".kibana"
curl -X PUT "http://kylin:9200/index_20201114"
也可以在 kibana 上执行下面的命令创建, 查询
查看节点健康情况
GET /_cat/health?v
查看cluster中有哪些index:
GET /_cat/indices?v
GET _search
{
"query": {
"match_all": {}
}
}
PUT /accounts
{
"settings":{
"number_of_shards":1,
"number_of_replicas":0
}
}
PUT /accounts/person/1
{
"user": "张三",
"title": "工程师",
"desc": "数据库管理"
}
PUT /index/type/id--->/索引名/类型名/doucument_Id/{document内容}
{
"json数据"
}
PUT /hr/emp/0
{
"name":"James Bond",
"gender": 100
}
GET /hr/emp/0
# 结构化创建
PUT /employee
{
"settings": {
"number_of_shards":1,
"number_of_replicas": 1
},
"mappings": {
"properties":{
"name":{"type":"text"},
"age":{"type":"integer"}
}
}
}
# hr 带 body 体 查询
GET /hr/_search
{
"query": {
"match_all": {}
}
}
PUT /movie/doc_type/1
{
"name":"Eating an apple a day & keeps the doctor away"
}
GET /movie/_search
{
"query":{
"match":{"name":"Eating"}
}
}
# 使用 api 分词接口查看分词
GET /movie/_analyze
{
"field": "name",
"text":"Eating an apple a day & keeps the doctor away"
}
PUT /movie_2
{
"settings":{
"number_of_shards":1,
"number_of_replicas":1
},
"mappings":{
"products":{
"properties":{
"name":{"type":"text", "analyzer":"english"}
}
}
}
}
PUT /movie_2/doc_type/1
{
"name":"Eating an apple a day & keeps the doctor away"
}
GET /movie_2/_search
{
"query":{
"match":{"name":"eat"}
}
}
Text: 被分析索引的字符串类型
Keyword: 不能被分析只能被精确匹配的字符串类型
Date: 日期类型, 可以配合 format 一起使用
数字类型: long, integer, short , double 等
boolean: true false
Array:["one", "two"]
Object:json 嵌套
Ip 类型
Geo_point:地理位置
TF IDF TENORM
TF: token frequency, basketball 这样的一个分词在 document(待搜索的字段) 中出现的次数
IDF: inverse document frequency,逆文档频率, 代表 basketball 这样的一个分词在整个文档中出现的频率
TFNORM: token frequency normalized 词频归一化
logstash 安装使用
mysql ip 访问
设置允许任意IP访问,执行语句:
mysql> update mysql.user set host = '%' where user = 'root';
mysql> flush privileges;
create database employees;
use employees;
create table DEPT
(
DEPTNO int(2) not null,
DNAME varchar(14),
LOC varchar(13)
);
alter table DEPT add constraint PK_DEPT primary key (DEPTNO);
create table EMP
(
EMPNO int(4) not null,
ENAME varchar(10),
JOB varchar(9),
MGR int(4),
HIREDATE date,
SAL int(7 ),
COMM int(7 ),
DEPTNO int(2)
);
alter table EMP add constraint PK_EMP primary key (EMPNO);
alter table EMP add constraint FK_DEPTNO foreign key (DEPTNO) references DEPT (DEPTNO);
insert into DEPT (DEPTNO, DNAME, LOC) values (10, 'ACCOUNTING', 'NEW YORK');
insert into DEPT (DEPTNO, DNAME, LOC) values (20, 'RESEARCH', 'DALLAS');
insert into DEPT (DEPTNO, DNAME, LOC) values (30, 'SALES', 'CHICAGO');
insert into DEPT (DEPTNO, DNAME, LOC) values (40, 'OPERATIONS', 'BOSTON');
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7369, 'SMITH', 'CLERK', 7902, str_to_date('17-12-1980', '%d-%m-%Y'), 800,null,20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7499, 'ALLEN', 'SALESMAN', 7698, str_to_date('20-02-1981', '%d-%m-%Y'),1600, 300, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7521, 'WARD', 'SALESMAN', 7698, str_to_date('22-02-1981', '%d-%m-%Y'),1250, 500, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7566, 'JONES', 'MANAGER', 7839, str_to_date('02-04-1981', '%d-%m-%Y'),2975, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7654, 'MARTIN', 'SALESMAN', 7698, str_to_date('28-09-1981', '%d-%m-%Y'),1250, 1400, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7698, 'BLAKE', 'MANAGER', 7839, str_to_date('01-05-1981', '%d-%m-%Y'),2850, null, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7782, 'CLARK', 'MANAGER', 7839, str_to_date('09-06-1981', '%d-%m-%Y'),2450, null, 10);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7788, 'SCOTT', 'ANALYST', 7566, str_to_date('19-04-1987', '%d-%m-%Y'),3000,null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7839, 'KING', 'PRESIDENT', null, str_to_date('17-11-1981', '%d-%m-%Y'),5000,null, 10);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7844, 'TURNER', 'SALESMAN', 7698, str_to_date('08-09-1981', '%d-%m-%Y'),1500, 0, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7876, 'ADAMS', 'CLERK', 7788, str_to_date('23-05-1987', '%d-%m-%Y'),1100,null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7900, 'JAMES', 'CLERK', 7698, str_to_date('03-12-1981', '%d-%m-%Y'),950,null, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7902, 'FORD', 'ANALYST', 7566, str_to_date('03-12-1981', '%d-%m-%Y'),3000,null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7934, 'MILLER', 'CLERK', 7782, str_to_date('23-01-1982', '%d-%m-%Y'),1300,null, 10);
create table salgrade (
grade numeric primary key,
losal numeric,
hisal numeric
);
insert into salgrade values (1, 700, 1200);
insert into salgrade values (2, 1201, 1400);
insert into salgrade values (3, 1401, 2000);
insert into salgrade values (4, 2001, 3000);
insert into salgrade values (5, 3001, 9999);
kylin 启动顺序
${HADOOP_HOME}/sbin/start-dfs.sh
${HADOOP_HOME}/sbin/start-yarn.sh
${ZK_HOME}/bin/zkServer.sh start
${HBASE_HOME}/bin/start-hbase.sh
${KYLIN_HOME}/bin/kylin.sh start
内网离线安装 docker 并运行
https://blog.csdn.net/zz_aiytag/article/details/101905750
使用 docker 安装
docker 仓库 pull 镜像:
docker pull apachekylin/apache-kylin-standalone:3.1.0
pull 成功后,执行以下命令启动容器:
docker run -d \
-m 8G \
-p 7070:7070 \
-p 8088:8088 \
-p 50070:50070 \
-p 8032:8032 \
-p 8042:8042 \
-p 16010:16010 \
apachekylin/apache-kylin-standalone:3.1.0
在容器启动时,会自动启动以下服务:
NameNode, DataNode
ResourceManager, NodeManager
HBase
Kafka
Kylin
并自动运行 $KYLIN_HOME/bin/sample.sh 及在 Kafka 中创建 “kylin_streaming_topic” topic 并持续向该 topic 中发送数据。这是为了让用户启动容器后,就能体验以批和流的方式的方式构建 Cube 并进行查询。
容器启动后,我们可以通过 “docker exec -it <container_id> bash” 命令进入容器内。当然,由于我们已经将容器内指定端口映射到本机端口,我们可以直接在本机浏览器中打开各个服务的页面,如:
Kylin 页面:http://127.0.0.1:7070/kylin/login
HDFS NameNode 页面:http://127.0.0.1:50070
YARN ResourceManager 页面:http://127.0.0.1:8088
HBase 页面:http://127.0.0.1:16010
# 修改为国内镜像源
vim /etc/docker/daemon.json
{
"registry-mirrors":["https://pee6w651.mirror.aliyuncs.com"]
}
# 重启 docker
sudo systemctl daemon-reload
sudo systemctl restart docker
docker save -o xxx.tar /xxx/xxx.jar
内网 load
docker load -i xxx.tar
hue
http://archive.cloudera.com/cdh5/cdh/5/hue-3.9.0-cdh5.7.0.tar.gz
kudu + impala => TiDB
kylin + hudi
druid
clickhouse
influxdb + grafana
zepplin 需要 jdk 1.8_151 +
官网下载
kettle 安装
一、系统7.2
sudo wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/matthewdva:/build:/EPEL:/el7/RHEL_7/x86_64/webkitgtk-2.4.9-1.el7.x86_64.rpm
sudo yum install webkitgtk-2.4.9-1.el7.x86_64.rpm
二、系统Centos6.7
./kitchen.sh
#######################################################################
WARNING: no libwebkitgtk-1.0 detected, some features will be unavailable
Consider installing the package with apt-get or yum.
e.g. 'sudo apt-get install libwebkitgtk-1.0-0'
#######################################################################
yum install libwebkitgtk
yum install libwebkitgtk
已加载插件:fastestmirror, security
设置安装进程
Loading mirror speeds from cached hostfile
* base: mirrors.cn99.com
* extras: mirrors.cn99.com
* updates: mirrors.huaweicloud.com
No package libwebkitgtk available.
错误:无须任何处理
yum list *webkit*|grep webkit
yum list *webkit*|grep webkit
libproxy-webkit.x86_64 0.3.0-10.el6 base
pywebkitgtk.x86_64 1.1.6-4.el6 base
webkitgtk.i686 1.4.3-9.el6_6 base
webkitgtk.x86_64 1.4.3-9.el6_6 base
webkitgtk-devel.i686 1.4.3-9.el6_6 base
webkitgtk-devel.x86_64 1.4.3-9.el6_6 base
webkitgtk-doc.x86_64 1.4.3-9.el6_6 base
然后按照提示yum
再执行:./kitchen.sh
没有错误提示即为安装成功
pan 是执行转换的。
1
Pan.bat /file C:\test.ktr /logfile c:\log.txt /level Basic
kitchen是执行job的。
1
kitchen.bat /file C:\test.kjb /logfile c:\log.txt /level Basic
安装 otter
springboot项目读取mysql的binlog日志,在去年的时候,我就遇到一个需求,需要把mysql数据库中的数据的增、删、改的数据准实时做数据清洗,也就是ETL工作,同步到公司的数据仓库greenplum中(数据库数据变化的监听从而同步缓存(如Redis)数据等)。现在将整个详细的操作过程记录如下:
(1)、修改mysql数据库的my.cnf配置文件:
[mysqld]
log-bin=mysql-bin #开启binlog
binlog-format=ROW #选择ROW模式
server_id=1 #配置mysql replication需要定义,不能和canal的slaveId重复
(2)、重启mysql,确认mysql正常启动
(3)、查看binlog是否开启:
show variables like "%log_bin%"
确认log_bin----->ON
sql_log_bin----->ON
(4)、查看binlog日志状态
show master status
(5)、刷新binlog日志文件
flush logs #刷新之后会新建立一个binlog日志
(6)、清空日志文件
reset master
(7)、授权 canal 链接 MySQL 账号具有作为 MySQL slave 的权限, 如果已有账户可直接 grant
CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;
以上每一步都操作完成后,就开启了binlog日志了,数据库方面的准备工作就算是完成了。 本周会更新剩下的操作每一步。
datax
StreamSets Data Collector
NiFi
解决问题
- 安装 hive jdbc 本地jar 包到 仓库
mvn install:install-file -DgroupId=org.apache.hive -DartifactId=hive-jdbc -Dversion=1.1.0-cdh5.7.0 -Dpackaging=jar -Dfile=D:\\software\\hive-jdbc-1.1.0-cdh5.7.0.jar
beeline -u jdbc:hive2://kylin:10000/default
create table psn (
id int,
name string,
hobbies ARRAY <string>,
address MAP <string, string>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '-'
MAP KEYS TERMINATED BY ':';
cron 表达式
0 1 * * * /home/testuser/test.sh
每天晚上1点调用/home/testuser/test.sh
*/10 * * * * /home/testuser/test.sh
每10钟调用一次/home/testuser/test.sh
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每晚的21:30重启apache。
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每月1、10、22日的4 : 45重启apache。
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每周六、周日的1 : 10重启apache。
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每星期六的11 : 00 pm重启apache。
* */1 * * * /usr/local/etc/rc.d/lighttpd restart
每一小时重启apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11点到早上7点之间,每隔一小时重启apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
每月的4号与每周一到周三的11点重启apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
一月一号的4点重启apache
*/30 * * * * /usr/sbin/ntpdate 210.72.145.44
每半小时同步一下时间0 1 * * * /home/testuser/test.sh
每天晚上1点调用/home/testuser/test.sh
*/10 * * * * /home/testuser/test.sh
每10钟调用一次/home/testuser/test.sh
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每晚的21:30重启apache。
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每月1、10、22日的4 : 45重启apache。
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每周六、周日的1 : 10重启apache。
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每星期六的11 : 00 pm重启apache。
* */1 * * * /usr/local/etc/rc.d/lighttpd restart
每一小时重启apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11点到早上7点之间,每隔一小时重启apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
每月的4号与每周一到周三的11点重启apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
一月一号的4点重启apache
*/30 * * * * /usr/sbin/ntpdate 210.72.145.44
每半小时同步一下时间
kylin + kafka 流式构建只支持JSON的数据格式。
对接 kafka 步骤, 安装完 kafka,配置好环境变量,进入 $KAFKA_HOME 目录
bin/kafka-server-start.sh config/server.properties &
如果报错缺少 jar 包
cp $KAFKA_HOME/libs/kafka-clients-2.6.0.jar $KYLIN_HOME/lib
然后照着官网来就可以成功了
flume
wget -c http://archive.cloudera.com/cdh5/cdh/5/flume-ng-1.6.0-cdh5.7.0.tar.gz
下载 数据库驱动
https://github.com/keedio/flume-ng-sql-source
然后配置 mysql_kafka_kylin.conf 文件
agent.sources = sql-source
agent.sinks = k1
agent.channels = ch
#这个是flume采集mysql的驱动,git地址https://github.com/keedio/flume-ng-sql-source,
#需要自己编译,编译完成后,将flume-ng-sql-source-1.x.x.jar包放到FLUME_HOME/lib下,
#如果是CM下CDH版本的flume,则放到/opt/cloudera/parcels/CDH-xxxx/lib/flume-ng/lib下
agent.sources.sql-source.type= org.keedio.flume.source.SQLSource
# URL to connect to database (currently only mysql is supported)
#?useUnicode=true&characterEncoding=utf-8&useSSL=false参数需要加上
agent.sources.sql-source.hibernate.connection.url=jdbc:mysql://kylin:3306/hnxqbz?useUnicode=true&characterEncoding=utf-8&useSSL=false
# Database connection properties
agent.sources.sql-source.hibernate.connection.user=root
agent.sources.sql-source.hibernate.connection.password =root
agent.sources.sql-source.hibernate.dialect = org.hibernate.dialect.MySQLDialect
#需要将mysql-connector-java-X-bin.jar放到FLUME_HOME/lib下,
#如果是CM下CDH版本的flume,则放到/opt/cloudera/parcels/CDH-xxxx/lib/flume-ng/lib下
#此处直接提供5.1.48版本(理论mysql5.x的都可以用)的
#wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.48.tar.gz
#注意,mysql驱动版本太低会报错:
#org.hibernate.exception.JDBCConnectionException: Error calling DriverManager#getConnection
agent.sources.sql-source.hibernate.driver_class = com.mysql.jdbc.Driver
agent.sources.sql-source.hibernate.connection.autocommit = true
#填写你需要采集的数据表名字
agent.sources.sql-source.table = kylin_test_ods
agent.sources.sql-source.columns.to.select = *
# Query delay, each configured milisecond the query will be sent
agent.sources.sql-source.run.query.delay=10000
# Status file is used to save last readed row
#储存flume的状态数据,因为是增量查找
agent.sources.sql-source.status.file.path = /home/kylin/opt/installed/apache-flume-1.6.0-cdh5.7.0-bin/status
agent.sources.sql-source.status.file.name = sql-source.status
#kafka.sink配置,此处是集群,需要zookeeper和kafka集群的地址已经端口号,不懂的,看后面kafka的配置已经介绍
agent.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
agent.sinks.k1.topic = kafka_kylin
agent.sinks.k1.brokerList = kylin:9092
agent.sinks.k1.batchsize = 200
agent.sinks.kafkaSink.requiredAcks=1
agent.sinks.k1.serializer.class = kafka.serializer.StringEncoder
#此处的zookeeper端口根据配置来,我配的是2180,基本应该是2181
agent.sinks.kafkaSink.zookeeperConnect=kylin:2180
agent.channels.ch.type = memory
agent.channels.ch.capacity = 10000
agent.channels.ch.transactionCapacity = 10000
agent.channels.hbaseC.keep-alive = 20
agent.sources.sql-source.channels = ch
agent.sinks.k1.channel = ch
./flume-ng agent -n agent -c ./ -f ../conf/mysql-flume-kafka.conf -Dflume.root.logger=DEBUG,console
# kafka 创建 topic
./kafka-server-start.sh ../config/server.properties
./kafka-topics.sh --create --topic kafka_kylin --partitions 3 --replication-factor 1 --zookeeper kylin:2181
新版本 替代 --zookeeper 参数 --bootstrap-server kylin:9092
nacos
Nacos是阿里巴巴集团开源的一个易于使用的平台,专为动态服务发现,配置和服务管理而设计。它可以帮助您轻松构建云本机应用程序和微服务平台。
bin/startup.sh -m standalone
# es 下载
wget -c https://mirrors.huaweicloud.com/elasticsearch/7.8.0/elasticsearch-7.8.0-linux-x86_64.tar.gz
# kibana 下载
wget -c https://mirrors.huaweicloud.com/kibana/7.8.0/kibana-7.8.0-linux-x86_64.tar.gz
数据
FormData和Payload是浏览器传输给接口的两种格式,这两种方式浏览器是通过Content-Type来进行区分的(了解Content-Type),如果是 application/x-www-form-urlencoded的话,则为formdata方式,如果是application/json或multipart/form-data的话,则为 request payload
微服务 , 单体服务
注册中心ZooKeeper、Eureka、Consul 、Nacos对比
大数据优化
1. HDFS
1. 设置HDFS多个存储目录
原理:将数据分不到多个磁盘,不会只占用某个磁盘,导致某些磁盘频繁使用,某些磁盘空闲。
优化:dfs.datanode.data.dir 添加dfs不同磁盘存储位置
2. 设置Namenode与Datanode通讯的线程数量 :
原理:过小会导致Datanode延迟或者断开,集群规模大时必须设置,默认为10,通常需要重新配置。
优化:dfs.namenode.handler.count = 20 * log2N
N为集群规模,比如:集群规模为8台时,此参数设置为60
3. 设置编辑日志存储与镜像文件存储不同路径
原理:将两者储路径分开,将达到最低写入延迟
优化:编辑日志存储路径 dfs.namenode.edits.dir
镜像文件存储路径 dfs.namenode.name.dir
2. Yarn
1. Yarn节点可使用的内存 :yarn.nodemanager.resource.memory-mb
原理: 合理设置内存分配,提高资源利用,防止oom
优化:默认是8G,一般会根据节点将节点上,除了其他组件需要的内存,其余内存全部分配给YARN
2. Yarn单个任务可申请的最小/最大物理内存量 :yarn.scheduler.minimum-allocation-mb / maximum
原理:合理设置内存分配,提高资源利用,防止oom
优化:最小默认1G,一般默认
最大默认8G,一般调整为64G或更大,不能超过设置(yarn节点可用内存*节点数)的总和
3. Yarn节点可用虚拟CPU数量 :yarn.nodemanager.resource.cpu-vcores
原理:该节点上Yarn可使用的虚拟CPU个数,充分利用CPU资源,增加计算效率
优化:默认是各节点核心数(CDH),其他默认8个,一般会调整为节点核心75%左右
4. Yarn单个任务可申请的最小/最大虚拟CPU数量 :yarn.scheduler.minimum-allocation-vcores /maximum
原理:合理设置,充分利用CPU资源,增加计算效率
优化:最小默认1个,一般默认
最大默认节点核心数(CDH),其他默认32个,一般为集群总核心数的75%左右
5. Yarn为MR App Master分配的内存 :yarn.app.mapreduce.am.resource.mb
原理:设定MR AppMaster使用的内存,因为AppMaster是由Container开启,所以不能超过Container最小内存
优化:最小默认1G,少于Container最小内存
即:少于yarn.scheduler.minimum-allocation-mb
6. Yarn为MR App Master分配的虚拟CPU数量 :yarn.app.mapreduce.am.resource.cpu-vcores
原理:设定MR AppMaster使用的cpu数量
优化:最小默认1个,根据实际情况调整,可不变动
3. Flume
1. Flume内存参数设置及优化
原理:根据服务器配置适当增大Flume堆内存,提高执行效率和稳定性
优化:调整Flume GC overhead
编辑配置文件
/opt/cloudera/parcels/CDH/lib/flume/conf/flume-env.sh
添加
export JAVA_OPTS="-Xms100m -Xmx2000m -Dcom.sun.management.jmxremote"
一般设置为4G或更高
-Xmx与-Xms最好设置一致,减少内存抖动带来的性能影响,如果设置不一致容易导致频繁full gc。
2. 设置Flume batchSize大小
原理:Event 数据量达到多大时处理一次
优化:默认为100,例如:Event 1K左右时,调整为500-1000
3. Source选择
原理:Taildir Source支持断点续传、多目录。Flume1.6以前需要自己自定义Source记录每次读取文件位置,实现断点续传。
Exec Source可以实时搜集数据,但是在Flume不运行或者Shell命令出错的情况下,数据将会丢失。
Spooling Directory Source监控目录,不支持断点续传。
优化:防止数据丢失,选择Taildir Source
实时需求,选择Exec Source
3. Channel类型选择
原理:Memory Channel传输数据速度更快,但因为数据保存在JVM的堆内存中,Agent进程挂掉会导致数据丢失,
适用于对数据质量要求不高的需求。
File Channel传输速度相对于Memory慢,但数据安全保障高,Agent进程挂掉也可以从失败中恢复数据。
Kafka Channel省去Flume Sink,提高了效率
优化:数据要求高,选择File Channel
数据要求不严格,但要求速度,选择Memory Channel
Flume连接Kafka,选择Kafka Channel
4. FileChannel优化
优化:1.通过配置dataDirs指向多个路径,每个路径对应不同的硬盘,增大Flume吞吐量
2.checkpointDir和backupCheckpointDir配置在不同硬盘对应的目录中,保证checkpoint如果损坏,
可以使用backupCheckpointDir快速恢复数据
5. HDFS Sink
原理:HDFS存入大量小文件的影响
元数据层面:每个小文件都有一份元数据,其中包括文件路径,文件名,所有者,所属组,权限,
创建时间等,这些信息都保存在Namenode内存中。所以小文件过多,会占用Namenode服务器大量内存,
影响Namenode性能和使用寿命
计算层面:默认情况下MR会对每个小文件启用一个Map任务计算,非常影响计算性能。同时也影响磁盘寻址时间。
优化:HDFS小文件处理,合理设置以下参数
hdfs.rollInterval=3600,hdfs.rollSize=134217728,hdfs.rollCount =0
hdfs.roundValue=10,hdfs.roundUnit= second
设置文件内容达到128M,或者一定时间生成文件,减少小文件生产数量。
6. Fiume小文件合并
优化:调整hdfs.rollInterval 按时间生成文件
hdfs.rollSize 按大小生成
hdfs.rollCount 按数量生成
4. Kafka
如果写入文件过量造成NameNode宕机,调高Kafka的存储大小,控制从Kafka到HDFS的写入速度。
高峰期的时候用Kafka进行缓存,高峰期过去数据同步会自动跟上。
5. Hive
1. 输出合并小文件
SET hive.merge.mapfiles = true; 默认true,在Map任务结束时合并小文件
SET hive.merge.mapredfiles = true; 默认false,在MapReduce任务结束时合并小文件
SET hive.merge.size.per.task = 268435456; 默认256M,每次合并的文件大小
SET hive.merge.smallfiles.avgsize = 16777216;
当输出文件的平均大小小于该值时,启动一个独立的MapReduce任务进行小文件合并
2. Hive基于MR时的优化
1. 增加Maptask和Reducetask运行内存:
默认1G,开发调到4-6G,实际配置的内存需要根据自己机器内存大小及应用情况进行修改
mapreduce.map.memory.mb=2048
mapreduce.map.java.opts=-Xmx1024M
mapreduce.reduce.memory.mb=3072
mapreduce.reduce.java.opts=-Xmx2560M
2. shuffle优化:环形缓冲区大小默认100M,调整为200M或更大。
默认阈值80%,调整为90-95
原因:减少溢写文件个数
3. reduce优化:拉取个数默认5个,可以设置10个或更大,拉取内存可以设置调大
原因:增加并行度
*. 运行内存不足容易导致的情况:
Hive使用过多内存而被NodeManager kill
即从节点上运行的Container试图使用过多的内存,而被NodeManager kill掉
应调整Yarn和maptask/reduceTask内存参数
Maptask运行内存应大于或者等于Container的最小内存,即
mapreduce.map.memory.mb >= yarn.scheduler.minimum-allocation-mb
3. 尽量使用MapJoin
原理:不指定MapJoin,Hive解析器会将Join操作转换为Common Join,即在Reduce阶段完成Join
优化:指定MapJoin,在Map端进行Join,避免Reduce端Join
4. 行列过滤
原理:select * 会全表扫描,降低效率
分区取数据时,使用外连接,如果将副表过滤条件写到where后面,会先关联全表再过滤
优化:select中指定需要的列,如果有分区尽量使用分区过滤
分区取数据使用外连接时,先对副表过滤,再关联
6. Sqoop
1. Hive和MySQL导出导入存在Null值
原理:Hive的Null底层是以"\N"存储,MySQL底层是以Null存储
优化:Sqoop导出时加参数 --input-null-string、--input-null-non-string
导入时加 --null-string、--null-non-string
2. 数据一致性
原理:如果导入过程中Map任务失败,导致只导入部分数据
优化:建立临时表,导入完成再从临时表导入目标表
添加参数 --staging-table、--clear-staging
7. 其他优化
1. 元数据备份
原理:如数据损坏,可能整个集群无法运行
优化:至少要保证每日零点之后备份到其它服务器两个复本
Apache Flink® 1.11.2 是我们最新的稳定版本。
Spark 3.x
https://www.cnblogs.com/xiaodf/p/12841476.html
内网穿透
ngrok 与 frp
mysql 连接
url=jdbc:mysql://ip:port/xxx?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&useSSL=false
driverClassName=com.mysql.cj.jdbc.Driver
windows 后台进程 或者 将 bat 封装为 windows 服务
set ws=WScript.CreateObject("WScript.Shell")
ws.Run "test.cmd",0
将bat文件或exe程序注册成windows服务
命令行使用sc命令.
关于sc命令的详解,请自行查看帮助(sc /?),在此只简单提及如何加入系统服务功能.
加入服务:
sc create ServiceName binPath= 路径 start= auto
(等号后面的空格必须)
删除服务:
sc delete ServiceName
例一:
将Tomcat加入到系统服务中:
sc create Tomcat binPath= F:/apache-tomcat/bin/startup.bat start= auto
将Tomcat服务删除:
sc delete Tomcat
注意:等号和值之间应该有一个空格
例二:
sc create MyService binPath= "cmd.exe /c start c:\a.exe" start= auto displayname= "AutoStartOracle Services"
附: sc命令详解——
SC命令详解(一个很有用的command)
作为一个命令行工具,SC.exe可以用来测试你自己的系统,你可以设置一个批处理文件来使用不同的参数调用 SC.exe来控制服务。
一.SC使用这样的语法:
1. SC [Servername] command Servicename [Optionname= Optionvalues]
2. SC [command]
这里使用第一种语法使用SC,使用第二种语法显示帮助。
下面介绍各种参数。
Servername
可选择:可以使用双斜线,如\\myserver,也可以是\\192.168.1.223来操作远程计算机。如果在本地计算机上操作
就不用添加任何参数。
Command
下面列出SC可以使用的命令。
config----改变一个服务的配置。(长久的)
continue--对一个服务送出一个继续控制的要求。
control----对一个服务送出一个控制。
create----创建一个服务。(增加到注册表中)
delete----删除一个服务。(从注册表中删除)
EnumDepend--列举服务的从属关系。
GetDisplayName--获得一个服务的显示名称。
GetKeyName--获得一个服务的服务键名。
interrogate--对一个服务送出一个询问控制要求。
pause----对一个服务送出一个暂停控制要求。
qc----询问一个服务的配置。
query----询问一个服务的状态,也可以列举服务的状态类型。
start----启动一个服务。
stop----对一个服务送出一个停止的要求。
Servicename
在注册表中为service key制定的名称。注意这个名称是不同于显示名称的(这个名称可以用net start和服务控
制面板看到),而SC是使用服务键名来鉴别服务的。
Optionname
这个optionname和optionvalues参数允许你指定操作命令参数的名称和数值。注意,这一点很重要在操作名称和等
号之间是没有空格的。一开始我不知道,结果………………,比如,start= optionvalues,这个很重要。
optionvalues可以是0,1,或者是更多的操作参数名称和数值对。
如果你想要看每个命令的可以用的optionvalues,你可以使用sc command这样的格式。这会为你提供详细的帮助。
Optionvalues
为optionname的参数的名称指定它的数值。有效数值范围常常限制于哪一个参数的optionname。如果要列表请用
sc command来询问每个命令。
Comments
很多的命令需要管理员权限,所以我想说,在你操作这些东西的时候最好是管理员。呵呵!
当你键入SC而不带任何参数时,SC.exe会显示帮助信息和可用的命令。当你键入SC紧跟着命令名称时,你可以得
到一个有关这个命令的详细列表。比如,键入sc create可以得到和create有关的列表。
但是除了一个命令,sc query,这会导出该系统中当前正在运行的所有服务和驱动程序的状态。
当你使用start命令时,你可以传递一些参数(arguments)给服务的主函数,但是不是给服务进程的主函数。
二.SC create
这个命令可以在注册表和服务控制管理数据库建立一个入口。
语法1
sc [servername] create Servicename [Optionname= Optionvalues]
这里的servername,servicename,optionname,optionvalues和上面的一样,这里就不多说了。这里我们详细说
明一下optionname和optionvalues。
Optionname--Optionvalues
描述
type=----own, share, interact, kernel, filesys
关于建立服务的类型,选项值包括驱动程序使用的类型,默认是share。
start=----boot, sys tem, auto, demand, disabled
关于启动服务的类型,选项值包括驱动程序使用的类型,默认是demand(手动)。
error=----normal, severe, critical, ignore
当服务在导入失败错误的严重性,默认是normal。
binPath=--(string)
服务二进制文件的路径名,这里没有默认值,这个字符串是必须设置的。
group=----(string)
这个服务属于的组,这个组的列表保存在注册表中的ServiceGroupOrder下。默认是nothing。
tag=----(string)
如果这个字符串被设置为yes,sc可以从CreateService call中得到一个tagId。然而,SC并不显示这个标签,所
以使用这个没有多少意义。默认是nothing
depend=----(space separated string)有空格的字符串。
在这个服务启动前必须启动的服务的名称或者是组。
obj=----(string)
账号运行使用的名称,也可以说是登陆身份。默认是localsys tem
Displayname=--(string)
一个为在用户界面程序中鉴别各个服务使用的字符串。
password=--(string)
一个密码,如果一个不同于localsystem的账号使用时需要使用这个。
Optionvalues
Optionname参数名称的数值列表。参考optionname。当我们输入一个字符串时,如果输入一个空的引用这意味着
一个空的字符串将被导入。
Comments
The SC CREATE command perFORMs the operations of the CreateService API function.
这个sc create命令执行CreateService API函数的操作。详细请见CreateService。
例子1
下面这个例子在计算机上建立叫“mirror”的服务建立的一个注册表登记,是自动运行服务,从属于TDI组和NetBios服务。
C:\WINDOWS\system32>sc create mirror binPath= "D:\Ftp\新建文件夹\mirror.exe" type= own start= auto
[SC] CreateService SUCCESS
重启后生效
例子2 删除Mirror服务
C:\WINDOWS\system32>sc delete mirror binPath= "D:\Ftp\新建文件夹\mirror.exe" type= own start= auto
[SC] DeleteService SUCCESS
三. SC QC
这个SC QC“询问配置”命令可以列出一个服务的配置信息和QUERY_SERVICE_CONFIG结构。
语法1
sc [Servername] qc Servicename [Buffersize]
Parameters
servername和servicename前面已经介绍过了,这里不再多说。
Buffersize,可选择的,列出缓冲区的尺寸。
Comments
SC QC命令显示了QUERY_SERVICE_CONFIG结构的内容。
以下是QUERY_SERVICE_CONFIG相应的区域。
TYPE------dwServiceType
START_TYPE----dwStartType
ERROR_CONTROL----dwErrorControl
BINARY_PATH_NAME--lpBinaryPathName
LOAD_ORDER_GROUP--lpLoadOrderGroup
TAG------dwTagId
DISPLAY_NAME----lpDisplayName
DEPENDENCIES----lpDependencies
SERVICE_START_NAME--lpServiceStartName
例1
下面这个例子询问了在上面例子中建立的“mirror”服务的配置:
sc qc
sc显示下面的信息:
SERVICE_NAME: mirror
TYPE : 10 WIN32_OWN_PROCESS
START_TYPE : 2 AUTO_START
ERROR_CONTROL : 1 NORMAL
BINARY_PATH_NAME : D:\Ftp\
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : mirror
DEPENDENCIES :
SERVICE_START_NAME : LocalSystem
mirror有能力和其他的服务共享一个进程。这个服务 不依靠与其它的的服务,而且运行在lcoalsystem的安全上下关系中。这些都是调用QueryServiceStatus基本的返回,如果还需要更多的细节届时,可以看看API函数文件。 mirror
四.SC QUERY
SC QUERY命令可以获得服务的信息。
语法:
sc [Servername] query { Servicename | ptionname= Optionvalues... }
参数:
servername, servicename, optionname, optionvalues不在解释。只谈一下这个命令提供的数值。
Optionname--Optionvalues
Description
type=----driver, service, all
列举服务的类型,默认是service
state=----active, inactive, all
列举服务的状态,默认是active
bufsize=--(numeric values)
列举缓冲区的尺寸,默认是1024 bytes
ri=----(numeric values)
但开始列举时,恢复指针的数字,默认是0
Optionvalues
同上。
Comments
SC QUERY命令可以显示SERVICE_STATUS结构的内容。
下面是SERVICE_STATUS结构相应的信息:
TYPE------dwServiceType
STATE------dwCurrentState, dwControlsAccepted
WIN32_EXIT_CODE----dwWin32ExitCode
SERVICE_EXIT_CODE--dwServiceSpecificExitCode
CHECKPOINT----dwCheckPoint
WAIT_HINT----dwWaitHint
在启动计算机后,使用SC QUERY命令会告诉你是否,或者不是一个启动服务的尝试。如果这个服务成功启动,WIN32_EXIT_CODE区间会将会包含一个0,当尝试不成功时,当它意识到这个服务不能够启动时,这个区间也会提供一个退出码给服务。
例子
查询“mirror'服务状态,键入:
sc query mirror
显示一下信息:
SERVICE_NAME: mirror
TYPE : 10 WIN32_OWN_PROCESS
STATE : 1 STOPPED
(NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
注意,这里存在一个给这个服务的退出码,即使这个服务部不在运行,键入net helpmsg 1077,将会得到对1077错误信息的说明:
上次启动之后,仍未尝试引导服务。
所以,这里我想说一句,希望大家可以活用net helpmsg,这会对你的学习有很大的帮助。
下面在对SC query的命令在说明一下:
列举活动服务和驱动程序状态,使用以下命令:
sc query
显示messenger服务,使用以下命令:
sc query messenger
只列举活动的驱动程序,使用以下命令:
sc query type= driver
列举Win32服务,使用以下命令:
sc query type= service
列举所有的服务和驱动程序,使用以下命令:
sc query state= all
用50 byte的缓冲区来进行列举,使用以下命令:
sc query bufsize= 50
在恢复列举时使用index=14,使用以下命令:
sc query ri=14
列举所有的交互式服务,使用以下命令:
sc query type= service type= interact
五、sc命令启动已经禁用的服务,例如:启动telnet服务
sc config tlntsvr start= auto
net start tlntsvr
开源堡垒机
https://www.jumpserver.org/
https://github.com/jumpserver/jumpserver
ruoyi
Bootstrap 3.3.7前端框架
mdlib
https://gitee.com/tinylab/markdown-lab/blob/master/README.md
如果有来生,一个人去远行,看不同的风景,感受生命的活力。。。