【问题标题】:AWS EMR 5.11.0 - Apache Hive on SparkAWS EMR 5.11.0 - Spark 上的 Apache Hive
【发布时间】:2018-07-07 14:26:02
【问题描述】:

我正在尝试在 AWS EMR 5.11.0 上的 Spark 上设置 Apache Hive。 Apache Spark 版本 - 2.2.1 Apache Hive 版本 - 2.3.2 纱线日志显示以下错误:

18/01/28 21:55:28 错误 ApplicationMaster:用户类抛出异常:java.lang.NoSuchFieldError:SPARK_RPC_SERVER_ADDRESS java.lang.NoSuchFieldError: SPARK_RPC_SERVER_ADDRESS 在 org.apache.hive.spark.client.rpc.RpcConfiguration.(RpcConfiguration.java:47) 在 org.apache.hive.spark.client.RemoteDriver.(RemoteDriver.java:134) 在 org.apache.hive.spark.client.RemoteDriver.main(RemoteDriver.java:516) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:635)

hive-server2.log: 2018-01-28T21:56:50,109 错误 [HiveServer2-Background-Pool: Thread-68([])]: client.SparkClientImpl (SparkClientImpl.java:(112)) - 等待客户端连接超时。 可能的原因包括网络问题、远程驱动程序错误或集群没有可用资源等。 请查看 YARN 或 Spark 驱动程序的日志以获取更多信息。 java.util.concurrent.ExecutionException: java.util.concurrent.TimeoutException: 等待客户端连接超时。 在 io.netty.util.concurrent.AbstractFuture.get(AbstractFuture.java:41) ~[netty-all-4.0.52.Final.jar:4.0.52.Final] 在 org.apache.hive.spark.client.SparkClientImpl.(SparkClientImpl.java:109) ~[hive-exec-2.3.2-amzn-0.jar:2.3.2-amzn-0] 在 org.apache.hive.spark.client.SparkClientFactory.createClient(SparkClientFactory.java:80) ~[hive-exec-2.3.2-amzn-0.jar:2.3.2-amzn-0] 在 org.apache.hadoop.hive.ql.exec.spark.RemoteHiveSparkClient.createRemoteClient(RemoteHiveSparkClient.java:101) ~[hive-exec-2.3.2-amzn-0.jar:2.3.2-amzn-0] 在 org.apache.hadoop.hive.ql.exec.spark.RemoteHiveSparkClient.(RemoteHiveSparkClient.java:97) ~[hive-exec-2.3.2-amzn-0.jar:2.3.2-amzn-0] 在 org.apache.hadoop.hive.ql.exec.spark.HiveSparkClientFactory.createHiveSparkClient(HiveSparkClientFactory.java:73) ~[hive-exec-2.3.2-amzn-0.jar:2.3.2-amzn-0] 在 org.apache.hadoop.hive.ql.exec.spark.session.SparkSessionImpl.open(SparkSessionImpl.java:62) ~[hive-exec-2.3.2-amzn-0.jar:2.3.2-amzn-0 ] 在 org.apache.hadoop.hive.ql.exec.spark.session.SparkSessionManagerImpl.getSession(SparkSessionManagerImpl.java:115) ~[hive-exec-2.3.2-amzn-0.jar:2.3.2-amzn-0 ] 在 org.apache.hadoop.hive.ql.exec.spark.SparkUtilities.getSparkSession(SparkUtilities.java:126) ~[hive-exec-2.3.2-amzn-0.jar:2.3.2-amzn-0]

