javaWeb学习

pinpoint-v1.8.3系列(零)之pinpoint部署安

2019-04-15  本文已影响388人  tangxqa

首先列出几个网址:
pinpoint code github地址
pinpoint wiki github地址
pinpoint v1.8.3 official homepage

在这里我推荐的是,通过编译源码的方式来获取部署要用到的jar包。因为之后我们需要开发pinpoint的插件,同样需要搭建开发环境,那就在这里把这个搭建的步骤做了就完了。

Step 1. clone源码

pinpoint code github地址 下clone即可。

git clone  https://github.com/naver/pinpoint.git
cd pinpoint

这个时候用命令git branch -a看一下分支:

* 1.8.x
  master
  remotes/origin/#4558_support_grpc_transport
  remotes/origin/1.0.x
  remotes/origin/1.1.x
  remotes/origin/1.5.x
  remotes/origin/1.6.x
  remotes/origin/1.7.x
  remotes/origin/1.8.x
  remotes/origin/HEAD -> origin/master
  remotes/origin/gh-pages
  remotes/origin/master

默认情况下当前分支是master分支,可以用git checkout -b dev(本地分支名) origin/dev(远程分支名)的方式,将当前分支切换为1.8.x

Step 2. 编译

1. 设置环境变量:

# JAVA_HOMES for pinpoint
export JAVA_6_HOME=/opt/pinpoint/jdks/jdk1.6.0_45
export JAVA_7_HOME=/opt/pinpoint/jdks/jdk1.7.0_80
export JAVA_8_HOME=/opt/pinpoint/jdks/jdk1.8.0_201
export JAVA_9_HOME=/opt/pinpoint/jdks/java-se-9-ri/jdk-9

在这里说明一下为啥要设置这四个环境变量。pinpoint的agent(用于收集宿主应用性能数据的组件)需要针对不同版本的jdk进行一些有针对性的表现,区别在于以下目录:

image.png
而这四个环境变量指定的jdk类库,就作为这部分代码编译所需要的依赖。当然,如果不编译profiler-optional-jdk9这个module,将其移除,则JAVA_9_HOME可以不设置。其他三个同理。

2. maven 编译

在编译之前,推荐先设置maven仓库为阿里云仓库,否则编译过程可能会很慢。可参考:三、配置阿里云镜像
编译过程很简单,直接cd 到pinpoint根目录,然后./mvnw install -DskipTests=true

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Detecting the operating system and CPU architecture
[INFO] ------------------------------------------------------------------------
[INFO] os.detected.name: osx
[INFO] os.detected.arch: x86_64
[INFO] os.detected.version: 10.14
.........................略.........
.........................略.........

然后就是漫长的等待,如果以上环境变量都设置了的话,应该没什么问题。
插一句,如果没见过mvnw命令对其有疑问,可以查看mvnw文件内容,其实就是设置一大堆环境变量,然后到最后还是mvn 执行的。

282 exec "$JAVACMD" \
283   $MAVEN_OPTS \
284   -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
285   "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \

其中MAVEN_OPTS 的解释为:MAVEN_OPTS - parameters passed to the Java VM when running Maven

Step3. 部署启动

1. 说明

首先来简单说一下pinpoint的组成。
数据收集:agent -> collector -> hbase(存储)
数据查询:webUI -> hbase
其中,pinpoint又使用flink预统计数据来优化查询性能,flink作为目前最先进的流式处理框架,性能优秀,一致性保证,轻量级容错。

pinpoint部署的官方文档,分为QuickStart和Installation两部分。参照:pinpoint v1.8.3 official homepage
如果只是为了在自己机器上尝尝鲜,了解一下pinpoint,那用QuickStart是没问题的。QuickStart是使用的mvn 自带的tomcat插件来启动的webUI和collector。随着部署的服务增多,数据量上来之后,难免需要进行一些参数设置,这个时候麻烦就来了。因此如果最终目的是生产的话,直接按照Installation进行。其中部署的思路推荐后从往前,也就是按照上述数据收集数据查询的箭头反向进行。

2. 部署hbase

