Apache Hive是Hadoop生態中廣泛使用的SQL引擎之一,讓用戶可以使用SQL實現分布式的查詢,Hive中數據主要以undefinedDatabase、Table和Partition的形式進行管理,通過指定位置(Location)對應到后端的數據。
JindoFS配置
- jfs.namespaces=emr-jfs
- jfs.namespaces.emr-jfs.oss.uri=oss://oss-bucket/oss-dir
- jfs.namespaces.emr-jfs.mode=block
Warehouse、Database、Table或Partition的Location
- Warehouse的Location
Hive的hive-site中有hive.metastore.warehouse.dir,表示Hive數倉存放數據的默認路徑,例如配置成:
jfs://emr-jfs/user/hive/warehouse
。 - Database的Location
Hive的Database會有一個Location屬性,database的Location作為下屬Table的默認路徑。默認情況下,創建Database不是必須指定Location,默認會使用hive-site中hive.metastore.warehouse.dir的值加上database的名字作為路徑。通過下面的命令可以指定Database的Location到JindoFS:
- 創建Database時指定Location到JindoFS。
CREATE DATABASE database_name LOCATION 'jfs://namespace/database_dir';
例如,創建名為database_on_jindofs,location為
jfs://emr-jfs/warehouse/database_on_jindofs
的Hive數據庫。CREATE DATABASE database_on_jindofs LOCATION 'jfs://emr-jfs/hive/warehouse/database_on_jindofs';
- 修改Database的Location到JindoFS。
- 通過SHOW CREATE語句查看Database的Location。
SHOW CREATE DATABASE database_name;
通常情況下,默認為warehouse目錄。LOCATION 'hdfs://emr-jfs/user/hive/warehouse/database_name.db'
- 通過修改Location,可以把默認路徑指定到JindoFS上。此操作不會影響存量表,當新建表沒有指定默認Location時,才會使用此目錄。
ALTER DATABASE database_name SET LOCATION jfs_path;
- 通過SHOW CREATE語句查看Database的Location。
- 創建Database時指定Location到JindoFS。
- Table/Partition的Location
Table/Partition的Location與Database類似,對于非Partition表,數據直接存放在Table Location下,Partition表的數據存放在Partition目錄下,相關操作如下:
- 創建Table時指定Location到JindoFS。
CREATE [EXTERNAL] TABLE table_name [(col_name data_type,...)] LOCATION 'jfs://emr-jfs/database_dir/table_dir';
- 修改Table/Partition指定Location到 JindoFS。
- 通過DESCRIBE語句查看Table/Partition的 location。
DESCRIBE FORMATTED [PARTITION partition_spec] table_name;
- 通過修改Location,可以把默認路徑指定到JindoFS上。
ALTER TABLE table_name [PARTITION partition_spec] SET LOCATION "jfs_path";
例如,查看表 jfs_table_name下的某個Partition。
DESCRIBE FORMATTED jfs_table_name PARTITION (partition_key1=123,partition_key2='xxxx');
- 通過DESCRIBE語句查看Table/Partition的 location。
- 創建Table時指定Location到JindoFS。
Hive scratch目錄
Hive會把一些臨時輸出文件和作業計劃存儲在scratch目錄,可以通過設置hive-site的hive.exec.scratchdir把地址指向到JindoFS,也可以通過命令行傳參。
bin/hive --hiveconf hive.exec.scratchdir=jfs://emr-jfs/scratch_dir
或者
set hive.exec.scratchdir=jfs://emr-jfs/scratch_dir;