Trafodion是Apache下面的开源孵化项目,既然是开源,任何人都可以修改并提交你的代码,Trafodion欢迎大家通过各种方式为开源社区贡献一份力量,最直接的方式当然是提交你的代码。
要想将自己的代码提交到开源Trafodion社区,首先得准备一套自己的开发环境,有了自己的开发环境,就可以在下载下来的Trafodion源码基础上修改、编译并测试,本篇幅通过详细步骤描述如何搭建Trafodion的开发环境,希望对有志于贡献Trafodion的各位提供一点帮助,如有错误,还请指正!
1 首先需要准备一台自己的开发机器,推荐操作系统版本为CentOS 6.5~6.7(注:以下步骤的执行均建议使用root用户),操作系统版本可通过以下命令查看
[root@cent-1 ~]# cat /etc/centos-release
CentOS release 6.8 (Final)
2 操作系统基本配置,包括修改ulimit、关闭iptables、关闭selinux、安装ntp、修改/etc/hosts、配置本机ssh免密码、安装JDK(推荐oracle jdk1.7),因为Trafodion是基于Hadoop,这些配置均是Hadoop及Trafodion运行的前提条件,主要命令如下
//关闭iptables
service iptables stop
chkconfig iptables off
//安装并启动ntp
yum install -y ntp
service ntpd start
chkconfig ntpd on
//关闭selinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
//安装oracle jdk1.7,需提前准备好rpm包,若Linux自带jdk可忽略此步骤
rpm -ivh oracle-j2sdk1.7-1.7.0+update67-1.x86_64.rpm
//编辑/etc/hosts
echo "192.168.0.16 cent-1 cent-1.novalocal" >>/etc/hosts
//修改ulimit
echo "# Added for Trafodion: Max locked-in memory size
root soft memlock 49595556
root hard memlock 99191112
# Added for Trafodion: Increase maximum number of file opens since Trafodion needs many
root soft nofile 32768
root hard nofile 32768
# Added for Trafodion: Increase maximum number of pending signals
root soft sigpending 515196
root hard sigpending 515196
# Added for Trafodion: Increase maximum number of proceses
root soft nproc 267263
root hard nproc 267263" >>/etc/security/limits.conf
3 yum安装开发环境需要的一些工具和第三方包
yum install -y alsa-lib-devel ant ant-nodeps boost-devel cmake \
device-mapper-multipath dhcp flex gcc-c++ gd git glibc-devel \
graphviz-perl gzip java-1.7.0-openjdk-devel \
libX11-devel libXau-devel libaio-devel \
libcurl-devel libibumad-devel \
libiodbc libiodbc-devel librdmacm-devel \
libxml2-devel lua-devel lzo-minilzo \
openldap-clients openldap-devel \
openmotif openssl-devel \
openssl-static perl-Config-IniFiles perl-Config-Tiny \
perl-DBD-SQLite perl-Expect perl-IO-Tty perl-Math-Calc-Units \
perl-Params-Validate perl-Parse-RecDescent perl-TermReadKey \
perl-Time-HiRes protobuf-compiler protobuf-devel \
readline-devel saslwrapper sqlite-devel \
unixODBC unixODBC-devel uuid-perl wget xerces-c-devel xinetd \
git apr apr-util apr-devel apr-util-devel unzip
4 下载Trafodion源码,提前创建好自己的工作目录,将源码下载至工作目录下,这里假设目录为~/my_workspace
mkdir ~/my_workspace
cd ~/my_workspace
git clone https://github.com/apache/incubator-trafodion.git
5 安装那些无法通过yum安装的第三方软件,这些第三方软件是Trafodion编译时需要依赖的,这些工具可以通过Trafodion源码中traf_tools_setup.sh脚本下载然后自动编译。因此需要我们提交创建两个辅助目录:一个用来存放下载的源代码并编译;另一个用来安装这些软件,作为这些软件的安装目录,需要注意:必须将安装目录设置给TOOLSDIR这个环境变量,Trafodion编译时需要通过这个TOOLSDIR环境变量来找到这些依赖的第三方软件。我们这里使用~/download目录存放下载的源码,用~/tools作为安装目录
//以下步骤创建辅助目录并添加TOOLSDIR环境变量
mkdir ~/tools
mkdir ~/download
echo export TOOLSDIR=~/tools >> ~/.bashrc
. ~/.bashrc
//以下步骤执行traf_tools_setup.sh脚本并安装依赖的第三方软件,此步骤需要通过网络下载软件包,可能会由于网络原因中断,建议多次几次,或者配置代理下载
cd ~/my_workspace/incubator-trafodion
./install/traf_tools_setup.sh -d ~/download -i ~/tools
6 上述步骤执行完成后会下载以下列表软件并安装,包括maven(用于代码编译),为方便后续编译步骤,此处我们需要将maven的可执行文件路径加入到PATH环境变量中,一般也可以通过修改.bashrc来完成,加入完成后可以通过直接”mvn -v”命令检查是否添加成功
//下载软件列表
apache-log4cxx-0.10.0
apache-maven-3.3.3
bison_3_linux
dest-llvm-3.2
dest-mpich-3.0.4
hadoop-2.6.0
icu4c_4.4
protobuf-2.5.0
thrift-0.9.0
udis86-1.7.2
zookeeper-3.4.5
//检查mvn环境变量配置成功
mvn -v
7 编译源代码,编译源代码的过程需要通过网络下载大量的jar包,可能会因为网络问题频繁出错,建议使用代理下载,或者使用一个比较好的maven镜像,抑或者使用本地repository直接替换~/.m2目录
cd ~/my_workspace/incubator-trafodion
source ./env.sh
make all
8 如果只是希望编译Trafodion,那么make all成功即意味着编译成功,但如果希望在开发环境中正常启动Trafodion,则需要先安装好Trafodion依赖的Hadoop和HBase,这可以通过Trafodion源代码中的install_local_hadoop脚本实现,此脚本会下载、安装并启动包括HDFS、Hive、HBase、MySQL在内的服务
cd ~/my_workspace/incubator-trafodion
source ./env.sh
//切换到~/my_workspace/incubator-trafodion/core/sqf/sql/scripts目录
cds
//执行安装本地hadoop,通常需要执行两次,第一次用于给目录添加权限
./install_local_hadoop
9 上述步骤成功后,我们必须开启一个新的shell窗口,在新的shell窗口里面,我们使用hbcheck命令来检查Trafodion所依赖的HBase是否正常工作,只有HBase正常工作,Trafodion才能正常启动。如果HBase没有启动,可以使用swstarthbase启动HBase,也可以使用swstartall启动包括HDFS、Hive、HBase、MySQL在内的所有组件。
cd ~/my_workspace/incubator-trafodion
source ./env.sh
//检查hbase是否可用
hbcheck
如果HBase正常启动,hbcheck的结果大致如下,
Stderr being written to the file: /root/my_workspace/incubator-trafodion/core/sqf/logs/hbcheck.log
ZooKeeper Quorum: localhost, ZooKeeper Port : 2181
HBase is available!
HBase version: 1.2.0-cdh5.7.1
HMaster: cent-1,55185,1510713313066
Number of RegionServers available:1
RegionServer #1: cent-1,33702,1510713314440
Number of Dead RegionServers:1
Dead RegionServer #1: cent-1,34995,1510712037725
Number of regions: 2
Number of regions in transition: 0
Average load: 2.0
10 如果上述HBase没有问题,现在我们可以启动Trafodion了,启动Trafodion包括sqgen、sqstart、初始化等步骤,具体命令如下
cd ~/my_workspace/incubator-trafodion
source ./env.sh
cds
//sqgen主要用于生成环境变量、certificate等
sqgen
//启动Trafodion数据库,包括多个组件如dtm、rms等
sqstart
//启动完成后,需要进行sqlci(命令行SQL客户端)做初始化步骤
sqlci
//初始化,会创建一些trafodion的系统表,可通过hbase shell下list检查表的变化,此命令需在sqlci命令行执行
initialize trafodion;
数据库正常启动后,我们可以使用sqcheck检查当前的进程状态,正常结果如下,
[root@cent-1 incubator-trafodion]# sqcheck
*** Checking Trafodion Environment ***
Checking if processes are up.
Checking attempt: 1; user specified max: 2. Execution time in seconds: 0.
The Trafodion environment is up!
Process Configured Actual Down
------- ---------- ------ ----
DTM 2 2
RMS 4 4
DcsMaster
DcsServer
mxosrvr 0 0
11 通过以上结果我们可以发现,DTM、RMS进程均正常启动,但DcsMaster、DcsServer、mxosrvr均为空,DCS是客户端和Trafodion服务器连接的桥梁,属于单独的一部分,我们可以通过Trafodion中的脚本install_traf_components来进行安装,并通过dcsstart来启动
cd ~/my_workspace/incubator-trafodion
source ./env.sh
cds
//安装dcs组件
./instal_traf_components
//启动DCS模块的服务,此处需要切换到新的shell窗口执行
dcsstart
DCS启动成功后再通过sqcheck检查所有进程状态如下,
[root@cent-1 incubator-trafodion]# sqcheck
*** Checking Trafodion Environment ***
Checking if processes are up.
Checking attempt: 1; user specified max: 2. Execution time in seconds: 0.
The Trafodion environment is up!
Process Configured Actual Down
------- ---------- ------ ----
DTM 2 2
RMS 4 4
DcsMaster 1 1
DcsServer 1 1
mxosrvr 4 4
RestServer 0 0
现在我们可以通过Trafci来试用基本的SQL命令吧,
[root@cent-1 incubator-trafodion]# trafci
Welcome to Apache Trafodion Command Interface
Copyright (c) 2015-2017 Apache Software Foundation
JLine support is: false
Host Name/IP Address: localhost:23400
User Name: zz
Connected to Apache Trafodion
SQL>create table t(a int, b int);
--- SQL operation complete.
SQL>showddl t;
CREATE TABLE TRAFODION.SEABASE.T
(
A INT DEFAULT NULL NOT SERIALIZED
, B INT DEFAULT NULL NOT SERIALIZED
)
ATTRIBUTES ALIGNED FORMAT
;
--- SQL operation complete.
SQL>insert into t values(1,2),(3,4);
--- 2 row(s) inserted.
SQL>select * from t;
A B
----------- -----------
1 2
3 4
--- 2 row(s) selected.
SQL>drop table t;
--- SQL operation complete.