gitweixin
  • 首页
  • 小程序代码
    • 资讯读书
    • 工具类
    • O2O
    • 地图定位
    • 社交
    • 行业软件
    • 电商类
    • 互联网类
    • 企业类
    • UI控件
  • 大数据开发
    • Hadoop
    • Spark
    • Hbase
    • Elasticsearch
    • Kafka
    • Flink
    • 数据仓库
    • 数据挖掘
    • flume
    • Kafka
    • Hive
    • shardingsphere
    • solr
  • 开发博客
    • Android
    • php
    • python
    • 运维
    • 技术架构
    • 数据库
  • 程序员网赚
  • bug清单
  • 量化投资
  • 在线查询工具
    • 去行号
    • 在线时间戳转换工具
    • 免费图片批量修改尺寸在线工具
    • SVG转JPG在线工具

namenode 日志提示 storage directory does not exist or is not accessible

精品微信小程序开发门户,代码全部亲测可用

  • 首页   /  
  • 作者: east
  • ( 页面75 )
bug清单, Hadoop 4月 24,2020

namenode 日志提示 storage directory does not exist or is not accessible

移植hadoop到另一台机器,启动hadoop时,发现namenode没启动起来。检查配置文件没问题,ssh又免登录了,于是删除hadoop几个临时文件夹,重新格式化,果然就正常了。

作者 east
Java 4月 24,2020

空间几何运算方法

private static final Logger logger = LoggerFactory.getLogger(AnalyseKit.class);
/***************************************************************************
* 边界
*/
private static final double dis = 0.0000000001;
// 地图常量
public final static double _C_P = 0.017453292519943295;
// 地球经纬度, 偏差度
public final static double EARTH_RADIUS = 6371008.77141506;
// 单位经度
public static final long LONGITUDE_METER = 111413;
// 单位纬度
public static final long LATITUDE_METER = 111133;

/**
* 求亮点之间的距离
*
* @param str 坐标1
* @param str2 坐标2
* @return
*/
public static double getDistance(String str, String str2) {

PointBean point1 = new PointBean();
point1.setX(Double.parseDouble(str.split(",")[0]));
point1.setY(Double.parseDouble(str.split(",")[1]));

PointBean point2 = new PointBean();
point2.setX(Double.parseDouble(str2.split(",")[0]));
point2.setY(Double.parseDouble(str2.split(",")[1]));

double meter = getDistance(point1, point2);
return meter;
}

/**
* 计算点是否在圆内
*
* @param point 点坐标
* @param pointPolygon 面边框坐标
* @return
*/
public static boolean judgeMeetCircle(String point, String criclePoint, float r) {
PointBean point1 = new PointBean();
point1.setX(Double.parseDouble(point.split(",")[0]));
point1.setY(Double.parseDouble(point.split(",")[1]));

PointBean point2 = new PointBean();
point2.setX(Double.parseDouble(criclePoint.split(",")[0]));
point2.setY(Double.parseDouble(criclePoint.split(",")[1]));

double d = getDistance(point1, point2);
if (d <= r)
return true;
else
return false;

}

/**
* 判断是否在矩形内
*
* @param minPt
* @param maxPt
* @param pt
* @return
*/
public static boolean judgeInRect(PointBean minPt, PointBean maxPt, PointBean pt) {
if (pt.getX() >= minPt.getX() && pt.getX() <= maxPt.getX() && pt.getY() >= minPt.getY()
&& pt.getY() <= maxPt.getY()) {
return true;
} else {
return false;
}
}

/**
* 计算点是否在多边形内
*
* @param point 点坐标
* @param pointPolygon 面边框坐标
* @return
*/
public static boolean judgeMeetPolygon(String linestr, String pointPolygon) {
String string = pointPolygon;
int index = 0;
// 判断是否是飞地
if (string.indexOf(";") != -1) {
String[] points = string.split(";");
for (String point : points) {
if (AnalyseKit.judgeMeetPoint(linestr, point)) {
return true;
} else {
index++;
}
}
return (index == 0 || index > 1) ? false : true;
} else if (string.indexOf("|") != -1) {// 判断是否是有洞
String[] points = string.split("|");
for (String point : points) {
if (AnalyseKit.judgeMeetPoint(linestr, point))
index++;
}
return (index == 0 || index > 1) ? false : true;
} else {
return AnalyseKit.judgeMeetPoint(linestr, string);
}
}

