ES单节点安装及踩坑图文详解

此文记录了一下es安装以及问题解决过程,版本使用6.6.1

1.下载

可以直接从官网下载,解压tar zxvf elasticsearch-6.6.1-linux-x86_64.tar.gz

使用命令 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.1-linux-x86_64.tar.gz 直接下载,解压tar zxvf elasticsearch-6.6.1-linux-x86_64.tar.gz

解压后进入config目录,修改yml文件 network.host: 192.168.196.129,此ip为centos本机ip

多说一嘴,这里的ip可以使用ip addr查看如下图

如果查找不到ip,需要修改一下配置,可执行命令

cd /etc/sysconfig/network-scripts/
vi ifcfg-eth0

将文件中的NOROOT=no 修改为NOROOT=yes 保存 一定要执行service network restart 使配置生效,再次查看ens33就有了ip

解释:ONBOOT是指明在系统启动时是否激活网卡,只有在激活状态的网卡才能去连接网络,进行网络通讯,说白了执行了这一步 你也就可以上网了。

2.启动

第一次启动不要使用守护线程启动,这样如果异常也看不到

在bin目录下执行 ./elasticsearch,接下就好戏开场了,一个接一个的问题,我们就一个挨一个的解决

3.解决问题

  • 执行完启动命令 看到了异常信息,如下

[WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [unknown] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
    at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:163) ~[elasticsearch-6.6.1.jar:6.6.1]
    at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:150) ~[elasticsearch-6.6.1.jar:6.6.1]
    at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.6.1.jar:6.6.1]
    at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.6.1.jar:6.6.1]
    at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-6.6.1.jar:6.6.1]
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:116) ~[elasticsearch-6.6.1.jar:6.6.1]
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93) ~[elasticsearch-6.6.1.jar:6.6.1]
Caused by: java.lang.RuntimeException: can not run elasticsearch as root
    at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:103) ~[elasticsearch-6.6.1.jar:6.6.1]
    at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:170) ~[elasticsearch-6.6.1.jar:6.6.1]
    at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:333) ~[elasticsearch-6.6.1.jar:6.6.1]
    at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) ~[elasticsearch-6.6.1.jar:6.6.1]

解释:由于 es 可以接收用户输入的脚本并且执行,为了系统安全考虑,es5 之后的都不能使用添加启动参数或者修改配置文件等方法启动了,不允许使用 root 用户启动 es,建议创建一个单独的用户用来运行。

解决:创建新用户,切换到新用户启动es

addusr 用户名

passwd 密码

  • 再次使用新用户启动的时候依然有异常信息,如下

[el@bogon bin]$ ./elasticsearch
Exception in thread "main" java.nio.file.AccessDeniedException: /usr/local/elasticsearch-6.6.1/config/jvm.options
    at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)
    at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
    at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
    at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)
    at java.nio.file.Files.newByteChannel(Files.java:361)
    at java.nio.file.Files.newByteChannel(Files.java:407)
    at java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:384)
    at java.nio.file.Files.newInputStream(Files.java:152)
    at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:60)

解释:没有jvm.options访问权限

解决:切换到root用户 执行命令

[el@bogon bin]$ su root

密码:

[root@bogon bin]# chown el /usr/local/elasticsearch-6.6.1 –R

  • 使用新用户启动再次报错,是不是要崩溃了

ERROR: [2] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[2020-04-08T21:15:27,896][INFO ][o.e.n.Node               ] [LOzrLbS] stopping ...
[2020-04-08T21:15:27,971][INFO ][o.e.n.Node               ] [LOzrLbS] stopped
[2020-04-08T21:15:27,971][INFO ][o.e.n.Node               ] [LOzrLbS] closing ...
[2020-04-08T21:15:28,001][INFO ][o.e.n.Node               ] [LOzrLbS] closed
[2020-04-08T21:15:28,003][INFO ][o.e.x.m.p.NativeController] [LOzrLbS] Native controller process has stopped - no new native processes can be started
解释:每个进程最大同时打开文件数太小

解决:执行命令看看当前系统同时打开进程数的默认值:
ulimit -Hn
ulimit -Sn

切换到root用户

[el@bogon bin]$ su root

密码:

[root@bogon bin]# vi /etc/security/limits.conf

