Hive 2.1.1安装配置

来源:互联网 发布:服装收银软件 编辑:程序博客网 时间:2024/06/06 19:02

前期工作

  1. 安装JDK
  2. 安装Hadoop
  3. 安装MySQL

安装Hive

下载Hive安装包

可以从 Apache 其中一个镜像站点中下载最新稳定版的 Hive, apache-hive-2.1.1-bin.tar.gz。

解压安装Hive

使用以下命令安装 Hive:

sudo mv apache-hive-2.1.1-bin.tar.gz /optcd /optsudo tar -xzvf apache-hive-2.1.1-bin.tar.gz    ##解压sudo ln -s apache-hive-2.1.1-bin hive    ##创建软链接

设置 Hive环境变量

编辑 .bash_profile 文件, 在其中添加以下内容:

# Hive Envexport HIVE_HOME=/opt/hiveexport PATH=$PATH:$HIVE_HOME/bin

使环境变量生效:

source .bash_profile

配置Hive

配置文件重命名

在运行 Hive 之前需要使用以下命令修改配置文件:

cd /opt/hive/confcp hive-env.sh.template hive-env.shcp hive-default.xml.template hive-site.xmlcp hive-log4j2.properties.template hive-log4j2.propertiescp hive-exec-log4j2.properties.template hive-exec-log4j2.properties

修改hive-env.sh

因为 Hive 使用了 Hadoop, 需要在 hive-env.sh 文件中指定 Hadoop 安装路径:

export JAVA_HOME=/opt/java    ##Java路径export HADOOP_HOME=/opt/hadoop   ##Hadoop安装路径export HIVE_HOME=/opt/hive    ##Hive安装路径export HIVE_CONF_DIR=/opt/hive/conf    ##Hive配置文件路径

创建HDFS目录

在 Hive 中创建表之前需要创建以下 HDFS 目录并给它们赋相应的权限。

hdfs dfs -mkdir -p /user/hive/warehousehdfs dfs -mkdir -p /user/hive/tmphdfs dfs -mkdir -p /user/hive/loghdfs dfs -chmod g+w /user/hive/warehousehdfs dfs -chmod g+w /usr/hive/tmphdfs dfs -chmod g+w /usr/hive/log

修改hive-site.xml

将 hive-site.xml 文件中以下几个配置项的值设置成上一步中创建的几个路径。

<property>    <name>hive.exec.scratchdir</name>    <value>/user/hive/tmp</value>    <description>HDFS root scratch dir for Hive jobs which gets created with write all (733) permission. For each connecting user, an HDFS scratch dir: ${hive.exec.scratchdir}/&lt;username&gt; is created, with ${hive.scratch.dir.permission}.</description>  </property>  <property>    <name>hive.metastore.warehouse.dir</name>    <value>/user/hive/warehouse</value>    <description>location of default database for the warehouse</description>  </property><property>    <name>hive.querylog.location</name>    <value>/user/hive/log</value>    <description>Location of Hive run time structured log file</description>  </property>

Hive Metastore

默认情况下, Hive 的元数据保存在内嵌的 Derby 数据库里, 但一般情况下生产环境会使用 MySQL 来存放 Hive 元数据。

创建数据库和用户

假定你已经安装好 MySQL。下面创建一个 hive 数据库用来存储 Hive 元数据,且数据库访问的用户名和密码都为 hive。

mysql> CREATE DATABASE hive; mysql> USE hive; mysql> CREATE USER 'hive'@'localhost' IDENTIFIED BY 'hive';mysql> GRANT ALL ON hive.* TO 'hive'@'localhost' IDENTIFIED BY 'hive'; mysql> GRANT ALL ON hive.* TO 'hive'@'%' IDENTIFIED BY 'hive'; mysql> FLUSH PRIVILEGES; mysql> quit;

修改hive-site.xml

需要在 hive-site.xml 文件中配置 MySQL 数据库连接信息。