// #################################私有方法#################################
private static boolean judgeMeetPoint(String point, String pointPolygon) {
PointBean point2 = new PointBean();
point2.setX(Double.parseDouble(point.split(",")[0]));
point2.setY(Double.parseDouble(point.split(",")[1]));
List<PointBean> list = AnalyseKit.evalPoints(pointPolygon);
if (list.size() == 2) {
return AnalyseKit.judgeInRect(list.get(0), list.get(1), point2);
} else {
return AnalyseKit.judgeMeetPoint(point2, list);
}
}

/**
* 转换坐标串
*
* @param points
* @return
*/
private static List<PointBean> evalPoints(String points) {
List<PointBean> list = new ArrayList<PointBean>();
String[] split = points.split(",");
for (int i = 1; i < split.length; i++) {
if (i % 2 == 1) {
PointBean point3 = new PointBean();
point3.setX(Double.parseDouble(split[i - 1]));
point3.setY(Double.parseDouble(split[i]));
list.add(point3);
}
}
return list;
}

/**
* 判断点是否在面内的算法
*
* @param tpt 点坐标
* @param polygonPtArray 面外边框坐标集合
* @return
*/
private static boolean judgeMeetPoint(PointBean tpt, List<PointBean> polygonPtArray) {
int MeetPointNum = 0;
for (int i = 1; i < polygonPtArray.size(); i++) {
PointBean pt1 = polygonPtArray.get(i - 1);
PointBean pt2 = polygonPtArray.get(i);
if (((tpt.getX() <= pt1.getX() && tpt.getX() >= pt2.getX())
|| (tpt.getX() >= pt1.getX() && tpt.getX() <= pt2.getX()))
& (tpt.getY() >= pt1.getY() || tpt.getY() >= pt2.getY())
& (pt1.getX() != pt2.getX() && pt1.getY() != pt2.getY())) {
// 判断点是否在线上
if (judgePtInLine(pt1, pt2, tpt)) {
return true;
}
// 处理特殊情况,交点是端点的情况
double temp;
// temp相当于被除数(斜率的分母)
temp = pt1.getX() - pt2.getX();
if (temp >= -dis && temp <= dis) {
// 处理交点情况
double dx = tpt.getX() - pt1.getX();
if (dx >= -dis && dx <= dis) {
int[] indexs = new int[2];
indexs[0] = 0;
indexs[1] = 0;
getNotSame(polygonPtArray, i, indexs);
PointBean linePt1, linePt2;
linePt1 = polygonPtArray.get(indexs[0]);
linePt2 = polygonPtArray.get(indexs[1]);
if (i > indexs[0]) {
break;
} else {
i = indexs[0] + 1;
}
if (tpt.getY() > pt1.getY() && ((tpt.getX() >= linePt1.getX() && tpt.getX() <= linePt2.getX())
|| (tpt.getX() >= linePt2.getX() && tpt.getX() <= linePt1.getX())))
MeetPointNum++;
}

} else {
double kk, bb;
double MeetPtY, MeetPtX;
kk = (pt1.getY() - pt2.getY()) / (pt1.getX() - pt2.getX());
bb = pt1.getY() - kk * pt1.getX();
MeetPtY = kk * tpt.getX() + bb;
MeetPtX = tpt.getX();
// 处理特殊情况,交点是端点的情况
double dx, dy, dx2, dy2;
dx = MeetPtX - pt1.getX();
dy = MeetPtY - pt1.getY();
dx2 = MeetPtX - pt2.getX();
dy2 = MeetPtY - pt2.getY();
if ((dx >= -dis && dx <= dis && dy >= -dis && dy <= dis)) {
PointBean pt3;
if (i == 1) {
pt3 = polygonPtArray.get(polygonPtArray.size() - 2);
} else {
pt3 = polygonPtArray.get(i - 2);
}
// 提取交点的上下两点分别在垂线的两侧
if (tpt.getY() > MeetPtY && ((MeetPtX >= pt3.getY() && MeetPtX <= pt2.getX())
|| (MeetPtX >= pt2.getX() && MeetPtX <= pt3.getX())))
MeetPointNum++;
} else if (!(dx2 >= -dis && dx2 <= dis && dy2 >= -dis && dy2 <= dis)) {
if (tpt.getY() > MeetPtY) {
MeetPointNum++;
}
}
}
}
}
if (MeetPointNum % 2 == 1)
return true;
else
return false;
}

