【问题标题】:Apache Phoenix 4.7 csvBulkLoad.run() throws ClassNotFoundExceptionApache Phoenix 4.7 csvBulkLoad.run() 抛出 ClassNotFoundException
【发布时间】:2018-01-23 06:19:00
【问题描述】:

我们正在运行一个 spark 流作业来从 Kafka 读取数据,转换为 csv,然后写入 Hbase。我正在使用 API CSVBulkLoad 来运行批量加载作业。 spark 作业开始正常并转换为 CSV,但 csvBulkLoad.run() 开始新的 MR 作业但因此异常而失败

Error: java.lang.ClassNotFoundException: org.apache.commons.csv.CSVFormat
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.apache.phoenix.mapreduce.CsvToKeyValueMapper$CsvLineParser.<init>(CsvToKeyValueMapper.java:96)
    at org.apache.phoenix.mapreduce.CsvToKeyValueMapper.setup(CsvToKeyValueMapper.java:69)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:143)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:787)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:170)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:422)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1865)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:164)

这是我的 spark 作业命令

spark-submit --jars $(echo lib/*.jar | tr ' ' ',') --class "com.lam.app.Driver" --name "MyBulkLoader" --master yarn --deploy-mode cluster --driver-class-path $(echo lib/*.jar | tr ' ' ',') --driver-memory 4g --executor-memory 1g --num-executors 2 --executor-cores 2 --files conf.properties PipeLine-1.0.jar

之前我曾经收到另一个关于缺少类的错误 (java.lang.NoClassDefFoundError: com/yammer/metrics/core/MetricsRegistry) 但在包含“--driver-class-”后它得到了解决路径 $(echo lib/*.jar | tr ' ' ',') "。现在我们收到关于缺少 CSVFormat 类的错误。

我的 lib 目录包含所有需要的 jar 文件,包括 commons-csv jar,但我仍然收到此错误。我使用 maven 来构建项目。 下面是运行 csvbulkload 的代码 sn-p

CsvBulkLoadTool csvBulkLoadTool = new CsvBulkLoadTool();
final org.apache.hadoop.conf.Configuration conf = HBaseConfiguration.create();
System.out.println("ZKQuorum " + this.ZKQUORUM);
conf.set(HConstants.ZOOKEEPER_QUORUM, this.ZKQUORUM);
conf.set("hbase.zookeeper.property.clientPort", String.valueOf(2181));
conf.set("zookeeper.znode.parent", "/hbase-unsecure");

csvBulkLoadTool.setConf(conf);
int exitCode = csvBulkLoadTool.run(new String[] { "--input", "\"" + this.hdfsInputFile + "\"",
    "--table", this.TABLENAME, "--zookeeper", this.ZKQUORUM + ":2181:/hbase-unsecure" });
System.out.println("Return code of WDL bulk load execution " + exitCode);   

我的 exitCode 总是 -1。如果我的课程路径中缺少某些内容,请告诉我

【问题讨论】:

    标签: hadoop apache-spark apache-kafka spark-streaming phoenix


    【解决方案1】:

    我终于解决了这个问题。我错过了添加 phoenix 客户端 jar,之后问题得到了解决。希望这个提示可以帮助遇到类似问题的人

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-30
      • 1970-01-01
      • 2015-08-18
      • 2016-07-15
      • 2013-05-27
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多