①下载hbase

在pinpoint的官方首页中,quickStart中并没有指出linux机器需要下载hbase,那是因为在quickstart/bin/start-hbase.sh 中会自动下载安装,见func_download_hbase方法:

[root@im-test-cpr-1 bin]# cat start-hbase.sh
#!/usr/bin/env bash

HBASE_VERSION=hbase-1.0.3
HBASE_FILE=$HBASE_VERSION-bin.tar.gz
HBASE_DL_URL=http://apache.mirror.cdnetworks.com/hbase/$HBASE_VERSION/$HBASE_FILE
HBASE_ARCHIVE_DL_URL=http://archive.apache.org/dist/hbase/$HBASE_VERSION/$HBASE_FILE

function func_download_hbase
{
    if type curl > /dev/null 2>&1; then
        if [[ `curl -s --head $HBASE_DL_URL | head -n 1 2>&1 | grep "HTTP/1.[01] [23].."` ]]; then
            curl -O $HBASE_DL_URL
        else
            curl -O $HBASE_ARCHIVE_DL_URL
        fi
        echo "true"
    elif type wget > /dev/null 2>&1; then
        if [[ `wget -S --spider $FAIL_URL 2>&1 | grep "HTTP/1.[01] [23].."` ]]; then
            wget $HBASE_DL_URL
        else
            wget $HBASE_ARCHIVE_DL_URL
        fi
        echo "true"
    else
        echo "false"
    fi
}

但是经过验证,这个自动下载经常失败,而且失败之后需要手动删除下载了一半的文件,否则它会视为已经下载过了然后去解压,导致报错,十分头疼。所以干脆我们就自己装一个,装在哪无所谓。但是推荐版本1.0.3,官方教程中就是这个版本。

②安装配置hbase

在安装之前,推荐看一下hbase quickstart中的standalone部分,因为我装的是单机版的。集群版本按照官方教程也可解决。
这是我的安装目录:

[root@im-test-cpr-1 hbase]# pwd
/opt/pinpoint/pinpoint/quickstart/hbase

下载解压:

wget http://archive.apache.org/dist/hbase/hbase-1.0.3/hbase-1.0.3-bin.tar.gz
tar -xzvf  hbase-1.0.3-bin.tar.gz

hbase 启动时,可以根据实际情况选择集群或者单机方式进行;如果选择集群,可以选择自带ZooKeeper或者外置ZK。在这里我们安装单机版。