/**
* 判断点是否在线上
*
* @param tpt1
* @param tpt2
* @param tpt
* @return
*/
private static boolean judgePtInLine(PointBean tpt1, PointBean tpt2, PointBean tpt) {
double dx1 = getDistance(tpt1, tpt2);
double dx2 = getDistance(tpt, tpt1);
double dx3 = getDistance(tpt, tpt2);
double dx = dx3 + dx2 - dx1;
if (dx >= -dis && dx <= dis) {
return true;
}
return false;
}

private static double getDistance(PointBean p1, PointBean p2) {
double k = 0.0;
double h = (p2.x - p1.x) * _C_P;
double g = (p2.y - p1.y) * _C_P;
double f = Math.sin(0.5 * g) * Math.sin(0.5 * g)
+ Math.cos(p1.y * _C_P) * Math.cos(p2.y * _C_P) * (Math.sin(0.5 * h) * Math.sin(0.5 * h));

f = Math.abs(f);

if (f > 1) {
logger.info("不合法数据:" + f + ",P1:" + p1.toString() + ",P2:" + p2.toString());
return -1;
}
double m = 2 * Math.atan2(Math.sqrt(f), Math.sqrt(1 - f));
k = m * EARTH_RADIUS;
if (Math.abs(p2.x - p1.x) > 180 || Math.abs(p2.y - p1.y) > 180) {
k = 2 * Math.PI * EARTH_RADIUS - k;
}
k = Math.ceil(k);

int meter = (int) k;

return meter;
}

/**
* 在链表中获取x轴不相同的点
*
* @param pointArray
* @param index
* @param indexs
*/
private static void getNotSame(List<PointBean> pointArray, int index, int[] indexs) {
indexs[0] = indexs[1] = -1;
int size = pointArray.size();
PointBean buftpt, tpt;
tpt = pointArray.get(index);
for (int i = index; i < size; i++) {
buftpt = pointArray.get(i);
if (buftpt.getX() != tpt.getX()) {
indexs[0] = i;
break;
}
}
if (indexs[0] == -1) {
for (int i = 0; i < size; i++) {
buftpt = (PointBean) pointArray.get(i);
if (buftpt.getX() != tpt.getX()) {
indexs[0] = i;
break;
}
}
}
for (int j = index; j >= 0; j--) {
buftpt = (PointBean) pointArray.get(j);
if (buftpt.getX() != tpt.getX()) {
indexs[1] = j;
break;
}
}
if (indexs[1] == -1) {
for (int j = size - 1; j >= 0; j--) {
buftpt = pointArray.get(j);
if (buftpt.getX() != tpt.getX()) {
indexs[1] = j;
break;
}
}
}
}

/**
* 计算指定处的距离(米)换算为距离(度) ---纬度方向上
*
* @param distance 单位m
* @return 纬度方向上
*/
public static double lenToLat(double distance) {
return distance / LATITUDE_METER;
}

/**
* 计算指定处的距离(米)换算为距离(度) ---经度方向上
*
* @param distnace 单位m
* @param r 指定点的纬度值
* @return
*/
public static double lenToLong(double distnace, double degree) {
double dLatRaian = degree * Math.PI / 180;
return distnace / (LONGITUDE_METER * Math.cos(dLatRaian));
}
作者 east
Java 4月 24,2020

计算地图2点距离-地图工具类

private static final double DEF_PI = 3.14159265359;

private static final double DEF_2PI = 6.28318530712;

private static final double DEF_PI180 = 0.01745329252;

private static final double DEF_R = 6370693.5; // 地球半径

