java.lang.IllegalArgumentException: Can not create a Path from an empty string
at org.apache.hadoop.fs.Path.checkPathArg(Path.java:127)
at org.apache.hadoop.mapreduce.JobSubmitter.copyAndConfigureFiles(JobSubmitter.java:213)
...
at org.apache.hadoop.hive.ql.exec.mr.MapRedTask.execute(MapRedTask.java:137)
升級至**兼容版本組合**,例如:
**CDH/HDP 等發布版**已解決此類兼容性地獄,強烈建議生產環境使用發布版。
hive.aux.jars.path
file:///opt/hive/lib/hbase-client-0.98.jar,file:///opt/hive/lib/hbase-server-0.98.jar,file:///opt/hive/lib/htrace-core-3.0.4.jar,file:///opt/hive/lib/zookeeper-3.4.6.jar
cp $HBASE_HOME/conf/hbase-site.xml $HIVE_HOME/conf/
-- Hive 創建外部表映射 HBase
CREATE EXTERNAL TABLE hive_hbase_table (
rowkey STRING,
cf1_col1 STRING,
cf1_col2 INT
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES (
"hbase.columns.mapping" = ":key,cf1:col1,cf1:col2"
)
TBLPROPERTIES ("hbase.table.name" = "hbase_table");
-- 寫入數據 (需開啟動態分區)
SET hive.exec.dynamic.partition=true;
SET hive.exec.dynamic.partition.mode=nonstrict;
INSERT INTO TABLE hive_hbase_table SELECT ... FROM source_table;
將上述 JAR 放入 `$HIVE_HOME/lib` 或配置 `hive.aux.jars.path`。
「Path from empty string」本質是 **Hive/HBase/Hadoop 版本不兼容導致 MR 作業配置序列化/反序列化失敗**。根治之道是**統一使用經測試的兼容版本組合(或發布版)**,輔以完整的 `hive.aux.jars.path` 和 `hbase-site.xml` 配置。自建版本組合維護成本極高,非核心研發團隊強烈不建議。