相关文章推荐
耍酷的芹菜  ·  OpenXml 之 Excel ...·  16 小时前    · 
坚强的手链  ·  pandas ...·  5 月前    · 
酷酷的匕首  ·  Redis ...·  1 年前    · 

在使用elasticsearch7.x的过程中,发现elasticsearch默认的副本数和分片数都为1,随着数据量不断增多,一个分片导致写入索引的效率越来越低,之后决定对业务层和数仓的索引进行重建

# -*- coding: utf-8 -*-
# @Time    : 2019/9/21 13:48
# @Author  : Cocktail_py
import logging
import traceback
import requests
from elasticsearch import Elasticsearch
from requests.auth import HTTPBasicAuth
logging.basicConfig(
    format="%(asctime)s - %(levelname)s - %(message)s",
    level=logging.INFO)
es = Elasticsearch("host1:19200,host2:19200,host3:19200".split(","),
                   http_auth=("username", "password"), timeout=180,
                   max_retries=10,
                   retry_on_timeout=True)
# 获取数仓索引以及相应的mapping
for da in list(es.indices.get_mapping("dw_gofish_*").items()):
    index = da[0]
    mapping = da[1]
    mapping["settings"] = {
        # 先改為-1(禁用刷新),之後根據業務場景設置(30s,或者更長)
        "refresh_interval": "-1",
        "translog": {
            "flush_threshold_size": "2gb",
            "sync_interval": "120s",
            "durability": "async"
        "index": {
            # 分片數,分片数量建议为>=节点数,平均每个分片数据不超过30G
            "number_of_shards": "10",
            # 副本先改為0,reindex之後改為1
            "number_of_replicas": "0"
    # 旧索引
    index_nw = "{}_nw".format(index)
    # 新建新的索引
    try:
        result = es.indices.create(index_nw, mapping)
        logging.info(result)
    except:
        logging.error(traceback.format_exc())
    # 取别名
    es.indices.put_alias([index, index_nw], name="{}_alias".format(index))
    # 异步reindex
    result = requests.post(
        "http://ip1:19200/_reindex?refresh&wait_for_completion=false",
        json={
            "source": {
                "index": index,
                "size": 10000
            "dest": {
                "index": index_nw
        headers={'Content-Type': 'application/json'},
        # auth 用戶名密碼
        auth=HTTPBasicAuth("username", "password"))
    logging.info(result.text)

查看索引已存在的索引、文档数量,占用存储空间大小等信息

# pri(主分片数)、rep(副分片数)、docs.count(索引现有文档数)、docs.deleted(索引标记为删除的文档数)、store.size(索引总大小)、pri.store.size(索引主分片大小)
GET _cat/indices/index_name?v

查看索引settings设置

GET /index_name/_settings

查看reindex进度

GET _tasks?detailed=true&actions=*reindex
# 删除所有滚动
import requests
from requests.auth import HTTPBasicAuth
result = requests.delete(
"http://xxx.xxx.xxxx:19200/_search/scroll/_all",
headers={'Content-Type': 'application/json'},
# auth 用戶名密碼
auth=HTTPBasicAuth("username", "password"))
print(result)
                    在使用elasticsearch7.x的过程中,发现elasticsearch默认的副本数和分片数都为1,随着数据量不断增多,一个分片导致写入索引的效率越来越低,之后决定对业务层和数仓的索引进行重建# -*- coding: utf-8 -*-# @Time    : 2019/9/21 13:48# @Author  : Cocktail_pyimport loggingimport tracebackimport requestsfrom elasticsearch import .
import tornado.web
import tornado.options
from views.handly import Search, Index, SearchWipro
from mongoengine import connect
import settings
from...
1.使用Python批量提交数据
import requests
from apscheduler.schedulers.blocking import BlockingScheduler
from elasticsearch import Elasticsearch
from elasticsearch import helpers
def post_dga():
    es = Elasticsearch()
				
平时在工作中,发现定义的字段类型不对,然后需要新建索引,将旧的数据导到新的索引上,往往会出现超时现象 {"statusCode":502,"error":"Bad Gateway","message":"Client request timeout"} 解决方法wait_for_completion=false POST /_reindex?slices=9&refresh&wait_for_completion=false "source": {
在之前的<<ElasticSearch 7.4集群部署 启用x-pack验证 Kibana7.4用户管理>>,新建一个没有superuser权限的用户之后,发现该用户没有写入索引的权限功能 一.分析异常 elasticsearch.exceptions.AuthorizationException: AuthorizationException(403, ‘security_exception’, ‘action [indices:admin/create] is unauthori
公司规定每次往es重中写入数据的时候都需要自动生成三个时间:create_time(创建时间),update_time(更新时间 默认等于创建时间),delete_time(删除时间默认为0) 一.es默认为utc时间 es默认是按UTC时间计算存储,国内的时区是+8(东八区),所以比UTC时间快8小时 二.script脚本自动生成时间以及默认值 1.定义管道(Pipeline) # 通过管道修改默认utc时间为东八区时间,并将默认值赋值给 create_time,update_time,delete.
requests库是一个常用的用于发送HTTP请求的Python第三方库。当需要在请求中传递用户名密码时,可以使用基本的身份验证方式。json格式是一种常用的数据交换格式,可以通过requests库来发送和接收json数据。 使用requests发送带有用户名密码的请求,可以通过以下步骤完成: 1. 导入requests库:首先需要在Python文件中导入requests库,可以使用以下代码进行导入: ```python import requests 2. 创建请求:使用requests库的`get()`、`post()`等方法创建HTTP请求。在请求中传递用户名密码,可以通过`auth`参数来指定用户名密码。示例代码如下: ```python response = requests.get(url, auth=('username', 'password')) 3. 发送请求并获取响应:发送请求后,可以使用`response`对象来获取响应内容。示例代码如下: ```python print(response.text) 4. 处理json数据:如果响应内容是json格式的数据,可以使用`response.json()`方法将其转换为Python字典。示例代码如下: ```python data = response.json() 以上就是使用requests库发送含有用户名密码的请求,并处理json格式数据的基本方法。需要注意的是,在实际使用中,密码通常需要进行加密或哈希处理,以增加安全性。另外,在处理json数据时,可能需要根据具体的数据结构来访问和处理数据。