/**
* 利用勾股定理计算,适用两点距离很近的情况
*
* @param lon1 第一个坐标经度
* @param lat1 第一个坐标纬度
* @param lon2 第二个坐标经度
* @param lat2 第二个坐标纬度
* @return
*/
public static double getShortDistance(double lon1, double lat1, double lon2, double lat2) {
double ew1;
double ns1;
double ew2;
double ns2;

double dx;
double dy;
double dew;

double distance;
// 角度转换为弧度
ew1 = lon1 * DEF_PI180;
ns1 = lat1 * DEF_PI180;
ew2 = lon2 * DEF_PI180;
ns2 = lat2 * DEF_PI180;
// 经度差
dew = ew1 - ew2;
// 若跨东经和西经180度,进行调整
if (dew > DEF_PI) {
dew = DEF_2PI - dew;
} else if (dew < -DEF_PI) {
dew = DEF_2PI + dew;
}
dx = DEF_R * Math.cos(ns1) * dew; // 东西方向长度(在纬度圆上的投影长度)
dy = DEF_R * (ns1 - ns2); // 南北方向长度(在经度圆上的投影长度)
// 勾股定理求你斜边长
distance = Math.sqrt(dx * dx + dy * dy);
return distance;
}

/**
* 按标准的球面大圆劣弧长度计算,适用距离较远的情况
*
* @param lon1 第一个坐标经度
* @param lat1 第一个坐标纬度
* @param lon2 第二个坐标经度
* @param lat2 第二个坐标纬度
* @return
*/
public static double getLongDistance(double lon1, double lat1, double lon2, double lat2) {
double ew1;
double ns1;
double ew2;
double ns2;
double distance;
// 角度转换为弧度
ew1 = lon1 * DEF_PI180;
ns1 = lat1 * DEF_PI180;
ew2 = lon2 * DEF_PI180;
ns2 = lat2 * DEF_PI180;
// 求大圆劣弧与球心所夹的角(弧度)
distance = Math.sin(ns1) * Math.sin(ns2) + Math.cos(ns1) * Math.cos(ns2) * Math.cos(ew1 - ew2);
// 调整到[-1..1]范围内,避免溢出
if (distance > 1.0) {
distance = 1.0;
} else if (distance < -1.0) {
distance = -1.0;
}
// 求大圆劣弧长度
distance = DEF_R * Math.acos(distance);
return distance;
}
作者 east
Hbase 4月 24,2020

hbase常用查询命令

根据rowKey查询某个记录

get <table>,<rowkey>,[<family:column>,….]

get ‘User’, ‘row2’


查询所有记录

(1)正序扫描

scan <table>, {COLUMNS => [ <family:column>,…. ], LIMIT => num}

scan ‘User’

(2)倒序扫描

scan ‘table’, {REVERSED => TRUE}

(3)扫描前2条

scan ‘User’, {LIMIT => 2}

(4)范围查询scan ‘User’, {STARTROW => ‘row2’, ENDROW => ‘row2’}

作者 east
bug清单 4月 13,2020

lnmp解决mysql The server quit without updating PID file

lnmp安装包,挂个小网站,mysql跑了几年,一直没去动它。后来有时mysql 挂掉了,偷懒写个自动重启脚本,又继续安稳几个月时间。今天突然发现mysql挂了,重启了报“The server quit without updating PID file”。按网上方法试了还是没解决,后来看到有点说磁盘满了,“df -l”一查看,果真满了,请了日志后果然能重启mysql正常了。

后来又遇到这个问题,磁盘没满。看到错误日志有
“Plugin ‘FEDERATED’ is disabled”

在my.cnf文件中的 [mysqld] 中增加一行
tmpdir=”/usr/local/mysql/var”

同时增加权限 chown mysql:mysql /usr/local/mysql/var

运行service mysql start还是出错,查看错误日志看到

InnoDB: Database page corruption on disk or a failed

添加下面内容:

innodb_force_recovery=1

再启动mysql

则可以正常启动。

作者 east
bug清单, Hadoop 3月 2,2020

hadoop DataNode服务无法启动解决(报java.net.BindException:地址已在使用)

启动DataNode服务后马上又Shutdown, 在操作系统没看到有DataNode的日志(可能是服务启动失败, 自动删除了日志文件),幸好在界面上可以查看报错的日志:

 点开报错信息, 可以看到如下信息:

 HDFS的端口为50010, 但是使用netstat -ntulp | grep 50010查看不到此端口。

分析:

原因:当应用程序崩溃后, 它会留下一个滞留的socket,以便能够提前重用socket, 当尝试绑定socket并重用它,你需要将socket的flag设置为SO_REUSEADDR,但是HDFS不是这么做的。解决办法是使用设置SO_REUSEADDR的应用程序绑定到这个端口, 然后停止这个应用程序。可以使用netcat工具实现。解决办法: 安装nc工具, 使用nc工具占用50010端口, 然后关闭nc服务, 再次启动DataNode后正常。