如果安装的是hbase集群,推荐选择外置ZK。这时候需要配置hbase_dir/conf/hbase-env.sh中的export HBASE_MANAGES_ZK=false
贴一下我的hbase_dir/conf/hbase-site.xml配置文件

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
/**
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
-->
<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>file:///home/testuser/hbase</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/home/testuser/zookeeper</value>
  </property>
  <property>
    <name>hbase.unsafe.stream.capability.enforce</name>
    <value>false</value>
    <description>
      Controls whether HBase will check for stream capabilities (hflush/hsync).

      Disable this if you intend to run on LocalFileSystem, denoted by a rootdir
      with the 'file://' scheme, but be mindful of the NOTE below.

      WARNING: Setting this to false blinds you to potential data loss and
      inconsistent system state in the event of process and/or node failures. If
      HBase is complaining of an inability to use hsync or hflush it's most
      likely not a false positive.
    </description>
  </property>
</configuration>

③ 运行hbase

然后运行pinpoint/quickstart/bin/start-hbase.sh,根据提示,hbase的启动log会被重定向到一个log文件中,cat一下如果是空的,说明启动成功。如果输出的是error,那好吧,根据提示解决问题吧...

logging to /opt/pinpoint/pinpoint/quickstart/hbase/hbase-1.0.3/bin/../logs/hbase-root-master-im-test-cpr-1.out

hbase启动成功后,会有一个hbase的进程出现。

[root@im-test-cpr-1 bin]# jps -l -v |grep hbase
91262 org.apache.hadoop.hbase.master.HMaster -Dproc_master -XX:OnOutOfMemoryError=kill -9 %p -XX:+UseConcMarkSweepGC -Dhbase.log.dir=/opt/pinpoint/pinpoint/quickstart/hbase/hbase-1.0.3/logs -Dhbase.log.file=hbase-root-master-im-test-cpr-1.log -Dhbase.home.dir=/opt/pinpoint/pinpoint/quickstart/hbase/hbase-1.0.3 -Dhbase.id.str=root -Dhbase.root.logger=INFO,RFA -Dhbase.security.logger=INFO,RFAS

关于这个进程需要补充说明的是,它包含了以下职能(摘自官网quickstart):

A standalone instance has all HBase daemons — the Master, RegionServers, and ZooKeeper — running in a single JVM persisting to the local filesystem.

因此如果不考虑集群的情况下,无需安装其他zookeeper,即可默认监听2181端口,为collectorweb-ui提供服务注册。

④初始化hbase

运行pinpoint/quickstart/bin/init-hbase.sh,如果报错找不到hbase目录,修改init-hbase.sh
为如下内容后重新执行。原因在于默认的init脚本中hbase路径不带版本号。

#!/usr/bin/env bash

quickstart_bin=`dirname "${BASH_SOURCE-$0}"`
quickstart_bin=`cd "$quickstart_bin">/dev/null; pwd`
quickstart_base=$quickstart_bin/..
quickstart_base=`cd "$quickstart_base">/dev/null; pwd`

"$quickstart_bin"/../hbase/hbase-1.0.3/bin/hbase shell $quickstart_base/conf/hbase/init-hbase.txt

init脚本会初始化hbase中存储性能数据所需要的数据表。

⑤hbase运行验证

运行hbase shell客户端,键入list命令,看到列出所有表之后,hbase搭建完成。

[root@im-test-cpr-1 pinpoint]# cd quickstart/bin/
[root@im-test-cpr-1 bin]# cd ..
[root@im-test-cpr-1 quickstart]# cd hbase/hbase-1.0.3/bin/
[root@im-test-cpr-1 bin]# ls
draining_servers.rb   hbase             hbase-common.sh   hbase-daemon.sh   hirb.rb                 local-regionservers.sh  regionservers.sh  rolling-restart.sh        start-hbase.sh  test
get-active-master.rb  hbase-cleanup.sh  hbase-config.cmd  hbase-daemons.sh  hs_err_pid79021.log     master-backup.sh        region_status.rb  shutdown_regionserver.rb  stop-hbase.cmd  thread-pool.rb
graceful_stop.sh      hbase.cmd         hbase-config.sh   hbase-jruby       local-master-backup.sh  region_mover.rb         replication       start-hbase.cmd           stop-hbase.sh   zookeepers.sh
[root@im-test-cpr-1 bin]# ./hbase shell
2019-07-10 17:23:08,819 WARN  [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.0.3, rf1e1312f9790a7c40f6a4b5a1bab2ea1dd559890, Tue Jan 19 19:26:53 PST 2016

hbase(main):001:0> list
TABLE
AgentEvent
AgentInfo
AgentLifeCycle
AgentStatV2
ApiMetaData
ApplicationIndex
ApplicationMapStatisticsCallee_Ver2
ApplicationMapStatisticsCaller_Ver2
ApplicationMapStatisticsSelf_Ver2
ApplicationStatAggre
ApplicationTraceIndex
HostApplicationMap_Ver2
SqlMetaData_Ver2
StringMetaData
TraceV2
15 row(s) in 0.3500 seconds

=> ["AgentEvent", "AgentInfo", "AgentLifeCycle", "AgentStatV2", "ApiMetaData", "ApplicationIndex", "ApplicationMapStatisticsCallee_Ver2", "ApplicationMapStatisticsCaller_Ver2", "ApplicationMapStatisticsSelf_Ver2", "ApplicationStatAggre", "ApplicationTraceIndex", "HostApplicationMap_Ver2", "SqlMetaData_Ver2", "StringMetaData", "TraceV2"]
hbase(main):002:0>
上一篇下一篇

猜你喜欢

热点阅读