【问题标题】:What am I missing to activate ACID on HIVE in pyspark?在 pyspark 中激活 HIVE 上的 ACID 缺少什么?
【发布时间】:2019-07-26 07:01:27
【问题描述】:

我想更新配置单元表中的一些行。由于 pyspark 根本无法识别 UPDATE,因此我选择了 DELETE 和 INSERT,但在 DELETE 操作中出现“不允许操作”。

为了解决这个问题,我将表指定为 orc 并尝试了本网站上提到的其余要求:https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions#HiveTransactions-Limitations

我还设置了 tableproperty“transactional”="true"。 下面你会看到一些我如何尝试设置属性的代码

sqlCtx.sql("""SET spark.hadoop.hive.support.concurrency=true""")
sqlCtx.sql("""SET spark.hadoop.hive.enforce.bucketing=true""")
sqlCtx.sql("""SET spark.hadoop.hive.exec.dynamic.partition.mode=nonstrict""")
sqlCtx.sql("""SET spark.hadoop.hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager""")
sqlCtx.sql("""SET spark.hadoop.hive.lock.manager=org.apache.hadoop.hive.ql.lockmgr.zookeeper.ZooKeeperHiveLockManager""")
sqlCtx.sql("""SET spark.hadoop.hive.compactor.initiator.on=true""")
sqlCtx.sql("""SET spark.hadoop.hive.compactor.worker.threads=1""")

# Some other stuff happens creating the values etc
# Then I create the table from another table as orc

sqlCtx.sql("CREATE TABLE " + name + " AS SELECT * FROM new_base AS orc")
sqlCtx.sql("ALTER TABLE " + name + """ SET TBLPROPERTIES("transactional"="true")""")

# This will now result in Operation not allowed

sqlCtx.sql("DELETE FROM " + name) # I didn't keep the Where clause as it makes no difference so the error is not in the missing Where clause

我希望 DELETE 子句能做一些事情,至少由于缺少 Where 子句而引发错误,但我只得到 pyspark.sql.utils.ParseException: '\nOperation not allowed: DELETE FROM ...

如果创建表的完整代码示例更有用,请在 cmets 中写入,我将添加它,我将其保留以提高可读性。我还应该注意,这是完全在本地运行的。

【问题讨论】:

    标签: apache-spark hive pyspark acid


    【解决方案1】:

    我认为你应该在文件 hive-site.xml 中添加相应的配置单元配置

    只有当您运行单独的 hive 服务器并且您必须针对 hive 服务器触发查询时,hive 事务功能才会起作用。 spark中的hive只是嵌入的metastore(用于存储spark完成的元数据处理)。由于嵌入式 Metastore 没有配置单元服务器,它不会工作。

    要使用事务,您需要安装 hive 并在 hive-site.xml 中设置这些属性,然后使用 spark 连接到 hive 服务器 url 参考 https://github.com/Gowthamsb12/Spark/blob/master/Spark_ACID How to access the HIVE ACID table in Spark sql?

    例如对应的配置单元属性为 spark.hadoop.hive.support.concurrency=true

    <property>
      <name>hive.support.concurrency</name>
      <value>true</value>
    </property>
    

    【讨论】:

    • 使用我当前的设置,代码会自动创建一个名为 spark-warehouse 的本地文件夹,其中包含一个名为表名的文件夹,该文件夹又包含 2 个文件 1,其中一个没有 .crc。感觉就像一个真正的配置单元服务器 imo,但我现在正在尝试设置一个单独的配置单元服务器进行测试。
    • 创建配置单元服务器是否有效?如果您觉得答案有帮助,请采纳。
    • 我仍在努力解决问题。我安装了本指南中的 hadoop:exitcondition.com/install-hadoop-windows 和本指南中所述的配置单元 kontext.tech/docs/DataAndBusinessIntelligence/p/…,但我仍然无法让它工作。尝试运行链接的代码也会给我一个错误。
    猜你喜欢
    • 2018-01-25
    • 1970-01-01
    • 2019-04-30
    • 2020-05-19
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多