<property>    <name>javax.jdo.option.ConnectionURL</name>    <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8&amp;useSSL=false</value>  </property>  <property>    <name>javax.jdo.option.ConnectionDriverName</name>    <value>com.mysql.jdbc.Driver</value>  </property>  <property>    <name>javax.jdo.option.ConnectionUserName</name>    <value>hive</value>  </property>  <property>    <name>javax.jdo.option.ConnectionPassword</name>    <value>hive</value>  </property>

运行Hive

在命令行运行 hive 命令时必须保证以下两点:

  1. HDFS 已经启动。可以使用 start-dfs.sh 脚本来启动 HDFS。
  2. MySQL Java 连接器添加到 $HIVE_HOME/lib 目录下。我安装时使用的是 mysql-connector-java-5.1.39.jar。

从 Hive 2.1 版本开始, 我们需要先运行 schematool 命令来执行初始化操作。

schematool -dbType mysql -initSchema

终端输出信息如下:

输入图片说明

执行成功后,可以使用 Sequel Pro 查看元数据库 hive 是否已经创建成功。

hive-metastore

要使用 Hive CLI(Hive command line interface), 可以在终端输入以下命令:

hive

启动信息如下:

hive-start

使用 show tables 来显示所有的表:

hive-sql


Hive用户接口—Hive Web接口HWI的操作及使用

问题导读:

       1、Hive提供了哪三种用户访问接口?

        2、如何手动构建hive-hwi-*.war安装包?

        3、hwi 服务启动命令是什么?

        4、hwi启动之前需要将哪两个包拷贝到hive安装目录的lib中?

        5、使用hwi Web访问Hive数据库之前,需要首先启动哪个服务?

        6、hwi的默认监听端口是?

        Hive提供了三种用户接口:CLI、HWI和客户端方式。其中最常用的的就是CLI,CLI启动的时候,会同时启动一个Hive副本。Client是Hive的客户端,用户连接至Hive Server。在启动 Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。 HWI是通过浏览器访问Hive。本文介绍Hive Web访问接口。

        HWI是Hive Web Interface的简称,我使用的Hive的版本是Hive0.13.1。

一、终端启动HWI服务

[html] view plain copy
  1. [hadoopUser@secondmgt conf]$ hive --service hwi  
  2. ls: cannot access /home/hadoopUser/cloud/hive/apache-hive-0.13.1-bin/lib/hive-hwi-*.war: No such file or directory  
  3. 15/01/09 15:49:35 INFO hwi.HWIServer: HWI is starting up  
  4. 15/01/09 15:49:35 INFO Configuration.deprecation: mapred.reduce.tasks is deprecated. Instead, use mapreduce.job.reduces  
  5. 15/01/09 15:49:35 INFO Configuration.deprecation: mapred.min.split.size is deprecated. Instead, use mapreduce.input.fileinputformat.split.minsize  
  6. 15/01/09 15:49:35 INFO Configuration.deprecation: mapred.reduce.tasks.speculative.execution is deprecated. Instead, use mapreduce.reduce.speculative  
  7. 15/01/09 15:49:35 INFO Configuration.deprecation: mapred.min.split.size.per.node is deprecated. Instead, use mapreduce.input.fileinputformat.split.minsize.per.node  
  8. 15/01/09 15:49:35 INFO Configuration.deprecation: mapred.input.dir.recursive is deprecated. Instead, use mapreduce.input.fileinputformat.input.dir.recursive  
  9. 15/01/09 15:49:35 INFO Configuration.deprecation: mapred.min.split.size.per.rack is deprecated. Instead, use mapreduce.input.fileinputformat.split.minsize.per.rack  
  10. 15/01/09 15:49:35 INFO Configuration.deprecation: mapred.max.split.size is deprecated. Instead, use mapreduce.input.fileinputformat.split.maxsize  
  11. 15/01/09 15:49:35 INFO Configuration.deprecation: mapred.committer.job.setup.cleanup.needed is deprecated. Instead, use mapreduce.job.committer.setup.cleanup.needed  
  12. 15/01/09 15:49:35 INFO mortbay.log: Logging to org.slf4j.impl.Log4jLoggerAdapter(org.mortbay.log) via org.mortbay.log.Slf4jLog  
  13. 15/01/09 15:49:35 INFO mortbay.log: jetty-6.1.26  
  14. 15/01/09 15:49:35 INFO mortbay.log: Started SocketConnector@0.0.0.0:9999  

        由上可知,我们使用hive --service hwi在终端启动HWI服务,但是开始报了异常错误,hive-hwi-*.war包不存在。

        注意:报错误的原因是,Hive目前的发行包里没有hwi的war包文件,这个问题在0.13和0.14上都存在,没有这个war包就不能启动hwi服务。

        解决办法:从源码手动build出这个war包,具体过程如第二步。

