Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Scala(Shark shell)访问Shark表(配置单元)_Scala_Hive_Apache Spark_Shark Sql - Fatal编程技术网

从Scala(Shark shell)访问Shark表(配置单元)

从Scala(Shark shell)访问Shark表(配置单元),scala,hive,apache-spark,shark-sql,Scala,Hive,Apache Spark,Shark Sql,我有shark-0.8.0,它在hive-0.9.0上运行。我可以通过调用shark在Hive上编程。我创建了几个表,并用数据加载它们 现在,我尝试使用Scala访问这些表中的数据。我使用sharkshell调用了Scalashell。但是当我尝试选择时,我得到一个错误,即表不存在 scala> val artists = sc.sql2rdd("select artist from default.lastfm") Hive history file=/tmp/hduser2/hive

我有
shark-0.8.0
,它在
hive-0.9.0
上运行。我可以通过调用
shark
在Hive上编程。我创建了几个表,并用数据加载它们

现在,我尝试使用
Scala
访问这些表中的数据。我使用
sharkshell
调用了
Scala
shell。但是当我尝试选择时,我得到一个错误,即表不存在

scala> val artists = sc.sql2rdd("select artist from default.lastfm")

Hive history file=/tmp/hduser2/hive_job_log_hduser2_201405091617_1513149542.txt
151.738: [GC 317312K->83626K(1005568K), 0.0975990 secs]
151.836: [Full GC 83626K->76005K(1005568K), 0.4523880 secs]
152.313: [GC 80536K->76140K(1005568K), 0.0030990 secs]
152.316: [Full GC 76140K->62214K(1005568K), 0.1716240 secs]
FAILED: Error in semantic analysis: Line 1:19 Table not found 'lastfm'
shark.api.QueryExecutionException: FAILED: Error in semantic analysis: Line 1:19 Table not found 'lastfm'
    at shark.SharkDriver.tableRdd(SharkDriver.scala:149)
    at shark.SharkContext.sql2rdd(SharkContext.scala:100)
    at <init>(<console>:17)
    at <init>(<console>:22)
    at <init>(<console>:24)
    at <init>(<console>:26)
    at <init>(<console>:28)
    at <init>(<console>:30)
    at <init>(<console>:32)
    at .<init>(<console>:36)
    at .<clinit>(<console>)
    at .<init>(<console>:11)
    at .<clinit>(<console>)
    at $export(<console>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.spark.repl.SparkIMain$ReadEvalPrint.call(SparkIMain.scala:629)
    at org.apache.spark.repl.SparkIMain$Request$$anonfun$10.apply(SparkIMain.scala:890)
    at scala.tools.nsc.interpreter.Line$$anonfun$1.apply$mcV$sp(Line.scala:43)
    at scala.tools.nsc.io.package$$anon$2.run(package.scala:25)
    at java.lang.Thread.run(Thread.java:744)
scala>val artists=sc.sql2rdd(“从default.lastfm中选择艺术家”)
配置单元历史记录文件=/tmp/hduser2/Hive_作业_日志_hduser2_201405091617_1513149542.txt
151.738:[GC 317312K->83626K(1005568K),0.0975990秒]
151.836:[完整GC 83626K->76005K(1005568K),0.4523880秒]
152.313:[GC 80536K->76140K(1005568K),0.0030990秒]
152.316:[完整GC 76140K->62214K(1005568K),0.1716240秒]
失败:语义分析错误:未找到第1:19行表格“lastfm”
shark.api.QueryExecutionException:失败:语义分析中出错:未找到第1:19行表格“lastfm”
shark.SharkDriver.tableRdd(SharkDriver.scala:149)
位于shark.SharkContext.sql2rdd(SharkContext.scala:100)
时(17分)
时(22分)
在(:24)
时(26分)
在(:28)
在(:30)
在(:32)
在。(:36)
在
在。(:11)
在
美元出口()
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:606)
在org.apache.spark.repl.SparkIMain$ReadEvalPrint.call(SparkIMain.scala:629)
在org.apache.spark.repl.SparkIMain$Request$$anonfun$10.apply上(SparkIMain.scala:890)
在scala.tools.nsc.explorer.Line$$anonfun$1.apply$mcV$sp(Line.scala:43)
在scala.tools.nsc.io.package$$anon$2.run上运行(package.scala:25)
运行(Thread.java:744)

从文档()中,这些步骤足以启动并运行
Shark
,并使用
Scala
选择数据。还是我遗漏了什么?是否需要修改一些配置文件以允许从
Shark shell
访问Shark?

您是否更新了Shark配置单元目录配置以正确反映配置单元metastore jdbc连接信息

您需要将hive-default.xml复制到hive-site.xml。然后确保设置了元存储属性

以下是hive-site.xml中的基本信息

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://myhost/metastore</value>
  <description>the URL of the MySQL database</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.jdbc.Driver</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>hive</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>mypassword</value>
</property>

javax.jdo.option.ConnectionURL
jdbc:mysql://myhost/metastore
MySQL数据库的URL
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
javax.jdo.option.ConnectionUserName
蜂箱
javax.jdo.option.ConnectionPassword
我的密码

您可以在此处获得更多详细信息:

谢谢您的回复。如果可能的话,你能给我指出正确的文件吗?在shark配置单元路径conf目录中,有一个hive-env.sh和hive-default.xml文件。我应该修改哪一个?我更新了我的答案。您需要将hive-default.xml复制到hive-site.xml并添加metastore连接参数。感谢您添加详细信息。现在,我正在使用Derby元存储(这是默认的)。这是个问题吗?我隐约记得在某个地方读到,Derby metastore一次只支持一个用户。您认为我需要将metastore更改为MySQL以使shark shell正常工作吗?另外,我发现我的配置单元配置目录中没有配置单元站点xml文件,我将模板重命名为hive-site.xml。不幸的是,从那时起,通过shark的配置单元命令也停止了工作,出现以下错误:
无法启动数据库“metastore\u db”
。另外,我想知道如果我从Derby metastore更改为MySQL one,是否会丢失任何元数据并损坏我的表?您可能会希望更改为MySQL或一些持久数据库。H2是另一种可能性。您将丢失现有表-必须重新创建它们。如果你坚持德比,我不确定这将如何向前发展,我不能帮助进一步。