我正在编写一个 shell 脚本来将 hive 表中的数据加载到 Apache solr 模式中。
SRC=$1
TGT=$2
SOLR_COLLECTION=$3
SCHEMA=$(python schemaFetch.py ${SRC})
hive -e "ADD JAR /hadoopfs/fs1/dev/solr-hive-serde-3.0.0.jar;
create external table if not exists ${TGT}${SCHEMA}
row format delimited
fields terminated by ','
STORED BY 'com.lucidworks.hadoop.hive.LWStorageHandler'
TBLPROPERTIES('solr.server.url' = 'http://10.165.137.139:8886/solr/',
'solr.collection' = '${SOLR_COLLECTION}',
'solr.query' = '*:*');"
hive -e "insert into ${TGT} select * from ${SRC};"
但它显示了一个运行时异常:FAILED: RuntimeException org.apache.hadoop.hive.ql.metadata.HiveException: Error in loading storage handler.com.lucidworks.hadoop.hive.LWStorageHandler
然而,架构也在特定的配置单元位置创建,下面列出的插入查询无法从脚本中工作。
hive -e "insert into ${TGT} select * from ${SRC};
我不明白发生了什么。
最佳答案
命令 hive -e "insert into ${TGT} select * from ${SRC};
缺少 "
.
假设它应该是 hive -e "insert into ${TGT} select * from ${SRC};"
,您可能会遇到 shell globbing 的问题:*
正在被您运行命令的文件夹的内容替换。
考虑将命令作为 hive -e "insert into ${TGT} select * from ${SRC};"
运行或者这样做(使用 bash
语法):
set -o noglob
hive -e "insert into ${TGT} select * from ${SRC};"
set +o noglob
第一个命令禁用通配,以便 *
不被解释,而第三个恢复它。您可以在脚本中使用类似的技术来确保
*
不会被不恰本地解释。
关于python - 用于将 hive 表加载到 Apache solr 的 Shell 脚本失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53957364/