如果按照 安装 说明,Trafodion应正确启动。然而,由于每个系统都有稍微不同的设置,安装过程中或之后可能会遇到问题。本页涉及如何设置Trafodion对象,哪些类路径和对象是必需的和相关的主题,还列出常见的安装问题及解决方案。如果需要解决此类问题或您对这些主题感兴趣,请继续阅读。

 

Zookeeper配置最大客户端连接数

要在Hortonworks集群上的Zookeeper中配置最大客户端连接,请执行以下操作:

  1. 登录Ambari gui界面
  2. 点击左边的Zookeeper
  3. 选择顶部标签的"Configs"
  4. 滚动至底部并点击"Customer zoo.cfg"
  5. 选择"Add Property..."

AmbariAddProperty.jpg

  1. 点击"Add"
  2. 重启Ambari
  3. 停止Trafodion (在终端运行sqstop)
  4. 启动Trafodion (在终端运行sqstart)

说明: 在Cloudera集群上,安装程序会自动执行这些操作。(将很快在Hortonworks集群上实现)

Trafodion的HBase配置

确保HBase的设置正确使Trafodion可以正常工作。Trafodion以包含HBase-trx的jar文件的形式向HBase引入了了新的代码。在安装过程中这个jar文件被复制到HBase的lib目录下,或有时可能需要手动执行此操作。需要注意的事项:

  • HBase-trx jar文件的名称匹配hbase-trx-*.jar模式。这个jar文件必须存在于HBase的lib目录中,通常是/usr/lib/hbase/lib。
  • 对于Trafodion的1.1.n版本,所需的HBase版本是0.98.6(CDH 5.3)或0.98.4(HDP 2.2)。
    • 对于Cloudera的CDH 5.3发行版,HBase-trx jar文件的名称是hbase-trx-1.1.n.jar。
    • 对于Hortonworks的HDP 2.2发行版,HBase-trx jar文件的名称是hbase-trx-hdp2_2-1.1.n.jar。
  • 对于Trafodion的1.0.n版本,所需的HBase版本是0.98.1(CDH 5.1)或0.98.0 (HDP 2.1)。
    • 对于Cloudera的CDH 5.1发行版,HBase-trx jar文件的名称是hbase-trx-1.0.n.jar。
    • 对于Hortonworks的HDP 2.1发行版,HBase-trx jar文件的名称是hbase-trx-hdp2_1-1.0.n.jar。
  • 确保目录中只有一个正确版本的hbase-trx jar文件。
  • 确保HBase-trx jar文件设置了正确的权限。
  • 确保集群中所有运行HBase Master或RegionServer的节点上都有HBase-trx jar文件。可以使用pdsh和pdcp命令,请参阅下面的详细信息。
  • 确保在添加HBase-trx jar文件后重启HBase。
  • Java 7是唯一支持的Java版本,所需的最低版本为1.7.0_67。
  • 查看RegionServer的日志是否有HBase-trx相关的错误信息,典型的例子: ClassNotFoundException:TransactionalRegionServer.

Trafodion安装程序还在HBase的配置文件hbase-site.xml中增加了几个属性,例如:

<property>
     <name>hbase.hregion.impl</name>
     <value>org.apache.hadoop.hbase.regionserver.transactional.TransactionalRegion</value>
</property>
<property>
    <name>hbase.coprocessor.region.classes</name>
    <value>org.apache.hadoop.hbase.coprocessor.transactional.TrxRegionObserver,
           org.apache.hadoop.hbase.coprocessor.transactional.TrxRegionEndpoint,
           org.apache.hadoop.hbase.coprocessor.AggregateImplementation
    </value> 
</property>

确保有一个条目hbase.hregion.impl指向 org.apache.hadoop.hbase.regionserver.transactional.TransactionalRegion,和一个协处理器org.apache.hadoop.hbase.regionserver.transactional.TransactionalRegion。这只是两个例子,如果缺少它们,安装应出了问题。

对于Trafodion SQL聚合, org.apache.hadoop.hbase.coprocessor.AggregateImplementation协处理器用于非HBase-trx事务查询。org.apache.hadoop.hbase.coprocessor.transactional.TrxRegionEndpoint协处理器中的聚合例程用于HBase-trx事务查询。

