Mysql 在hadoop上使用sqoop导入命令时出错

Mysql 在hadoop上使用sqoop导入命令时出错,mysql,hadoop,sqoop,Mysql,Hadoop,Sqoop,您好,我正在使用下面的sqoop命令,我认为应该可以工作 [cloudera@quickstart ~]$ sqoop import --connect jdbc:mysql://quickstart.cloudera:3306/retail_db --username root --password cloudera --query "select * from customers where customer_street like '%Plaza%' AND $CONDITIONS" --

您好,我正在使用下面的sqoop命令,我认为应该可以工作

[cloudera@quickstart ~]$ sqoop import --connect jdbc:mysql://quickstart.cloudera:3306/retail_db --username root --password cloudera --query "select * from customers where customer_street like '%Plaza%' AND $CONDITIONS" --target-dir /user/cloudera/problem1/customers/textdata --fields-terminated-by '*' --lines-terminated-by '|' --as-textfile --columns "customer_id,customer_fname,customer_lname,customer_street" --split-by "customer_id"
但我得到了以下与$conditions相关的错误,我认为这些错误得到了正确的实现。。请帮忙。。谢谢

警告:/usr/lib/sqoop/。/accumulo不存在!Accumulo进口 将失败。请将$ACCUMULO_设置为ACCUMULO的根 安装。2017年11月19日10:12:10信息sqoop.sqoop:运行sqoop 版本:1.4.6-cdh5.13.0 19/11/17 10:12:10警告工具。BaseSqoopTool: 在命令行上设置密码是不安全的。考虑使用 -P取而代之。2017年11月19日10:12:10 INFO manager.MySQLManager:准备使用MySQL流媒体结果集。2017年11月19日10:12:10信息 tool.CodeGenTool:开始代码生成19/11/17 10:12:10错误 tool.ImportTool:导入失败:java.io.IOException:查询[选择]* 来自客户,如“%Plaza%”和]必须包含 WHERE子句中的“$CONDITIONS”。在 org.apache.sqoop.manager.ConnManager.getColumnTypes(ConnManager.java:332) 在 org.apache.sqoop.orm.ClassWriter.getColumnTypes(ClassWriter.java:1858) 位于org.apache.sqoop.orm.ClassWriter.generate(ClassWriter.java:1657) 在 org.apache.sqoop.tool.CodeGenTool.generateORM(CodeGenTool.java:106) 位于org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:494) 位于org.apache.sqoop.tool.ImportTool.run(ImportTool.java:621) org.apache.sqoop.sqoop.run(sqoop.java:147)位于 org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)位于 org.apache.sqoop.sqoop.runSqoop(sqoop.java:183)位于 org.apache.sqoop.sqoop.runTool(sqoop.java:234)位于 org.apache.sqoop.sqoop.runTool(sqoop.java:243)位于 org.apache.sqoop.sqoop.main(sqoop.java:252)


嗨,下面的方法应该有效

 sqoop import --connect jdbc:mysql://quickstart.cloudera:3306/retail_db --username root --password cloudera --query "select * from customers where \$CONDITIONS AND customer_street like '%Plaza%'" --target-dir /user/cloudera/problem1/customers/textdata --fields-terminated-by '*' --lines-terminated-by '|' --as-textfile --columns "customer_id,customer_fname,customer_lname,customer_street" --split-by "customer_id"
请参阅中的“7.2.3.自由形式查询导入”

Sqoop——自由形式selectquery中的query选项需要$CONDITIONS,并且在Sqoop用户指南注释中很少需要注意

  • 根据--query选项中用于查询的报价,我们需要使用$CONDITIONS或\$CONDITIONS,如下所示。由于使用了双引号,因此必须使用\$条件以避免替换
  • 示例:

    使用单个映射器时,整个选定数据将由一个映射器按顺序传输

     --query 'SELECT * FROM a WHERE $CONDITIONS' -m 1 
    
    如果使用双引号,则需要添加\以避免替换

     --query "SELECT * FROM a WHERE \$CONDITIONS" -m 1 
    
    使用多个映射程序时,在基于--split by子句进行拆分并替换$CONDITIONS后,所有映射程序将并行传输选定的数据

     --query 'SELECT * FROM a WHERE $CONDITIONS' -m 3 --split-by a.column 
    
  • 您可以使用--query参数指定SQL语句,而不是使用--table、--columns和--where参数。因此,应该从命令中删除--columns,并且应该使用-m或--num mappers传递映射器的数量

  • 这回答了你的问题吗?