更新时间:2024-11-29 GMT+08:00

Solr over HDFS调优建议

操作场景

该操作指导MRS集群管理员在使用Solr over HDFS相关功能时,对环境配置进行调优。

前提条件

  • 已成功安装HDFS、Solr、Yarn服务,且Manager页面内Solr服务的服务配置参数“INDEX_STORED_ON_HDFS”为“TRUE”。
  • 完成使用Solr over HDFS的准备工作,参见Solr over HDFS

操作步骤

使用Solr over HDFS时,可以选择从以下几个方面进行调优配置:

  • 磁盘和网络规划
    • 磁盘划分的时候要注意,ZooKeeper单独占用一个磁盘或一个磁盘分区,否则当数据量过大,如果和HDFS共磁盘,频繁的数据访问和配置集访问,会导致ZooKeeper停止响应。
    • HDFS采用多块单盘或者多个RAID0分别挂载多个数据目录,Mapreduce任务处理数据量很大时磁盘IO会成为瓶颈。
    • 网络组网模式,通常环境为多网卡绑定模式bond0,网络组网模式可根据实际情况而定,不一定要求为多网卡绑定模式。
  • 作系统优化

    由于Solr在执行读取HDFS时,会生成很多个临时端口。执行netstat -anp | grep DataNode Port | wc -l命令,结果大于4096时,会出现TIME_WAIT,最终导致任务失败,为避免此种情况,需要如下设置:

    登录Manager,选择“集群 > 待操作集群的名称 > 服务 > HDFS > 配置”,查看“dfs.datanode.port”参数,其值即为“DataNode Port”。

    1. root用户登录每个DataNode节点,执行以下命令:

      vi /etc/sysctl.conf

      添加以下内容:

      net.ipv4.tcp_syncookies = 1
      net.ipv4.tcp_tw_reuse = 1
      net.ipv4.tcp_tw_recycle = 1
      net.ipv4.tcp_fin_timeout = 30
      net.ipv4.tcp_timestamps = 1
    2. 保存退出后,执行sysctl -p命令载入配置文件。
  • Solr实例部署

    索引存放到HDFS上时,确保所有Solr实例同DataNode部署在相同的节点上。

    Solr使用“HDFSDirectoryFactory”索引方式读写HDFS上的索引文件时,从Solr作为HDFS的Client方面的配置进行调优。如果Solr和其他组件要部署在相同的节点上,建议每个节点上只部署一个Solr实例。

  • 对Solr提交的MapReduce任务的性能优化

    请参考节点配置调优

    参考如下建议,设置Yarn服务的配置参数,然后重启Yarn服务:

    • “mapreduce.task.timeout”:1800000(默认值为60000,处理大数据量时可以适当调大)。
    • “yarn.nodemanager.resource.cpu-vcores”:24(默认值为8,该值在处理大数量时可设置为当前节点总的CPU个数的1~2倍)。
    • “yarn.nodemanager.resource.memory-mb”:该参数需要对每个NodeManager分别配置,查看主机界面每个节点的内存使用率,每个NodeManager该参数配置为:空闲的内存数减去8GB,或者为总内存的75%。
  • 调整HDFS缓存提高索引性能

    Solr中HDFS相关缓存,通常分配系统上可用内存量的10%~20%。

    例如,在有128GB内存的主机上运行HDFS和Solr时,通常分配12.8GB~25.6GB的内存作为HDFS相关缓存。随着索引大小的增加,需要调整此参数以保持最佳性能。该参数可通过修改“solrconfig.xml”文件进行配置。

    请按照以下步骤,调整分配的缓存大小:

    1. root用户登录Solr客户端所在节点,进入Solr客户端所在目录,执行以下命令:

      source bigdata_env

      kinit solr

    1. 执行以下命令获取配置文件集,并打开“solrconfig.xml”文件:

      solrctl confset --get confWithSchema /home/solr/

      vi /home/solr/conf/solrconfig.xml

    1. 修改参数“solr.hdfs.blockcache.slab.count”的值。

      其中每个slab的大小为128MB ,18个slab,大约占用2.3GB内存,这是每个分片Shard的配置,如果一台主机6个shard,那么共计占用13.8GB内存。

      由此可知,在此例中可将改参数值修改如下:

      <int name="solr.hdfs.blockcache.slab.count">${solr.hdfs.blockcache.slab.count:18}</int>
    1. 执行以下命令,上传修改过的配置文件集。

      solrctl confset --update confWithSchema /home/solr/