参考链接:http://www.nosql.se/2013/10/hadoop-hdfs-datanode-java-net-bindexception-address-already-in-use/参考文字:

    After an application crashes it might leave a lingering socket, so to reuse that socket early you need to set the socket flag SO_REUSEADDR when attempting to bind to it to be allowed to reuse it. The HDFS datanode doesn’t do that, and I didn’t want to restart the HBase regionserver (which was locking the socket with a connection it hadn’t realized was dead).The solution was to bind to the port with an application that sets SO_REUSEADDR andthen stop that application, I used netcat for that:# nc -l 50010

2017-02-17 20:54:52,250 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Shutdown complete.2017-02-17 20:54:52,251 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Exception in secureMainjava.net.BindException: Address already in use	at sun.nio.ch.Net.bind0(Native Method)	at sun.nio.ch.Net.bind(Net.java:444)	at sun.nio.ch.Net.bind(Net.java:436)	at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:214)	at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)	at com.cloudera.io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:125)	at com.cloudera.io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:475)	at com.cloudera.io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1021)	at com.cloudera.io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:455)	at com.cloudera.io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:440)	at com.cloudera.io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:844)	at com.cloudera.io.netty.channel.AbstractChannel.bind(AbstractChannel.java:194)	at com.cloudera.io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:340)	at com.cloudera.io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:380)	at com.cloudera.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357)	at com.cloudera.io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)	at com.cloudera.io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137)	at java.lang.Thread.run(Thread.java:745)2017-02-17 20:54:52,262 INFO org.apache.hadoop.util.ExitUtil: Exiting with status 12017-02-17 20:54:52,264 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: SHUTDOWN_MSG: /************************************************************SHUTDOWN_MSG: Shutting down DataNode at cdh1/192.168.5.78
作者 east
bug清单, Hadoop 3月 2,2020

一个启动不了namenode的诡异问题

安装好hadoop后,访问ip:50070,发现只显示NateNode on ip:50070,在终端输入 jps,也没有发现namenode进程。

在百度上各种抓狂,修改host,修改配置文件,删除创建临时文件,重新格式化,还是没有作用。

发现shell执行start-all.sh 提示:

Add correct host key in /root/.ssh/known_hosts to get rid of this message.

于是联想到配置ssh免密时是否操作有问题,发现/root/.ssh多了一个
known_hosts文件,于是删除重新启动,果然好了

作者 east
Java 3月 2,2020

springboot导出excel工具类

try{
//捕获内存缓冲区的数据,转换为字节数组
ByteArrayOutputStream out = new ByteArrayOutputStream();
workbook.write(out);
//获取内存缓冲中的数据
byte[] content = out.toByteArray();
//将字节数据转化为输入流
InputStream in = new ByteArrayInputStream(content);
//通过调用reset()方法可以重新定位
response.reset();
//JSONP 解决跨域问题
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Allow-Methods","GET,POST,PUT,DELETE,OPTIONS");
response.addHeader("Access-Control-Allow-Headers", "WWW-Authenticate,Authorization,Set-Cookie," +
"X-Requested-With,Accept-Version,Content-Length,Content-Type,Date,X-Api-Version,name");
response.addHeader("Access-Control-Allow-Credentials", "true");
// response.setContentType("application/octet-stream");
//如果文件名是英文名不需要加编码格式,如果是中文名需要添加"ios-8859-1"防止乱码
response.setHeader("Content-Disposition", "attachment;filename=" +
new String((fileName + ".xls").getBytes("gb2312"), "iso-8859-1"));
response.setHeader("Content-Length", "" + content.length);
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
ServletOutputStream outputStream = response.getOutputStream();
BufferedInputStream bis = new BufferedInputStream(in);
BufferedOutputStream bos = new BufferedOutputStream(outputStream);
byte[] buff = new byte[8192];
int bytesRead;
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))){
bos.write(buff, 0, bytesRead);
}
bis.close();
bos.close();
outputStream.flush();
outputStream.close();

}catch (IOException ex){
ex.printStackTrace();
}
作者 east
bug清单 2月 23,2020

配置nginx ssl证书问题排查

小程序的ssl证书过期了,重新生成证书,替换证书后,在小程序还提示连接超时,看网上说https不安全也有这个提示。

访问访问,果然提示证书过期了。

检查nginx配置文件

server {    
listen 80;
server_name bjubi.com;// 你的域名
rewrite ^(.*)$ https://$host$1 permanent;// 把http的域名请求转成https
}

server {
listen 443;
server_name bjubi.com; // 你的域名
  ssl on;
root /var/www/bjubi.com; // 前台文件存放文件夹,可改成别的
index index.html index.htm;// 上面配置的文件夹里面的index.html ssl_certificate cert/214292799730473.pem;// 改成你的证书的名字 ssl_certificate_key cert/214292799730473.key;// 你的证书的名字 ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
index index.html index.htm;
}
}
觉得配置没问题,继续排查


配置完成后,检查一下nginx配置文件是否可用,有successful表示可用。
$ nginx -t // 检查nginx配置文件
返回结果如下:
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
觉得配置应该没问题。

为了使配置生效
nginx -s reload // 使配置生效
shell提示: nginx: [alert] kill(1617, 1) failed (3: No such process)
果然出问题了。



[root@localhost /]# whereis ngnix
ngnix:[root@localhost/]# 
[root@localhost /]# find / -name nginx 
/usr/local/src/nginx/sbin/nginx
[root@localhost /]# find / -name nginx.conf
/usr/local/nginx
/usr/local/nginx/sbin/nginx
/usr/bin/nginx
/etc/rc.d/init.d/nginx
[root@localhost /]# /usr/local/src/nginx/sbin/nginx -c nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] still could not bind()

端口被绑定了,需要先kill掉占用的线程

netstat -ntlp

shell返回结果如下:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 28256/mysqld
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3301/nginx: worker
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 919/pure-ftpd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2565/sshd
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 3301/nginx: worker
tcp6 0 0 :::21 :::* LISTEN 919/pure-ftpd

使用命令 kill -9 3301
再制定配置 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nginx -s reload           
重启nginx,果然证书生效了。

作者 east
bug清单 2月 23,2020

Nginx:[emerg] unknown directive ” ” in*******

编辑 了nginx.conf 文件后保存。启动服务器后就报错

10352#3232: unknown directive “server” in /nginx-1.8.1/conf/nginx.conf:1

或Nginx:[emerg] unknown directive ” ” in*
但查看nginx.conf 却没有发现问题。
在网上查找了资料。conf文件被记事本编辑过,保存成了含[utf8 BOM] 。所以才报错的。

使用文本编辑器更改文件的编码模式,改回utf-8编码:

作者 east
spring 2月 6,2020

凯利公式源代码

凯利公式如下:

仓位 =(odds *pwin-q)/b

  odds = 赔率(赔率=期望盈利÷可能亏损=2美元盈利÷1美元亏损,赔率就是2了)

  pwin = 成功概率(抛硬币正反面都是50%的概率)

  q = 失败概率 (也就是 1-p,赌局中也是50%了 )


public class kellyUtil {

/**
* 凯利公式
* @param pwin 胜率
* @param odds 赔率
* @return
*/
public static double kelly(double pwin,double odds){
return (odds * pwin + pwin - 1)/odds;
}