二、手动构建Hive hwi war包

        1、从Hive官网下载Hive对应版本的源码apache-hive-0.13.1-src.tar.gz,下载后解压,并进入hwi目录中。hwi目录下的web目录就是HWI的web界面目录,如下:

[html] view plain copy
  1. [hadoopUser@secondmgt Downloads]$ tar -zxvf apache-hive-0.13.1-src.tar.gz   
  2. [hadoopUser@secondmgt hwi]$ pwd  
  3. /home/hadoopUser/Downloads/apache-hive-0.13.1-src/hwi  
[html] view plain copy
  1. [hadoopUser@secondmgt hwi]$ jar cvfM0 hive-hwi-0.13.1.war -C web/ .  
  2. adding: navbar.jsp(in = 1345) (out1345)(stored 0%)  
  3. adding: session_remove.jsp(in = 2359) (out2359)(stored 0%)  
  4. adding: session_kill.jsp(in = 2236) (out2236)(stored 0%)  
  5. adding: show_database.jsp(in = 2346) (out2346)(stored 0%)  
  6. adding: session_list.jsp(in = 2298) (out2298)(stored 0%)  
  7. adding: left_navigation.jsp(in = 1553) (out1553)(stored 0%)  
  8. adding: session_result.jsp(in = 2488) (out2488)(stored 0%)  
  9. adding: view_file.jsp(in = 2653) (out2653)(stored 0%)  
  10. adding: session_create.jsp(in = 2690) (out2690)(stored 0%)  
  11. adding: WEB-INF/(in = 0) (out0)(stored 0%)  
  12. adding: WEB-INF/web.xml(in = 1438) (out1438)(stored 0%)  
  13. adding: authorize.jsp(in = 2729) (out2729)(stored 0%)  
  14. adding: css/(in = 0) (out0)(stored 0%)  
  15. adding: css/bootstrap.min.css(in = 90193) (out90193)(stored 0%)  
  16. adding: img/(in = 0) (out0)(stored 0%)  
  17. adding: img/glyphicons-halflings.png(in = 4352) (out4352)(stored 0%)  
  18. adding: img/glyphicons-halflings-white.png(in = 4352) (out4352)(stored 0%)  
  19. adding: session_manage.jsp(in = 6738) (out6738)(stored 0%)  
  20. adding: diagnostics.jsp(in = 2365) (out2365)(stored 0%)  
  21. adding: show_table.jsp(in = 4996) (out4996)(stored 0%)  
  22. adding: index.jsp(in = 1876) (out1876)(stored 0%)  
  23. adding: error_page.jsp(in = 1867) (out1867)(stored 0%)  
  24. adding: show_databases.jsp(in = 2096) (out2096)(stored 0%)  
  25. adding: session_diagnostics.jsp(in = 2489) (out2489)(stored 0%)  
  26. adding: session_history.jsp(in = 3150) (out3150)(stored 0%)  
      2、执行jar cvfM0 hive-hwi-0.13.1.war -C web/ .打包命令,即可生成我们需要的hive-hwi-0.13.1-war,并将其拷贝到hive安装目录lib目录中如下:

[html] view plain copy
  1. [hadoopUser@secondmgt hwi]$ ls  
  2. hive-hwi-0.13.1.war  hive-hwi.iml  pom.xml  src  web  
三、在hive-site.xml中添加HWI配置

      我们需要将hive-default.xml中关于HWI的一些默认配置在hive-site.xml中按照自己的要求配置。hive-site.xml中关于HWI的配置如下:

