1.1 Root用户登录与密码修改

    Palo内置root用户,密码默认为空,启动完Palo程序之后,可以通过root用户连接到Palo集群。 假如mysql客户端和Palo FE程序部署在同一台机器,使用默认端口,下面命令即可登录Palo。

    修改root密码

    1.2 创建cluster (可选,如果需要使用palo的多租户功能)

    如果需要使用多租户功能,则在部署的时候需要按照3.2节中提示的方法添加be。在多租户模式下,用户以及相关的数据库都在cluster之下。修改完root用户密码之后,紧接着需要创建cluster,创建cluster时会为cluster创建一个superuser用户,创建cluster的命令如下](https://github.com/baidu/palo/blob/master/docs/admin_guide/install.md)3.2节中提示的方法添加be。在多租户模式下,用户以及相关的数据库都在cluster之下。修改完root用户密码之后,紧接着需要创建cluster,创建cluster时会为cluster创建一个superuser用户,创建cluster的命令如下):

    1. CREATE CLUSTER example_cluster PROPERTIES("instance_num"="1") IDENTIFIED BY 'superuser';

    上述命令创建了一个example_cluster的cluster,密码为superuser的superuser用户,properties中的instance_num表示这个cluster运行在一个BE节点之上。

    此时可使用root用户登录Palo,并进入example_cluster。

    1. mysql -h 127.0.0.1 -P9030 -uroot -proot
    2. enter example_cluster;
    1.3 创建新用户

    如果使用多租户则按照1.3.1,没使用则按照1.3.2。

    1.3.1 使用多租户

    进入到指定cluster之后,可以在里面创建新的用户。

    1. create user 'test' identified by 'test';

    后续登录时就可以通过下列连接命令登录到指定cluster

    1. mysql -h FE_HOST -P QUERY_PORT -uUSERNAME@CLUSTER_NAME -pPASSWORD
    • QUERY_PORT: 在fe.conf中进行配置,默认配置为9030。

    • USERNAME: 用户名。

    • CLUSTER_NAME: 创建的cluster名称。

    • PASSWORD: 创建用户时指定的密码。

    使用root登录Palo集群,并进入example_cluster。

    当然,root账户依然可以采用先登录Palo集群,后enter到指定cluster的方式;而其他用户登录必须显示指名cluster的名称。

    使用superuser登录Palo集群,并进入example_cluster。

    1. mysql -h 127.0.0.1 -P9030 -usuperuser@example_cluster -psuperuser

    使用test登录Palo集群,并进入example_cluster。

    1. mysql -h 127.0.0.1 -P9030 -utest@example_cluster -ptest
    2. ====== 1.3.2 不使用多租户
    3. 通过下面的命令创建一个普通用户。
    1. 也可以创建一个管理员superuser用户,指定密码的方式如1.1节描述。

    create user 'test' superuser;

    1. 后续登录时就可以通过下列连接命令登录。

    mysql -h FE_HOST -P QUERY_PORT -uUSERNAME -pPASSWORD

    1. - FE_HOST: 部署FE的机器。
    2. - QUERY_PORT: fe.conf中进行配置,默认配置为9030
    3. - USERNAME: 用户名。
    4. - PASSWORD: 创建用户时指定的密码。
    5. 使用root登录Palo集群。

    mysql -h 127.0.0.1 -P9030 -uroot -proot

    mysql -h 127.0.0.1 -P9030 -utest -ptest

    1. === 2 数据表的创建与数据导入
    2. ===== 2.1 创建数据库
    3. Palo中只有root账户和superuser账户有权限建立数据库,使用rootsuperuser用户登录,建立example_db数据库:
    4. CREATE DATABASE example_db;
    5. - 所有命令都可以使用'HELP your_command'查看到详细的中文帮助
    6. - 如果不清楚命令的全名,可以使用'help 命令某一字段' 进行模糊查询。
    7. 如键入'HELP CREATE',可以匹配到CREATE DATABASE, CREATE TABLE, CREATE USER三个命令
    8. 数据库创建完成之后,可以通过show databases查看数据库信息。
    9. mysql> show databases;
    10. +--------------------+
    11. | Database |
    12. +--------------------+
    13. | test |
    14. | information_schema |
    15. +--------------------+
    16. 2 rows in set (0.00 sec)
    17. information_schema是为了兼容mysql协议而存在,实际中信息可能不是很准确,所以关于具体数据库的信息建议通过直接查询相应数据库而获得。
    18. ===== 2.2 账户授权
    19. example_db创建完成之后,可以通过root账户或者superuser账户将example_db读写权限授权给test账户, 授权之后采用test账户登录就可以操作example_db数据库了。

    grant all on example_db to test;

    1. ===== 2.3 建表
    2. 使用CREATE TABLE命令建立一个表(Table)。更多详细参数可以查看:
    3. HELP CREATE TABLE;
    4. 首先切换数据库:
    5. USE example_db;
    6. Palo支持支持单分区和复合分区两种建表方式。
    7. 在复合分区中:
    8. - 第一级称为Partition,即分区。用户可以指定某一维度列作为分区列(当前只支持整型和时间类型的列),并指定每个分区的取值范围。
    9. - 第二级称为Distribution,即分桶。用户可以指定某几个维度列(或不指定,即所有KEY列)以及桶数对数据进行HASH分布。
    10. 以下场景推荐使用复合分区
    11. - 历史数据删除需求:如有删除历史数据的需求(比如仅保留最近N 天的数据)。使用复合分区,可以通过删除历史分区来达到目的。也可以通过在指定分区内发送DELETE语句进行数据删除。
    12. - 解决数据倾斜问题:每个分区可以单独指定分桶数量。如按天分区,当每天的数据量差异很大时,可以通过指定分区的分桶数,合理划分不同分区的数据,分桶列建议选择区分度大的列。
    13. 用户也可以不使用复合分区,即使用单分区。则数据只做HASH分布。
    14. 下面以聚合模型为例,分别演示两种分区的建表语句。
    15. ===== 单分区
    16. 建立一个名字为table1的逻辑表。使用全hash分桶,分桶列为siteid,桶数为10
    17. 这个表的schema如下:
    18. - siteid:类型是INT4字节), 默认值为10
    19. - cidy_code:类型是SMALLINT2字节)
    20. - username:类型是VARCHAR, 最大长度为32, 默认值为空字符串
    21. - pv:类型是BIGINT8字节), 默认值是0; 这是一个指标列, Palo内部会对指标列做聚合操作, 这个列的聚合方法是求和(SUM
    22. 建表语句如下:

    CREATE TABLE table1 ( siteid INT DEFAULT '10', citycode SMALLINT, username VARCHAR(32) DEFAULT '', pv BIGINT SUM DEFAULT '0' ) AGGREGATE KEY(siteid, citycode, username) DISTRIBUTED BY HASH(siteid) BUCKETS 10 PROPERTIES("replication_num" = "1");

    1. ===== 复合分区
    2. 建立一个名字为table2的逻辑表。
    3. 这个表的 schema 如下:
    4. - event_day:类型是DATE,无默认值
    5. - siteid:类型是INT4字节), 默认值为10
    6. - cidy_code:类型是SMALLINT2字节)
    7. - username:类型是VARCHAR, 最大长度为32, 默认值为空字符串
    8. - pv:类型是BIGINT8字节), 默认值是0; 这是一个指标列, Palo 内部会对指标列做聚合操作, 这个列的聚合方法是求和(SUM
    9. 我们使用event_day列作为分区列,建立3个分区: p1, p2, p3
    10. - p1:范围为 [最小值, 2017-06-30)
    11. - p2:范围为 [2017-06-30, 2017-07-31)
    12. - p3:范围为 [2017-07-31, 2017-08-31)
    13. 每个分区使用siteid进行哈希分桶,桶数为10
    14. 建表语句如下:

    CREATE TABLE table2 ( event_day DATE, siteid INT DEFAULT '10', citycode SMALLINT, username VARCHAR(32) DEFAULT '', pv BIGINT SUM DEFAULT '0' ) AGGREGATE KEY(event_day, siteid, citycode, username) PARTITION BY RANGE(event_day) ( PARTITION p1 VALUES LESS THAN ('2017-06-30'), PARTITION p2 VALUES LESS THAN ('2017-07-31'), PARTITION p3 VALUES LESS THAN ('2017-08-31') ) DISTRIBUTED BY HASH(siteid) BUCKETS 10 PROPERTIES("replication_num" = "1");

    1. 表建完之后,可以查看example_db中表的信息:
    2. mysql> show tables;
    3. +----------------------+
    4. | Tables_in_example_db |
    5. +----------------------+
    6. | table1 |
    7. | table2 |
    8. +----------------------+
    9. 2 rows in set (0.01 sec)
    10. mysql> desc table1;
    11. +----------+-------------+------+-------+---------+-------+
    12. | Field | Type | Null | Key | Default | Extra |
    13. +----------+-------------+------+-------+---------+-------+
    14. | siteid | int(11) | Yes | true | 10 | |
    15. | citycode | smallint(6) | Yes | true | N/A | |
    16. | username | varchar(32) | Yes | true | | |
    17. | pv | bigint(20) | Yes | false | 0 | SUM |
    18. +----------+-------------+------+-------+---------+-------+
    19. 4 rows in set (0.00 sec)
    20. mysql> desc table2;
    21. | Field | Type | Null | Key | Default | Extra |
    22. +-----------+-------------+------+-------+---------+-------+
    23. | siteid | int(11) | Yes | true | 10 | |
    24. | citycode | smallint(6) | Yes | true | N/A | |
    25. | username | varchar(32) | Yes | true | | |
    26. | pv | bigint(20) | Yes | false | 0 | SUM |
    27. +-----------+-------------+------+-------+---------+-------+
    28. 5 rows in set (0.00 sec)
    29. **注意事项**:
    30. - 上述表通过设置replication_num建的都是单副本的表,Palo建议用户采用默认的3副本设置,以保证高可用。
    31. - 可以对复合分区表动态的增删分区。详见'HELP ALTER TABLE' PARTITION相关部分。
    32. - 数据导入可以导入指定的partition。详见'HELP LOAD'
    33. - 可以动态修改表的Schema
    34. - 可以对Table增加上卷表(Rollup)以提高查询性能,这部分可以参见高级使用指南关于Rollup的描述。
    35. ===== 2.4 导入数据
    36. Palo 支持两种数据导入方式:
    37. - 小批量导入:针对小批量数据的导入。详见'HELP MINI LOAD'
    38. - 批量导入:支持读取HDFS文件,部署不同broker可以读取不同版本HDFS数据。详见 'HELP LOAD'
    39. 我们这里分别提供两种导入方式的操作示例,为快速完成导入建议使用方采用小批量导入进行数据导入的测试。
    40. ===== 小批量导入
    41. 小批量导入: 主要用于让用户可以不依赖HDFS,导入本地目录文件。
    42. 小批量导入是Palo中唯一不使用mysql-client执行的命令,采用http协议完成通信。**小批量导入的端口是fe.conf中配置的http port。**
    43. 示例1:以 "table1_20170707"Label,使用本地文件table1_data导入table1表。
    44. curl --location-trusted -u test:test -T table1_data http://127.0.0.1:8030/api/example_db/table1/_load?label=table1_20170707
    45. 本地table1_data\t作为数据之间的分隔,具体内容如下:
    46. 1 1 'jim' 2
    47. 2 1 'grace' 2
    48. 3 2 'tom' 2
    49. 4 3 'bush' 3
    50. 5 3 'helen' 3
    51. 示例2: "table2_20170707"Label,使用本地文件table2_data导入table2表。
    52. curl --location-trusted -u test:test -T table2_data http://127.0.0.1:8030/api/example_db/table2/_load?label=table2_20170707
    53. 本地table2_data\t作为数据之间的分隔,具体内容如下:
    54. 2017-07-03 1 1 'jim' 2
    55. 2017-07-05 2 1 'grace' 2
    56. 2017-07-12 3 2 'tom' 2
    57. 2017-07-15 4 3 'bush' 3
    58. 2017-07-12 5 3 'helen' 3
    59. **注意事项**:
    60. - 小批量导入单批次导入的数据量限制为1GB,用户如果要导入大量数据,需要自己手动拆分成多个小于1GB的文件,分多个批次导入,或者采用批量导入。
    61. - 每一批导入数据都需要取一个LabelLabel 最好是一个和一批数据有关的字符串,方便阅读和管理。Palo基于Label 保证在一个Database内,同一批数据只可导入成功一次。失败任务的Label可以重用。
    62. - 该方式可以支持用户同时向多个表进行导入,并且多表间原子生效。用法请参阅:'HELP MULTI LOAD'
    63. - 导入label建议采用表名+时间的方式。
    64. - 如果使用了多租户上面的用户名的格式需要是test@example_cluster
    65. ===== 批量导入
    66. 示例:以 "table1_20170707"Label,使用HDFS上的文件导入table1

    LOAD LABEL table1_20170707 ( DATA INFILE("hdfs://your.namenode.host:port/dir/table1_data") INTO TABLE table1 ) WITH BROKER hdfs ("username"="hdfs_user", "password"="hdfs_password") PROPERTIES ( "timeout"="3600", "max_filter_ratio"="0.1" );