java - 在 ubuntu 上安装配置单元(derby 有问题?)

标签 java linux apache-spark hive ubuntu-16.04

我已经安装了 Hadoop、Spark、R、Rstudio-server 和 SparkR,现在我正在尝试安装 Hive。

按照互联网上的教程,这是我所做的:

$ cd /home/francois-ubuntu/media/
$ mkdir install-hive
$ cd install-hive
$ wget http://mirrors.ircam.fr/pub/apache/hive/hive-2.1.0/apache-hive-2.1.0-bin.tar.gz
$ tar -xzvf apache-hive-2.1.0-bin.tar.gz
$ mkdir /usr/lib/hive
$ mv apache-hive-2.1.0-bin /usr/lib/hive
$ cd
$ rm -rf /home/francois-ubuntu/media/install-hive
$ sudo vim ~/.bashrc

.bashrc 中,我写了以下内容(我还包括了与 Java、Hadoop 和 Spark 相关的行,也许它会有所帮助):

# Set JAVA_HOME
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

# Set HADOOP_HOME
alias hadoop=/usr/local/hadoop/bin/hadoop
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin

# Set SPARK_HOME
export SPARK_HOME=/usr/local/spark

# Set HIVE_HOME
export HIVE_HOME=/usr/lib/hive/apache-hive-2.1.0-bin
PATH=$PATH:$HIVE_HOME/bin
export PATH

返回 CLI:

$ cd /usr/lib/hive/apache-hive-2.1.0-bin/bin
$ sudo vim hive-config.sh

在 hive-config.sh 中,我添加:

export HADOOP_HOME=/usr/local/hadoop

然后 :wq,回到 CLI :

$ hadoop fs -mkdir /usr/hive/warehouse
$ hadoop fs -chmod g+w /usr/hive/warehouse

然后最后:

$ hive

这是我得到的:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/lib/hive/apache-hive-2.1.0-bin/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]

Logging initialized using configuration in jar:file:/usr/lib/hive/apache-hive-2.1.0-bin/lib/hive-common-2.1.0.jar!/hive-log4j2.properties Async: true
Mon Jul 18 12:13:44 CEST 2016 Thread[main,5,main] java.io.FileNotFoundException: derby.log (Permission denied)
----------------------------------------------------------------
Mon Jul 18 12:13:45 CEST 2016:
Booting Derby (version The Apache Software Foundation - Apache Derby - 10.10.2.0 - (1582446)) instance a816c00e-0155-fd7f-479a-0000040c9aa0 
on database directory /usr/lib/hive/apache-hive-2.1.0-bin/bin/metastore_db in READ ONLY mode with class loader sun.misc.Launcher$AppClassLoader@2e5c649. 
Loaded from file:/usr/lib/hive/apache-hive-2.1.0-bin/lib/derby-10.10.2.0.jar.
java.vendor=Oracle Corporation
java.runtime.version=1.8.0_91-8u91-b14-0ubuntu4~16.04.1-b14
user.dir=/usr/lib/hive/apache-hive-2.1.0-bin/bin
os.name=Linux
os.arch=amd64
os.version=4.4.0-28-generic
derby.system.home=null
Database Class Loader started - derby.database.classpath=''

然后……什么都没有,就到此为止了。根据教程,此时我应该有配置单元提示符 (hive>),但我没有,我尝试了一些配置单元命令,它们不起作用。我也没有经典的 CLI 提示符,没有提示符,我可以输入内容但无法执行任何内容。看来我唯一能做的就是用 CTRL+C 停止它。

知道哪里出了问题吗?

谢谢。


编辑 1:

正在关注 this advice来自@Hawknight,我遵循了给出的帮助 here ,并做了以下事情:

sudo addgroup hive
sudo useradd -g hive hive
sudo adduser hive sudo
sudo mkdir /home/hive
sudo chown -R hive:hive /home/hive
sudo chown -R hive:hive /usr/lib/hive/
visudo

将此行添加到 sudoers 文件:

hive ALL=(ALL) NOPASSWD:ALL

然后,回到 CLI:

sudo su hive
hive

不过,我仍然遇到同样的问题。


编辑 2:

遵循了 here 的建议,我现在得到一个不同的错误。错误输出很长,我觉得复制所有内容可能没有用,因为其他错误可能源自第一个错误,所以这里是开始:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/lib/hive/apache-hive-2.1.0-bin/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]

Logging initialized using configuration in jar:file:/usr/lib/hive/apache-hive-2.1.0-bin/lib/hive-common-2.1.0.jar!/hive-log4j2.properties Async: true
Mon Jul 18 18:03:44 CEST 2016 Thread[main,5,main] java.io.FileNotFoundException: derby.log (Permission denied)
Exception in thread "main" java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
    at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:578)
    at org.apache.hadoop.hive.ql.session.SessionState.beginStart(SessionState.java:518)
    at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:705)
    at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:641)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
    at org.apache.hadoop.hive.ql.metadata.Hive.registerAllFunctionsOnce(Hive.java:226)
    at org.apache.hadoop.hive.ql.metadata.Hive.<init>(Hive.java:366)
    at org.apache.hadoop.hive.ql.metadata.Hive.create(Hive.java:310)
    at org.apache.hadoop.hive.ql.metadata.Hive.getInternal(Hive.java:290)
    at org.apache.hadoop.hive.ql.metadata.Hive.get(Hive.java:266)
    at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:545)
    ... 9 more

如果您需要错误日志的其余部分,请告诉我。

最佳答案

实际使用的 SLF4J 绑定(bind)是 Log4j2。为此,您需要在类路径上匹配 log4j-api 和 log4j-core 依赖项。您还需要在类路径中进行 log4j2.xml 配置,因为默认情况下只会将错误消息打印到控制台。 Log4j2 手册有很多示例配置。

您可能还想从类路径中删除 slf4j-log4j12-1.7.10.jar。

关于java - 在 ubuntu 上安装配置单元(derby 有问题?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38434236/

相关文章:

c - 如何在用户将两个字符作为输入插入时测量两个字符之间的时间(以秒为单位)

scala - spark : merge two dataframes, 如果 ID 在两个数据帧中重复,df1 中的行将覆盖 df2 中的行

hadoop - 为集群创建 Spark 环境

java - 什么是 SparkSession.read() Dataset<Row> 限制 Cassandra 表中的读取? ( Spark 性能)

java - 我应该让我所有的 java 代码线程安全吗?

python - 当我从组合框中选择值时,get 方法会导致错误

java - 为 BigInteger 赋值

linux - 如何在 bash 中匹配 `find` 的文件 - 也在子目录中?

java - 为什么 ToolTipManager.sharedInstance.registerComponent(tree) 没有自动完成?

java - 当我在 Java 8 中使用函数时使用一元运算符和二元运算符