通过在hbase shell中使用类似以下内容的简单命令来验证HBase是否正常工作:

sudo su - trafodion
hbase shell
  create 'testtab','cf1'
  put 'testtab','row1','cf1:col1','val1'
  scan 'testtab'
  disable 'testtab'
  drop 'testtab'
  quit

Trafodion用户ID

Trafodion运行在trafodion用户ID下,安装程序已在系统上创建了这个用户。trafodion用户ID需要能够无密码ssh访问集群中的所有节点。安装程序应已设置在~trafodion/.ssh目录下创建公钥和私钥。安装期间应能su(或者sudo su)到此用户ID。一旦设定完成,您可能不希望再使用这个ID,它应使用强密码或者更好,没有密码。

安装程序在 ~trafodion/.bashrc 中添加命令来设置一些环境变量。大部分设置通过文件$MY_SQROOT/sqenv.sh和$MY_SQROOT/sqenvcom.sh完成。MY_SQROOT 在 .bashrc中设置。做一些基本检查:

  • $MY_SQROOT需要指向到Trafodion的安装目录。
  • $DCS_INSTALL_DIR需要指向到DCS(Trafodion的ODBC/JDBC连接服务)的安装目录。
  • $MY_NODES应扩展到Trafodion集群中的节点列表,格式是 -w <node1> ... -w <noden>。与pdcp和pdsh命令一起使用。
  • trafodion用户ID能够不需要提供密码ssh访问$MY_NODES中的所有节点。
  • $CLASSPATH已设置,参阅下一节。
sudo su - trafodion
echo $MY_SQROOT
echo $DCS_INSTALL_DIR
pdsh $MY_NODES pwd
echo $CLASSPATH

Trafodion类路径

Trafodion安装的大多数问题可能与类路径有关,它是一个长的CLASSPATH,由以下部分组成:

  1. HBase jars
  2. Hadoop jars
  3. Hive jars
  4. Hadoop配置目录
  5. HBase配置目录
  6. Hive配置目录
  7. HBase-trx jar (在Trafodion安装目录的另一个副本)
  8. Trafodion jars (UDR,HBase访问,JDBC T2驱动)

如果看到CLASSPATH中有元素缺失(通常表现为CLASSPATH中有连续的冒号),查看sqenvcom.sh文件如何设置CLASSPATH,通常有一个简单的解决办法。请注意,访问HBase和Hive元数据需要配置目录。

类路径的典型问题:

  • HBase或Hadoop的jar文件缺失:$MY_SQROOT/sqenvcom.sh文件尝试检测运行的Hadoop发行版,若有问题,CLASSPATH中会缺失多个文件。
  • Hive的jar文件可能缺失:可能是由于未安装Hive,这是可行的,应仍可以正常访问HBase。若以后再安装Hive,将需要再执行sqgen,请参阅下文。

修复类路径的问题可能需要一些额外的步骤,通过$MY_SQROOT/sqenvcom.sh文件的小修补程序或复制一下jar文件到相应的目录。由于Trafodion在集群上分布式运行,需要将修复的环境传播到所有节点。Trafodion提供一个实用程序sqgen,创建所需的文件来设置CLASSPATH和其他信息,并将一些生成的文件复制到整个集群。以下是使用trafodion用户操作的一个例子,请修改成适用的命令:

sudo su - trafodion
# 停止Trafodion
sqstop
cd $MY_SQROOT
# 修复环境,例如这个文件
vi sqenvcom.sh
# 使用pdcp命令把修复的文件复制到所有节点
# 使用$MY_NODES变量可以方便的完成。
pdcp $MY_NODES sqenvcom.sh $PWD

# 检查类路径测试所有节点上的修复
pdsh $MY_NODES echo $CLASSPATH | grep /usr/lib/hbase/hbase-trx | wc -l

# 复制其他所需的文件
pdcp $MY_NODES /somedir/newjar.jar /somedir

# 给新的文件设置正确的权限
pdsh $MY_NODES chmod 644 /somedir/newjar.jar

