python - 用于将配置单元表加载到 Apache solr 的 Shell 脚本失败
问题描述
我正在编写一个 shell 脚本来将配置单元表中的数据加载到 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};"
但它显示了一个运行时异常:
失败:RuntimeException org.apache.hadoop.hive.ql.metadata.HiveException:加载存储 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
第一个命令禁用通配,因此*
不会被解释,而第三个命令恢复它。
您可以在脚本中使用类似的技术来确保*
不会被不当解释。
推荐阅读
- powerbi - 从 power bi 建模选项卡中删除/过滤数据
- javascript - 将大型 JSON/JS 对象从内容脚本压缩到 background.js - chrome 扩展
- java - Spring Boot 2 使用多个数据源禁用 Autocommit Hikari
- javascript - 如何在一个简单的网页上检查 H2 标签与未来 1 周的日期
- mysql - 如何将字符串中的月份名称转换为短月份
- android - 在处理单选按钮时如何在android中使用if else阶梯
- java - 动态更改初始屏幕的背景颜色
- nginx - Nginx Plus API 后端服务器排空模式
- excel - 删除数组中每个工作簿的用户窗体和模块
- php - PHP联系表单错误发送电子邮件