来自apachespark的外部配置单元中的查询表

t2a7ltrp  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(234)

这个问题在这里已经有答案了

如何在没有hive-site.xml的情况下将spark sql连接到远程hive元存储(通过thrift协议)(8个答案)
9个月前关门了。
我对hadoop生态系统还比较陌生。我的目标是使用apachespark读取配置单元表并对其进行处理。配置单元正在ec2示例中运行。而spark在我的本地机器上运行。
为了做一个原型,我已经按照这里介绍的步骤安装了apachehadoop。我还添加了必需的环境变量。我已经开始使用dfs了 $HADOOP_HOME/sbin/start-dfs.sh 我已经按照这里介绍的步骤安装了apachehive。我已经启动了hiverserver2和hive元数据存储。我已经在hive中配置了apachederby db(服务器模式)。我创建了一个示例表“weblog”,并使用beeline在其中添加了几行。
我在hadoop core-site.xml中添加了以下内容

<property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
  </property>

并添加到下面的hdfs-site.xml中

<property>
        <name>dfs.client.use.datanode.hostname</name>
        <value>true</value>
</property>

我在本地spark示例的$spark\u home/conf中添加了core-site.xml、hdfs-site.xml和hive-site.xml
core-site.xml和hdfs-site.xml为空。即

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
</configuration>

hive-site.xml包含以下内容

<configuration>
  <property>
    <name>hive.metastore.uris</name>
    <value>thrift://ec2-instance-external-dbs-name:9083</value>
    <description>URI for client to contact metastore server</description>
  </property>
</configuration>

我启动了sparkshell并执行了以下命令

scala> sqlContext
res0: org.apache.spark.sql.SQLContext = org.apache.spark.sql.hive.HiveContext@57d0c779

看来spark创造了hivecontext。我已经使用下面的命令执行了sql

scala> val df = sqlContext.sql("select * from web_log")
df: org.apache.spark.sql.DataFrame = [viewtime: int, userid: bigint, url: string, referrer: string, ip: string]

列及其类型与我创建的示例表“web\u log”匹配。现在当我执行 scala> df.show ,它花费了一些时间并抛出以下错误

16/11/21 18:46:17 WARN BlockReaderFactory: I/O error constructing remote block reader.
org.apache.hadoop.net.ConnectTimeoutException: 60000 millis timeout while waiting for channel to be ready for connect. ch : java.nio.channels.SocketChannel[connection-pending remote=/ec2-instance-private-ip:50010]
    at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:533)
    at org.apache.hadoop.hdfs.DFSClient.newConnectedPeer(DFSClient.java:3101)
    at org.apache.hadoop.hdfs.BlockReaderFactory.nextTcpPeer(BlockReaderFactory.java:755)

似乎dfsclient正在使用ec2示例内部ip。另外,我没有在50010端口启动任何应用程序。
我需要安装和启动任何其他应用程序吗?
如何确保dfsclient使用ec2示例外部ip或外部dns名称?
是否可以从外部spark示例访问配置单元?

pengsaosao

pengsaosao1#

将下面的代码段添加到您正在运行的程序中, hiveContext.getConf.getAll.mkString("\n") 这将打印其连接到的配置单元元存储。。。您可以检查所有不正确的属性。
如果他们不是你想要的,你不能调整。。。由于某些限制,请按所述链接。您可以这样尝试指向正确的URI。。。等

hiveContext.setConf("hive.metastore.uris", "thrift://METASTOREl:9083");

相关问题