python - 用于将 hive 表加载到 Apache solr 的 Shell 脚本失败

标签 python solr hive sh

我正在编写一个 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/

相关文章:

python - 使用递归的生成器对象

python - mongodb根据python函数更新所有键的值

solr - 使用词干提取时如何基于 rawquerystring 提升 solr 结果

apache-spark - 是否可以通过spark 2.4使用Hadoop 3.x和Hive 3.x?

python 为什么首选setter?

python - 有没有办法使用 HuggingFace TrainerAPI 在同一个图表上绘制训练和验证损失?

java - Solr 使用自定义过滤器找不到 BaseTokenFilterFactory

java - 如何从solr多个 "AND"过滤查询排除特定 "Tag"

sql-server - 将多个客户端数据加载到 Hadoop 的最佳实践

amazon-web-services - Amazon Hive 中的多分隔符 SerDe 设置