# 确保HBase-trx jar文件在正确的目录(参阅上面的HBase设置)
# 注意带通配符的名称放在双引号里,这样可以在目标系统被解析
pdsh $MY_NODES ls -l "/usr/lib/hbase/lib/*trx*"

# 使用一个新的shell(重要)为Trafodion生成新的环境
ssh localhost
sqgen
exit

# 退出所有旧环境中的shell并重新启动Trafodion
exit
sudo su - trafodion
sqstart

安全性

Trafodion使用Java接口访问HBase,使用本地libhdfs库访问Hive表的HDFS文件。如果已设置 HBase 和 HDFS 的权限,必须允许trafodion用户ID访问必要的HBase的表和HDFS文件。最简单的方法来测试这一点是以trafodion用户身份运行 HBase, Hive和 HDFS命令,查看上述HBase shell中的简单测试。

进程和网络

此外,由于Trafodion管理集群,有一些特别的东西需要了解和检查。 Trafodion有它自己的一套进程,trafodion用户可以使用sqps命令来显示集群上运行的所有Trafodion进程。简化的示例:

sudo su - trafodion
$ sqps
...
[$Z000LSB] NID,PID(os)  PRI TYPE STATES  NAME        PARENT      PROGRAM
[$Z000LSB] ------------ --- ---- ------- ----------- ----------- ---------------
[$Z000LSB] 000,00022519 001 DTM  ES--A-- $TM0        NONE        tm             
[$Z000LSB] 000,00024392 001 GEN  ES--A-- $Z000JWX    NONE        mxosrvr        
[$Z000LSB] 000,00024441 001 GEN  ES--A-- $Z000JYB    NONE        mxosrvr        
[$Z000LSB] 000,00005348 001 GEN  ES--A-- $Z0004CT    $Z000JWX    tdm_arkcmp     
[$Z000LSB] 000,00013085 001 GEN  ES--A-- $Z000ANV    $Z0004CT    tdm_arkcmp     
[$Z000LSB] 001,00022612 001 DTM  ES--A-- $TM1        NONE        tm             
...

NID,PID 显示节点编号和进程ID。要转换节点编号为节点名称,使用此命令:

sqshell -c node

这些进程的作用:

  • tm:事务管理器,负责管理分布式的事务并进行恢复。
  • mxosrvr:连接服务器,即JDBC/ODBC 客户端连接的进程。一个mxosrvr处理一个传入的连接,或处于空闲状态。
  • tdm_arkcmp:SQL 编译器,在某些情况下在一个单独的进程中编译 SQL 查询。

更多详细信息,请参阅 设计构架。本页只涉及问题排除。

当客户端通过JDBC/ODBC连接时,它首先联系一个集群节点上的主进程来获得Trafodion集群中任何节点可用的mxosrvr的 IP 地址和端口。要能够连接,请确认此端口已在防火墙中打开。默认情况下,端口的范围开始于37800,范围的大小取决于配置了多少 mxosrvrs 。

另一个潜在的问题: 一个节点可以有多个 IP 地址,例如内部网络地址与外部地址。由于JDBC/ODBC的连接请求被重定向到另一个节点,DCS(Trafodion 数据库连接服务)需要提供正确的IP地址给客户端。这在$DCS_INSTALL_DIR/conf/dcs-site.xml文件中配置,使用dcs.dns.interface属性。

访问Hive表

需要考虑的几个方面:

  • 确保Hive的配置目录(例如/etc/hive/conf)在类路径中。
  • 尝试使用hive-site.xml中的信息手动连接到Hive metastore。
  • 使用trafodion用户运行hive shell并尝试一些简单命令。
    sudo su - trafodion
    hive
      show tables;
      select count(*) from <some table>;
      quit;
    
  • 确保libhdfs在LD_LIBRARY_PATH中,默认会被正确设置。

事务性恢复

Trafodion实现HBase崩溃后恢复交易的能力,此功能默认情况下启用

尚不支持其他方案,例如从单独的RegionServers或TM进程故障恢复。

