我们使用Solr Replication可以实现Solr服务器的可用性,即使某一个索引副本由于磁盘介质故障或者误操作删除等,其他的多个复制副本仍然可以提供服务。如果只是单纯的基于Solr Replication技术,只能对一个索引进行管理维护,当索引数据达到一定规模,搜索的性能成了瓶颈,除了重新规划设计索引,实现逻辑划分以外,没有更好地方法实现查询服务器的可扩展性。 SolrCloud就是为了解决这个问题而提出的。SolrCloud通过ZooKeeper集群来进行协调,使一个索引(SolrCloud中叫做一个Collection)进行分片,各个分片可以分布在不同的物理节点上,而且,对于同一个Collection的多个分片(Shard)之间没有交集,亦即,多个物理分片组成一个完成的索引Collection。为了保证分片数据的可用性,SolrCloud自动支持Solr Replication,可以同时对分片进行复制,冗余存储。下面,我们基于Solr最新的4.3.1版本进行安装配置SolrCloud集群,通过实践来实现索引数据的分布存储和检索。 准备工作 服务器信息 三台服务器: 10.95.3.61 master 10.95.3.62 slave1 10
按月份浏览文章: 八月 2013
Ubuntu系统安装配置Redis
Redis是一个NoSQL数据库,在数据需要频繁更新,并且数据的访问热点范围比较广的应用场景下,Redis的效率很不错。 下面介绍Redis的安装过程,如下面的步骤所示。 1、下载安装 wget http://redis.googlecode.com/files/redis-2.2.13.tar.gz tar -zxf redis-2.2.13.tar.gz cd redis-2.2.13 make sudo make install 这时Redis 的可执行文件被放到了/usr/local/bin。 2、下载配置文件和init启动脚本 wget https://github.com/ijonas/dotfiles/raw/master/etc/init.d/redis-server wget https://github.com/ijonas/dotfiles/raw/master/etc/redis.conf sudo mv redis-server /etc/init.d/redis-server sudo chmod +x /etc/init.d/redis-server sudo mv redis.conf /etc/redis.conf 3、初始化用户和日志路径 第一次启动Redis前,建议为Redis单独建立一个用户,并新建data和日志文件夹。 sudo useradd redis sudo mkdir -p /var/lib/redis sudo mkdir -p /var/log/redis sudo chown redis.redis /var/lib/redis sudo chown redis.redis /var/log/redi
Solr实现SQL的查询与统计
Cloudera公司已经推出了基于Hadoop平台的查询统计分析工具Impala,只要熟悉SQL,就可以熟练地使用Impala来执行查询与分析的功能。不过Impala的SQL和关系数据库的SQL还是有一点微妙地不同的。 下面,我们设计一个表,通过该表中的数据,来将SQL查询与统计的语句,使用Solr查询的方式来与SQL查询对应。这个翻译的过程,是非常有趣的,你可以看到Solr一些很不错的功能。 用来示例的表结构设计,如图所示: 下面,我们通过给出一些SQL查询统计语句,然后对应翻译成Solr查询语句,然后对比结果。 查询对比 条件组合查询 SQL查询语句: SELECT log_id,start_time,end_time,prov_id,city_id,area_id,idt_id,cnt,net_type FROM v_i_event WHERE prov_id = 1 AND net_type = 1 AND area_id = 10304 AND time_type = 1 AND time_id >= 20130801 AND time_id <= 20130815 ORDER BY log_id LIMIT 10; 查询结果,如图所示: Solr查询URL: http://slave1:8888/solr-cloud/i_event/select?q=*:*&fl=log_id,start_time,end_time,prov_id,city_id,area_id,id
Ubuntu系统下Hadoop 2.0.4集群安装配置
Hadoop 2已经将HDFS和YARN分开管理,这样分开管理,可以是HDFS更方便地进行HA或Federation,实现HDFS的线性扩展(Scale out),从而保证HDFS集群的高可用性。从另一个方面们来说,HDFS可以作为一个通用的分布式存储系统,而为第三方的分布式计算框架提供方便,就像类似YARN的计算框架,其他的如,Spark等等。YARN就是MapReduce V2,将原来Hadoop 1.x中的JobTracker拆分为两部分:一部分是负责资源的管理(Resource Manager),另一部分负责任务的调度(Scheduler)。 安装配置 1、目录结构 下载hadoop-2.0.4软件包,解压缩后,可以看到如下目录结构: shirdrn@master:~/cloud/hadoop2/hadoop-2.0.4-alpha$ ls bin etc include lib libexec LICENSE.txt logs NOTICE.txt README.txt sbin share etc目录 HDFS和YARN的配置文件,都存放在etc/hadoop目录下面,可以多各个文件进行配置: shirdrn@master:~/cloud/hadoop2/hadoop-2.0.4-alpha$ ls etc/hadoop/ capacity-scheduler.xml hadoop-metrics.properties httpfs-site.xml s
CentOS 6.4安装Nginx
Nginx是一款性能很高的反向代理服务器,而且支持负载均衡的配置,很容易上手,配置简单。另外,Nginx通过模块可以很容易扩展,所以Nginx所拥有的功能集合也是很大的。这里不再累述,可以参考官网文档或者相关资料。 下面,我们在CentOS 6.4上安装配置Nginx。 安装Nginx 首先,需要下载Nginx签名文件: wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm 导入Nginx签名文件,执行如下命令: sudo rpm --import nginx_signing.key 然后,可以进行安装了,执行如下命令: sudo yum install nginx 安装过程中,可能会提示安装一些依赖软件包。 等待安装完成后,一些目录和文件的基本信息,如下所示: 进程ID文件为/var/run/nginx.pid Nginx的配置文件存放在/etc/nginx/目录下 可执行程序文件为/usr/sbin/nginx 站点默认目录为/usr/share/nginx/html 错误日志路径为/var/log/nginx/error.log/li> 访问日志路径为/var/log/nginx/access.log 验证安装 查看一下Nginx的帮助信息: sudo /usr/sbin/nginx -h
Solr自动生成ID配置实践
Solr基于Lucene的索引,而索引中的最基本的单元式Document,在Solr中,管理每一个Document(更新、删除、查询),基本都会用到对应的ID,类似关系数据表中的主键。但是,如果我希望Solr能够自动生成这个唯一的ID,有时候也省去了不少的工作,而只需要在Solr中进行配置即可。 下面,通过实例来说明,如何配置Solr支持的UUID。首先,示例的schema.xml对应的表结构,如图所示: 在Solr中配置生成唯一UUID,需要修改两个配置文件: schema.xml schema.xml文件的配置内容,增加如下类型配置: <fieldType name="uuid" class="solr.UUIDField" indexed="true" /> 再增加ID字段的类型,如下所示: <field name="id" type="uuid" indexed="true" stored="true" multiValued="false" required="true" /> 这样还不够,还需要指定在更新索引的时候,使用这个更新策略,即配置一个requestHandler元素。 solrconfig.xml 配置solrconfig.xml文件,修改更新索
Oozie简介与快速入门
Oozie是一个基于工作流引擎的开源框架,是由Cloudera公司贡献给Apache的,它能够提供对Hadoop MapReduce和Pig Jobs的任务调度与协调。Oozie需要部署到Java Servlet容器中运行。 Oozie工作流定义,同JBoss jBPM提供的jPDL一样,也提供了类似的流程定义语言hPDL,通过XML文件格式来实现流程的定义。对于工作流系统,一般都会有很多不同功能的节点,比如分支、并发、汇合等等,Oozie也有类似的一些概念,不做过多解释,更多信息可以参考相关文档。 这里,简单描述一下,Oozie定义了控制流节点(Control Flow Nodes)和动作节点(Action Nodes),其中控制流节点定义了流程的开始和结束,以及控制流程的执行路径(Execution Path),如decision、fork、join等;而动作节点包括Hadoop map-reduce、Hadoop文件系统、Pig、SSH、HTTP、eMail和Oozie子流程。 下面我们看一下,官方文档中给出的定义流程的例子,流程定义示例如图所示: 这个流程图表达了WordCount统计词频的流程编排功能,非常简单,启动执行一个MapReduce任务,如果成功则正常结束,如果失败则取消该任务。
Ubuntu系统编译安装配置PHP-5.4.7
编译安装PHP,需要依赖libxml2等软件包,首先需要下载这些软件包(地址见后面参考链接)。 下面是整个安装过程的说明: 安装libxml2 下载编译安装过程,如下所示: wget ftp://xmlsoft.org/libxml2/libxml2-2.9.0.tar.gz tar -xvzf libxml2-2.9.0.tar.gz cd libxml2-2.9.0/ sudo mkdir /usr/local/libxml2 sudo ./configure --prefix=/usr/local/libxml2 sudo make sudo make install 安装成功以后,可以查看目录/usr/local/libxml2下面的内容,如下所示: ls /usr/local/libxml2/ bin include lib share libxml2已经安装成功。 安装zlib 下载编译安装过程,如下所示: wget http://zlib.net/zlib-1.2.7.tar.gz tar -xvzf zlib-1.2.7.tar.gz sudo mkdir /usr/local/zlib cd zlib-1.2.7/ sudo ./configure --prefix=/usr/local/zlib sudo make ssudo make install 安装libcurl 下载编译按装过程,如下所示: wget http://curl.haxx.se/download/curl-7.28.0.tar.gz tar -xvzf curl-7.28.0.tar.gz shirdrn@SYJ:~/programs$ cd c
使用JRegex抽取网页信息
当网络爬虫将网页下载到磁盘上以后,需要对这些网页中的内容进行抽取,为索引做准备。一个网页中的数据大部分是HTML标签,索引肯定不会去索引这些标签。也就是说,这种信息是没有用处的信息,需要在抽取过程中过滤掉。另外,一个网页中一般会存在广告信息、锚文本信息,还有一些我们不感兴趣的信息,都被视为垃圾信息,如果不加考虑这些内容,抽取出来的信息不仅占用存储空间,而且在索引以后,为终端用户提供检索服务,用户检会索到很多无用的垃圾信息,势必影响用户的体验。 这里,针对论坛,采用配置模板的方式来实现信息的抽取。使用的工具可以到http://jregex.sourceforge.net上下载,JRegex是一个基于Java的正则库,可以通过在正则模板中指定待抽取信息的变量,在抽取过程中会将抽取到的信息赋给该变量,从而得到感兴趣的信息。而且,JRegex库支持多级分组匹配。 为了直观,假设,有一个论坛的一个网页的源代码形如: <a id="anchor">标题</a> <cont> <author>a1</author> <time>2009</time