public static double kellyV2(double pwin,double odds, double lossRate){
return (odds * pwin + pwin - 1)/(odds * lossRate);
}

/**
* 巴菲特版仓位管理
* @param pwin
* @return
*/
public static double buffett(double pwin){
return 2 * pwin - 1;
}

public static void main(String[] args) {
double odds = kelly(0.5, 3.0);
// double odds = kellyV2(0.5, 3.0,1.5);
System.out.println(("仓位:" + odds * 100 + "%"));
}
}
作者 east
spring 1月 14,2020

maven 增加本地libs依赖的完美方案

1、首先新建libs文件夹,把外部依赖的jar放进去。

2、在pom文件把外部依赖jar文件导进去

<dependency>
<groupId>org.codehaus.stax2</groupId>
<artifactId>stax2</artifactId>
<version>3.1.4</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/stax2-api-3.1.4.jar</systemPath>
</dependency>

其中groupId、artifactId和version都可以自己定义  scope是system,和provided类似,只是jar包本地提供,这种方式有个缺点,那就是在项目打成jar或war包的时候因为scope是system,只在编译的时候能用,install的时候不会打进去。

在pom中给spring boot的打包插件设置一下includeSystemScope参数即可?

<build>
<plugins>
<plugin>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-maven-plugin</artifactId>
 <configuration>
  <includeSystemScope>true</includeSystemScope>
 </configuration>