如果想禁用恢复,在ms.env文件中设置以下开关并重新启动Trafodion实例。

  1. 编辑每个节点上的$MY_SQROOT/etc/ms.env文件并设置变量:
    TM_ENABLE_TLOG_WRITES=0
    
  2. hbase-site.xml文件中的另一属性也控制恢复,但并不需要进行更改。

    属性 hbase.regionserver.region.transactional.tlog: 此属性控制恢复过程中region的行为。

    • true – region会要求TM重新驱动不确定的事务。
    • false – 不确定的事务将被丢弃。
    示例:
    <property>
           <name>hbase.regionserver.region.transactional.tlog</name>
           <value>true</value>
    </property>
    

    这一属性现在设置为true

清除Trafodion和HBase表

创建Trafodion表时,会在Trafodion和HBase中都创建配置对象。 有时可能这两组配置对象会变得不一致。 这可能导致无法删除并重新创建在Trafodion中使用的表。 删除对象时可能会看到Trafdodion错误。

SQL>drop table trafodion.seabase.table1;
*** ERROR[1389] Object TRAFODION.SEABASE.TABLE1 does not exist in Trafodion. [2014-06-10 14:12:51]

要从这个问题中恢复,需要确保表的所有Trafodion和HBase的配置对象已被删除。 要删除一个HBase的表,用HBase shell禁用并删除该表。

hbase shell
  disable 'TRAFODION.SEABASE.TABLE1';
  drop 'TRAFODION.SEABASE.TABLE1';

可能还需确保所有Trafodion元数据已被删除。 查询Trafodion元数据,以获得表的object_uid。 用查询返回的object_uid值替换delete语句中的<num>。

trafci
  select * from "_MD_".objects where object_name = 'TABLE1' and schema_name = 'SEABASE' and object_type = 'BT';

如果没有返回的行,则表示Trafodion元数据中没有该表的配置,退出“trafci”。如果返回行,在以下delete语句中使用返回的“object_uid”值,这将删除表的所有元数据的配置信息。

  begin work;
  set parserflags 131072;
  delete from "_MD_".objects where object_uid = <num>;
  delete from "_MD_".columns where object_uid = <num>;
  delete from "_MD_".keys where object_uid = <num>;
  delete from "_MD_".tables where table_uid = <num>;
  delete from "_MD_".table_constraints where table_uid = <num>;
 如果此时一切正常,然后…
  commit work;
  exit;

紧急恢复

有时可能您想刷新Trafodion实例和HBase的匹配对象,注意:这将破坏在Trafodion中创建的所有表! 可以执行一系列步骤,停止Trafodion实例,清理掉HBase的与ZooKeeper的对象。然后,可以重新启动Trafodion实例并重新初始化Trafodion对象。

  1. 停止Trafodion实例
    sudo su - trafodion
    # stop Trafodion
    sqstop 
    
  2. 调用HBase shell,清除所有TRAFODION HBase表
    hbase shell
      disable_all 'TRAFODION.*'
      drop_all 'TRAFODION.*'
      exit
    
  3. 启动ZooKeeper shell查找HBase条目,执行“rmr”删除任何与Trafodion对象命名约定匹配的条目。
    /usr/lib/zookeeper/bin/zkCli.sh
      ls2 /hbase/table
      rmr /hbase/table/TRAFODION.<schema>.<table>
    
  4. 检查HDFS中剩余的Trafodion对象
    • 需要使用自己的用户ID来运行,因为trafodion用户ID没有sudo权限。
      sudo su hdfs --command "hadoop dfs -ls /hbase"
      
    • 已经从HBase中清除了所有Trafodion表,不应该看到任何匹配Trafodion命名约定的HDFS目录或文件,如/hbase/TRAFODION.XXX
    • 如果还有这样的目录或文件,将其删除。以下的例子是删除所有以TRAFODION.CMPxxx开始的目录和文件:
       sudo su hdfs –command "hadoop dfs –rm –r /hbase/TRAFODION.CMP*"
      
    • 只删除名称与Trafodion相关的对象。
    • 一旦删除所有遗留的Trafodion文件,修复HDFS元数据:
      sudo su hbase --command "hbase hbck -repair"
      
  5. 当所有都清理完毕,重新启动HBase,ZooKeeper,,MapReduce和HDFS Hadoop服务。
  6. 启动Trafodion实例:
    sudo su - trafodion
    # start Trafodion
    sqstart 
    
  7. 重新初始化Trafodion实例:
    sudo su - trafodion
    sqlci | cat
      initialize trafodion;
      exit;

