linux hive创建数据库失败,Hive本地模式安装及遇到的问题和解决方案
Apache Hive是基于Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,并提供簡單的SQL查詢功能,可以將SQL語句轉換為MapReduce任務進行運行。 其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合數據倉庫的統計分析。
Hive有三種運行模式:
1.內嵌模式:將元數據保存在本地內嵌的Derby數據庫中,這得使用Hive最簡單的方式,不過使用內嵌模式的話,缺點也比較明顯,因為一個內嵌的Derby數據庫每次只能訪問一個數據文件,這也就意味著不支持多會話連接。這種情況應對本地測試可能都有所不足,僅供初學者熟悉應用Hive;
2.本地模式:這種模式是將元數據庫保存在本地的獨立數據庫中(比如說MySQL),這樣就能夠支持多會話和多用戶連接;
3.遠程模式:如果我們的Hive客戶端比較多,在每個客戶端都安裝MySQL服務還是會造成一定的冗余和浪費,這種情況下,就可以更進一步,將MySQL也獨立出來,將元數據保存在遠端獨立的MySQL服務中。
因為只有一臺電腦,所以本文主要介紹Hive的本地模式安裝。
安裝前準備
1.正確安裝Hadoop
2.下載文件:
apache-hive-1.1.0-bin.tar.gz:https://hive.apache.org/downloads.html
JDBC:http://download.softagency.net/MySQL/Downloads/Connector-J/
解壓文件并配置Hive環境變量
解壓文件
tar zxf apache-hive-1.1.0-bin.tar.gz
mv apache-hive-1.1.0-bin /usr/local/
tar zxf mysql-connector-java-5.1.35.tar.gz
配置環境變量vim /etc/profile
export HIVE_HOME=/usr/local/apache-hive-1.1.0-bin
export PATH=${PATH}:${HIVE_HOME}/bin
修改Hive配置
hive-config.sh
#vim /usr/local/apache-hive-1.1.0-bin/bin/hive-config.sh
export JAVA_HOME=/usr/lib/jvm/java-7-Oracle
export HIVE_HOME=/usr/local/apache-hive-1.1.0-bin
export HADOOP_HOME=/usr/local/hadoop-2.6.0
hive-env.sh
cp hive-env.sh.template hive-env.sh1
hive-site.xml
#cp hive-default.xml.template hive-site.xml
#vim hive-site.xml
javax.jdo.option.ConnectionURL
jdbc:mysql://localhost:3306/hive
JDBC connect string for a JDBC metastore
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
Driver class name for a JDBC metastore
javax.jdo.option.ConnectionUserName
數據庫用戶名
Username to use against metastore database
javax.jdo.option.ConnectionPassword
數據庫密碼
password to use against metastore database
#如果不配置下面的部分會產生錯誤1.
hive.exec.local.scratchdir
自定義目錄
Local scratch space for Hive jobs
hive.downloaded.resources.dir
自定義目錄
Temporary local directory for added resources in the remote file system.
hive.querylog.location
自定義目錄
Location of Hive run time structured log file
hive.server2.logging.operation.log.location
自定義目錄/operation_logs
Top level directory where operation logs are stored if logging functionality is enabled
hive-log4j.properties
#cp hive-log4j.properties.template hive-log4j.properties
#vim hive-log4j.properties
hive.log.dir=自定義目錄/log/
在HDFS上建立/tmp和/user/hive/warehouse目錄,并賦予組用戶寫權限。
HADOOP_HOME/bin/hadoop fs -mkdir? ? ? /tmp
HADOOP_HOME/bin/hadoop fs -mkdir? ? ? /user/hive/warehouse
HADOOP_HOME/bin/hadoop fs -chmod g+w? /tmp
HADOOP_HOME/bin/hadoop fs -chmod g+w? /user/hive/warehouse
Mysql配置
#創建數據庫
mysql> create database hive;
#賦予訪問權限
mysql> grant all privileges on hive.* to root@localhost identified by '密碼' with grant option;
mysql> flush privileges;
#將JDBC復制到Hive庫目錄用于java程序與mysql的連接
cp mysql-connector-java-5.1.35/mysql-connector-java-5.1.35-bin.jar /usr/local/apache-hive-1.1.0-bin/lib/
完成以上操作后,啟動Hadoop,再在終端輸入hive啟動Hive,若Hive成功啟動,Hive本地模式安裝完成。
錯誤1.
Logging initialized using configuration in file:/usr/local/apache-hive-1.1.0-bin/conf/hive-log4j.properties
Exception in thread "main" java.lang.RuntimeException: java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:472)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:671)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:615)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
Caused by: java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
at org.apache.hadoop.fs.Path.initialize(Path.java:206)
at org.apache.hadoop.fs.Path.(Path.java:172)
at org.apache.hadoop.hive.ql.session.SessionState.createSessionDirs(SessionState.java:515)
at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:458)
... 8 more
Caused by: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
at java.net.URI.checkPath(URI.java:1804)
at java.net.URI.(URI.java:752)
at org.apache.hadoop.fs.Path.initialize(Path.java:203)
... 11 more
錯誤2.
Logging initialized using configuration in file:/usr/local/apache-hive-1.1.0-bin/conf/hive-log4j.properties
[ERROR] Terminal initialization failed; falling back to unsupported
java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
at jline.TerminalFactory.create(TerminalFactory.java:101)
at jline.TerminalFactory.get(TerminalFactory.java:158)
at jline.console.ConsoleReader.(ConsoleReader.java:229)
at jline.console.ConsoleReader.(ConsoleReader.java:221)
at jline.console.ConsoleReader.(ConsoleReader.java:209)
at org.apache.hadoop.hive.cli.CliDriver.getConsoleReader(CliDriver.java:773)
at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:715)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:675)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:615)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
Exception in thread "main" java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
at jline.console.ConsoleReader.(ConsoleReader.java:230)
at jline.console.ConsoleReader.(ConsoleReader.java:221)
at jline.console.ConsoleReader.(ConsoleReader.java:209)
at org.apache.hadoop.hive.cli.CliDriver.getConsoleReader(CliDriver.java:773)
at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:715)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:675)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:615)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
錯誤原因:
Hive has upgraded to Jline2 but jline 0.94 exists in the Hadoop lib.1
1.Delete jline from the Hadoop lib directory (it's only pulled in transitively from ZooKeeper).
2.export HADOOP_USER_CLASSPATH_FIRST=true
Hive 的詳細介紹:請點這里
Hive 的下載地址:請點這里
總結
以上是生活随笔為你收集整理的linux hive创建数据库失败,Hive本地模式安装及遇到的问题和解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三国中最精辟的十句话
- 下一篇: 嵌入式linux开发课程设计,嵌入式Li