</plugin>
</plugins>
</build>
作者 east

上一 1 … 74 75 76 … 92 下一个

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。回复”chatgpt”获取免注册可用chatgpt。回复“大数据”获取多本大数据电子书

标签

AIGC AI创作 bert chatgpt github GPT-3 gpt3 GTP-3 hive mysql O2O tensorflow UI控件 不含后台 交流 共享经济 出行 图像 地图定位 外卖 多媒体 娱乐 小程序 布局 带后台完整项目 开源项目 搜索 支付 效率 教育 日历 机器学习 深度学习 物流 用户系统 电商 画图 画布(canvas) 社交 签到 联网 读书 资讯 阅读 预订

官方QQ群

小程序开发群:74052405

大数据开发群: 952493060

近期文章

  • MQTT完全解析和实践
  • 解决运行Selenium报错:self.driver = webdriver.Chrome(service=service) TypeError: __init__() got an unexpected keyword argument ‘service’
  • python 3.6使用mysql-connector-python报错:SyntaxError: future feature annotations is not defined
  • 详解Python当中的pip常用命令
  • AUTOSAR如何在多个供应商交付的配置中避免ARXML不兼容?
  • C++thread pool(线程池)设计应关注哪些扩展性问题?
  • 各类MCAL(Microcontroller Abstraction Layer)如何与AUTOSAR工具链解耦?
  • 如何设计AUTOSAR中的“域控制器”以支持未来扩展?
  • C++ 中避免悬挂引用的企业策略有哪些?
  • 嵌入式电机:如何在低速和高负载状态下保持FOC(Field-Oriented Control)算法的电流控制稳定?

文章归档

  • 2025年7月
  • 2025年6月
  • 2025年5月
  • 2025年4月
  • 2025年3月
  • 2025年2月
  • 2025年1月
  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年1月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年7月
  • 2018年6月

分类目录

  • Android (73)
  • bug清单 (79)
  • C++ (34)
  • Fuchsia (15)
  • php (4)
  • python (45)
  • sklearn (1)
  • 云计算 (20)
  • 人工智能 (61)
    • chatgpt (21)
      • 提示词 (6)
    • Keras (1)
    • Tensorflow (3)
    • 大模型 (1)
    • 智能体 (4)
    • 深度学习 (14)
  • 储能 (44)
  • 前端 (4)
  • 大数据开发 (490)
    • CDH (6)
    • datax (4)
    • doris (31)
    • Elasticsearch (15)
    • Flink (78)
    • flume (7)
    • Hadoop (19)
    • Hbase (23)
    • Hive (41)
    • Impala (2)
    • Java (71)
    • Kafka (10)
    • neo4j (5)
    • shardingsphere (6)
    • solr (5)
    • Spark (99)
    • spring (11)
    • 数据仓库 (9)
    • 数据挖掘 (7)
    • 海豚调度器 (10)
    • 运维 (34)
      • Docker (3)
  • 小游戏代码 (1)
  • 小程序代码 (139)
    • O2O (16)
    • UI控件 (5)
    • 互联网类 (23)
    • 企业类 (6)
    • 地图定位 (9)
    • 多媒体 (6)
    • 工具类 (25)
    • 电商类 (22)
    • 社交 (7)
    • 行业软件 (7)
    • 资讯读书 (11)
  • 嵌入式 (71)
    • autosar (63)
    • RTOS (1)
    • 总线 (1)
  • 开发博客 (16)
    • Harmony (9)
  • 技术架构 (6)
  • 数据库 (32)
    • mongodb (1)
    • mysql (13)
    • pgsql (2)
    • redis (1)
    • tdengine (4)
  • 未分类 (6)
  • 程序员网赚 (20)
    • 广告联盟 (3)
    • 私域流量 (5)
    • 自媒体 (5)
  • 量化投资 (4)
  • 面试 (14)

功能

  • 登录
  • 文章RSS
  • 评论RSS
  • WordPress.org

All Rights Reserved by Gitweixin.本站收集网友上传代码, 如有侵犯版权,请发邮件联系yiyuyos@gmail.com删除.