使用HDFS Colocation存储Hive表
操作场景
HDFS Colocation(同分布)是HDFS提供的数据分布控制功能,利用HDFS Colocation接口,可以将存在关联关系或者可能进行关联操作的数据存放在相同的存储节点上。Hive支持HDFS的Colocation功能,即在创建Hive表时,设置表文件分布的locator信息,当使用insert语句向该表中插入数据时会将该表的数据文件存放在相同的存储节点上(不支持其他数据导入方式),从而使后续的多表关联的数据计算更加方便和高效。表格式只支持TextFile和RCFile。
操作步骤
- 使用客户端安装用户登录客户端所在节点。
- 执行以下命令,切换到客户端安装目录,如:opt/client。
cd /opt/client
- 执行以下命令配置环境变量。
source bigdata_env
- 若集群为安全模式,执行以下命令认证用户。
kinit MRS用户名
- 通过HDFS接口创建<groupid>
hdfs colocationadmin -createGroup -groupId <groupid> -locatorIds <locatorid1>,<locatorid2>,<locatorid3>
其中<groupid>为创建的group名称,该示例语句创建的group包含三个locator,用户可以根据需要定义locator的数量。
关于hdfs创建groupid,以及HDFS Colocation的详细介绍请参考hdfs的相关说明,这里不做赘述。
- 执行以下命令进入Hive客户端:
beeline
- Hive使用colocation。
假设table_name1和table_name2是相关联的两张表,创建两表的语句如下:
CREATE TABLE <[db_name.]table_name1>[(col_name data_type , ...)] [ROW FORMAT <row_format>] [STORED AS <file_format>] TBLPROPERTIES("groupId"=" <group> ","locatorId"="<locator1>");
CREATE TABLE <[db_name.]table_name2> [(col_name data_type , ...)] [ROW FORMAT <row_format>] [STORED AS <file_format>] TBLPROPERTIES("groupId"=" <group> ","locatorId"="<locator1>");
当使用insert语句分别向table_name1和table_name2插入数据后,table_name1和table_name2的数据文件就会分布在hdfs的相同存储位置上,从而方便两表进行关联操作。