最后增加

el    hard     nofile     65536
el    soft     nofile     65536
*     soft     nproc      4096
*     hard     nproc      4096

  • 使用新用户启动,额,疯掉了,简直使连锁反应啊,如下:

ERROR: [1] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

解释:用户拥有的内存权限太小,至少需要262144

解决:切换到root,在/etc/sysctl.conf文件最后添加一行vm.max_map_count=655360,添加完毕之后,执行命令:sysctl –p

坚持就是胜利,胜利就在眼前使用命令 ./elasticsearch –d 守护线程启动,然后切换root 执行命令/sbin/iptables -I INPUT -p tcp --dport 9200 -j ACCEPT 使9200端口可以远程访问

在浏览器里输入ip:9200,惊喜就会发生!

恭喜你成功了!

以上均为个人安装过程中发生的问题以及解决方法,欢迎讨论共同学习!

 

<think>嗯,用户现在问的是视频检索系统的架构设计,我需要先回顾一下之前的问题历史。之前他问了关于Git分支合并的问题,现在转向视频检索系统,这可能是一个技术架构师或者开发者在处理不同项目时的需求。用户可能是需要构建一个视频检索系统,所以需要了解整体的架构设计,可能涉及到存储、处理、检索等模块。 首先,我应该确定视频检索系统的基本组成部分。通常这类系统包括视频数据的预处理、特征提取、存储、索引构建、检索模块以及用户接口。用户可能希望了解每个模块的作用和如何协同工作。另外,用户可能关心实时性、准确性和可扩展性,这些都是设计时需要考虑的关键点。 接下来,我需要考虑视频数据的处理流程。比如,视频上传后如何进行分帧、特征提取,使用哪些算法(如CNN、RNN、3D卷积网络等)。特征提取后的向量如何存储和索引,可能用到向量数据库如Faiss或Milvus。然后,当用户发起查询时,系统如何匹配相似特征,返回结果。这部分需要详细说明各个步骤的技术选型和实现方式。 另外,用户可能对系统的架构图感兴趣,所以应该提供一个分层的架构图,包括数据层、处理层、存储层、检索层和用户层。每个层次的功能和组件需要明确。例如,数据层负责视频的存储,处理层进行特征提取,存储层管理元数据和特征向量,检索层处理相似性搜索,用户层提供API和界面。 同时,需要考虑系统的扩展性和性能优化。比如,分布式存储和计算框架(如Hadoop、Spark)可以处理大规模数据,使用GPU加速特征提取,缓存机制提升响应速度。这些都是设计时的重要考虑因素。 还要提到关键技术,如特征提取模型的选择,最近可能更倾向于使用基于Transformer的模型,比如ViT或者视频专用的TimeSformer。另外,多模态检索也是一个趋势,结合文本、音频和视觉特征,提升检索准确性。 用户可能没有明确说出来的需求包括系统的实时处理能力、如何处理高并发请求、数据的安全性和隐私保护。这些方面也应该在架构设计中提到,比如使用负载均衡、分布式处理、加密存储等。 最后,应该给出最佳实践建议,比如模块化设计、选择合适的算法和工具、性能优化策略以及测试和迭代的重要性。这样用户在实际开发中能够有一个清晰的指导方向,避免常见陷阱,提升系统效率和可靠性。</think>以下是视频检索系统架构设计的 **模块化解析** 与 **技术实现路线**,包含核心流程、关键技术选型和性能优化策略: --- ### 一、**系统核心架构分层** ![视频检索系统架构图](https://pic3.zhimg.com/80/v2-2e8a0d0c3a4b9b7e4d3b5d0a7b1c3d3d_1440w.png) ```text 用户层 → 检索服务层 → 特征处理层 → 数据存储层 → 原始视频库 ``` --- ### 二、**核心模块详解** #### ▶ **1. 视频预处理模块** - **关键功能**: ```bash 视频解码 → 关键帧提取 → 分辨率标准化 → 格式统一化 ``` - **技术实现**: ```python # 使用OpenCV提取关键帧示例 import cv2 vidcap = cv2.VideoCapture('input.mp4') success, image = vidcap.read() while success: cv2.imwrite(f"frame_{count}.jpg", image) success, image = vidcap.read() ``` #### ▶ **2. 特征提取引擎** - **视觉特征提取**: - 2D特征:ResNet/ViT(图像级特征) - 3D特征:C3D/SlowFast(时序特征) ```python # 使用PyTorch视频特征提取 model = torch.hub.load('facebookresearch/pytorchvideo', 'slow_r50', pretrained=True) frames = preprocess(video_clip) features = model(frames) ``` - **多模态融合**: - CLIP模型(图文跨模态对齐) - Audio-Visual网络(音画联合特征) #### ▶ **3. 向量索引系统** | 数据库类型 | 特点 | 适用场景 | |----------------|------------------------|------------------| | FAISS | GPU加速/亿级检索 | 高并发实时检索 | | Milvus | 分布式/动态扩容 | 企业级部署 | | ElasticSearch | 文本混合检索 | 多模态检索 | ```bash # Milvus向量插入示例 curl -X POST http://localhost:9091/entities -H "Content-Type: application/json" -d '{ "collection_name": "video_features", "fields": { "feature_vector": [0.12, 0.34, ..., 0.78], "video_id": "VID_001" } }' ``` #### ▶ **4. 检索服务层** - **查询处理流程**: ```mermaid graph LR A[用户输入] --> B{输入类型判断} B -->|文本| C[文本嵌入] B -->|图像| D[图像特征提取] B -->|视频| E[视频特征提取] C/D/E --> F[多模态特征融合] F --> G[向量相似度计算] G --> H[结果排序与返回] ``` --- ### 三、**性能优化策略** #### ▶ **计算加速方案** 1. **硬件层面**: - 使用T4/V100 GPU加速特征提取 - FPGA部署量化模型 2. **算法层面**: ```python # 使用TVM优化模型推理 mod = tvm.relay.from_pytorch(model, input_shapes) lib = relay.build(mod, target="cuda") ``` #### ▶ **存储优化方案** - **分级存储策略**: ```text 热数据:SSD存储特征向量 + Redis缓存高频结果 冷数据:HDFS归档原始视频 ``` #### ▶ **检索效率提升** - **近似最近邻(ANN)算法**: - HNSW(图结构索引) - PQ(乘积量化压缩) ```python # FAISS索引构建示例 index = faiss.IndexHNSWFlat(512, 32) index.add(feature_vectors) ``` --- ### 四、**关键技术选型对比** | 技术维度 | 方案A | 方案B | 推荐场景 | |----------------|----------------------|----------------------|--------------------| | 特征提取 | ResNet-152 | ViT-Large | 高精度场景 | | 向量数据库 | Milvus 2.0 | ElasticSearch 8.0 | 混合检索需求 | | 视频解码 | FFmpeg+NVIDIA解码器 | OpenCV原生解码 | 4K高清视频处理 | | 分布式框架 | Kubernetes+Docker | Apache Mesos | 云原生环境 | --- ### 五、**典型业务场景适配** #### ▶ **短视频检索** - **架构特点**: - 使用轻量级MobileNetV3特征提取 - 采用Redis做结果缓存 - 响应时间<200ms #### ▶ **长视频内容定位** - **关键技术**: - 分层时间戳索引:$T_{segment} = [t_1, t_2, ..., t_n]$ - 时序注意力机制: $$Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V$$ #### ▶ **跨模态检索** - **实现方案**: ```python # CLIP跨模态检索示例 text_features = clip_model.encode_text(text_input) image_features = clip_model.encode_image(image_input) similarity = cosine_similarity(text_features, image_features) ``` --- ### 六、**系统监控指标** ```text 1. 特征提取吞吐量:帧/秒 (FPS) 2. 检索响应延迟:P95 < 300ms 3. 系统可用性:SLA 99.95% 4. 特征存储压缩率:> 70% ``` --- ### 七、**演进方向** 1. **新兴技术整合**: - 神经渲染技术(NeRF)用于三维场景检索 - 大语言模型(LLM)实现语义增强检索 2. **边缘计算部署**: ```text 终端设备 → 边缘节点特征提取 → 云端深度检索 ``` **设计建议**:初期采用模块化设计,优先保证核心检索链路,逐步扩展多模态能力,推荐使用云原生架构保证弹性扩展能力。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值