【问题标题】:How to use Hive without hadoop如何在没有 hadoop 的情况下使用 Hive
【发布时间】:2014-01-24 10:10:28
【问题描述】:

我是 NoSQL 解决方案的新手,想使用 Hive。但是安装 HDFS/Hadoop 需要大量的资源和时间(也许没有经验,但我没有时间这样做)。

有没有办法在没有 HDFS/Hadoop 的本地机器上安装和使用 Hive?

【问题讨论】:

  • 你是说HDFS? Hadoop 是一个生态系统,Hive 是 Hadoop 的一部分。

标签: hadoop hive hdfs


【解决方案1】:

是的,你可以在没有 hadoop 的情况下运行 hive 1.在本地系统上创建仓库 2. 将默认 fs 设为 file:/// 比你可以在本地模式下运行 hive 而无需安装 hadoop

在 Hive-site.xml 中

<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
<configuration>
      <property>
         <name>hive.metastore.schema.verification</name> 
         <value>false</value> 
      </property> 
     <property> 
      <!-- this should eventually be deprecated since the metastore should supply this --> 
        <name>hive.metastore.warehouse.dir</name> 
        <value>file:///tmp</value>
        <description></description> 
     </property>
     <property> 
        <name>fs.default.name</name> 
        <value>file:///tmp</value> 
     </property> 
</configuration>

【讨论】:

  • 把这些配置放在你的 hive-site.xml hive.metastore.schema.verificationfalse
【解决方案2】:

更新 此答案已过时:使用Hive on Spark,不再需要hdfs 支持。


Hive 需要 hdfs 和 map/reduce,因此您将需要它们。另一个答案在推荐一种简单/预先配置的方式为您获取所有组件的意义上有一些优点。

但它的要点是:hive 需要 hadoop 和 m/r,所以在某种程度上你需要处理它。

【讨论】:

  • 错了,Hive可以在没有HDFS和map/reduce的情况下运行,有一种模式叫做“local”;此外,Hive 可以针对 Tez 引擎而不是 map/reduce 运行。
  • @ThomasDecaux 检查你的日期:这是在 2014 年 1 月写的。现在不再是了这个限制。这会使您的陈述在没有澄清的情况下具有误导性。
  • 是的,你是对的,这样的答案总是很难
  • Hive 需要 hadoop 库,使用 hive 执行查询需要 hadoop 和 map reduce。但是......如果我只想使用 hive 元存储,我可以安装 hadoop 而不实际运行它吗?我期待在 hive 3 中使用“独立”元存储,但不幸的是,它还不能很好地与 Presto 配合使用。
【解决方案3】:

你不能,只需下载 Hive,然后运行:

./bin/hiveserver2                                                                                                                                        
Cannot find hadoop installation: $HADOOP_HOME or $HADOOP_PREFIX must be set or hadoop must be in the path

Hadoop 就像一个核心,Hive 需要从中获取一些库。

【讨论】:

  • 对,我得到了完全相同的东西。但是,在下载/提取 hadoop 核心并设置 $HADOOP_HOME 后,hive 可以在没有 HDFS 的情况下启动,因为它仅在查询 S3 上的数据时才需要元存储
  • 是的,你是对的,但对我来说 Hadoop != HDFS,HDFS 更像是一个组件,比如 YARN / Tez 等...
【解决方案4】:

如果您只是在做决定之前谈论体验 Hive,您可以按照 @Maltram 的建议使用预配置的 VM(Hortonworks、Cloudera、IBM 和其他公司都提供此类 VM)

您应该记住,如果没有 Hadoop 和 HDFS,您将无法在生产中使用 Hive,因此如果您遇到问题,您应该考虑 Hive 的替代品

【讨论】:

    【解决方案5】:

    尽管您必须牢记一些细节,但在没有 HDFS 的情况下使用 Hive 是完全正常的。有一些细节需要牢记。

    1. 正如上面提到的一些评论者,您仍然需要来自hadoop common 的一些 .jar 文件。
    2. 截至今天(XII 2020),很难运行 Hive/hadoop3 对。将稳定的 hadoop2 与 Hive2 结合使用。
    3. 确保正确设置了 POSIX 权限,以便您的本地配置单元可以访问仓库并最终访问 derby 数据库位置。
    4. 通过手动调用schematool初始化您的数据库

    您可以使用 site.xml 文件指向本地 POSIX 文件系统,但您也可以在 HIVE_OPTS environmen 变量中设置这些选项。 我用我在blog post 上看到的错误示例进行了介绍

    【讨论】:

      【解决方案6】:

      最佳答案对我有用。但需要更多的设置。我花了相当长的时间搜索解决多个问题,直到我最终设置它。这里我从头总结一下步骤:

      • 下载hive,解压
      • 下载hadoop,解压,和hive放在同一个父文件夹中
      • 设置hive-env.sh
        $ cd hive/conf
        $ cp hive-env.sh.template hive-env.sh
        
        hive-env.sh 中添加以下环境(相应地更改路径 在实际的 java/hadoop 版本上)
        JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home
        export path=$JAVA_HOME/bin:$path
        export HADOOP_HOME=${bin}/../../hadoop-3.3.1
        
      • 设置hive-site.xml
        $ cd hive/conf
        $ cp hive-default.xml.template hive-site.xml
        
        用常量路径替换所有变量${system:***}(不知道为什么我的系统无法识别)。 使用以下属性将数据库路径设置为本地(从最佳答案复制)
        <configuration>
            <property>
               <name>hive.metastore.schema.verification</name> 
               <value>false</value> 
            </property> 
           <property> 
            <!-- this should eventually be deprecated since the metastore should supply this --> 
              <name>hive.metastore.warehouse.dir</name> 
              <value>file:///tmp</value>
              <description></description> 
           </property>
           <property> 
              <name>fs.default.name</name> 
              <value>file:///tmp</value> 
           </property> 
          </configuration>
        
      • setup hive-log4j2.properties(可选,有利于故障排除)
        cp hive-log4j2.properties.template hive-log4j2.properties
        
        将所有变量${sys:***}替换为常量路径
      • 设置metastore_db 如果直接运行hive,在做任何DDL的时候会报错:
        FAILED: HiveException org.apache.hadoop.hive.ql.metadata.HiveException:MetaException(message:Hive metastore database is not initialized. Please use schematool (e.g. ./schematool -initSchema -dbType ...) to create the schema. If needed, don't forget to include the option to auto-create the underlying database in your JDBC connection string (e.g. ? createDatabaseIfNotExist=true for mysql))
        
        在这种情况下,我们需要使用以下命令重新创建 metastore_db
        $ cd hive/bin
        $ rm -rf metastore_db
        $ ./schematool -initSchema -dbType derby
        
      • 启动配置单元
        $ cd hive/bin
        $ ./hive
        

      现在您应该可以在本地文件系统上运行 hive。需要注意的一点是,metastore_db 将始终在您的当前目录中创建。如果您在不同的目录中启动 hive,则需要重新创建它。

      【讨论】:

      • dbtype 可能是“derby”,因为这里需要存在数据库类型脚本目录,并且名称可能在您的版本中已更改:我有 3.1.2 $HIVE_HOME/scripts/metastore/upgrade/
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-17
      • 2021-10-30
      • 1970-01-01
      • 2020-07-05
      • 1970-01-01
      • 2019-11-15
      • 2013-06-30
      相关资源
      最近更新 更多