【发布时间】:2014-01-24 10:10:28
【问题描述】:
我是 NoSQL 解决方案的新手,想使用 Hive。但是安装 HDFS/Hadoop 需要大量的资源和时间(也许没有经验,但我没有时间这样做)。
有没有办法在没有 HDFS/Hadoop 的本地机器上安装和使用 Hive?
【问题讨论】:
-
你是说HDFS? Hadoop 是一个生态系统,Hive 是 Hadoop 的一部分。
我是 NoSQL 解决方案的新手,想使用 Hive。但是安装 HDFS/Hadoop 需要大量的资源和时间(也许没有经验,但我没有时间这样做)。
有没有办法在没有 HDFS/Hadoop 的本地机器上安装和使用 Hive?
【问题讨论】:
是的,你可以在没有 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 on Spark,不再需要hdfs 支持。
Hive 需要 hdfs 和 map/reduce,因此您将需要它们。另一个答案在推荐一种简单/预先配置的方式为您获取所有组件的意义上有一些优点。
但它的要点是:hive 需要 hadoop 和 m/r,所以在某种程度上你需要处理它。
【讨论】:
你不能,只需下载 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_HOME 后,hive 可以在没有 HDFS 的情况下启动,因为它仅在查询 S3 上的数据时才需要元存储
如果您只是在做决定之前谈论体验 Hive,您可以按照 @Maltram 的建议使用预配置的 VM(Hortonworks、Cloudera、IBM 和其他公司都提供此类 VM)
您应该记住,如果没有 Hadoop 和 HDFS,您将无法在生产中使用 Hive,因此如果您遇到问题,您应该考虑 Hive 的替代品
【讨论】:
尽管您必须牢记一些细节,但在没有 HDFS 的情况下使用 Hive 是完全正常的。有一些细节需要牢记。
schematool初始化您的数据库
您可以使用 site.xml 文件指向本地 POSIX 文件系统,但您也可以在 HIVE_OPTS environmen 变量中设置这些选项。
我用我在blog post 上看到的错误示例进行了介绍
【讨论】:
最佳答案对我有用。但需要更多的设置。我花了相当长的时间搜索解决多个问题,直到我最终设置它。这里我从头总结一下步骤:
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>
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,则需要重新创建它。
【讨论】:
$HIVE_HOME/scripts/metastore/upgrade/