联机节点重新整合

联机节点重新整合先前故障(HWR或SWR)而离线的Trafodion节点回群集或实例,不需要使实例离线。HWR节点故障要求该节点进行维修或更换,然后放回原来的物理机架位置。SWR节点故障可能是由于底层Linux操作系统的故障或由于Trafodion触发故障安全保护。确保节点是健康和正常工作的,并且节点上的HBase的环境也可用。最后一步就是重新整合节点进入Trafodion实例。目前,重新整合是一个手动启动的操作。

在下面的例子中,节点“sea-dev4”被重新整合到Trafodion实例中:

[trafodion@sea-dev1 ~]$ sqshell -a
Processing cluster.conf on local host sea-dev1
[$Z000HAT] Shell/shell Version 1.0.1 Release 1.0.0 (Build debug [1.0.0rc2-6-ge7cad10_Bld72], date 20150125_083000)

[$Z000HAT] %node info
[$Z000HAT] Logical Nodes    = 6
[$Z000HAT] Physical Nodes   = 6
[$Z000HAT] Spare Nodes      = 0
[$Z000HAT] Available Spares = 0
[$Z000HAT] NID Type        State    Processors   #Procs
[$Z000HAT]     PNID        State        #Cores  MemFree SwapFree CacheFree Name
[$Z000HAT] --- ----------- -------- ---------- -------- -------- --------- --------
[$Z000HAT] 000 Any         Up                2        9
[$Z000HAT]     000         Up                8  6517656  4095996  10228088 sea-dev1
[$Z000HAT] 001 Any         Up                2       10
[$Z000HAT]     001         Up                8  6308828  4095992  11607900 sea-dev2
[$Z000HAT] 002 Any         Up                2        8
[$Z000HAT]     002         Up                8  1988592  3982764  11939032 sea-dev3
[$Z000HAT] 003 Any         Down    
[$Z000HAT]     003         Down                                            sea-dev4
[$Z000HAT] 004 Any         Up                2        8
[$Z000HAT]     004         Up                8  2081148  3832532  10454704 sea-dev5
[$Z000HAT] 005 Any         Up                2        8
[$Z000HAT]     005         Up                8   905744  3836724  10166456 sea-dev6

[$Z000HAT] %up sea-dev4
[$Z000HAT] 01/27/2015-15:58:48 - Node sea-dev4 is merging to existing cluster.
[$Z000HAT] 01/27/2015-15:58:49 - Node sea-dev4 join phase starting.
[$Z000HAT] %[$Z000HAT] 01/27/2015-15:58:54 - Node 3 (sea-dev4) is UP

[$Z000HAT] %[$Z000HAT] %node info
[$Z000HAT] Logical Nodes    = 6
[$Z000HAT] Physical Nodes   = 6
[$Z000HAT] Spare Nodes      = 0
[$Z000HAT] Available Spares = 0
[$Z000HAT] NID Type        State    Processors   #Procs
[$Z000HAT]     PNID        State        #Cores  MemFree SwapFree CacheFree Name
[$Z000HAT] --- ----------- -------- ---------- -------- -------- --------- --------
[$Z000HAT] 000 Any         Up                2        9
[$Z000HAT]     000         Up                8  6540244  4095996  10251084 sea-dev1
[$Z000HAT] 001 Any         Up                2       10
[$Z000HAT]     001         Up                8  6287700  4095992  11587408 sea-dev2
[$Z000HAT] 002 Any         Up                2        8
[$Z000HAT]     002         Up                8  2180728  3982764  11888216 sea-dev3
[$Z000HAT] 003 Any         Up                2        7
[$Z000HAT]     003         Up                8  1731684  3495860  11720212 sea-dev4
[$Z000HAT] 004 Any         Up                2        8
[$Z000HAT]     004         Up                8  2257312  3832532  10465852 sea-dev5
[$Z000HAT] 005 Any         Up                2        8
[$Z000HAT]     005         Up                8  1167184  3836724  10187724 sea-dev6
[$Z000HAT] %

