区别于Kylin它底层用的mpp,Palo是百度基础架构部数据团队所开发的一套面向大规模数据分析的并行数据库系统。主要目标是支撑稳定的、在线的、交互式的数据报表(Reporting)和数据多维分析(OLAP)服务。Palo 的一个很大的特色是:将会满足报表和OLAP分析这两类不同的需求。
Palo在整个分析体系中所承担的是数据库的角色,只是这个数据库是并行的、面向分析的数据库系统。然后在这个数据库系统上,通过支撑现有的(BIEE、Pentaho等)或者百度自己研发的BI应用套件来提供全套的报表和分析应用。
基本使用指南
1 数据表的创建和导入
1.1 下载palo-client
请登录Palo主页,从Download区下载最新的palo-client包,并解压, 举例如下(使用时注意更改为相应的palo-client版本):
wget http://palo.baidu.com:8080/download/palo-client-1.0.3.tar.gz tar zxf palo-client-1.0.3.tar.gz
1.2 权限申请
使用palo系统前需要先申请权限,请联系Palo管理员创建用户及数据库。
管理员会给用户赋予某个数据库的读、写、创建表、删除表或者变更表schema的权限,然后使用者就可以通过palo-client进行下面的操作。
Note
管理员可以为使用者创建读、写两个用户。
1.3 运行palo-client
运行palo-client程序,参数为:
-H DM(即逻辑实现架构中Frontend Master)程序的地址
-P DM(即逻辑实现架构中Frontend Master)程序的端口, 默认为8133
-u 用户名
-p 口令
示例:
./palo-client -H PALO_MASTER_HOST -P PALO_MASTER_PORT -u YOUR_USERNAME -p YOUR_PASSWORD
使用use命令切换数据库, 示例:
use YOUR_DB
Note
使用 help 命令查看命令列表
使用 help COMMAND 查看具体命令的详细中文帮助
使用 Tab 键自动补全命令和参数
使用向上或向下方向键显示历史命令
1.4 建表
使用 create_table_family 建立一个逻辑表, 关于 create_table_family 的详细参数可以使用 help create_table_family 查询。
下面这个例子, 建立一个名字为 ps_stats 的逻辑表, 这个逻辑表的基础表的名字为 basic 这个逻辑表有4个列:
siteid, 类型是INT, 默认值为10
time, 类型是SHORT
city, 类型是STRING, 长度为32, 默认值UNKNOWN
pv, 类型是LONG, 默认值是100; 这是一个指标列, Palo内部会对指标列做聚合操作, 这个列的聚合方法是累加(ADD)
命令中后续几个参数 -p -h 与数据分布方式有关, 参考 数据分布方式。示例:
create_table_family ps_stats basic \ siteid,INT,DEF(10) \ time,SHORT \ city,STRING,LEN(32),DEF(UNKNOWN) \ pv,LONG,AGG(ADD),DEF(100) \ -p hash \ -h 31
可以对逻辑表增加上卷表以提高性能, 例如我们需要经常查询不同 siteid 的 pv , 但不关心其他维度, 这个时候可以在 ps_stats 逻辑表内建一个只有 siteid 和 pv 的名字为 siteid_roll_up 的表。示例:
create_table ps_stats siteid_roll_up siteid pv -p hash -h 11
1.5 导入数据
使用 batch_load 命令导入数据, 使用 help batch_load 命令查询该命令的详细参数.
导入Palo的数据必须在HDFS上, 并且其权限对others可读, 也可以将HDFS用户palo加入你的用户组, 并使得数据对用户组可读, 以提高数据的安全性.
每一批导入数据都需要取一个 Data Label , Data Label 最好是一个和数据有关的字符串. Palo基于该字符串对数据去重保证: 对于同一个Database内的一个Data Label 最多只能成功导入一次
示例1: 以”fc-stats-20130901”为Data Label, 使用HDFS上的文件更新ps_stats文件表:
batch_load -l fc-stats-20130901 -t ps_stats -s hdfs://*:54310/*/*/input/stats/20130901/*
数据源文件内字段的顺序和个数不需要与Table Family的字段顺序一致, 在 batch_load 命令中可以指定数据源文件的字段.如果数据源中的字段在Table Family里没有出现, Palo会自动忽略. 如果Table Family中的字段在数据源中没有出现, 且字段具有默认值, Palo会导入默认值.
示例2: 以”fc-stats-new-20130902”为Data Label, 使用HDFS上的文件更新ps_stats文件表, 并指定数据源的字段, 数据源的顺序与Table Family不同,且多出了pid字段, 少了city字段:
batch_load -l fc-stats-new-20130902 -t ps_stats -s hdfs://*:54310/app/*/input/stats/*/*;column_names=pid,time,siteid,pv
示例3: 对ps_stats表Label为“fc-stats-20130901”的已导入数据进行**数据恢复**:
batch_load -l fc-stats-20130901-recover \ -t ps_stats -s hdfs://*.*.com:54310/*/*/input/stats/20130901/*;is_negative=true \ -t ps_stats -s hdfs://*.*.*.com:54310/good_file
Note
同一个 batch_load 命令可以同时导入多个逻辑表(Table Family)的数据, 这些数据会原子生效.
Palo batch_load 命令支持通配符*和?
合理设置导入任务的超时时间(使用-o来指定,默认为3600秒)
合理设置错误数据过滤比例(使用-f来指定,默认为0,代表不允许过滤,如果有过滤则任务失败;0.1代表允许10%以内的错误数据过滤)
对于失败的任务, 不用更换 Data Label ,可以再次使用 batch_load 命令导入
同一个 batch_load 命令中不能指定同一个路径导入多个不同的table_family
1.6 查询导入任务的状态
使用 show_batch_load 命令查询导入任务的状态, show_batch_load 有丰富的参数, 使用 help show_batch_load 了解该命令的详细参数.
导入任务的主要信息为:
pending 导入任务尚未被调度执行
etl 正在执行ETL计算, Palo内部状态
load 正在进行加载, Palo内部状态
finished 导入任务成功完成
cancelled 导入任务失败
state 导入状态
fail_message 导入任务失败原因
creation_time 任务创建时间
done_time 任务结束时间
etl_job_id ETL任务在Hadoop上的任务Id
dpp.abnorm.ALL 输入数据中被过滤掉的非法数据条数
dpp.norm.ALL 输入数据中合法的数据条数
etl_job_info ETL任务的信息, 用户可以关注其中两个字段
示例1:显示当前数据库内最后20个导入任务的状态:
show_batch_load
结果显示为:
示例2:显示数据库内以”20120101”为 DataLabel 的所有任务的状态的详细信息:
show_batch_load -l 20120101 -v -L 0
Note
如果任务失败,可以参考help show_batch_load中的【查错】来追查任务出错的原因。
1.7 取消导入任务
使用 cancel_batch_load 命令取消一个导入任务的执行, 被取消的任务数据不会导入Palo系统;已经处于 cancelled 或 finished 状态的任务无法被取消。
示例1:取消当前数据库中 Data Label 为”20131028-fc”的任务:
cancel_batch_load 20131028-fc
2 数据的查询
一旦数据导入成功,我们可以使用任何Mysql的客户端工具或者库来连接Palo进行使用。在基本使用中,我们将使用Mysql client命令行来介绍数据表的查询。
2.1 下载mysql-client
如果你使用的机器OS环境是Redhat4u3环境,即百度当前服务器上部署最多的环境,就是那个gcc为3.4.5, glibc为2.3的环境,你可以直接下载我们已经为你编译好的Mysql Client命令行工具mysql来使用:
wget http://palo.baidu.com:8080/download/mysql-client
如果你的机器OS环境不是上面所说的,建议下载mysql的源代码,然后进行源码编译:
wget http://palo.baidu.com:8080/download/mysql-5.1.49.tar.gz tar zxf mysql-5.1.49.tar.gz cd mysql-5.1.49 ./configure --without-server --disable-shared make # make成功后,mysql程序就在client/目录下生成了,拷走即可使用
Note
由于我们只需要构建client,所以传入–without-server选项。
为了构建出来的mysql程序可以方便的被拷来拷去使用,构建时传入–disabled-shared,以便使得mysql使用libmysqlclient静态库,而不是动态库。
构建后不需要执行make install, 直接从源码根目录下的client目录,直接把mysql拷走即可使用。
2.2 启动mysql命令行程序
运行mysql程序, 常用参数为:
-h 为了构建出来的mysql程序可以方便的被拷来拷去使用,构建时传入–disabled-shared,以便使得mysql使用libmysqlclient静态库,而不是动态库。 这里应该填写查询节点(即逻辑实现中Frontend Slave)的主机名或者ip
-P 这里应该填写查询节点(即逻辑实现中Frontend Slave)的端口
-u 用户名,使用你前面申请的账户。建议:对一个database的数据管理和数据查询建议使用不同的账户,即做到账户在“读写权限”上分离
-p 口令,不输入的话,会提示你输入
示例:
./mysql -h PALO_FRONTEND_HOST -P PALO_FRONTEND_PORT -u YOUR_USERNAME -p YOUR_PASSWORD
2.3 查看数据库、表信息
查看你所拥有权限的数据库列表:
mysql> show databases; +--------------------+ | Database | +--------------------+ | star | | test | +--------------------+ 2 rows in set (0.00 sec)
查看某个数据库中表的信息:
mysql> use star; Database changed mysql> show tables; +----------------+ | Tables_in_star | +----------------+ | customer | | dates | | lineorder | | part | | supplier | +----------------+ 5 rows in set (0.01 sec) mysql> desc customer; +--------------+-------------+------+------+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+------+---------+-------+ | c_custkey | int(11) | NO | | NULL | | | c_name | varchar(20) | NO | | NULL | | | c_address | varchar(20) | NO | | NULL | | | c_city | varchar(20) | NO | | NULL | | | c_nation | varchar(20) | NO | | NULL | | | c_region | varchar(20) | NO | | NULL | | | c_phone | varchar(20) | NO | | NULL | | | c_mktsegment | varchar(20) | NO | | NULL | | +--------------+-------------+------+------+---------+-------+ 8 rows in set (0.01 sec)