如果按照 安装 说明,Trafodion应正确启动。然而,由于每个系统都有稍微不同的设置,安装过程中或之后可能会遇到问题。本页涉及如何设置Trafodion对象,哪些类路径和对象是必需的和相关的主题,还列出常见的安装问题及解决方案。如果需要解决此类问题或您对这些主题感兴趣,请继续阅读。
Zookeeper配置最大客户端连接数
要在Hortonworks集群上的Zookeeper中配置最大客户端连接,请执行以下操作:
- 登录Ambari gui界面
- 点击左边的Zookeeper
- 选择顶部标签的"Configs"
- 滚动至底部并点击"Customer zoo.cfg"
- 选择"Add Property..."
- 点击"Add"
- 重启Ambari
- 停止Trafodion (在终端运行sqstop)
- 启动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,由以下部分组成:
- HBase jars
- Hadoop jars
- Hive jars
- Hadoop配置目录
- HBase配置目录
- Hive配置目录
- HBase-trx jar (在Trafodion安装目录的另一个副本)
- 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实例。
- 编辑每个节点上的$MY_SQROOT/etc/ms.env文件并设置变量:
TM_ENABLE_TLOG_WRITES=0
- 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对象。
- 停止Trafodion实例
sudo su - trafodion # stop Trafodion sqstop
- 调用HBase shell,清除所有TRAFODION HBase表
hbase shell disable_all 'TRAFODION.*' drop_all 'TRAFODION.*' exit
- 启动ZooKeeper shell查找HBase条目,执行“rmr”删除任何与Trafodion对象命名约定匹配的条目。
/usr/lib/zookeeper/bin/zkCli.sh ls2 /hbase/table rmr /hbase/table/TRAFODION.<schema>.<table>
- 检查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"
- 需要使用自己的用户ID来运行,因为
- 当所有都清理完毕,重新启动HBase,ZooKeeper,,MapReduce和HDFS Hadoop服务。
- 启动Trafodion实例:
sudo su - trafodion # start Trafodion sqstart
- 重新初始化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.timeout
和hbase.client.scanner.timeout.period
的值可能太小。
解决方法: 增大hbase.rpc.timeout
和hbase.client.scanner.timeout.period
的值。我们发现把这些值增大到600秒(10分钟)将防止许多超时相关的错误。更多信息,请参阅 HBase配置和调优。
症状: 由于HBase region负载均衡移动region,SQL查询失败,Hbase错误OutOfOrderScannerNextException
和WrongRegionException
。
原因: 如果安装中开启了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服务。