常见问题及解决方案

说明: 如果没有看到这里列出的问题,请参见您使用的Trafodion版本的已知的问题:

数据加载相关的问题排除,请参阅 数据加载问题解答。

症状: 启动Trafodion时看到下面的循环:

# of Transactions being
recovered: 0 Checking.....
SQ registry key SQ_TXNSVC_READY is not set
# of Transactions being recovered: 0 Checking.....
SQ registry key SQ_TXNSVC_READY is not set
# of Transactions being recovered: 0 Checking.....

原因: DTM没有启动。

解决方法: 常见的原因及解决办法:

  • trafodion_mods运行之后HBase没有重启,没有应用脚本修改的配置。

可能的原因:复制到/usr/lib/hbase/lib的$MY_SQROOT/export/lib/hbase-trx jar文件不存在或者没有正确的权限644。Hadoop的Java版本与java -version命令显示的不一样。确定Hadoop的Java版本,使用top命令然后按C并寻找Java进程及其版本。在Trafodion 0.8.n版本中,Hadoop的Java版本是1.6或1.7。从Trafodion 0.9.0版本开始,要求的最小Java 7版本是1.7.0_65。在Trafodion 1.1.0版本,要求的最小Java 7版本是1.7.0_67。强制Hadoop使用正确的版本,运行命令: yum -y remove。

  • 有可能确实是DTM的问题,查看$MY_SQROOT/sql/scripts/trafodion.dtm.log中的“ERROR”。如果在DTM的日志文件中看到“ERROR”,请提交一个bug或者在Launchpad提交一个问题。关于Trafodion bug跟踪的更多信息,请参阅 Bugs.

症状: 首次启动Trafodion是sqlci挂起。

原因: sqlci挂起有不同的原因:

  • Cloudera HBase的安装配置了多个RegionServer的组,应该只有一个RegionServer的组 RegionServer(Default)
  • sqlci的标准输出不被显示,可能只是显示问题,Trafodion安装可能在正常运行。

解决方法:

  • 若Cloudera HBase的安装配置了多个RegionServer的组,删除多余的HBase RegionServer组。
  • 若sqlci的标准输出不被显示,先等待几分钟,让Trafodion的安装完成。尝试Tranfodion安装的步骤10和12。这些步骤包括尝试以用户名trafodion,密码traf123登录端口号为1的VNC服务器。如果可以成功登录,启动终端窗口,在命令提示符下输入sqlci来启动一个新的“sqlci”会话。如果“sqlci”成功启动,执行在Trafodion安装步骤12中的例子。

症状: 运行update statistics或count(*)命令时看到org.apache.hadoop.hbase.client.ScannerTimeoutException的错误。

原因: 对于表的规模来说,缺省的hbase.rpc.timeouthbase.client.scanner.timeout.period的值可能太小。

解决方法: 增大hbase.rpc.timeouthbase.client.scanner.timeout.period的值。我们发现把这些值增大到600秒(10分钟)将防止许多超时相关的错误。更多信息,请参阅 HBase配置和调优


症状: 由于HBase region负载均衡移动region,SQL查询失败,Hbase错误OutOfOrderScannerNextExceptionWrongRegionException

原因: 如果安装中开启了HBase region负载均衡并且有活跃的DTM事务时region被移动了,会有无法预料的结果,因为食物的上下午可能会丢失。

解决方法: 为了避免这个问题,使用HBase shell命令balance_switch false禁用region从一个服务器移动到另一个。例如:

# hbase shell
hbase(main):002:0> balance_switch false
true <-- 输出显示之前的balance_switch值
0 row(s) in 0.0080 seconds

症状: 当许多客户端开始连接到Trafodion系统,看到一个ssh_exchange错误。

原因: OpenSSH中的最大会话和启动的设置太低。

解决方法: 修改/etc/ssh/sshd_config文件中的设置:

MaxSessions 100
MaxStartups 200

然后重启sshd服务。


  • No labels