小编Hey*_*ang的帖子

sparksql 删除配置单元表

我想通过 sparksql 删除一个配置单元表。

在安装了 hadoop 2.6、hive 2.0、spark 1.6 和 spark 2.0 的集群中。我在两个版本的 pyspark shell 和 spark-submit 作业中尝试了以下代码。

sqlContext.sql('drop table test')  //spark 1.6
spark.sql('drop table test')       //spark 2.0
Run Code Online (Sandbox Code Playgroud)

两个代码在 pyspark-shell 中都可以正常工作,我可以从 hive cli 中看到测试表不再存在。

但是,如果代码在 python 文件中,然后使用 spark-submit 提交到集群,则代码永远不会生效。

spark 2.0 甚至给出了错误

pyspark.sql.utils.AnalysisException: u"Table to drop '`try`' does not exist;"
Run Code Online (Sandbox Code Playgroud)

我已将hive-site.xml复制到 spark 中的 conf 目录中。

通过 sparksql 删除配置单元表的正确方法是什么?

更新:

我尝试比较了 spark-shell 和我使用以下代码提交的作业之间的 spark 环境

spark-submit --master yarn --deploy-mode cluster try_spark_sql.py
Run Code Online (Sandbox Code Playgroud)

在spark-shell环境下,可以看到spark.sql.catalogImplementation 设置为hive

在使用上述代码提交的作业中。环境不包含spark.sql.catalogImplementation 我尝试使用以下代码设置它: …

apache-spark apache-spark-sql pyspark-sql

7
推荐指数
3
解决办法
3万
查看次数

从orc文件创建配置单元表而不指定模式

我有工作在hadoop集群之间传输hive表.我所做的是从源hadoop集群下载orc文件,然后使用以下命令将orc文件上载到目标hdfs集群.

hadoop fs -get 
hadoop fs -put
Run Code Online (Sandbox Code Playgroud)

目标hadoop clustr中的orc文件可以通过以下方式在spark应用程序中读取:

df = sqlContext.sql('select * from orc.`path_to_where_orc_file_is`') 
Run Code Online (Sandbox Code Playgroud)

但是,目标hadoop集群中的配置单元中没有相应的表.

有没有办法在hdfs中从orc文件创建表而不指定ddl或schema?由于orc文件本身包含架构信息.

我问这个问题的原因是因为原始hive表的模式是完全嵌套的并且有很多字段.

目前我能想到的唯一解决方案是在spark中读取那些orc文件,并使用saveAsTable选项将它们写出来,如下所示:

dfTable.write.format("orc").mode(SaveMode.Overwrite).saveAsTable("db1.test1")
Run Code Online (Sandbox Code Playgroud)

hive orc

5
推荐指数
1
解决办法
736
查看次数

蜂巢不允许冒充蜂巢

我有一个配置了hadoop 2.7.2和hive 2.1.0的hadoop集群.

我使用beeline使用以下命令连接到hive:

beeline
beeline> !connect jdbc:hive2://localhost:10000
Enter username for jdbc:hive2://localhost:10000:
Run Code Online (Sandbox Code Playgroud)

首先,键入任何用户名都可以成功连接到配置单元.但是,配置以下设置后,将显示错误.

//within hive-site.xml and hiveserver2-site.xml
<property>
<name>hive.server2.enable.doAs</name>
<value>true</value>
<description>
  Setting this property to true will have HiveServer2 execute
  Hive operations as the user making the calls to it.
</description>
</property>

//within core-site.xml
<property>
<name>hadoop.proxyuser.hive.hosts</name>
<value>*</value>
</property>

<property>
  <name>hadoop.proxyuser.hive.groups</name>
  <value>*</value>
</property>
Run Code Online (Sandbox Code Playgroud)

我已重新启动hadoop群集,但仍会显示以下消息:

Error: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: hive is not allowed to impersonate hive (state=,code=0)
Run Code Online (Sandbox Code Playgroud)

hiveserver2的调试输出如下:

    16/11/15 11:28:46 [IPC Client (241742811) connection to /10.104.90.40:8020 from …
Run Code Online (Sandbox Code Playgroud)

hadoop hive beeline

3
推荐指数
2
解决办法
7376
查看次数