[html] view plain copy
  1. <property>  
  2.   <name>hive.hwi.war.file</name>  
  3.   <value>lib/hive-hwi-0.13.1.war</value>  
  4.   <description>This sets the path to the HWI war file, relative to ${HIVE_HOME}. </description>  
  5. </property>  
  6.   
  7. <property>  
  8.   <name>hive.hwi.listen.host</name>  
  9.   <value>192.168.2.133</value>  
  10.   <description>This is the host address the Hive Web Interface will listen on</description>  
  11. </property>  
  12.   
  13. <property>  
  14.   <name>hive.hwi.listen.port</name>  
  15.     <value>9999</value>  
  16.     <description>This is the port the Hive Web Interface will listen on</description>  
  17. </property>  
      hive.hwi.war.file属性就是指定Hive Web用户接口程序安装包位置,其安装包即为我们第二部打包的文件。

四、重新启动HWI服务

[html] view plain copy
  1. [hadoopUser@secondmgt conf]$ hive --service hwi  
  2. 15/01/09 16:17:13 INFO hwi.HWIServer: HWI is starting up  
  3. 15/01/09 16:17:14 INFO Configuration.deprecation: mapred.reduce.tasks is deprecated. Instead, use mapreduce.job.reduces  
  4. 15/01/09 16:17:14 INFO Configuration.deprecation: mapred.min.split.size is deprecated. Instead, use mapreduce.input.fileinputformat.split.minsize  
  5. 15/01/09 16:17:14 INFO Configuration.deprecation: mapred.reduce.tasks.speculative.execution is deprecated. Instead, use mapreduce.reduce.speculative  
  6. 15/01/09 16:17:14 INFO Configuration.deprecation: mapred.min.split.size.per.node is deprecated. Instead, use mapreduce.input.fileinputformat.split.minsize.per.node  
  7. 15/01/09 16:17:14 INFO Configuration.deprecation: mapred.input.dir.recursive is deprecated. Instead, use mapreduce.input.fileinputformat.input.dir.recursive  
  8. 15/01/09 16:17:14 INFO Configuration.deprecation: mapred.min.split.size.per.rack is deprecated. Instead, use mapreduce.input.fileinputformat.split.minsize.per.rack  
  9. 15/01/09 16:17:14 INFO Configuration.deprecation: mapred.max.split.size is deprecated. Instead, use mapreduce.input.fileinputformat.split.maxsize  
  10. 15/01/09 16:17:14 INFO Configuration.deprecation: mapred.committer.job.setup.cleanup.needed is deprecated. Instead, use mapreduce.job.committer.setup.cleanup.needed  
  11. 15/01/09 16:17:14 INFO mortbay.log: Logging to org.slf4j.impl.Log4jLoggerAdapter(org.mortbay.log) via org.mortbay.log.Slf4jLog  
  12. 15/01/09 16:17:14 INFO mortbay.log: jetty-6.1.26  
  13. 15/01/09 16:17:14 INFO mortbay.log: Extract /home/hadoopUser/cloud/hive/apache-hive-0.13.1-bin/lib/hive-hwi-0.13.1.war to /tmp/Jetty_192_168_2_133_9999_hive.hwi.0.13.1.war__hwi__gybk6o/webapp  
  14. 15/01/09 16:17:14 INFO mortbay.log: Started SocketConnector@192.168.2.133:9999  
       从启动日志来看,启动正常,不再报第一步的错误。

五、启动Hive metastore服务

       注意:不管是使用Hive CLI、客户端还是HWI访问Hive,都需要首先启动Hive 元数据服务,否则无法访问Hive数据库。如下:

[html] view plain copy
  1. [hadoopUser@secondmgt ~]$ hive --service metastore  
  2. Starting Hive Metastore Server  
  3. 15/01/09 16:38:52 INFO Configuration.deprecation: mapred.reduce.tasks is deprecated. Instead, use mapreduce.job.reduces  
  4. 15/01/09 16:38:52 INFO Configuration.deprecation: mapred.min.split.size is deprecated. Instead, use mapreduce.input.fileinputformat.split.minsize  
  5. 15/01/09 16:38:52 INFO Configuration.deprecation: mapred.reduce.tasks.speculative.execution is deprecated. Instead, use mapreduce.reduce.speculative  
  6. 15/01/09 16:38:52 INFO Configuration.deprecation: mapred.min.split.size.per.node is deprecated. Instead, use mapreduce.input.fileinputformat.split.minsize.per.node  
  7. 15/01/09 16:38:52 INFO Configuration.deprecation: mapred.input.dir.recursive is deprecated. Instead, use mapreduce.input.fileinputformat.input.dir.recursive  

