# 工具

# 1.控制脚本

Ignite提供了一个命令行脚本control.sh|bat,可以用它来对集群进行监控和管理,该脚本位于安装目录的/bin/文件夹。

控制脚本的语法如下:

    # 1.1.接入集群

    如果执行脚本时没有连接参数,控制脚本会尝试连接运行在本机的节点(localhost:11211),如果希望接入运行在远程主机上的节点,需要指定连接参数:

    参数 描述 默认值
    --host HOST_OR_IP 节点的主机名或者IP地址 localhost
    --port PORT 连接端口 11211
    --user USER 用户名
    --password PASSWORD 密码
    --ping-interval PING_INTERVAL ping操作间隔 5000
    --ping-timeout PING_TIMEOUT ping操作响应超时 30000
    --ssl-protocol PROTOCOL1, PROTOCOL2…​ 接入集群时尝试的SSL协议列表,支持的协议在这里 TLS
    --ssl-cipher-suites CIPHER1,CIPHER2…​ SSL密码列表,支持的密码在这里
    --ssl-key-algorithm ALG SSL密钥算法 SunX509
    --keystore-type KEYSTORE_TYPE 密钥库类型 JKS
    --keystore KEYSTORE_PATH 密钥库路径,为控制脚本指定密钥库来开启SSL
    --keystore-password KEYSTORE_PWD 密钥库密码
    --truststore-type TRUSTSTORE_TYPE 信任库类型 JKS
    --truststore TRUSTSTORE_PATH 信任库路径
    --truststore-password TRUSTSTORE_PWD 信任库密码

    # 1.2.激活、冻结和拓扑管理

    可以使用控制脚本来激活/冻结集群,以及管理基线拓扑

    # 1.2.1.获取集群状态

    集群可以有3个状态:激活、只读和非激活,具体可以参见集群状态章节的介绍。

    执行下面的命令,可以获得集群的状态:

      # 1.2.2.激活集群

      激活是将当前可用的服务端节点集配置为基线拓扑,只有使用原生持久化时才需要激活。

      使用下面的命令可以激活集群。

        # 1.2.3.冻结集群

        警告

        冻结会释放所有节点的内存资源,包括应用的数据,并禁用公开的集群API。如果内存中的缓存没有备份到持久化存储(不管是原生持久化还是外部存储),会丢失所有的数据,然后需要重新注入缓存数据。

        执行下面的命令可以冻结集群:

          # 1.2.4.获取基线中注册的节点

          执行下面的命令可以获得基线中注册的节点列表:

            输出中包含了当前的拓扑版本,基线中节点的唯一性ID列表,以及加入集群但是还没有添加到基线的节点列表。

            Command [BASELINE] started
            Arguments: --baseline
            --------------------------------------------------------------------------------
            Cluster state: active
            Current topology version: 3
            
            Current topology version: 3 (Coordinator: ConsistentId=dd3d3959-4fd6-4dc2-8199-bee213b34ff1, Order=1)
            
            Baseline nodes:
                ConsistentId=7d79a1b5-cbbd-4ab5-9665-e8af0454f178, State=ONLINE, Order=2
                ConsistentId=dd3d3959-4fd6-4dc2-8199-bee213b34ff1, State=ONLINE, Order=1
            --------------------------------------------------------------------------------
            Number of baseline nodes: 2
            
            Other nodes:
                ConsistentId=30e16660-49f8-4225-9122-c1b684723e97, Order=3
            Number of other nodes: 1
            Command [BASELINE] finished with code: 0
            Control utility has completed execution at: 2019-12-24T16:53:08.392865
            Execution time: 333 ms
            

            # 1.2.5.往基线拓扑中添加节点

            使用下面的命令可以往基线拓扑中添加节点。节点加入之后,会开启再平衡过程

              # 1.2.6.从基线拓扑中删除节点

              使用下面的命令可以从基线拓扑中删除节点。只有离线的节点才能从基线拓扑中删除,需要先停止该节点然后才能执行remove命令。这个操作会开启再平衡过程,会在基线拓扑的剩余节点中重新分布数据。

                # 1.2.7.配置基线拓扑

                可以通过提供节点的唯一性ID列表,或者通过指定基线拓扑版本来配置基线拓扑。

                要将一组节点配置为基线,可以使用下面的命令:

                  要恢复指定版本的基线,可以使用下面的命令:

                    # 1.2.8.启用基线拓扑自动调整

                    基线拓扑自动调整是指在拓扑稳定特定时间后自动更新基线拓扑。

                    对于纯内存集群,自动调整是默认启用的,并且超时设置为0。这意味着基线拓扑在服务端节点加入或离开集群后立即更改。对于开启持久化的集群,自动调整默认是警用的,使用以下命令可以开启:

                      超时时间以毫秒计,在上一次JOIN/LEFT/FAIL事件之后经过给定的毫秒数时,会将基线设置为当前拓扑。每个新的JOIN/LEFT/FAIL事件都会重新启动超时倒计时。

                      使用以下命令可以禁用基线自动调整:

                        # 1.3.事务管理

                        控制脚本可以拿到集群中正在执行的事务的信息,也可以取消特定的事务。

                        下面的命令可以返回匹配过滤条件的事务列表(或者没有过滤条件返回所有的事务):

                          事务过滤器参数在下表列出:

                          参数 描述
                          --xid XID 事务ID
                          --min-duration SECONDS 事务已执行的最小秒数
                          --min-size SIZE 事务大小最小值
                          --label LABEL 事务的标签,可以使用正则表达式
                          --servers --clients
                          --nodes nodeId1,nodeId2…​ 希望获得事务信息的节点唯一性ID列表
                          --limit NUMBER 将事务数限制为指定值
                          --order DURATION SIZE

                          使用下面的命令可以取消事务:

                            要取消已运行超过100秒的事务,请执行以下命令:

                            control.sh --tx --min-duration 100 --kill
                            

                            # 1.4.事务竞争检测

                            contention命令可用于检测多个事务在相同键上竞争创建锁的情况,当有事务长期运行或者挂起时,该命令很有用。

                            示例:

                            # Reports all keys that are point of contention for at least 5 transactions on all cluster nodes.
                            control.sh|bat --cache contention 5
                            
                            # Reports all keys that are point of contention for at least 5 transactions on specific server node.
                            control.sh|bat --cache contention 5 f2ea-5f56-11e8-9c2d-fa7a
                            

                            如果存在任何竞争激烈的键,该工具将转储大量信息,包括发生争用的键、事务和节点。

                            示例:

                            [node=TcpDiscoveryNode [id=d9620450-eefa-4ab6-a821-644098f00001, addrs=[127.0.0.1], sockAddrs=[/127.0.0.1:47501], discPort=47501, order=2, intOrder=2, lastExchangeTime=1527169443913, loc=false, ver=2.5.0#20180518-sha1:02c9b2de, isClient=false]]
                            
                            // No contention on node d9620450-eefa-4ab6-a821-644098f00001.
                            
                            [node=TcpDiscoveryNode [id=03379796-df31-4dbd-80e5-09cef5000000, addrs=[127.0.0.1], sockAddrs=[/127.0.0.1:47500], discPort=47500, order=1, intOrder=1, lastExchangeTime=1527169443913, loc=false, ver=2.5.0#20180518-sha1:02c9b2de, isClient=false]]
                                TxEntry [cacheId=1544803905, key=KeyCacheObjectImpl [part=0, val=0, hasValBytes=false], queue=10, op=CREATE, val=UserCacheObjectImpl [val=0, hasValBytes=false], tx=GridNearTxLocal[xid=e9754629361-00000000-0843-9f61-0000-000000000001, xidVersion=GridCacheVersion [topVer=138649441, order=1527169439646, nodeOrder=1], concurrency=PESSIMISTIC, isolation=REPEATABLE_READ, state=ACTIVE, invalidate=false, rollbackOnly=false, nodeId=03379796-df31-4dbd-80e5-09cef5000000, timeout=0, duration=1247], other=[]]
                                TxEntry [cacheId=1544803905, key=KeyCacheObjectImpl [part=0, val=0, hasValBytes=false], queue=10, op=READ, val=null, tx=GridNearTxLocal[xid=8a754629361-00000000-0843-9f61-0000-000000000001, xidVersion=GridCacheVersion [topVer=138649441, order=1527169439656, nodeOrder=1], concurrency=PESSIMISTIC, isolation=REPEATABLE_READ, state=ACTIVE, invalidate=false, rollbackOnly=false, nodeId=03379796-df31-4dbd-80e5-09cef5000000, timeout=0, duration=1175], other=[]]
                                TxEntry [cacheId=1544803905, key=KeyCacheObjectImpl [part=0, val=0, hasValBytes=false], queue=10, op=READ, val=null, tx=GridNearTxLocal[xid=6a754629361-00000000-0843-9f61-0000-000000000001, xidVersion=GridCacheVersion [topVer=138649441, order=1527169439654, nodeOrder=1], concurrency=PESSIMISTIC, isolation=REPEATABLE_READ, state=ACTIVE, invalidate=false, rollbackOnly=false, nodeId=03379796-df31-4dbd-80e5-09cef5000000, timeout=0, duration=1175], other=[]]
                                TxEntry [cacheId=1544803905, key=KeyCacheObjectImpl [part=0, val=0, hasValBytes=false], queue=10, op=READ, val=null, tx=GridNearTxLocal[xid=7a754629361-00000000-0843-9f61-0000-000000000001, xidVersion=GridCacheVersion [topVer=138649441, order=1527169439655, nodeOrder=1], concurrency=PESSIMISTIC, isolation=REPEATABLE_READ, state=ACTIVE, invalidate=false, rollbackOnly=false, nodeId=03379796-df31-4dbd-80e5-09cef5000000, timeout=0, duration=1175], other=[]]
                                TxEntry [cacheId=1544803905, key=KeyCacheObjectImpl [part=0, val=0, hasValBytes=false], queue=10, op=READ, val=null, tx=GridNearTxLocal[xid=4a754629361-00000000-0843-9f61-0000-000000000001, xidVersion=GridCacheVersion [topVer=138649441, order=1527169439652, nodeOrder=1], concurrency=PESSIMISTIC, isolation=REPEATABLE_READ, state=ACTIVE, invalidate=false, rollbackOnly=false, nodeId=03379796-df31-4dbd-80e5-09cef5000000, timeout=0, duration=1175], other=[]]
                            
                            // Node 03379796-df31-4dbd-80e5-09cef5000000 is place for contention on key KeyCacheObjectImpl [part=0, val=0, hasValBytes=false].
                            

                            # 1.5.缓存状态监控

                            控制脚本的另一个重要命令是--cache list,其用于缓存的监控。该命令可以提供已部署缓存的列表及其关联/分布参数,还有在缓存组内的分布,另外还有一个命令用于查看已有的原子序列。

                            # Displays a list of all caches
                            control.sh|bat --cache list .
                            
                            # Displays a list of caches whose names start with "account-".
                            control.sh|bat --cache list account-.*
                            
                            # Displays info about cache group distribution for all caches.
                            control.sh|bat --cache list . --groups
                            
                            # Displays info about cache group distribution for the caches whose names start with "account-".
                            control.sh|bat --cache list account-.* --groups
                            
                            # Displays info about all atomic sequences.
                            control.sh|bat --cache list . --seq
                            
                            # Displays info about the atomic sequnces whose names start with "counter-".
                            control.sh|bat --cache list counter-.* --seq
                            

                            # 1.6.丢失分区重置

                            可以使用控制脚本重置某个缓存丢失的分区,具体请参见分区丢失策略

                            control.sh --cache reset_lost_partitions cacheName1,cacheName2,...
                            

                            # 1.7.一致性检查命令

                            control.sh|bat包括一组一致性检查命令,可用于验证内部数据的一致性。

                            首先,这些命令可用于调试和故障排除场景,尤其是在开发高峰期。

                            其次,如果怀疑查询(例如SQL查询等)返回的结果集不完整或错误,则这些命令可以验证数据中是否存在不一致。

                            最后,一致性检查命令可以用作常规集群运行状况检测的一部分。

                            下面看下更具体的使用场景:

                            # 1.7.1.验证分区校验和

                            idle_verify命令将主分区的哈希与备份分区的哈希进行比较,并报告差异。差异可能是更新操作期间节点故障或非正常关闭导致。如果检测到任何不一致之处,建议删除不正确的分区。

                            # Checks partitions of all caches that their partitions actually contain same data.
                            control.sh|bat --cache idle_verify
                            
                            # Checks partitions of specific caches that their partitions actually contain same data.
                            control.sh|bat --cache idle_verify cache1,cache2,cache3
                            

                            如果有分区出现偏离,则会输出冲突的分区列表,如下所示:

                            idle_verify check has finished, found 2 conflict partitions.
                            
                            Conflict partition: PartitionKey [grpId=1544803905, grpName=default, partId=5]
                            Partition instances: [PartitionHashRecord [isPrimary=true, partHash=97506054, updateCntr=3, size=3, consistentId=bltTest1], PartitionHashRecord [isPrimary=false, partHash=65957380, updateCntr=3, size=2, consistentId=bltTest0]]
                            Conflict partition: PartitionKey [grpId=1544803905, grpName=default, partId=6]
                            Partition instances: [PartitionHashRecord [isPrimary=true, partHash=97595430, updateCntr=3, size=3, consistentId=bltTest1], PartitionHashRecord [isPrimary=false, partHash=66016964, updateCntr=3, size=2, consistentId=bltTest0]]
                            

                            idle_verify检查期间集群应处于空闲状态

                            idle_verify计算哈希时,所有的更新应停止,否则可能显示错误的结果。如果正在不停地更新,比较一个分布式系统的大规模数据集是不可能的。

                            # 1.7.2.验证SQL索引一致性

                            validate_indexes命令将验证所有集群节点上给定缓存的索引。

                            验证过程将检查以下内容:

                            1. 二级SQL索引可以访问主索引引用的所有键-值条目;
                            2. 主索引引用的所有键-值条目都必须是可访问的,主索引的引用不应指向空值;
                            3. 主索引可以访问二级SQL索引引用的所有键-值条目。
                            # Checks indexes of all caches on all cluster nodes.
                            control.sh|bat --cache validate_indexes
                            
                            # Checks indexes of specific caches on all cluster nodes.
                            control.sh|bat --cache validate_indexes cache1,cache2
                            
                            # Checks indexes of specific caches on node with given node ID.
                            control.sh|bat --cache validate_indexes cache1,cache2 f2ea-5f56-11e8-9c2d-fa7a
                            

                            如果索引引用了不存在的条目(或部分条目未被索引),会输出错误,如下所示:

                            PartitionKey [grpId=-528791027, grpName=persons-cache-vi, partId=0] ValidateIndexesPartitionResult [updateCntr=313, size=313, isPrimary=true, consistentId=bltTest0]
                            IndexValidationIssue [key=0, cacheName=persons-cache-vi, idxName=_key_PK], class org.apache.ignite.IgniteCheckedException: Key is present in CacheDataTree, but can't be found in SQL index.
                            IndexValidationIssue [key=0, cacheName=persons-cache-vi, idxName=PERSON_ORGID_ASC_IDX], class org.apache.ignite.IgniteCheckedException: Key is present in CacheDataTree, but can't be found in SQL index.
                            validate_indexes has finished with errors (listed above).
                            

                            validate_indexes检查期间集群应处于空闲状态

                            idle_verify一样,索引验证工具仅在停止更新后才能正常工作。否则检查程序线程与更新条目/索引的线程之间可能会出现竞争,这可能导致错误的检测结果。

                            # 1.8.追踪配置

                            通过--tracing-configuration命令可以启用/禁用某个API的追踪采样,具体请参见追踪章节的介绍。

                            使用该命令之前,需要开启控制脚本的试验性功能:

                            export IGNITE_ENABLE_EXPERIMENTAL_COMMAND=true
                            

                            执行下面的命令可以查看当前的追踪配置:

                            control.sh --tracing-configuration
                            

                            要启用某个API的追踪采样:

                            control.sh --tracing-configuration set --scope <scope> --sampling-rate <rate> --label <label>
                            

                            参数:

                            参数 描述
                            --scope 要追踪的API:
                            1.DISCOVERY:发现事件;
                            2.EXCHANGE:交换事件;
                            3.COMMUNICATION:通信事件;
                            4.TX:事务
                            --sampling-rate 概率采样率,介于0.01.0之间的数字(包含),0表示不采样(默认),1表示始终采样。例如0.5表示每条追踪都以50%的概率采样
                            --label 仅适用于TXAPI范围。该参数定义具有给定标签的事务的采样率。当指定--label参数时,则Ignite将追踪指定标签的事务。可以为不同的标签配置不同的采样率。没有标签的事务追踪将以默认采样率采样,TX范围的默认采样率可以通过不带--label参数的命令进行配置

                            示例:

                            • 追踪所有的发现事件:

                              control.sh --tracing-configuration set --scope DISCOVER --sampling-rate 1
                              
                            • 追踪所有的事务:

                              control.sh --tracing-configuration set --scope TX --sampling-rate 1
                              
                            • 配置标签为report的事务的采样率为50%:

                              control.sh --tracing-configuration set --scope TX --sampling-rate 0.5
                              

                            # 1.9.集群ID和标签

                            集群ID可以唯一标识一个集群,其是在集群第一次启动时自动生成的,具体请参见集群ID和标签章节的内容。

                            使用--state命令可查看当前集群的ID:

                              然后检查输出:

                              Command [STATE] started
                              Arguments: --state
                              --------------------------------------------------------------------------------
                              Cluster  ID: bf9764ea-995e-4ea9-b35d-8c6d078b0234
                              Cluster tag: competent_black
                              --------------------------------------------------------------------------------
                              Cluster is active
                              Command [STATE] finished with code: 0
                              

                              集群标签是可以分配给集群的用户友好名称,使用以下命令可以修改标签(标签不得超过280个字符):

                                # 2.Visor终端

                                # 2.1.摘要

                                Visor命令行接口(CMD)是一个用于Ignite集群监控的命令行工具,它提供有关集群节点、缓存和计算任务的基本统计信息,还可以通过启动或停止节点来管理群集的大小。

                                # 2.2.使用

                                Ignite通过IGNITE_HOME/bin/ignitevisorcmd.{sh|bat}脚本来启动Visor终端,要将Visor接入集群,需要使用open命令。

                                Visor支持下面的命令,要获得某个命令完整的信息,可以输入help "cmd"或者? "cmd"

                                命令 别名 描述
                                ack 所有远程节点的Ack参数
                                alert 提示用户定义的事件
                                cache 输出缓存的统计数据,清理缓存,从缓存输出所有条目的列表
                                close 将visor从网格断开
                                config 输出节点的配置
                                deploy 将文件或者文件夹复制到远程主机
                                disco 输出拓扑变更日志
                                events 从一个节点输出事件
                                gc 在远程节点运行GC
                                help ? 输出Visor控制台帮助
                                kill 杀掉或者重启节点
                                log 启动或者停止网格范围的事件日志
                                mclear 清除Visor控制台内存变量
                                mget 获取Visor控制台内存变量
                                mlist 输出Visor控制台内存变量
                                node 输出节点统计数据
                                open 将Visor接入网格
                                ping ping节点
                                quit 退出Visor控制台
                                start 在远程主机启动或者重启节点
                                status ! 输出Visor控制台状态
                                tasks 输出任务执行统计数据
                                top 输出当前的拓扑
                                vvm 打开节点的VisualVM

                                # 3.SQLLine

                                # 3.1.概述

                                Ignite提供了一个SQLLine工具,它是一个接入关系数据库然后执行SQL命令的基于命令行的工具,本章节会描述如何用SQLLine接入Ignite集群,以及Ignite支持的各种SQLLine命令。

                                # 3.2.接入集群

                                IGNITE_HOME/bin目录中,执行sqlline.sh -u jdbc:ignite:thin:[host]命令就可以使用SQLLine接入集群,注意要将[host]替换为实际的值,比如:

                                  输入./sqlline.sh -h或者./sqlline.sh --help可以看到可用的各种选项。

                                  # 3.2.1.认证

                                  如果集群打开了认证,那么在IGNITE_HOME/bin目录中,通过运行jdbc:ignite:thin://[address]:[port];user=[username];password=[password]命令SQLLine才可以接入集群。注意要将[address][port][username]和`[password]替换为实际值,比如:

                                    如果未开启认证,需要忽略[username][password]

                                    通过bash接入时JDBC URL要加引号

                                    当在bash环境中接入时连接的URL一定要加" ",比如:"jdbc:ignite:thin://[address]:[port];user=[username];password=[password]"

                                    # 3.3.命令

                                    下面是Ignite支持的SQLLine命令列表:

                                    命令 描述
                                    !all 在当前的所有连接中执行指定的SQL
                                    !batch 开始执行一批SQL语句
                                    !brief 启动简易输出模式
                                    !closeall 关闭所有目前已打开的连接
                                    !columns 显示表中的列
                                    !connect 接入数据库
                                    !dbinfo 列出当前连接的元数据信息
                                    !dropall 删除数据库中的所有表
                                    !go 转换到另一个活动连接
                                    !help 显示帮助信息
                                    !history 显示命令历史
                                    !indexes 显示表的索引
                                    !list 显示所有的活动连接
                                    !manual 显示SQLLine手册
                                    !metadata 调用任意的元数据命令
                                    !nickname 为连接命名(更新命令提示)
                                    !outputformat 改变显示SQL结果的方法
                                    !primarykeys 显示表的主键列
                                    !properties 使用指定的属性文件接入数据库
                                    !quit 退出SQLLine
                                    !reconnect 重新连接当前的数据库
                                    !record 开始记录SQL命令的所有输出
                                    !run 执行一个命令脚本
                                    !script 将已执行的命令保存到一个文件
                                    !sql 在数据库上执行一个SQL
                                    !tables 列出数据库中的所有表
                                    !verbose 启动详细输出模式

                                    上面的列表可能不完整,还可能添加支持其它的SQLLine命令。

                                    # 3.4.示例

                                    接入集群后,就可以执行SQL语句和SQLLine命令,比如:

                                      # 4.Tableau

                                      # 4.1.概述

                                      Tableau是一个聚焦于商务智能领域的交互式数据可视化工具。它使用ODBC API接入各种数据库和数据平台,然后分析里面的数据。

                                      Ignite有自己的ODBC实现,这样就使从Tableau端接入Ignite成为可能,并且可以分析存储于分布式Ignite集群中的数据。

                                      # 4.2.安装和配置

                                      要从Tableau接入Ignite,需要进行如下操作:

                                      • 下载并且安转Tableau桌面版,可以在其产品主页查看官方文档;
                                      • 在Windows或者基于Unix的操作系统上安装Ignite的ODBC驱动;
                                      • 最后,通过DSN配置驱动,Tableau会通过DSN配置接入;
                                      • ODBC驱动通过一个叫做ODBC processor的协议与Ignite集群通信,一定要确保这个组件在集群端已经启用。

                                      上述步骤完成后,就可以接入集群然后分析数据了。

                                      # 4.3.接入集群

                                      1. 启动Tableau应用,然后在ConnectTo a ServerMore...窗口中找到Other Databases (ODBC)配置;
                                      2. 点击Edit connection链接;
                                      3. 配置之前设定的DSN属性值,下面的示例中为:LocalApacheIgniteDSN,做完之后,点击Connect按钮;
                                      4. Tableau会试图验证这个连接,如果验证通过,Sign In按钮以及其它的与连接有关的字段就会变为可用状态,点击Sign In就会完成连接过程;

                                      # 4.4.数据查询和分析

                                      成功建立Ignite和Tableau之间的连接之后,就可以通过Tableau支持的各种方式对数据进行查询和分析,通过官方文档可以了解更多的细节。

                                      # 5.Informatica

                                      # 5.1.概述

                                      Informatica是一个云数据管理和集成工具,可以通过ODBC连接将Informatica接入Ignite。

                                      # 5.2.从Informatica PowerCenter Designer接入

                                      在PowerCenter Designer中,必须安装32位的Ignite ODBC驱动才能接入Ignite,可以按照下面链接的内容安装ODBC驱动并且创建DSN:

                                      然后:

                                      1. 如果要从Ignite中导入表,在Sources或者Targets菜单中选择Import from Database...
                                      2. 通过选择Apache Ignite DSN作为ODBC数据源接入集群。

                                      # 5.3.在Informatica服务节点上安装Ignite ODBC

                                      在Linux上构建在Linux上安装文档中,描述了如何在Ignite服务端节点上安装Ignite ODBC。

                                      Informatica会使用$ODBCINI$ODBCISTINI环境变量指定的配置文件(为ODBC配置UNIX环境变量)。配置Ignite ODBC驱动和创建新的DSN,如下所示:

                                        要验证ODBC连接,可以使用Informatica的ssgodbc.linux64工具,如下所示:

                                        <INFORMATICA_HOME>/tools/debugtools/ssgodbc/linux64/ssgodbc.linux64 -d ApacheIgnite -u ignite -p ignite -v
                                        

                                        如果unixODBC或者Ignite的ODBC库没有安装在默认的目录中-/usr/local/lib,则需要将其加入LD_LIBRARY_PATH然后再次测试,如下:

                                        UNIXODBC_LIB=/opt/unixodbc/lib/
                                        IGNITE_ODBC_LIB=/opt/igniteodbc/lib
                                        LD_LIBRARY_PATH=<UNIXODBC_LIB>:<IGNITE_ODBC_LIB>
                                        
                                        <INFORMATICA_HOME>/tools/debugtools/ssgodbc/linux64/ssgodbc.linux64 -d ApacheIgnite -u ignite -p ignite -v
                                        

                                        # 5.4.配置相关的连接

                                        选择Connections>Relational...可以显示Relational Connection Browser

                                        选中ODBC类型然后创建一个新的连接。

                                        # 5.5.在Suse 11.4中安装Ignite ODBC

                                        下面是在Suse 11.4环境中构建Ignite和Ignite ODBC驱动的步骤。

                                        1. 添加仓库 - ossnon-ossopenSUSE_Factorydevel_gcc
                                        sudo zypper ar http://download.opensuse.org/distribution/11.4/repo/oss/ oss
                                        sudo zypper ar http://download.opensuse.org/distribution/11.4/repo/non-oss/ non-oss
                                        sudo zypper ar https://download.opensuse.org/repositories/devel:/tools:/building/openSUSE_Factory/ openSUSE_Factory
                                        sudo zypper ar http://download.opensuse.org/repositories/devel:/gcc/SLE-11/  devel_gcc
                                        
                                        1. 安装automakeautoconf
                                        sudo zypper install autoconf automake
                                        
                                        1. 安装libtool
                                        sudo zypper install libtool-2.4.6-7.1.x86_64
                                        
                                        Loading repository data...
                                        Reading installed packages...
                                        Resolving package dependencies...
                                        
                                        Problem: nothing provides m4 >= 1.4.16 needed by libtool-2.4.6-7.1.x86_64
                                         Solution 1: do not install libtool-2.4.6-7.1.x86_64
                                         Solution 2: break libtool-2.4.6-7.1.x86_64 by ignoring some of its dependencies
                                        
                                        Choose from above solutions by number or cancel [1/2/c] (c): 2
                                        
                                        1. 安装OpenSSL
                                        sudo zypper install openssl openssl-devel
                                        
                                        Loading repository data...
                                        Reading installed packages...
                                        'openssl-devel' not found in package names. Trying capabilities.
                                        Resolving package dependencies...
                                        
                                        Problem: libopenssl-devel-1.0.0c-17.1.x86_64 requires zlib-devel, but this requirement cannot be provided
                                          uninstallable providers: zlib-devel-1.2.5-8.1.i586[oss]
                                                           zlib-devel-1.2.5-8.1.x86_64[oss]
                                         Solution 1: downgrade of zlib-1.2.7-0.12.3.x86_64 to zlib-1.2.5-8.1.x86_64
                                         Solution 2: do not ask to install a solvable providing openssl-devel
                                         Solution 3: do not ask to install a solvable providing openssl-devel
                                         Solution 4: break libopenssl-devel-1.0.0c-17.1.x86_64 by ignoring some of its dependencies
                                        
                                        Choose from above solutions by number or cancel [1/2/3/4/c] (c): 1
                                        
                                        1. 安装GCC编译器:
                                        sudo zypper install gcc5 gcc5-c++
                                        
                                        Loading repository data...
                                        Reading installed packages...
                                        Resolving package dependencies...
                                        2 Problems:
                                        Problem: gcc5-5.5.0+r253576-1.1.x86_64 requires libgcc_s1 >= 5.5.0+r253576-1.1, but this requirement cannot be provided
                                        Problem: gcc5-c++-5.5.0+r253576-1.1.x86_64 requires gcc5 = 5.5.0+r253576-1.1, but this requirement cannot be provided
                                        
                                        Problem: gcc5-5.5.0+r253576-1.1.x86_64 requires libgcc_s1 >= 5.5.0+r253576-1.1, but this requirement cannot be provided
                                          uninstallable providers: libgcc_s1-5.5.0+r253576-1.1.i586[devel_gcc]
                                                           libgcc_s1-5.5.0+r253576-1.1.x86_64[devel_gcc]
                                                           libgcc_s1-6.4.1+r251631-80.1.i586[devel_gcc]
                                                           libgcc_s1-6.4.1+r251631-80.1.x86_64[devel_gcc]
                                                           libgcc_s1-7.3.1+r258812-103.1.i586[devel_gcc]
                                                           libgcc_s1-7.3.1+r258812-103.1.x86_64[devel_gcc]
                                                           libgcc_s1-8.1.1+r260570-32.1.i586[devel_gcc]
                                                           libgcc_s1-8.1.1+r260570-32.1.x86_64[devel_gcc]
                                         Solution 1: install libgcc_s1-8.1.1+r260570-32.1.x86_64 (with vendor change)
                                          SUSE LINUX Products GmbH, Nuernberg, Germany  -->  obs://build.opensuse.org/devel:gcc
                                         Solution 2: do not install gcc5-5.5.0+r253576-1.1.x86_64
                                         Solution 3: do not install gcc5-5.5.0+r253576-1.1.x86_64
                                         Solution 4: break gcc5-5.5.0+r253576-1.1.x86_64 by ignoring some of its dependencies
                                        
                                        Choose from above solutions by number or skip, retry or cancel [1/2/3/4/s/r/c] (c): 1
                                        
                                        Problem: gcc5-c++-5.5.0+r253576-1.1.x86_64 requires gcc5 = 5.5.0+r253576-1.1, but this requirement cannot be provided
                                          uninstallable providers: gcc5-5.5.0+r253576-1.1.i586[devel_gcc]
                                                           gcc5-5.5.0+r253576-1.1.x86_64[devel_gcc]
                                         Solution 1: install libgomp1-8.1.1+r260570-32.1.x86_64 (with vendor change)
                                          SUSE LINUX Products GmbH, Nuernberg, Germany  -->  obs://build.opensuse.org/devel:gcc
                                         Solution 2: do not install gcc5-c++-5.5.0+r253576-1.1.x86_64
                                         Solution 3: do not install gcc5-c++-5.5.0+r253576-1.1.x86_64
                                         Solution 4: break gcc5-c++-5.5.0+r253576-1.1.x86_64 by ignoring some of its dependencies
                                        
                                        Choose from above solutions by number or skip, retry or cancel [1/2/3/4/s/r/c] (c): 1
                                        Resolving dependencies...
                                        Resolving package dependencies...
                                        
                                        Problem: gcc5-c++-5.5.0+r253576-1.1.x86_64 requires libstdc++6-devel-gcc5 = 5.5.0+r253576-1.1, but this requirement cannot be provided
                                          uninstallable providers: libstdc++6-devel-gcc5-5.5.0+r253576-1.1.i586[devel_gcc]
                                                           libstdc++6-devel-gcc5-5.5.0+r253576-1.1.x86_64[devel_gcc]
                                         Solution 1: install libstdc++6-8.1.1+r260570-32.1.x86_64 (with vendor change)
                                          SUSE LINUX Products GmbH, Nuernberg, Germany  -->  obs://build.opensuse.org/devel:gcc
                                         Solution 2: do not install gcc5-c++-5.5.0+r253576-1.1.x86_64
                                         Solution 3: do not install gcc5-c++-5.5.0+r253576-1.1.x86_64
                                         Solution 4: break gcc5-c++-5.5.0+r253576-1.1.x86_64 by ignoring some of its dependencies
                                        
                                        Choose from above solutions by number or cancel [1/2/3/4/c] (c): 1
                                        
                                        1. 创建编译器执行文件的符号链接:
                                        sudo rm /usr/bin/gcc
                                        sudo rm /usr/bin/g++
                                        
                                        sudo ln -s /usr/bin/g++-5 /usr/bin/g++
                                        sudo ln -s /usr/bin/gcc-5 /usr/bin/gcc
                                        
                                        1. 通过源码安装unixODBC:从http://www.unixodbc.org/下载并安装最新的unixODBC(2.3.6或更新的版本);
                                        2. 检查指定版本的所有依赖库和工具都已经成功安装:
                                        1. libtool --version
                                        libtool (GNU libtool) 2.4.6
                                        2. m4 --version
                                        m4 (GNU M4) 1.4.12
                                        3. autoconf --version
                                        autoconf (GNU Autoconf) 2.69
                                        4. automake --version
                                        automake (GNU automake) 1.16.1
                                        5. openssl version
                                        OpenSSL 1.0.0c 2 Dec 2010
                                        6. g++ --version
                                        g++ (SUSE Linux) 5.5.0 20171010 [gcc-5-branch revision 253640]
                                        7. JDK 1.8
                                        
                                        1. 检查JAVA_HOME环境变量是否配置,然后执行下面的命令:
                                        cd $IGNITE_HOME/platforms/cpp
                                        export LDFLAGS=-lrt
                                        
                                        libtoolize && aclocal && autoheader && automake --add-missing && autoreconf
                                        ./configure --enable-odbc
                                        make
                                        sudo make install
                                        
                                        1. 成功之后,重启系统;
                                        2. 安装ODBC驱动:
                                        sudo odbcinst -i -d -f $IGNITE_HOME/platforms/cpp/odbc/install/ignite-odbc-install.ini
                                        

                                        # 6.Pentaho

                                        # 6.1.概述

                                        Pentaho是一个全面的平台,它可以非常容易地对数据进行抽取、转换、可视化和分析。Pentaho数据集成采用Java数据库连接(JDBC)API接入数据库。

                                        Ignite有自己的JDBC驱动,这样就使得通过Pentaho平台接入Ignite成为可能,然后就可以分析分布式Ignite集群中的数据了。

                                        # 6.2.安装和配置

                                        • 下载并安装Pentaho平台,具体可以参考官方的Pentaho文档;
                                        • 安装完成之后,需要使用相关的工具安装Ignite的JDBC驱动,怎么做呢,下载Ignite然后找到{apache-ignite}/libs/ignite-core-{version}.jar,然后将其复制到{pentaho}/jdbc-distribution目录;
                                        • 打开一个命令行工具,切换到{pentaho}/jdbc-distribution目录然后执行脚本:./distribute-files.sh ignite-core-{version}.jar

                                        # 6.3.JDBC驱动配置

                                        下一步是配置JDBC驱动然后接入集群,下面做的都是必要的,JDBC Thin模式驱动有更多的细节信息。

                                        • 打开命令行工具,切换到{pentaho}/design-tools/data-integration目录,然后使用./spoon.sh脚本启动Pentaho;
                                        • 出现下面的界面之后,点击File菜单然后创建一个新的转换:New->Transformation

                                        • 在Pentaho的界面中,填入下面的参数就可以创建一个新的数据库连接:
                                        Pentaho属性名
                                        Connection Name 比如IgniteConnection这样的自定义名字
                                        Connection Type 选择Generic database选项
                                        Access 选择Native (JDBC)
                                        Custom Connection URL jdbc:ignite:thin://localhost:10800,其中端口和地址可以根据实际进行调整
                                        Custom Driver Class Name org.apache.ignite.IgniteJdbcThinDriver
                                        • 点击Test按钮,对连接进行测试

                                        # 6.4.数据的查询和分析

                                        Ignite和Pentaho之间建立连接之后,就可以通过Pentaho支持的各种方式对数据进行查询、转换和分析了,更多的细节,可以查看Pentaho的官方文档。

                                        18624049226

                                        最后更新时间:: 10/31/2020, 9:55:11 PM