全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网

ECS自建Thriftserver

更新时间:2017-10-30 10:02:09

ECS自建ThriftServer Step By Step

​ 这里详细的介绍下客户自己搭建thriftserver的流程以及步骤;通过一步步的演示达到分钟级别在ecs上自构建Thriftserver流程;Thrfitserver是接收各种语言的client的请求,可以是:java/c++/php/python and so on;thriftserver接收客户端请求,然后等于做一层proxy机制给HBbase server 发送请求,然后等待响应给client;

​ 一:搭建前需要准备的东西:

​ 0.购买部署ThriftServer的ECS机器;每台机器上准备下面1/2的软件包,并在云HBase页面做好3需要的准备。

​ 1.jdk(java运行环境,因为Thriftserver是java写的);这里以1.8版本为例子;如何部署java环境搜索引擎一堆资料;这里不在赘述;

  1. [root@xxxxx xxx]# java -version
  2. java version "1.8.0_102"
  3. OpenJDK Runtime Environment (Alibaba 8.2.4fp1) (build 1.8.0102-b8)
  4. OpenJDK 64-Bit Server VM (Alibaba 8.2.4_fp1) (build 25.102-b8, mixed mode)

​ 2.hbase的安装包;比如我们下载云HBase的相关bin包,参考这里

  1. [root@xxxxx xxx]#ls -l
  2. drwxr-xr-x 5 hbase hbase 4096 Oct 9 14:58 bin
  3. -rw-r--r-- 1 hbase hbase 165450 Aug 8 20:45 CHANGES.txt
  4. drwxr-xr-x 2 hbase hbase 4096 Sep 6 17:47 conf
  5. drwxr-xr-x 7 hbase hbase 4096 Sep 6 17:47 hbase-webapps
  6. -rw-r--r-- 1 hbase hbase 261 Aug 8 20:45 LEGAL
  7. drwxr-xr-x 4 hbase hbase 16384 Sep 26 14:47 lib
  8. -rw-r--r-- 1 hbase hbase 129225 Aug 8 20:45 LICENSE.txt
  9. -rw-r--r-- 1 hbase hbase 49093 Aug 8 20:45 NOTICE.txt
  10. drwxrwxr-x 2 hbase hbase 4096 Oct 23 14:41 pids
  11. -rw-r--r-- 1 hbase hbase 1477 Aug 8 20:45 README.txt

​ 3.在云HBase的白名单目录里面配置上部署ecs的机器的ip;​ ecs add white list

由于文章可以知道Thriftserver部署模式较多,业务可以基于自己的业务请求量选择使用什么部署模式。下面介绍单节点ECS部署Thriftsever流程。

三:单节点的thriftserver部署:

​ 1.配置处理:

​ 在启动单节点thriftservr之前,我们需要处理下一些相关的配置,需要处理的配置文件有:主要是在hbase的bin的tar包解压下面的conf的hbase-site.xml/hbase-env.sh:

​ 1.1.hbase-site.xml

​ 这个配置文件里面可以添加最基本的访问hbase的东西:zk的地址:

  1. <configuration>
  2. <property>
  3. <name>hbase.zookeeper.quorum</name>
  4. <value>zkip1:port,zkip2:port,zkip3:port</value>
  5. </property>
  6. </configuration>

当然上述东西里面你可以添加别的选项。比如我感觉thriftserver本地的线程少了我可以加一下:

  1. <property>
  2. <name>hbase.thrift.maxWorkerThreads</name>
  3. <value>number</value>
  4. </property>

​ 可以配置的参数有(大致列举):

  1. hbase.thrift.minWorkerThreads:thriftserver端最小线程池线程数;
  2. hbase.thrift.maxWorkerThreads:最大线程数
  3. hbase.thrift.maxQueuedRequests:thriftser排队队列里面最大允许的排队数;
  4. hbase.thrift.threadKeepAliveTimeSec:thrift线程池线程活的最长时间
  5. hbase.regionserver.thrift.compact:thriftserver使用compact协议传输(谷歌了解thrift协议细节);