五、使用网页访问Hive

       1、我们在浏览器中输入:http://192.168.2.133:9999/hwi,192.168.2.133是我Hive安装的主机IP,可以修改为你对应的主机IP。Hive Web功能还是比较简单、界面也比较简陋,首页如下:

                            

       2、点击"Browse Schema" 查看Hive中的数据库,由下图可知,我的Hive中有两个数据库,分别是default和hive

                              

         3、点击“hive”,查看hive数据库中有哪些表,如下,我的hive数据库中只有一个“querysglog”表:

                               

六、在Web界面执行HQL操作

        1、创建session

        我们在Web来执行一些Hive 查询操作,感受下Hive web用户接口。在执行查询之前,需要先创建一个session,点击“Create Session”,创建session,并取名为gxnzx,如下:

                                  

              2、查看session,点击“List Sessions”,如下

                                   

                  3、在上图中,点击“Manager”后,输入结果文件名,和查询语句,执行提交即可执行查询操作,结果将保持在创建的文件名中。

                                   

                         注意:多个语句之间一定要使用分号分开。

                 4、点击上图中“View File”即可查看查询结果。

总结:

           如果使用过CLI的朋友看了上面的介绍,一定会发现一个很严重的问题:执行的过程没有提示。我们不知道某一个查询执行是什么时候结束的。但是在服务终端可以看到执行过程日志信息。

          总之,使用Hive的Web HWI用户接口很不方便,一般我们都是用CLI操作Hive。

附:

        使用Hive Web过程中,可能还会遇到其他一些问题和异常错误,我讲自己遇到的异常和错误及解决办法总结如下:

         1、tools.jar问题

               在浏览器中输入http://192.168.2.133:9999/hwi时,页面打不开并报如下错误

[html] view plain copy
  1. Unable to find a javac compiler;  
  2. com.sun.tools.javac.Main is not on the classpath.  
  3. Perhaps JAVA_HOME does not point to the JDK.  
  4. It is currently set to "/home/hadoopUser/cloud/jdk/jdk1.7.0_60/jre"  
          出现此问题是因为java.home指到$JAVA_HOME/jre下了,而其lib下的tools.jar跟$JAVA_HOME/lib/tools.jar不一样,编译jsp的时候需要用到后者.

          解决办法: 将$JAVA_HOME/lib/tools。jar复制到Hive的lib目录中,如下:

                          cp /usr/Java/jdk1.7.0_55/lib/tools.jar /usr/local/hive/lib/
                          hive --service hwi    重启即可。

         2、hive的元数据服务未启动,报以下错误:

[html] view plain copy
  1. 15/01/09 16:37:58 INFO hive.metastore: Trying to connect to metastore with URI thrift://192.168.2.133:9083  
  2. 15/01/09 16:37:58 WARN hive.metastore: Failed to connect to the MetaStore Server...  
  3. 15/01/09 16:37:58 INFO hive.metastore: Waiting 1 seconds before next connection attempt.  
          解决办法:不管使用哪种方式访问hive,都需要首先启动hive的metaserver服务。




问题总结

SSL问题

启动 hive 时,提示以下信息:

Sat May 21 10:25:12 CST 2016 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSLconnection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

解决方法:在 hive-site.xml 配置文件中 javax.jdo.option.ConnectionURL 配置项的值上加上 useSSL=false。即最后的配置如下:

<property>    <name>javax.jdo.option.ConnectionURL</name>    <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false</value>    <description>JDBC connect string for a JDBC metastore</description>  </property>

initSchema问题

启动 hive 时,提示以下信息:

Exception in thread "main" java.lang.RuntimeException: 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)

解决方法:执行 schematool -initSchema -dbType mysql。即安装 Hive 后,在首次运行 hive 之前要执行以上命令。

