第十五章 其他软件基本使用
15.1 ElasticSearch 15.2 Docker 15.3 Linux
15.1 ElasticSearch应用
分布式全文搜索引擎ES在大数据下更快,小数据查询solr更快
ES仅支持JSON,solor支持JSON,xml,csv
ES自带分布式协调者,solr用Zookeeper
配置文件
bin启动文件
config配置文件log4j 日志配置文件jvm.optins java 虚拟机相关配置elasticsearch.yml ES的配置文件
lib 相关jar包
modules 功能模块
plugins 插件
logs 日志
ES面向文档
| 关系型MYSQL | ES(JSON) |
|---|---|
| databse | index索引和数据库一样 |
| tables | types |
| rows | documents |
| columns(字段) | fields |
物理设计:每个索引分多个分片,每个分片(lucene索引,一个包含倒排索引的文件目录)可在集群中不同服务器间迁移
逻辑设计:文档即数据,字段类型即mapping,索引即数据库。新版本不需要type了
倒排索引
Mysql下索引
| ID | 标签 |
|---|---|
| 1 | python |
| 2 | python |
| 3 | linux,python |
| 4 | linux |
ES下倒排索引
| 标签 | ID |
|---|---|
| python | 1,2,3 |
| linux | 3,4 |
IK分词器
下载后放入ES plugins内
选择分词类型: ik_smart 最少切分,ik_max_smart 最细粒度切分如text内容为中华人民共和国,ik_smart下token是中华人民共和国
ik_max_smart下token是中华,中人民共和国,共和,人民等穷尽所有可能ik分词器也可以在Plugins/ik/config下添加自己字典
Rest风格操作
创建索引PUT/test1/type1/1 //PUT/索引名/类型名/文档id{"name": "云云", //默认会配置字段类型"age":99}PUT/test2{"mappings":{"properties":{"name":{"type":"text"},"age"{"type":"long"}}}}拿索引GET test2/user/_search?q=name:yunyun
改索引POST/test3/_doc/1/_update{"doc":{"name": 云云}}
删索引DELETE test2
复杂查询
GET test1/user/_search
{"query":{ "match":{ //模糊查询"name":"云云"}}一些额外配置1 "_source":["name","desc"] //则只显示这2个信息,其他不现实2 "sort":[{ //则按照age降序"age":{"order":"desc"}}]3 "from":0,"size":2 //分页,从第一个数据开始,每页2条数据
}多条件查询
"query":{"bool":{"must":{{"match"或者"term":{"name":yunyun}}}}
}
must表示都要符合and,should表示or或,可改must_not
也可加入filter过滤高亮查询
GET test1/user/_search
{"query":{ "match":{ //模糊查询"name":"云云"}}"highlight":{"fields":{xxxx 这些字段会被高亮}}
}
term和match区别
term直接通过倒排精确查询
match会用分词器分析后再查询,会拆分查。模糊查询
text和keyword类型区别
text会被分词器解析,keyword当做整体token不会被拆分分析
SpringBoot下使用
@Autowired
@Qualifier("restHighLevelClient")
private ResetHighLevelClient client;@Test
public void createIndex(){//创建索引请求CreateIndexRequest request = new CreateIndexRequest("yunyun_index");//执行CreateIndexResponse response = client.indices().create(request,RequestOptions.DEFAULT);
}@Test
public void getIndex(){GetIndexRequest request = new GetIndexRequest("yunyun_index");boolean flag = client.indices().exists(request,RequestOptions.DEFAULT);
}批量添加
~{ArrayList<User> lists = new LinkedList<>();list.add(xxx) 添加很多次for(int i=0;i<list.size();i++){request.add(new IndexRequest("yunyun_index").id(String.valueOf(i)).source(JSON.toJSONString(lists.get(i),~));BulkResponse response = client.bulk(request,RequestOptions.DEFAULT);}
}批量搜索
public List<Map<String,Object>> searchPage(String keyword, int pageNumber, int pageSize){if(pageNumber<=1){pageNumber = 1;}//条件搜索SearchRequest searchRequest = new ~("goods"); SearchSourceBuilder sourceBuilder = new ~();//分页sourceBuilder.from(pageNumber);sourceBuilder.size(pageSize);//精准匹配TermQueryBuilder qquery = QueryBuilder.termQuery("title",keyword);sourceBuilder.query(qquery);sourceBuilder.timeout(时间);//执行搜索searchRequest.source(sourceBuilder);SearchResponse response = restHighLevelClient.search(searchRequest,RequestOptions.DEFAULT);//解析结果,添加高亮处理~ new listfor(SearchHit hit : searchResponse.getHits()){//解析高亮字段,hit.getHighlightFields()返回map,根据我们业务需要处理高亮字段map中key值list.add(hit.getSourceAsMap());}return list;
}
相关问题
ES倒排索引是什么
ES如何实现领导选举leader挂了后,clusterStateVersion大的拿票,超过一半支持者当leader和zk差不多
ES搜索过程给leader发送读请求,leader使用文档id分析切片在哪里,leader从切片集群中轮询选节点拿到文档document返回给客户端
并发下,ES如何保证读写一致主节点通过ping判断从节点是否挂掉和分片决策主节点每秒会同步一次从节点数据
ES对于海量数据聚合如何实现bulkRequest.add条件,但是不知道这回答是不是能符合面试官要求
GC方面,ES需要注意什么http://www.mianshigee.com/question/20372xwx/
如何监控ES集群状态ES提供了一个可以获取集群健康状态的API,可以浏览器访问查看
15.2 Docker
虚拟机和Docker区别
虚拟机是虚拟出一套硬件,在其上运行一个完整操作系统,在该操作系统上运行程序Docker容器内运行程序直接运行于宿主内核,容器没有自己内核,无虚拟硬件,容器比虚拟机更加轻便
Docker更高效利用资源,启动快,,一致运行环境,持续交付和部署,更轻松迁移,维护和扩展
架构(网图)

三大概念和生命周期
Image镜像1 特殊的文件系统,提供程序运行时所需要的程序,库,资源,配置等文件,还包含一些运行时配置参数(如环境变量,用户等)。镜像不包含动态数据,构建后不会再变化。2 镜像分层储存Container容器容器和镜像类似JAVA的实例和类一样。容器十镜像运行时的实体。容器也是分层存储。每个容器运行时,容器是镜像为基础层,在其上加一个当前容器存储层(为容器运行时读写)。容器存储层生命周期和容器一样容器不应该向存储层写入任何数据。所有写入操作应该数据卷Volume或绑定宿主目录,跳过存储层直接对宿主读写。性能和稳定性更高。数据卷生命周期独立于容器,容器删除后数据卷数据任然存在。Repository仓库其他服务器上需要使用镜像,则需要集中存储发布的Docker Registry。一个Docker Registry可以包含多个仓库,每个仓库包含多个标签,一个标签对应一个镜像。通常一个仓库包含多个版本镜像,标签对应版本Docker官方提供了Docker Registry镜像,可以搭建本地私有Docker Registry比如tomcat分层
Container //顶层可写层,tomcat应用
几层image //应用所需环境,如tomcat jdk
Base image //应用所需最底层镜像,如tomcat下是操作系统
bootfs,kernel
Docker使用
PULL 拿镜像
docker pull tomcat:lastest //拉取tomcat最新版本镜像
RUN 运行镜像
docker run -it --rm ubuntu:16.04 bash
//-i表示交互式操作,t终端。-rm表示容器退出即删除。
//ubuntu:16.04表示以该镜像为基础启动容器。bash表示希望有个交互式shelldocker image ls//查询本地仓库镜像
docker system df//查询镜像,容器,数据卷所占空间
docker image prune//删除所有虚悬镜像
docker image rm xxx//删除镜像BUILD 构建镜像
//通过Dockerfile定制每一层所添加的配置文件
vim DockerfileFROM //指定基础镜像RUN //指定命令行命令ADD/EXPOSE等等
docker builder -f(指定位置) Dockerfile -t(容器名称) yunyun:1.0
...
Docker数据管理
容器中两种管理方法数据卷 -- 一个供一个或多个容器使用的特殊目录(用来持久化数据,无垃圾回收等)容器之间可以共享数据卷修改立马生效更新不影响镜像容器删除也一直存在docker volume create test //创建名为test数据卷--mount source-test,target=/webapp\ //把test数据卷加载到容器webapp目录docker volume rm test //删除test数据卷docker volume prune挂载主机目录--mount type=bind,source=/src/webapp,target=/opt/webapp//加载本地主机src/webapp目录到容器opt/webapp目录下
Compose
服务:一个应用的容器,可包括许多运行相同镜像的容器实例
项目:一组关联的应用容器组成的完整业务单元compose默认管理对象是项目,通过子命令对项目中一组容器进行管理项目根目录下编写docker-compose.yml配置镜像
docker-compose up启动镜像
容器监控
1 docker stats 实时监控,但是无持久化,无报警功能
2 Cadvisor(负责收集容器随时间变化的数据)+InfluxDB(负责储存时序数据)+Grafana(负责分析和展示实时数据)
日志收集平台
graylog
Docker Swarm
Docker引擎内置的集群管理和编排工具节点Docker主机可以初始化Swarm集群或者加入其它Swarm集群,改主机就成为Swarm集群中一个节点
管理节点swarm命令只能在管理节点执行,用于对swarm集群管理
工作节点管理节点将服务分配工作节点执行任务swarm最小调度单位,就是一个单一容器
服务一组任务的集合
快速扩容方式
1 命令方式
//swarm集群中运行名为nignx服务,replicas指定启动副本数
docker service create --replicas 3 -p 80:80 --name nginx nginx:latest2 portainer
在portainer可视化界面上创建
底层技术
namespcae 来进行资源隔离
cgroup 资源限制
kubernetes(k8s)
15.3 Linux
Xshell连接远程服务器,xftp上传文件Xshell下操作linux
目录结构
bin常用命令
etc配置文件
home主目录
user类似programfile
root管理员目录
等等
常用命令
绝对路径,相对路径
cd.. 返回上一级
cd/ 切换根目录
ls, cd
pwd显示当前目录
mkdir 创建目录 / rmdir 删除空目录
cp (old) (new) 复制
rm 删文件或者目录 rm-f 强制删除 rm-r 递归删除
mv 移动文件或者目录
基本属性
10个字母
第一个字母 d则表示目录, l则表示文档
r 可读 w 可写 x可执行例子
d rwx r-x r-x (目录 主权限 组权限 其他用户权限)
这里表示组权限和其他用户权限不可写rwx也可以用数字表示,r=4,w=2,x=1
owner = rwx = 7
group = --- = 0也可以修改文件属组和权限
文件内容查看
cat 由第一行开始显示文件内容
tac 由最后一行开始显示
nl 显示时加行号
more 一页一页显示,空格翻页,enter下一行
less 和more类似,q退出,上下键翻页
head 只看头几行
tail 只看末尾几行
ifconfig 看网络配置
linux 软和硬链接
和软硬拷贝差不多
VIM编辑器
命令,输入,底线三大模式
i 切换输入模式,输入字符
x 删除当前光标所在字符
ESC 输入模式退回命令模式
命令模式下按 :冒号进入底线命令
底线模式下按 wq w保存 q退出
账号管理
一般我们不是root账户
添加用户 useradd -选项 用户名
删除 userdel -r 用户名
修改 usemod 修改内容 用户名
切换用户 su yunyunexit 退出yunyun用户返回root
用户组管理
对etc/group文件更新
groupadd xxx
磁盘管理
df 列出文件系统整体磁盘使用量
du 检查磁盘空间使用量
进程管理
ps 当前系统执行进程信息-a 终端运行所有进程信息-u 以用户信息显示进程-x 显示参数
ps -aux | grep mysql //过滤只看mysql进程
ps -ef 查看父进程信息
kill -9 pid 杀死进程
环境安装
rpm/解压缩/yum在线安装
Linux额外应用
1 如何查询特定文件 find
find - name "target.java" //当前目录递归寻找target.java文件
2 检索文件内容 grep
grep "yunyun" target* //查找以target开头,包含yunyun内容的所在行
3 对文件内容做统计 awk
awk '{print $1,$4}' yunyun.txt //打印yunyun.txt 的第一和第四切片内容
4 批量替换文本内容
sed 's/^Str/String' replace.java //字符串操作,以Str开头的内容,被替换成String内容
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