另外, 2018-01-28T21:56:50,110 错误 [HiveServer2-Background-Pool: Thread-68([])]: spark.SparkTask (SessionState.java:printError(1126)) - 无法执行 spark 任务,出现异常 'org .apache.hadoop.hive.ql.metadata.HiveException(未能创建火花客户端。)' org.apache.hadoop.hive.ql.metadata.HiveException:未能创建火花客户端。 在 org.apache.hadoop.hive.ql.exec.spark.session.SparkSessionImpl.open(SparkSessionImpl.java:64) 在 org.apache.hadoop.hive.ql.exec.spark.session.SparkSessionManagerImpl.getSession(SparkSessionManagerImpl.java:115) 在 org.apache.hadoop.hive.ql.exec.spark.SparkUtilities.getSparkSession(SparkUtilities.java:126) 在 org.apache.hadoop.hive.ql.exec.spark.SparkTask.execute(SparkTask.java:103) 在 org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:199) 在 org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:100) 在 org.apache.hadoop.hive.ql.Driver.launchTask(Driver.java:2183) 在 org.apache.hadoop.hive.ql.Driver.execute(Driver.java:1839) 在 org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1526) 在 org.apache.hadoop.hive.ql.Driver.run(Driver.java:1237) 在 org.apache.hadoop.hive.ql.Driver.run(Driver.java:1232) 在 org.apache.hive.service.cli.operation.SQLOperation.runQuery(SQLOperation.java:255) 在 org.apache.hive.service.cli.operation.SQLOperation.access$800(SQLOperation.java:91) 在 org.apache.hive.service.cli.operation.SQLOperation$BackgroundWork$1.run(SQLOperation.java:348) 在 java.security.AccessController.doPrivileged(本机方法) 在 javax.security.auth.Subject.doAs(Subject.java:422) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698) 在 org.apache.hive.service.cli.operation.SQLOperation$BackgroundWork.run(SQLOperation.java:362) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 java.lang.Thread.run(Thread.java:748) 原因:java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.util.concurrent.TimeoutException: 等待客户端连接超时。

谁能指出我在配置中可能遗漏了什么?

【问题讨论】:

    标签: apache-spark hive amazon-emr


    【解决方案1】:

    抱歉,EMR 上尚不支持 Hive on Spark。我自己还没有尝试过,但我认为您的错误的可能原因可能是 EMR 支持的 Spark 版本与 Hive 所依赖的 Spark 版本不匹配。上次我检查时,在 Spark 上运行 Hive 时,Hive 不支持 Spark 2.x。鉴于您的第一个错误是 NoSuchFieldError,似乎版本不匹配是最可能的原因。超时错误可能是一个红鲱鱼。

    【讨论】:

    • Hive wiki 实际上说从 Hive 2.2.0 开始,Hive on Spark 运行 Spark 2.0.0 及更高版本。 cwiki.apache.org/confluence/display/Hive/….
    • 哦,好的,谢谢你告诉我!我应该在我说之前确认一下,但我只是通过手机回复。
    • Hive 2.3.2 的 pom.xml 指定 spark 版本 2.0.0 而不是 2.2.1。可能存在兼容性问题。我将对此进行深入研究。
    【解决方案2】:

    EMR Spark 支持 Hive 1.2.1 版本,而不是 Hive 2.x 版本。您能否检查一下 /usr/lib/spark/jars/ 目录中可用的配置单元 jar 版本。 SPARK_RPC_SERVER_ADDRESS 在 hive 版本 2.x 中添加。

    【讨论】:

    • 是的,hive jar 的版本是 1.2.1。感谢您指出。那么有什么解决方法吗?
    • 请不要在你的胖罐子里捆绑火花,蜂巢相关的罐子。要提供的罐子的范围。
    【解决方案3】:

    sbt 或 pom.xml 如下。

    "org.apache.spark" %% "spark-streaming" % sparkVersion % "提供",

    "org.apache.spark" %% "spark-sql" % sparkVersion % "提供",

    "org.apache.spark" %% "spark-hive" % sparkVersion % "提供",

    我在 EMR 上运行 DataWarehouse (Hive),Spark 应用程序将数据存储到 DWH 中。

    【讨论】:

    • emr主节点上的sbt或pom.xml在哪里?
    【解决方案4】:

    我可以像这样在 spark 上运行 hive:

    HIVE_AUX_JARS_PATH=$(find /usr/lib/spark/jars/ -name '*.jar' -and -not -name '*slf4j-log4j12*' -printf '%p:' | head -c-1) hive
    

    然后,在其他 SQL 查询问题之前:

    SET hive.execution.engine = spark;
    

    使这种持久性

    添加行

    export HIVE_AUX_JARS_PATH=$(find /usr/lib/spark/jars/ -name '*.jar' -and -not -name '*slf4j-log4j12*' -printf '%p:' | head -c-1)
    

    转入/home/hadoop/.bashrc

    在文件/etc/hive/conf/hive-site.xml 中设置:

    <property>
      <name>hive.execution.engine</name>
      <value>spark</value>
    </property>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-14
      • 2015-10-06
      • 2016-01-18
      • 2018-04-26
      • 1970-01-01
      • 1970-01-01
      • 2020-01-08
      • 2016-06-07
      相关资源
      最近更新 更多