1.2.hbase-env.sh

  1. export HBASE_LOG_DIR="thriftserver打的log的目录"
  2. export JVM_OPTS="-XX:+UseConcMarkSweepGC -XX:+UnlockDiagnosticVMOptions -XX:+BlockOffsetArrayUseUnallocatedBlock" #使用的是cms gc,当然这里可以使用别的gc算法
  3. export JVM_OPTS="$JVM_OPTS -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75" #cmsgc的相关算法的默认配置
  4. export JVM_OPTS="$JVM_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${dump目录}"
  5. export JVM_OPTS="$JVM_OPTS -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps" #标志打gc log
  6. export HBASE_THRIFT_OPTS="-Xms4096m -Xmx4096m" # 配置的gc的堆上内存大小,可以基于业务自己有的ecs机器配置
  7. export HBASE_THRIFT_OPTS="$HBASE_THRIFT_OPTS $JVM_OPTS -XX:ErrorFile=$HBASE_LOG_DIR/hs_err.log -Xloggc:$HBASE_LOG_DIR/gc-thrift-`date +%Y%m%d-%H-%M`.log" #thrift serv log的格式

​ 这里需要明确几点:gc的算法可以配置不同种,jdk1.8以后g1 gc实际上算是比较成熟,也有生产环境使用:配置g1 gc参考这里,以及详细的cms 与g1的区别;对于cms的话,一般默认上述数据配置(除了堆内存)还是可以的。具体cms的调优也可以参考网上细节;

​ 对于堆内存的大小配置建议:

​ 1.2.1:一般使用thfrift的话,主要是使用thriftserver做请求处理,那么压力是全打在thriftserver的,那么对于如果业务请求大的话,且资源允许的话,还是希望给与thriftserver较多的内存资源,一个客户的case 是:集群模式部署thriftserver,单条请求KB级别,大概4台ecs 做业务请求,ecs的物理配置是4core 8g,thriftserver配置4G内存。如果ecs全部是用于业务请求thriftserver还是希望足够多,如果是4G ecs,那么给2G给thriftserver也是有必要的。

​ 1.2.2:如果请求压力过大,我们建议调低cms的CMSInitiatingOccupancyFraction阈值,比如到65的样子,此外,希望可以限制put/get的数据量,单条put入的数据值希望是不要不可控,这样给与thriftserver的压力也是很大的。oom风险较大。

1.3.启动

​ 启动的流程很简单,到bin目录下:执行下

​ sh hbase-deamon.sh start thrift/thrift2 (这里需要你自己明确启动的thrift的版本)

​ 完成以后会有log输出,如果ok 执行jps 或者是ps aux|grep ThriftServer 有thriftserver进程表示ok;

  1. root 791 12.7 25.3 6351964 4131224 ? Sl 1022 4451:51 /xxx/jdk1.8.0_131/bin/java -Dproc_thrift -Xmx4G -XX:+UseConcMarkSweepGC -Xms4096m -Xmx4096m -XX:+UseConcMarkSweepGC -XX:+UnlockDiagnosticVMOptions -XX:+BlockOffsetArrayUseUnallocatedBlock -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75 -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:ErrorFile=/xxx/hs_err.log -Xloggc:/xxx/gc-thrift-xxx.log -Dhbase.log.dir=/xxx/logs -Dhbase.log.file=hbase-root-thrift-xxx.log -Dhbase.home.dir=/xxx/bin/.. -Dhbase.id.str=root -Dhbase.root.logger=INFO,RFA -Dhbase.security.logger=INFO,RFAS org.apache.hadoop.hbase.thrift.ThriftServer start

​ 默认启动的thriftserve 是9090端口,当然也可以通过配置文件修改,这里使用默认的。

​ 后续如何使用thrift编写自己的sdk以及通过thrift文件访问hbase,参考文章

本文导读目录