Hive本地模式安装及遇到的问题和解决方案
2016-05-09 18:12
489 查看
Apache Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。
其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
Hive有三种运行模式:
1.内嵌模式:将元数据保存在本地内嵌的Derby数据库中,这得使用Hive最简单的方式,不过使用内嵌模式的话,缺点也比较明显,因为一个内嵌的Derby数据库每次只能访问一个数据文件,这也就意味着不支持多会话连接。这种情况应对本地测试可能都有所不足,仅供初学者熟悉应用Hive;
2.本地模式:这种模式是将元数据库保存在本地的独立数据库中(比如说MySQL),这样就能够支持多会话和多用户连接;
3.远程模式:如果我们的Hive客户端比较多,在每个客户端都安装MySQL服务还是会造成一定的冗余和浪费,这种情况下,就可以更进一步,将MySQL也独立出来,将元数据保存在远端独立的MySQL服务中。
因为只有一台电脑,所以本文主要介绍Hive的本地模式安装。
2.下载文件:
apache-hive-1.1.0-bin.tar.gz:https://hive.apache.org/downloads.html
JDBC:http://download.softagency.net/MySQL/Downloads/Connector-J/
2
3
1
2
3
[/code]
配置环境变量
2
1
2
[/code]
2
3
4
1
2
3
4
[/code]
hive-env.sh
1
[/code]
hive-site.xml
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
[/code]
hive-log4j.properties
2
3
1
2
3
[/code]
在HDFS上建立/tmp和/user/hive/warehouse目录,并赋予组用户写权限。
2
3
4
1
2
3
4
[/code]
2
3
4
5
6
7
1
2
3
4
5
6
7
[/code]
完成以上操作后,启动Hadoop,再在终端输入
错误1.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[/code]
参考自:hive shell not opening when I have hive-site.xml
错误2.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[/code]
错误原因:
1
[/code]
解决方案(Hive on Spark Getting Started):
2
1
2
[/code]
其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
Hive有三种运行模式:
1.内嵌模式:将元数据保存在本地内嵌的Derby数据库中,这得使用Hive最简单的方式,不过使用内嵌模式的话,缺点也比较明显,因为一个内嵌的Derby数据库每次只能访问一个数据文件,这也就意味着不支持多会话连接。这种情况应对本地测试可能都有所不足,仅供初学者熟悉应用Hive;
2.本地模式:这种模式是将元数据库保存在本地的独立数据库中(比如说MySQL),这样就能够支持多会话和多用户连接;
3.远程模式:如果我们的Hive客户端比较多,在每个客户端都安装MySQL服务还是会造成一定的冗余和浪费,这种情况下,就可以更进一步,将MySQL也独立出来,将元数据保存在远端独立的MySQL服务中。
因为只有一台电脑,所以本文主要介绍Hive的本地模式安装。
安装前准备
1.正确安装Hadoop2.下载文件:
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.gzmv apache-hive-1.1.0-bin /usr/local/tar zxf mysql-connector-java-5.1.35.tar.gz1
2
3
1
2
3
[/code]
配置环境变量
vim /etc/profile
export HIVE_HOME=/usr/local/apache-hive-1.1.0-binexport PATH=${PATH}:${HIVE_HOME}/bin1
2
1
2
[/code]
修改Hive配置
hive-config.sh#vim /usr/local/apache-hive-1.1.0-bin/bin/hive-config.shexport JAVA_HOME=/usr/lib/jvm/java-7-oracleexport HIVE_HOME=/usr/local/apache-hive-1.1.0-binexport HADOOP_HOME=/usr/local/hadoop-2.6.01
2
3
4
1
2
3
4
[/code]
hive-env.sh
cp hive-env.sh.template hive-env.sh1
1
[/code]
hive-site.xml
#cp hive-default.xml.template hive-site.xml#vim hive-site.xml<property><name>javax.jdo.option.ConnectionURLname><value>jdbc:mysql://localhost:3306/hivevalue><description>JDBC connect string for a JDBC metastoredescription>property><property><name>javax.jdo.option.ConnectionDriverNamename><value>com.mysql.jdbc.Drivervalue><description>Driver class name for a JDBC metastoredescription>property><property><name>javax.jdo.option.ConnectionUserNamename><value>数据库用户名value><description>Username to use against metastore databasedescription>property><property><name>javax.jdo.option.ConnectionPasswordname><value>数据库密码value><description>password to use against metastore databasedescription>property>#如果不配置下面的部分会产生错误1.<property><name>hive.exec.local.scratchdirname><value>自定义目录value><description>Local scratch space for Hive jobsdescription>property><property><name>hive.downloaded.resources.dirname><value>自定义目录value><description>Temporary local directory for added resources in the remote file system.description>property><property><name>hive.querylog.locationname><value>自定义目录value><description>Location of Hive run time structured log filedescription>property><property><name>hive.server2.logging.operation.log.locationname><value>自定义目录/operation_logsvalue><description>Top level directory where operation logs are stored if logging functionality is enableddescription>property>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
[/code]
hive-log4j.properties
#cp hive-log4j.properties.template hive-log4j.properties#vim hive-log4j.propertieshive.log.dir=自定义目录/log/1
2
3
1
2
3
[/code]
在HDFS上建立/tmp和/user/hive/warehouse目录,并赋予组用户写权限。
HADOOP_HOME/bin/hadoop fs -mkdir /tmpHADOOP_HOME/bin/hadoop fs -mkdir /user/hive/warehouseHADOOP_HOME/bin/hadoop fs -chmod g+w /tmpHADOOP_HOME/bin/hadoop fs -chmod g+w /user/hive/warehouse1
2
3
4
1
2
3
4
[/code]
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/1
2
3
4
5
6
7
1
2
3
4
5
6
7
[/code]
完成以上操作后,启动Hadoop,再在终端输入
hive启动Hive,若Hive成功启动,Hive本地模式安装完成。
错误1.
Logging initialized using configuration in file:/usr/local/apache-hive-1.1.0-bin/conf/hive-log4j.propertiesException 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 moreCaused 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 more1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[/code]
参考自:hive shell not opening when I have hive-site.xml
错误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 unsupportedjava.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)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[/code]
错误原因:
Hive has upgraded to Jline2 but jline 0.94 exists inthe Hadoop lib.1
1
[/code]
解决方案(Hive on Spark Getting Started):
1.Delete jline fromthe Hadoop lib directory (it's only pulled in transitively from ZooKeeper).2.export HADOOP_USER_CLASSPATH_FIRST=true1
2
1
2
[/code]
相关文章推荐
- 创始人汪华:创新者去哪儿
- OGG日常维护
- Keil 链接错误 Error: L6406E: No space in execution regions with .ANY selector matching
- shell自动计算脚本
- linux 添加用户并添加ssh公钥认证
- Linux Shell脚本之远程自动化部署java maven项目
- mac下Git使用
- HUD2087
- 初识Hadoop之HDFS体系
- java web中各种路径的问题
- 周鸿祎-----把自己当成打工的,一辈子都是打工的
- 何时乘以(1+B)和除以(1+B)
- To be learned
- 判断一棵树是不是平衡树(数值大小不判断,只盼高度)
- Wrong Image Format for bootm command
- Nginx 负载均衡(基于IP/端口)
- codevs1404字符串匹配
- WebService 之 WSDL文件 讲解
- 1519 过路费
- 共同学习Java源代码--数据结构--AbstractList抽象类(三)