相对路径问题

启动Hive时报以下错误:

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        atorg.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:444)        atorg.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:672)        atorg.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:616)        atsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)        atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)        atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)        atjava.lang.reflect.Method.invoke(Method.java:606)        atorg.apache.hadoop.util.RunJar.main(RunJar.java:160)Caused by: java.lang.IllegalArgumentException:java.net.URISyntaxException: Relative path in absolute URI:${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D        atorg.apache.hadoop.fs.Path.initialize(Path.java:148)        atorg.apache.hadoop.fs.Path.<init>(Path.java:126)        atorg.apache.hadoop.hive.ql.session.SessionState.createSessionDirs(SessionState.java:487)        atorg.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:430)        ... 7more

解决方案:将 hive-site.xml 中的 ${system:java.io.tmpdir} 和 ${system:user.name} 分别替换成 /tmp 和 ${user.name}

mysql-connector-java版本问题

启动Hive时报以下错误:

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 moreCaused by: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient    at org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java:1627)    at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.<init>(RetryingMetaStoreClient.java:80)    at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java:130)    at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java:101)    at org.apache.hadoop.hive.ql.metadata.Hive.createMetaStoreClient(Hive.java:3317)    at org.apache.hadoop.hive.ql.metadata.Hive.getMSC(Hive.java:3356)    at org.apache.hadoop.hive.ql.metadata.Hive.getMSC(Hive.java:3336)    at org.apache.hadoop.hive.ql.metadata.Hive.getAllFunctions(Hive.java:3590)    at org.apache.hadoop.hive.ql.metadata.Hive.reloadFunctions(Hive.java:236)    at org.apache.hadoop.hive.ql.metadata.Hive.registerAllFunctionsOnce(Hive.java:221)    ... 14 moreCaused by: java.lang.reflect.InvocationTargetException    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)    at org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java:1625)    ... 23 moreCaused by: javax.jdo.JDODataStoreException: Exception thrown obtaining schema column information from datastoreNestedThrowables:java.sql.SQLException: Column name pattern can not be NULL or empty.    at org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:543)    at org.datanucleus.api.jdo.JDOPersistenceManager.jdoMakePersistent(JDOPersistenceManager.java:720)    at org.datanucleus.api.jdo.JDOPersistenceManager.makePersistent(JDOPersistenceManager.java:740)    at org.apache.hadoop.hive.metastore.ObjectStore.setMetaStoreSchemaVersion(ObjectStore.java:7763)    at org.apache.hadoop.hive.metastore.ObjectStore.checkSchema(ObjectStore.java:7657)    at org.apache.hadoop.hive.metastore.ObjectStore.verifySchema(ObjectStore.java:7632)    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.hive.metastore.RawStoreProxy.invoke(RawStoreProxy.java:101)    at com.sun.proxy.$Proxy21.verifySchema(Unknown Source)    at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.getMS(HiveMetaStore.java:547)    at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.createDefaultDB(HiveMetaStore.java:612)    at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.init(HiveMetaStore.java:398)    at org.apache.hadoop.hive.metastore.RetryingHMSHandler.<init>(RetryingHMSHandler.java:78)    at org.apache.hadoop.hive.metastore.RetryingHMSHandler.getProxy(RetryingHMSHandler.java:84)    at org.apache.hadoop.hive.metastore.HiveMetaStore.newRetryingHMSHandler(HiveMetaStore.java:6396)    at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.<init>(HiveMetaStoreClient.java:236)    at org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient.<init>(SessionHiveMetaStoreClient.java:70)    ... 28 more

解决方案:将 $HIVE_HOME/lib 下 的 mysql-connector-java-6.0.3.jar 替换成 mysql-connector-java-5.1.39.jar。 原因分析:mysql-connector-java 6.x 版本 和 5.1.x 版本不兼容 , nullNamePatternMatchesAll 连接属性的默认值在 mysql-connector-java 5.1 和 6.0 之间发生了改变. 在 5.1 版本中默认值是 true, 而 6.0 版本中默认值是 false。可以参考文章 https://liquibase.jira.com/browse/CORE-2723

原创粉丝点击