1.集群安装es

ES内部索引原理:

时间序列数据库的秘密(1)—— 介绍

时间序列数据库的秘密 (2)——索引

时间序列数据库的秘密(3)——加载和分布式计算

1.1 环境

域名            ip
master 192.168.0.120
slave1 192.168.0.121
slave2 192.168.0.122

1.2 三台机器都安装jdk最新版本

[root@master ~]$ java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) -Bit Server VM (build 25.171-b11, mixed mode) [root@slave1 ~]$ java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) -Bit Server VM (build 25.171-b11, mixed mode) [root@slave2 ~]$ java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) -Bit Server VM (build 25.171-b11, mixed mode)

1.3 三台机器都统一用户为spark

[root@master ~]# useradd spark
You have new mail in /var/spool/mail/root
[root@master ~]# passwd spark # 密码为 spark
Changing password for user spark.
New password:
BAD PASSWORD: it is based on a dictionary word
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated succsparksfully.
[root@master ~]# mkdir /home/spark
mkdir: cannot create directory `/home/spark': File exists
[root@master ~]# ll /home/ # 注意是不是spark用户和用户组
total
drwxrwxr-x spark spark Feb : spark
[root@master ~]# [root@slave1 ~]# useradd spark
[root@slave1 ~]# passwd spark # 密码为 spark
[root@slave1 ~]# mkdir /home/spark
[root@slave1 ~]# ll /home/ # 注意是不是spark用户和用户组 [root@slave2 ~]# useradd spark
[root@slave2 ~]# passwd spark # 密码为 spark
[root@slave2 ~]# mkdir /home/spark
[root@slave2 ~]# ll /home/ # 注意是不是spark用户和用户组

1.4 使用spark用户,在三台机器都建立/opt/elasticsearch-6.2.目录,用来存放es软件包和数据存储

[root@master ~]# su spark
[spark@master root]# cd /opt/
[spark@master ~]$ sudo mkdir elasticsearch-6.2.
[spark@master ~]$ ll
drwxrwxr-x root root Feb : elasticsearch-6.2.
[spark@master ~]$

其余两台此处省略

1.5 三台机器都解压安装包到/opt/elasticsearch-6.2.2

下载:https://www.elastic.co/cn/downloads/elasticsearch
包:elasticsearch-6.2.2.zip
下载地址:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.2.zip

[spark@master opt]$ sudo unzip elasticsearch-6.2..zip
Archive: elasticsearch-6.2..zip
creating: elasticsearch-6.2./lib/
。。。
inflating: elasticsearch-6.2./modules/lang-expression/lang-expression-6.2..jar
creating: elasticsearch-6.2./plugins/
creating: elasticsearch-6.2./logs/
[spark@master opt]$

1.6 三台机器都修改es软件包的权限为spark用户

因为我是root解压的
master(192.168.0.120)

[spark@master opt]$ ll
total
drwxr-xr-x. root root Jul : elasticsearch-6.2.

slave1(192.168.0.121)

[spark@slave1 opt]$ ll
total
drwxr-xr-x. root root Jul : elasticsearch-6.2.

slave2(192.168.0.122)

[spark@slave2 opt]$ ll
total
drwxr-xr-x. root root Jul : elasticsearch-6.2.

使用root用户修改权限

[spark@master opt]$ su root
Password:
[root@master opt]# chown -R spark:spark /opt/elasticsearch-6.2.
[root@master opt]# ll
total
drwxr-xr-x. spark spark Jul : elasticsearch-6.2.

其余两台此处省略

1.7 三台机器都创建data数据目录和日志目录,使用spark用户

[root@master opt]$ su spark
[spark@master opt]$ mkdir -p /opt/elasticsearch-6.2./data/
[spark@master opt]$
[spark@master opt]$ mkdir -p /opt/elasticsearch-6.2./logs/
[spark@master opt]$
[spark@master opt]$ cd elasticsearch-6.2.
[spark@master elasticsearch-6.2.]$ ls
bin config data lib LICENSE.txt logs modules NOTICE.txt plugins README.textile

到这里,如果你其他服务器还下载解压es,可以使用scp拷贝到其他服务器上:

[spark@master opt]$ scp -r /opt/elasticsearch-6.2. spark@slave1:/opt/
[spark@master opt]$ scp -r /opt/elasticsearch-6.2. spark@slave2:/opt/

其余两台此处省略

1.8 三台机器都修改配置

191.168.0.120机器配置

vim /opt/elasticsearch-6.2./config/elasticsearch.yml
cluster.name: es-application
node.name: node---- path.data: /opt/elasticsearch-6.2./data/
path.logs: /opt/elasticsearch-6.2./logs/ bootstrap.memory_lock: false
bootstrap.system_call_filter: false network.host: 0.0.0.0
http.port: discovery.zen.ping.unicast.hosts: ["192.168.0.120", "192.168.0.121", "192.168.0.122"]
discovery.zen.minimum_master_nodes: http.cors.enabled: true
http.cors.allow-origin: "*"

191.168.0.121机器配置

vim /opt/elasticsearch-6.2./config/elasticsearch.yml
cluster.name: es-application
node.name: node---- path.data: /opt/elasticsearch-6.2./data/
path.logs: /opt/elasticsearch-6.2./logs/ bootstrap.memory_lock: false
bootstrap.system_call_filter: false network.host: 0.0.0.0
http.port: discovery.zen.ping.unicast.hosts: ["192.168.0.120", "192.168.0.121", "192.168.0.122"]
discovery.zen.minimum_master_nodes: http.cors.enabled: true
http.cors.allow-origin: "*"

191.168.0.122机器配置

vim /opt/elasticsearch-6.2./config/elasticsearch.yml
cluster.name: es-application
node.name: node---- path.data: /opt/elasticsearch-6.2./data/
path.logs: /opt/elasticsearch-6.2./logs/ bootstrap.memory_lock: false
bootstrap.system_call_filter: false network.host: 0.0.0.0
http.port: discovery.zen.ping.unicast.hosts: ["192.168.0.120", "192.168.0.121", "192.168.0.122"]
discovery.zen.minimum_master_nodes: http.cors.enabled: true
http.cors.allow-origin: "*"

1.9 三台机器都修改 Linux下/etc/security/limits.conf文件设置

更改linux的最大文件描述限制要求
添加或修改如下:
* soft nofile 262144
* hard nofile 262144
更改linux的锁内存限制要求
添加或修改如下:
用户(spark) soft memlock unlimited
用户(spark) hard memlock unlimited
最后配置如下

sudo vim /etc/security/limits.conf

* soft nofile
* hard nofile
spark soft memlock unlimited
spark hard memlock unlimited

1.10 三台机器都修改配置 Linux下/etc/security/limits.d/*-nproc.conf文件设置

更改linux的最大线程数,添加或修改如下:
* soft nproc unlimited

[spark@master opt]$ cd /etc/security/limits.d
[spark@master limits.d]$ ls
-nproc.conf
[spark@master limits.d]$ more -nproc.conf
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz # for reasoning. * soft nproc
root soft nproc unlimited
[spark@master limits.d]$ sudo vi /etc/security/limits.d/-nproc.conf
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz # for reasoning. * soft nproc unlimited
root soft nproc unlimited
~
~          

其余两台此处省略

1.11 三台机器都修改配置 Linux下/etc/sysctl.conf文件设置

更改linux一个进行能拥有的最多的内存区域要求,添加或修改如下:
vm.max_map_count = 262144
更改linux禁用swapping,添加或修改如下:
vm.swappiness = 1
配置后如下:

sudo vim /etc/sysctl.conf

vm.max_map_count =
vm.swappiness =

1.12 三台机器都启动

[spark@master elasticsearch-6.2.]$  bin/elasticsearch
[spark@slave1 elasticsearch-6.2.]$ bin/elasticsearch
[spark@slave2 elasticsearch-6.2.]$ bin/elasticsearch

备注:启动过程中如果三台服务器都未完全启动,会抛出警告等,等到三台服务器的es启动完警告就会消失。

安装完后,验证是否安装启动es成功

访问:

http://192.168.0.120:9200/
http://192.168.0.121:9200/
http://192.168.0.122:9200/

http://192.168.0.120:9200/_nodes/
http://192.168.0.121:9200/_nodes/
http://192.168.0.122:9200/_nodes/

2 安装Head插件

ElasticSearch-Head 是一个与Elastic集群(Cluster)相交互的Web前台。
三台机器只需要一台安装head就可以了
ES-Head的主要作用:

  • 它展现ES集群的拓扑结构,并且可以通过它来进行索引(Index)和节点(Node)级别的操作
  • 它提供一组针对集群的查询API,并将结果以json和表格形式返回
  • 它提供一些快捷菜单,用以展现集群的各种状态

5.x以后的版本安装Head插件比较麻烦,不能像2.x的时候一条#elasticsearch/bin/plugin install mobz/elasticsearch-head   #一波搞定

2.1 安装Node.js

由于head插件本质上还是一个nodejs的工程,因此需要安装node,使用npm来安装依赖的包。(npm可以理解为maven),官网nodejs,https://nodejs.org/en/download/
下载nodejs安装包:

[spark@master ~]#cd /opt/
[spark@master opt]#sudo yum install wget #没有安装wget的话,安装wget
[spark@master opt]#sudo wget https://nodejs.org/dist/v8.9.1/node-v8.9.1.tar.gz #新版要编译时间太长了用旧版本吧
[spark@master opt]#sudo tar -zxvf node-v8.9.1.tar.gz
[spark@master opt]# ll
drwxr-xr-x. games Nov node-v8.9.1
-rw-r--r--. root root Nov node-v8.9.1.tar.gz
[spark@master opt]$ sudo chown -R spark:spark /opt/node-v8.9.1
[spark@master opt]$ ll
total
drwxr-xr-x. spark spark Nov node-v8.9.1
-rw-r--r--. root root Nov node-v8.9.1.tar.gz

编译安装nodejs:sudo ./configure --prefix=/opt/node-8.9.1 && make -j 8 && make install

[spark@master opt]$ cd /opt/node-v8.9.1
[spark@master node-v8.9.1]$ sudo ./configure --prefix=/opt/node-8.9. && make -j && make install #安装时间比较长,没办法,Centos7的系统要最新版本的nodejs。
WARNING: failed to autodetect C++ compiler version (CXX=g++)
WARNING: failed to autodetect C compiler version (CC=gcc)
Node.js configure error: No acceptable C compiler found! Please make sure you have a C compiler installed on your system and/or
consider adjusting the CC environment variable if you installed
it in a non-standard prefix. Makefile:95: *** Missing or stale config.gypi, please run ./configure. Stop.

上边安装抛出错误,原因:需要安装gcc-c++。接下来安装gcc-c++

[spark@master node-v8.9.1]$ sudo yum install gcc-c++   //安装gcc
Loaded plugins: fastestmirror
。。。 Complete!

重新开始编译安装nodejs:

[root@master opt]$ cd /opt/node-v8.9.1
[root@master node-v8.9.1]$ sudo ./configure --prefix=/opt/node-v8.9.1 && make -j && make install #安装时间比较长,没办法,Centos7的系统要最新版本的nodejs。

配置PATH,并验证:

# vim /etc/profile        #/etc/profile中添加nodejs环境变量。
export NODE_HOME=/opt/node-8.9.1
export PATH=$PATH:$NODE_HOME/bin
# source /etc/profile
# node -v
v8.9.1
# npm -v

2.2 下载插件包 npm install -g grunt-cli

grunt是一个很方便的构建工具,可以进行打包压缩、测试、执行等等的工作

[spark@master ~]$
[spark@master ~]# npm install -g grunt-cli
/opt/node-8.9./bin/grunt -> /opt/node-8.9./lib/node_modules/grunt-cli/bin/grunt
+ grunt-cli@1.2.
updated package in .179s

注意:使用spark用户安装出现权限问题时,修改/opt/node-8.9.1/的权限:

chown -R spark:spark /opt/node-8.9./

2.3 下载 elasticsearch-head 或者 git clone 到本地

这里采用直接下载从:https://github.com/mobz/elasticsearch-head
上传到master

[spark@master opt]$ sudo unzip elasticsearch-head-master.zip
[spark@master opt]$ ll
drwxr-xr-x. root root Sep elasticsearch-head-master
-rw-r--r--. root root Jul : elasticsearch-head-master.zip
[spark@master elasticsearch-head-master]# chown -R spark:spark /opt/elasticsearch-head-master/ # 注意分配权限

进入 elasticsearch-head-master目录,进行安装:
如果你的网速较快,可以使用这个命令,推荐使用后面一个命令

npm install  # 容易失败,建议使用后边的

使用国内镜像

npm install -g cnpm --registry=https://registry.npm.taobao.org

2.4 修改Elasticsearch配置文件

vim elasticsearch-6.2./config/elasticsearch.yml

加入以下内容:

http.cors.enabled: true
http.cors.allow-origin: "*"

2.5 修改Gruntfile.js

修改 elasticsearch-head-master/Gruntfile.js,在connect属性中,增加hostname: ‘0.0.0.0’

cd elasticsearch-head-master/
vim Gruntfile.js

修改为

connect: {
server: {
options: {
hostname: '0.0.0.0',
port: ,
base: '.',
keepalive: true
}
}
}

2.6 启动 elasticsearch-head

进入elasticsearch-head-master目录

cd /opt/elasticsearch-head-master

#执行

grunt server

#输出

>> Local Npm module "grunt-contrib-jasmine" not found. Is it installed?

Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100

浏览器访问

启动es

[spark@master elasticsearch-6.2.]$  bin/elasticsearch
[spark@slave1 elasticsearch-6.2.]$ bin/elasticsearch
[spark@slave2 elasticsearch-6.2.]$ bin/elasticsearch

访问http://192.168.0.120:9100

2.7 关闭一个 es 比如192.168.0.122(slave2),重新测试是否可以连接。

^C
[--18T23::,][INFO ][o.e.n.Node ] [node----] stopping ...
[--18T23::,][INFO ][o.e.n.Node ] [node----] stopped
[--18T23::,][INFO ][o.e.n.Node ] [node----] closing ...
[--18T23::,][INFO ][o.e.n.Node ] [node----] closed
[spark@slave2 elasticsearch-6.2.]$

此时测试发现es集群不可以使用了。

这与我们配置的参数有关系:

## 设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)
discovery.zen.minimum_master_nodes:

修改master,slave1,slave2上的该参数为2,之前我们配置的为3。之后重新启动后,通过es-head验证三个节店都是健康运行的,之后ctrl+c关闭slave2,再次通过es-head查看:

紧接着再次把slave1的es也关闭,再次通过es-head查看:

紧接着,把slave1,或者slave2启动,通过es-head发现es集群又可以运行了。

3 安装Kibana(不需要安装x-pack)

这里只需要在es集群中的一个节点上安装就可以了。

3.1 Kibana介绍

下面就Kibana对ES的查询监控作介绍,就是常提到的大数据日志处理组件ELK里的K。
  什么是Kibana?现引用园友的一段对此的介绍,个人觉得比较全。
  Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据。使用Kibana,可以通过各种图表进行高级数据分析及展示。
  Kibana让海量数据更容易理解。它操作简单,基于浏览器的用户界面可以快速创建仪表板(dashboard)实时显示Elasticsearch查询动态。
  设置Kibana非常简单。无需编码或者额外的基础架构,几分钟内就可以完成Kibana安装并启动Elasticsearch索引监测。
主要功能

  • Elasticsearch无缝之集成

  

  Kibana架构为Elasticsearch定制,可以将任何结构化和非结构化数据加入Elasticsearch索引。Kibana还充分利用了Elasticsearch强大的搜索和分析功能。

  • 整合你的数据

  

  Kibana能够更好地处理海量数据,并据此创建柱形图、折线图、散点图、直方图、饼图和地图。

  • 复杂数据分析

  

  Kibana提升了Elasticsearch分析能力,能够更加智能地分析数据,执行数学转换并且根据要求对数据切割分块。

  • 让更多团队成员受益

  

  强大的数据库可视化接口让各业务岗位都能够从数据集合受益。

  • 接口灵活,分享更容易

  

  使用Kibana可以更加方便地创建、保存、分享数据,并将可视化数据快速交流。

  • 配置简单

  

  Kibana的配置和启用非常简单,用户体验非常友好。Kibana 4自带Web服务器,可以快速启动运行。

  • 可视化多数据源

  

  Kibana可以非常方便地把来自Logstash、ES-Hadoop、Beats或第三方技术的数据整合到Elasticsearch,支持的第三方技术包括Apache Flume、Fluentd等。

  • 简单数据导出

  

  Kibana可以方便地导出感兴趣的数据,与其它数据集合并融合后快速建模分析,发现新结果。

  • 与Elasticsearch REST API实现可视化交互

  

  Sense是一个可视化终端,通过Kibana插件支持自动补全、自动缩进和语法检查功能。
参考《https://www.cnblogs.com/zhangs1986/p/7325504.html》

3.2 Kibana安装:

注意kibana的版本要和es的版本一致,否则可能会出现异常,上边我们安装es v6.2.2,因此这里安装kibana-6.2.2((https://artifacts.elastic.co/downloads/kibana/kibana-6.2.2-linux-x86_64.tar.gz))

1.下载https://www.elastic.co/cn/downloads/kibana 版本要和es版本相同 
2.直接解压到 /opt/kibana-6.2.2-linux-x86_64

[spark@master opt]$ sudo tar -zxvf kibana-6.2.-linux-x86_64.tar.gz 

3.分配kibana操作spark用户组*用户:

[spark@master opt]$  chown -R spark:spark /opt/kibana-6.2.-linux-x86_64
[spark@master opt]$ ll
drwxrwxr-x. spark spark Feb : kibana-6.2.-linux-x86_64
-rw-r--r--. root root Jul : kibana-6.2.-linux-x86_64.tar.gz
[spark@master opt]$

4.配置

cd /opt/kibana-6.2.-linux-x86_64
vim config/kibana.yml
elasticsearch.url: "http://192.168.0.120:9200" # kibana监控哪台es机器
server.host: "192.168.0.120" # kibana运行在哪台机器

5.启动

[spark@master kibana-6.2.-linux-x86_64]$ bin/kibana
log [::36.833] [info][status][plugin:kibana@6.2.] Status changed from uninitialized to green - Ready
log [::36.880] [info][status][plugin:elasticsearch@6.2.] Status changed from uninitialized to yellow - Waiting for Elasticsearch
log [::36.992] [info][status][plugin:timelion@6.2.] Status changed from uninitialized to green - Ready
log [::37.003] [info][status][plugin:console@6.2.] Status changed from uninitialized to green - Ready
log [::37.010] [info][status][plugin:metrics@6.2.] Status changed from uninitialized to green - Ready
log [::37.045] [info][listening] Server running at http://192.168.0.120:5601
log [::37.073] [info][status][plugin:elasticsearch@6.2.] Status changed from yellow to green - Ready

6.查看界面http://192.168.0.120:5601 可以直接访问

参考:https://blog.csdn.net/fenglailea/article/details/52934263
http://www.51niux.com/?id=201
https://blog.csdn.net/qq_21383435/article/details/79367821

Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十七)Elasticsearch-6.2.2集群安装,组件安装的更多相关文章

  1. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二十一)NIFI1.7.1安装

    一.nifi基本配置 1. 修改各节点主机名,修改/etc/hosts文件内容. 192.168.0.120 master 192.168.0.121 slave1 192.168.0.122 sla ...

  2. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十三)kafka+spark streaming打包好的程序提交时提示虚拟内存不足(Container is running beyond virtual memory limits. Current usage: 119.5 MB of 1 GB physical memory used; 2.2 GB of 2.1 G)

    异常问题:Container is running beyond virtual memory limits. Current usage: 119.5 MB of 1 GB physical mem ...

  3. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十二)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网。

    Centos7出现异常:Failed to start LSB: Bring up/down networking. 按照<Kafka:ZK+Kafka+Spark Streaming集群环境搭 ...

  4. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十一)定制一个arvo格式文件发送到kafka的topic,通过Structured Streaming读取kafka的数据

    将arvo格式数据发送到kafka的topic 第一步:定制avro schema: { "type": "record", "name": ...

  5. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十)安装hadoop2.9.0搭建HA

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

  6. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(九)安装kafka_2.11-1.1.0

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

  7. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(八)安装zookeeper-3.4.12

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

  8. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(三)安装spark2.2.1

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

  9. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二)安装hadoop2.9.0

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

  10. kafka 集群环境搭建 java

    简单记录下kafka集群环境搭建过程, 用来做备忘录 安装 第一步: 点击官网下载地址 http://kafka.apache.org/downloads.html 下载最新安装包 第二步: 解压 t ...

随机推荐

  1. Delphi 资源管理器套件

    需要个类似资源管理器的东西, 首先试了下 TDriveComboBox.TDirectoryListBox.TFileListBox, 嘿! Win31 时代的东西, 不是一般地丑. 试了下 Vcl. ...

  2. [原创]App性能测试指标篇

    [原创]App性能测试指标篇 目前由于苹果,三星等大厂对智能手机的研发及投入,使的智能手机发展非常迅速,每个人手中都有一些离不开生活的App,如:微信,微博,百度或是各游戏App等,但是到底App性能 ...

  3. 正余弦信号的DFT频谱分析

    一般的,对正余弦信号进行採样并DFT运算,画出频谱图,会发现频谱并不干净.这样的现象称为频谱泄漏.由于DFT运算仅仅能是有限序列,突然的截断产生了泄漏. 会有这种特殊情况.当採样截取的刚好是整数个周期 ...

  4. Keil debugging techniques and alternative printf (SWO function)

    One of the basic needs of the embedded software development through the terminal to output debugging ...

  5. systemtap 安装 总结

    http://blog.soul11201.com/notes/2017/02/22/systemstap-install.html

  6. 网速4M等于多少KB/S,等于多少kbps

    4M=512KB/S=4096Kbps 1KB/S=8Kbps 8倍速 转:http://zhidao.baidu.com/link?url=8GAyhcY9BbVstQr8pE3I7QP_M53Km ...

  7. Revit API创建详图视图

    start //创建详图视图 Transaction ts = new Transaction(doc, "http://greatverve.cnblogs.com"); ts. ...

  8. delphi 实现Ribbon风格的窗体

    随着office2007的兴起,微软让我们看到了Ribbon风格的窗体,现在很多软件也都开始使用Ribbon风格.那么我们如果要自己开发,应当怎么做呢?本文就是为大家解开这个疑团的. 首先,Delph ...

  9. javascript循环性能比较

    1.数组循环遍历方法 javascript传统的数组遍历有for循环,while循环,以及for-in.本篇文章要比较的是以下几种循环遍历方法: 遍历方式 备注 正向for循环   逆向for循环 减 ...

  10. maven报错

    今天执行mvn test的时候提示: 错误:读取 /home/subaochen/.m2/repository/org/slf4j/slf4j-api/1.6.1/slf4j-api-1.6.1.ja ...