/images/avatar-home.jpeg

elasticsearch 使用BulkProcessor导入txt大文件

最近在学es,需要导入8亿条数据

手上有一个txt大约有8亿条数据的样子,文件有19G左右,一开始百度搜了下,基本都是重复文章,不过也根据写这些文章的大佬慢慢google到了一些方法。
先说下导入机器配置:
cpu: E5 1620V2
内存: 32G(分给es 12G)
硬盘:4x2T raid 0(io大概在600左右)

导入的几种方法:

1、bulk:

ES本地支持的批量导入方式,将json文件post到es进行处理。
将需要导入的数据先生成json文件,格式类似这种

#指定 index  
{"index":{"_index":"suoy","_id":1}}  
#字段  
{"text_entry":"内容"}  
{"index":{"_index":"suoy","_id":1}}  
{"text_entry":"内容"}  
{"index":{"_index":"suoy","_id":1}}  
{"text_entry":"内容"}  
...........

然后使用curl提交

curl -H 'Content-Type: application/x-ndjson' -XPOST '127.0.0.1:9200/xxxxxxxx/doc/_bulk?pretty' --data-binary @out.json

一开始我是尝试这种方法,用python将数据重新处理了下,生成的文件有48GB……,还花了3-5个小时的样子,导入的时候直接失败~后面,看了下说是文件大小尽量不能超过200MB???这样的话就要分割文件了,虽然可以shell脚本一个一个的提交小文件json,后面想想直接放弃了(嫌麻烦)…….

2、logstash:

ES官方的另一个产品,将数据文本转换为ES的数据源。
我的文本一行只有两个字段,用 “—-” 分割,花了点时间学logstash直接上手开干,但是导入速度只有9000条/s的样子,一个小时导了大概3200w条数据,导了16个小时大概导了5.2亿条数据,这速度完全不行啊,后面手贱不注意按了 Ctrl+c,嗯…..这下好了,不知道怎么断点续传,又得重新来……
我用的脚本如下,有懂的大佬能否告知下logstash有没有类似BulkProcessor储存到x条数据再执行Bulk的方法?

pve 安装ifupdown2

其实安装完pve后第一步就是移除企业订阅源,防止后面出现很多问题(由于企业仓库更新源需要购买订阅服务,所以我们需要手动修改到官方的非订阅源)。
由于proxmox VE 的 ifupdown2 到企业版里了,所以……

删除原来的企业源

rm /etc/apt/sources.list.d/pve-enterprise.list

添加官方非订阅免费源

echo 'deb http://download.proxmox.com/debian/pve buster pve-no-subscription' >> /etc/apt/sources.list.d/pve-no-subscription.list

注意上边的buster,非其他教程中的stretch,是由于debian版本的问题,具体不解释

更新

apt update

安装ifupdown2

 

apt install ifupdown2

参考文章:
https://www.d3tt.com/view/119

踩坑 mybatis-plus Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table

org.springframework.jdbc.BadSqlGrammarException:  
###Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorExceptin: Table ‘xxx.xxx’ doesn’t exist  
###The error may exist in com/example/mapper/UserMapper.java (best guess)  
###The error may involve defaultParameterMap  
###The error occurred while setting parameters  
###SQL: SELECT id,name,age,email FROM user  
###Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table ‘xxx.xxxr’ doesn’t exist  
; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table ‘xxx.xxx’ doesn’t exist

错误原因:原因实体类pojo名字和表名不一致!!mybatis-plus默认规则是实体类和表名以驼峰命名法映射,要求是需要符合这个规则才能执行成功。
所以需要在实体类上加@TableName(“表名”)
由于我使用的是官方的代码生成器,所以有这么一句

git(github)删除误上传的敏感文件

FILEPATH 变量代表的是路径。
 

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch FILEPATH' --prune-empty --tag-name-filter cat -- --all  
# 例子  
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch src/main/resources/application-dev.properties' --prune-empty --tag-name-filter cat -- --all  
git push origin master --force  
rm -rf .git/refs/original/  
git reflog expire --expire=now --all  
git gc --prune=now  
git gc --aggressive --prune=now

Office365邮局开启DKIM

注册完E5后可以绑定自己的域名作为邮局,但是只有默认的onmicrosoft.com域开启了DKIM,自己接入的域名并没有开启,所以这里按照官方文档开启DKIM以减少进垃圾邮箱的可能性。

2021-12-04 更新

有读者反馈 https://security.microsoft.com/dkimv2 网址已经可以直接开启DKIM了,我去试了下,点击开启会自动校验 CNAME 记录,自己复制值在dns那添加就可以了(如果不知道怎么添加,可以看第三步)。

 

https://img.qyi.io/images/2021/12/04/image8f84abf995a6a698.png

以下文章仅作记录,直接通过上面的方法开启就可以了。


1、开启DKIM

首先进入到office365管理面板,点击左侧菜单栏的「全部显示」,然后点击「Exchange」,进入Exchange控制台。

https://img.qyi.io/images/2020/08/16/imageb026ebf3ae1ec1a8.png

https://img.qyi.io/images/2020/08/16/image15e3681307e39fbc.png

这里会列出已接入域名,点击域名右侧会显示DKIM的状态,点击启用就好。
如果第一次接入会显示「没有为此域名保存DKIM签名

」,根据官方文档,可以通过Powershell方式来开启。


2、连接到 Exchange Online

这里的操作以管理员权限打开,需要注意的是,所有命令必须在同一个PowerShell下操作


下面命令中

为自己的域名

在本地计算机上,打开 Windows PowerShell 并运行以下命令。

$UserCredential = Get-Credential

在“Windows PowerShell 凭据请求”对话框中,键入工作或学校帐户用户名和密码,再单击“确定”。 https://img.qyi.io/images/2020/08/16/image937fc3b899a714a5.png