Hive 1.2.1&Spark&Sqoop安装指南

1. 前言

本文的安装参照《Hive 0.12.0安装指南》,内容来源于官方的:GettingStarted,将Hive 1.2.1安装在Hadoop 2.7.1上。本文将Hive配置成Server模式,并且使用MySQL作为元数据数据库,远程连接MySQL。

关于Hadoop 2.7.1的安装,请参见《Hadoop-2.7.1分布式安装手册》一文。

2. 约定

本文约定Hadoop被安装在/data/hadoop/current,将Hive 1.2.1的安装到目录/data/hadoop/hive(实际是指向/data/hadoop/hive-1.2.1-bin的软链接)。将MySQL 5.7.10安装到目录/data/mysql。在实际安装部署时,可以指定为其它目录。

3. 服务端口

10000

hive.server2.thrift.port,执行hiveserver2时会启动它

9083

hive.metastore.uris,执行hive --service metastore时会启动它

4. 安装MySQL

由于单台MySQL有单点问题,因此实际中需要配置成主备MySQL方式。

4.1. 安装MySQL

本文MySQL被安装在172.25.39.166机器上,Hive用MySQL来存储元数据,因此需要先安装好MySQL。这里安装的是最新的MySQL 5.7.10,下载网址为:http://dev.mysql.com/downloads/mysql/,本文选择是的“Linux - Generic”下的“Linux - Generic (glibc 2.5) (x86, 64-bit), Compressed TAR Archive”,它的二进制安装包名为mysql-5.7.10-linux-glibc2.5-x86_64.tar.gz。

将二进制安装包解压后,可看到名为INSTALL-BINARY的文件,该文件有说明如何安装MySQL,本文基本参照它进行的。

由于官方提供的二进制安装包,编译的时候指定的“--prefix”为“/usr/local/mysql”,所以最好将mysql安装在/usr/local目录下,否则安装过程会容易遇到问题。但建立将数据目录指定为一个足够大的分区下的目录。

当然data目录也可以为软链接方式到足够大的分区目录,并且推荐使用软链接方式,否则在使用mysql命令时,经常需要指定参数“--datadir”,比如mysqld、mysqld_safe和mysql_ssl_rsa_setup等都需要指定“--datadir”。

如果不是安装在/usr/local/mysql,则需要为mysqld指定--basedir、--character-sets-dir、--language、--lc-messages-dir、--plugin-dir等众多参数值。

如果不能root用户安装,则还需要为mysqld指定--slow-query-log-file、--socket、--pid-file、--plugin-dir和--general-log-file等参数值。

这些参数的默认值,都可以通过执行MySQL的“bin/mysqld --verbose --help”查看到。

# MySQL安装目录为/usr/local/mysql,数据目录实际为/data/mysql/data
# 注意需以root用户安装MySQL,如果不能root用户安装,容易遇到安装麻烦
# 并请注意5.7.6之前的版本安装略有不同!
# 新建mysql用户组
groupadd mysql
# 新建mysql用户,并设置为不能作为linux登录用户
useradd -r -g mysql -s /bin/false mysql
# 进入到mysql安装目录
cd /usr/local
# 解压二进制安装包
tar xzf mysql-5.7.10-linux-glibc2.5-x86_64.tar.gz
# 建立易记的、与版本无关的短链接
ln -s mysql-5.7.10-linux-glibc2.5-x86_64 mysql
# 进入到mysql目录
cd mysql
# 创建数据目录
mkdir -p /data/mysql/data
# 建立数据目录软链接,让指向/usr/local/mysql/data指向/data/mysql/data
ln -s /data/mysql/data /usr/local/mysql/data
# 设置目录权限
chmod 770 /data/mysql/data
chown -R mysql /data/mysql/data
chgrp -R mysql /data/mysql/data
chown -R mysql .
chgrp -R mysql .
# 初始化(成功执行完mysqld后,会提供一个临时的root密码,请务必记住)
# 另外需要注意临时密码会过期,所以需要尽量修改root密码
# 进入MySQL Cli后,执行下列命令即可修改成新密码:
# SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
bin/mysqld --initialize --user=mysql --explicit_defaults_for_timestamp
# 安装和配置SSL
bin/mysql_ssl_rsa_setup
# 重置目录权限
chown -R root .
chown -R mysql /data/mysql/data
# 启动mysql
bin/mysqld_safe --user=mysql &
# 查看端口是否已起来(不修改配置和不指定参数--port,默认端口号为3306)
netstat -lpnt|grep 3306
# 停止MySQL
support-files/mysql.server stop
# 设置mysql随着系统自启动
cp support-files/mysql.server /etc/init.d/mysql.server

以上使用的都是MySQL默认配置,如果需要定制化,可以通过修改文件my.cnf来达成。MySQL 5.7.10不带my.cnf,只有个support-files/my-default.cnf。

通过执行命令“support-files/my-default.cnf”,可以了解到MySQL搜索my.cnf的顺序依次为:/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf,这样可以复制一份my-default.cnf,然后再修改,如:cp support-files/my-default.cnf /etc/my.cnf。

4.2. 创建Hive元数据库

创建数据库hive:

create database if not exists hive;

创建数据库用户hive:

create user hive identified by 'hive2016';

授权可以访问数据库hive的IP和用户,其中localhost的实际IP为172.25.39.166:

grant all on hive.* to 'hive'@'localhost' identified by 'hive2016';
grant all on hive.* to 'hive'@'172.25.39.166' identified by 'hive2016';
grant all on hive.* to 'hive'@'172.25.40.171' identified by 'hive2016';

进入hive数据库:

1) 本机进入:mysql -uhive -phive2016

2) 非本机进入:mysql -uhive -h172.25.39.166 -phive2016

注意如果配置了MySQL主主同步或其它同步,则如果同步的库不包含mysql,则创建库和用户需要分别在不同的MySQL上操作一次。

5. 安装步骤

5.1. 下载Hive 1.2.1二进制安装包

下载网址:http://hive.apache.org/downloads.html,下载后的包名为:apache-hive-1.2.1-bin.tar.gz,然后将apache-hive-1.2.1-bin.tar.gz上传到/data目录下。

5.2. 安装Hive

1) 切换到/data目录:cd /data

2) 解压二进制安装包:tar xzf apache-hive-1.2.1-bin.tar.gz

3) 改个名:mv apache-hive-1.2.1-bin hive-1.2.1

4) 建立软链接:ln -s hive-1.2.1 hive

5.3. 安装MySQL-Connector

MySQL-Connector下载网址:http://dev.mysql.com/downloads/connector/

选择“Connector/J”,接着选择“Platform Independent”,本文下载的是“mysql-connector-java-5.1.38.tar.gz”。

压缩包“mysql-connector-java-5.1.38.tar.gz”中有个mysql-connector-java-5.1.38-bin.jar,解压后将mysql-connector-java-5.1.38-bin.jar上传到Hive的lib目录下,这个是MySQL的JDBC驱动程序。

5.4. 修改配置

5.4.1. 修改/etc/profile或~/.profile

设置环境变量HIVE_HOME,并将Hive加入到PATH中:

export HIVE_HOME=/data/hadoop/hive
export PATH=$HIVE_HOME/bin:$PATH

5.4.2. 修改其它配置文件

进入/data/hadoop/hive/conf目录,可以看到如下:

hadoop@VM-40-171-sles10-64:~/hive/conf> ls
hive-default.xml.template  hive-exec-log4j.properties.template
hive-env.sh.template       hive-log4j.properties.template

可以看到4个模板文件,复制并重命名成配置文件:

cp hive-env.sh.template hive-env.sh
cp hive-default.xml.template hive-site.xml
cp hive-log4j.properties.template hive-log4j.properties
cp hive-exec-log4j.properties.template hive-exec-log4j.properties

5.4.2.1. 修改hive-env.sh

如果之前没有设置好HADOOP_HOME环境变量,则可在hive-env.sh中,进行设置:

HADOOP_HOME=/data/hadoop/current

5.4.2.2. 修改hive-site.xml

1) 修改javax.jdo.option.ConnectionURL

将值设置为:

jdbc:mysql://172.25.39.166:3306/hive?useSSL=false,

注意加上“useSSL=false”,另外还有诸于参数characterEncoding=UTF-8等。

2) 修改javax.jdo.option.ConnectionDriverName

将值设置为:com.mysql.jdbc.Driver。

3) 修改javax.jdo.option.ConnectionUserName

将值设置为访问hive数据库的用户名hive:hive。

4) 修改javax.jdo.option.ConnectionPassword

将值设置为访问hive数据库的密码:hive2016。

5) 修改hive.metastore.schema.verification

该值试情况进行修改。

6) 修改hive.zookeeper.quorum

将值设置为:10.12.154.77,10.12.154.78,10.12.154.79,ZooKeeper被安装在这三台机器上。建议使用机器名,而不是IP,因为机器退役可能导致IP变换。

7) 修改hive.metastore.uris

将值设置为:thrift://172.25.40.171:9083,9083为Hive元数据的RPC服务端口。

8) 修改hive.metastore.warehouse.dir

将值设置为:/data/hadoop/hive/warehouse,注意启动前,需要创建好该目录(mkdir /data/hadoop/hive/warehouse)。

9) 修改hive.server2.thrift.bind.host

该值默认为localhost,如果需要在其它机器远程访问Hive,则需要将它改成IP地址,本文将它改成172.25.40.171,可以考虑为0.0.0.0。

10) 修改hive.exec.scratchdir

这一步可选,可直接使用默认值/tmp/hive。设置为:/data/hadoop/hive/tmp或其它,并创建好目录。

11) 修改hive.exec.local.scratchdir

设置为:/data/hadoop/hive/tmp/scratch或其它,并创建好目录。

12) 修改hive.downloaded.resources.dir

设置为:/data/hadoop/hive/tmp/resources或其它,并创建好目录。

13) 修改hive.querylog.location

设置为:/data/hadoop/hive/tmp/querylog或其它,并创建好目录。

14) 修改hive.server2.logging.operation.log.location

设置为:/data/hadoop/hive/tmp/operation或其它,并创建好目录。

5.4.2.3. 修改hive-log4j.properties

修改日志文件存放目录,将日志目录由/tmp/${user.name}改为/data/hadoop/hive/logs:

hive.log.dir=/data/hadoop/hive/logs

然后创建好目录/data/hadoop/hive/logs。

5.4.2.4. 修改hive-exec-log4j.properties

修改日志文件存放目录,将日志目录由默认的/tmp/${user.name}改为/data/hadoop/hive/logs/exec:

hive.log.dir=/data/hadoop/hive/logs/exec

然后创建好目录/data/hadoop/hive/logs/exec。

6. 启动运行

1) 初始化metastore

安装配置好后,在启动Hive服务端之前,需要在服务端执行一次“schematool -dbType mysql -initSchema”,以完成对metastore的初始化。

如果配置了MySQL主主同步,则只需要一台hive机器上执行,重复执行会报错。

2) 启动metastore

执行命令:hive --service metastore &

3) 启动Hive服务

执行:hiveserver2 &。

4) 进入Hive命令行操作界面(类似于mysql)

执行:hive

除了使用hive命令行操作界面之外,hiveserver2还提供了beeline(hive是用户名,hive2016是密码,可以从HiveServer2+Clients获得更多信息):

hadoop@VM-40-171-sles10-64:~/hive/bin> ./beeline
Beeline version 1.2.1 by Apache Hive
beeline> !connect jdbc:hive2://172.25.40.171:10000 hive hive2016 org.apache.hive.jdbc.HiveDriver
Connecting to jdbc:hive2://172.25.40.171:10000
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/data/hadoop/hadoop-2.7.1/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/data/hadoop/hive-1.2.1-bin/lib/slf4j-log4j12-1.6.1.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.slf4j.impl.Log4jLoggerFactory]
Connected to: Hive (version 1.2.1)
Driver: Hive (version 1.2.1)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://172.25.40.171:10000> select * from invites limit 2;
+------+----------+-------+
| foo  |   bar    |  ds   |
+------+----------+-------+
| 474  | val_475  | 2014  |
| 281  | val_282  | 2014  |
+------+----------+-------+
2 rows selected (1.779 seconds)
0: jdbc:hive2://172.25.40.171:10000>

7. 远程执行HSQL

将hive/bin、hive/lib、hive/conf和hive/examples打包,如:tar czf hive-bin.tar.gz hive/bin hive/lib hive/conf hive/examples。

然后将hive-bin.tar.gz上传到其它机器,借助beeline即可远程执行HSQL(用hive可能会遇到问题,本文在操作时,使用hive,在执行HSQL时总会卡住,日志也没有记录特别原因,暂未去定位)。

8. 基本命令

以下内容来自官网(GettingStarted),注意命令不区分大小写:

CREATE TABLE pokes (foo INT, bar STRING);
CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);
SHOW TABLES;
SHOW TABLES '.*s';
DESCRIBE invites;
DROP TABLE pokes;

Hive的安装目录下有个examples子目录,存储了示例用到的数据文件等。测试往表invites中加载数据,将文件../examples/files/kv2.txt加载到表invites中:

LOAD DATA LOCAL INPATH '../examples/files/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2014');

可以通过“select * from invites;”来检验加载情况,或者执行“select count(1) from invites;”。

9. 单点方案

可通过部署两个hive来解决单点,元数据库采用MySQL,MySQL和hive部署在相同机器上,两个MySQL配置成主主同步。

hive为一主一热备的方式,最好保证同一时刻只有一个hive提供服务,虽然很多情况下,两个hive都提供服务也能正常工作。

10. 和Spark集成

Spark集成Hive非常简单,只需以下几步:

1) 在spark-env.sh中加入HIVE_HOME,如:export HIVE_HOME=/data/hadoop/hive

2) 将Hive的hive-site.xml和hive-log4j.properties两个文件复制到Spark的conf目录下。

完成后,再次执行spark-sql进入Spark的SQL Cli,运行命令show tables即可看到在Hive中创建的表。

示例:

./spark-sql --master yarn --driver-class-path /data/hadoop/hive/lib/mysql-connector-java-5.1.38-bin.jar

11. 和Sqoop集成

以sqoop-1.4.6.bin__hadoop-2.0.4-alpha为例,支持增量导入,不但可以将数据导入到Hive中,还可以往HBase导数据,也可以将数据从DB导入到HDFS存储。总之,Sqoop功能十分强大,但这里仅简单介绍。

从Sqoop的官网(下载网址:http://www.apache.org/dyn/closer.lua/sqoop/1.4.6)下载sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz。

解压,然后进入Sqoop的conf目录,完成以下修改即可:

11.1. 修改sqoop-env.sh

复制一份sqoop-env-template.sh,命名为sqoop-env.sh。在sqoop-env.sh中设置以下环境变量:

1) HADOOP_COMMON_HOME

值为Hadoop的安装目录,示例:export HADOOP_COMMON_HOME=/data/hadoop

2) HADOOP_MAPRED_HOME

值为hadoop-common-*.tar文件所在目录,位于Hadoop安装目录之下。

示例:export HADOOP_MAPRED_HOME=/data/hadoop/share/hadoop/common

3) HBASE_HOME

值为HBase的安装目录,示例:export HBASE_HOME=/data/hbase

4) HIVE_HOME

值为Hive的安装目录,示例:export HIVE_HOME=/data/hive

5) ZOOCFGDIR

值为Zookeeper的配置目录,示例:export ZOOCFGDIR=/data/zookeeper/conf

11.2. 修改sqoop-site.xml

复制一份sqoop-site-template.xml,命名为sqoop-site.xml,可不做任何修改。

11.3. 复制hadoop的jar文件

这一步可先不操作,但如果遇到“Please check your configuration for mapreduce.framework.name and the correspond server addresses”错误,则需要将hadoop-mapreduce-client-common-2.7.1.jar,hadoop-mapreduce-client-core-2.7.1.jar、hadoop-mapreduce-client-jobclient-2.7.1.jar和hadoop-mapreduce-client-shuffle-2.7.1.jar复制到sqoop的lib目录。

11.4. 验证测试

1) 列出MySQL数据库

./sqoop list-databases --connect jdbc:mysql://127.0.0.1:3306/ --username zhangsan --password zhangsan2016

2) 根据MySQL表创建Hive表

./sqoop create-hive-table --connect jdbc:mysql://127.0.0.1:3306/test --username zhangsan --password zhangsan2016 --table t_test --hive-table t_test_2016

如果Hive表需要分区,可以通过参数--hive-partition-key和--hive-partition-value 来指定。

如果需覆盖已存在的Hive表,加上参数“--hive-overwrite”即可。“--hive-partition-key”值为分区名,默认为string型,“–hive-partition-value”为分区的值。

3) 将数据从MySQL导入到Hive

./sqoop import --connect jdbc:mysql://127.0.0.1:3306/test --username zhangsan --password 'zhangsan2016' --table t_test --hive-import -m 6 --hive-table t_test_2016 --direct

注意为运行sqoop的机器授权访问MySQL,可能也需要为运行MapReduce的机器授权。

建议带上参数“--direct”,表示使用快速模式,比如它会利用MySQL的工具mysqldump导出数据。

“-m”表示启用多少个map并行导入数据,默认是4个,最好不要将数字设置为高于集群的最大Map数。

“–table”用来指定要导入的DB表名,“--hive-import”表示从DB导入数据到Hive。还可以借助参数“--query”使用SQL有条件的从DB中导出。

如果需要指定字符集,使用参数“--default-character-set”,如:--default-character-set UTF-8。

4) 增量从MySQL往Hive导数据

./sqoop import --connect jdbc:mysql://127.0.0.1:3306/test --username zhangsan --password 'zhangsan2016'  --table t_test --hive-import --hive-table t_test_2016 --split-by f_id --incremental lastmodified --check-column f_donate_time --last-value '2016-03-01 00:00:00'

建议增量时,不要带参数“-m”,因为如指定了“-m”,对应的导入会在hdfs上差生相应的中间结果,当下一次再次执行job时,则会报“output directory is exist”错误。

12. 常见错误

1) Please check your configuration for mapreduce.framework.name and the correspond server addresses

在运行sqoop从MySQL往Hive导数据时,如果报这个错误,一是要检查mapred-site.xml中的“mapreduce.framework.name”是否为yarn。其次可以尝试将hadoop的share/hadoop/mapreduce目录下的四个文件:hadoop-mapreduce-client-common-2.7.1.jar,hadoop-mapreduce-client-core-2.7.1.jar、hadoop-mapreduce-client-jobclient-2.7.1.jar和hadoop-mapreduce-client-shuffle-2.7.1.jar复制到sqoop的lib目录下。

2) TIMESTAMP with implicit DEFAULT value is deprecated

执行MySQL的“bin/mysqld --initialize --user=mysql”时报的错误。

原因是从MySQL 5.6版本开始,timestamp的默认值已被标为deprecated,即如果类型为timestamp的字段,如果没有明确声明默认值为NULL,则默认为NOT NULL。如果设置timestamp字段为NULL,则自动存储当前的timestamp。

3) Can't find error-message file '/usr/local/mysql/share/errmsg.sys'

执行MySQL的“bin/mysqld --initialize --user=mysql --explicit_defaults_for_timestamp”时报的错误。

这可能是因为之前有执行过,导致data目录不为空,通过“bin/mysqld --verbose --help|grep datadir”可以查看到默认的数据目录为/var/lib/mysql/。需要保证/var/lib/mysql/目录为空。或者通过指定参数--datadir改变数据目录,如“bin/mysqld --initialize --user=mysql --explicit_defaults_for_timestamp --datadir=/data/mysql/data”。

4) Can't find error-message file '/usr/local/mysql/share/errmsg.sys'

对于错误:

Can't find error-message file '/usr/local/mysql/share/errmsg.sys'. Check error-message file location and 'lc-messages-dir' configuration directive.

从官网下载的MySQL默认安装目录为/usr/local/mysql,如果实际为其它目录,则建议通过参数--basedir指定,否则会遇到不少安装问题。通过执行“bin/mysqld --verbose --help|grep basedir”即可看到“--basedir”的默认值为/usr/local/mysql/。

5) Failed to connect to the MetaStore Server

如果运行hiveserver2,遇到下列错误后,推荐打开DEBUG日志级别,以更查看更详细的信息,将日志配置文件hive-log4j.properties中的“hive.root.logger=WARN,DRFA”改成“hive.root.logger=DEBUG,WARN,DRFA”即可。

2014-04-23 06:00:04,169 WARN  hive.metastore (HiveMetaStoreClient.java:open(291)) - Failed to connect to the MetaStore Server...
2014-04-23 06:00:05,173 WARN  hive.metastore (HiveMetaStoreClient.java:open(291)) - Failed to connect to the MetaStore Server...
2014-04-23 06:00:06,177 WARN  hive.metastore (HiveMetaStoreClient.java:open(291)) - Failed to connect to the MetaStore Server...
2014-04-23 06:00:07,181 WARN  hive.metastore (HiveMetaStoreClient.java:open(291)) - Failed to connect to the MetaStore Server...
2014-04-23 06:00:08,185 WARN  hive.metastore (HiveMetaStoreClient.java:open(291)) - Failed to connect to the MetaStore Server...
2014-04-23 06:00:09,194 ERROR service.CompositeService (CompositeService.java:start(74)) - Error starting services HiveServer2
org.apache.hive.service.ServiceException: Unable to connect to MetaStore!
at org.apache.hive.service.cli.CLIService.start(CLIService.java:85)
at org.apache.hive.service.CompositeService.start(CompositeService.java:70)
at org.apache.hive.service.server.HiveServer2.start(HiveServer2.java:73)
at org.apache.hive.service.server.HiveServer2.main(HiveServer2.java:103)
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:483)
at org.apache.hadoop.util.RunJar.main(RunJar.java:212)

修改后,再次运行hiveserver2,日志变详细了,猜测是metastore没有起来,可以通过执行“hive --service metastore”来启动metastore。

2014-04-23 06:04:27,053 INFO  hive.metastore (HiveMetaStoreClient.java:open(244)) - Trying to connect to metastore with URI thrift://172.25.40.171:9083
2014-04-23 06:04:27,085 WARN  hive.metastore (HiveMetaStoreClient.java:open(288)) - Failed to connect to the MetaStore Server...
org.apache.thrift.transport.TTransportException: java.net.ConnectException: 拒绝连接
at org.apache.thrift.transport.TSocket.open(TSocket.java:185)
at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.open(HiveMetaStoreClient.java:283)
at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.(HiveMetaStoreClient.java:164)
at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.(HiveMetaStoreClient.java:104)
at org.apache.hive.service.cli.CLIService.start(CLIService.java:82)
at org.apache.hive.service.CompositeService.start(CompositeService.java:70)
at org.apache.hive.service.server.HiveServer2.start(HiveServer2.java:73)
at org.apache.hive.service.server.HiveServer2.main(HiveServer2.java:103)
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:483)
at org.apache.hadoop.util.RunJar.main(RunJar.java:212)

6) Version information not found in metastore

执行“./hive --service metastore”报下面这样的错误原因是未对metastore进行初始化,需要执行一次“schematool -dbType mysql -initSchema”。

SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
MetaException(message:Version information not found in metastore. )
at org.apache.hadoop.hive.metastore.ObjectStore.checkSchema(ObjectStore.java:5638)
at org.apache.hadoop.hive.metastore.ObjectStore.verifySchema(ObjectStore.java:5622)
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:483)
at org.apache.hadoop.hive.metastore.RetryingRawStore.invoke(RetryingRawStore.java:124)
at com.sun.proxy.$Proxy2.verifySchema(Unknown Source)
at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.getMS(HiveMetaStore.java:403)
at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.createDefaultDB(HiveMetaStore.java:441)
at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.init(HiveMetaStore.java:326)
at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.(HiveMetaStore.java:286)
at org.apache.hadoop.hive.metastore.RetryingHMSHandler.(RetryingHMSHandler.java:54)
at org.apache.hadoop.hive.metastore.RetryingHMSHandler.getProxy(RetryingHMSHandler.java:59)
at org.apache.hadoop.hive.metastore.HiveMetaStore.newHMSHandler(HiveMetaStore.java:4060)
at org.apache.hadoop.hive.metastore.HiveMetaStore.startMetaStore(HiveMetaStore.java:4263)
at org.apache.hadoop.hive.metastore.HiveMetaStore.main(HiveMetaStore.java:4197)
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:483)
at org.apache.hadoop.util.RunJar.main(RunJar.java:212)

7) java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D

解决办法:将hive-site.xml中所有的system:java.io.tmpdir都换成绝对路径,hive-1.2.1共有4处。

8) Establishing SSL connection without server's identity verification is not recommended

问题现象:

Wed Feb 17 10:39:37 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 SSL connection 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”,如:

jdbc:mysql://127.0.0.1:3306/hive?characterEncoding=UTF-8;useSSL=false。

9) SPARK_CLASSPATH was detected

SPARK_CLASSPATH was detected (set to '/data/hadoop/hive/lib/mysql-connector-java-5.1.38-bin.jar:').

This is deprecated in Spark 1.0+.

Please instead use:

 - ./spark-submit with --driver-class-path to augment the driver classpath

 - spark.executor.extraClassPath to augment the executor classpath

意思是不推荐在spark-env.sh中设置环境变量SPARK_CLASSPATH,可以改成如下推荐的方式:

./spark-sql --master yarn --driver-class-path /data/hadoop/hive/lib/mysql-connector-java-5.1.38-bin.jar

13. 相关文档

《HBase-0.98.0分布式安装指南》

《Hive 1.2.1安装指南》

《ZooKeeper-3.4.6分布式安装指南》

《Hadoop 2.3.0源码反向工程》

《在Linux上编译Hadoop-2.7.1》

《Accumulo-1.5.1安装指南》

《Drill 1.0.0安装指南》

《Shark 0.9.1安装指南》

更多,敬请关注技术博客:http://aquester.cublog.cn

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ChaMd5安全团队

CVE-2018-1000156:GNU Patch任意代码执行漏洞分析

GNU Patch 源码下载地址:https://ftp.gnu.org/gnu/patch/

2232
来自专栏Hadoop实操

如何在Kerberos与非Kerberos的CDH集群BDR不可用时复制数据

本文档描述了在Kerberos与非Kerberos的CDH集群之间BDR不可用的情况下实现数据互导。文档主要讲述

81711
来自专栏Hadoop实操

如何在Redhat7.4安装CDH6.0.0_beta1

7642
来自专栏乐沙弥的世界

基于Innobackupex的全备恢复

    对于MySQL数据库的热备,xtrabackup是大多数DBA朋友们的选择。xtrabackup内嵌了一个innobackupex可用于热备MySQL数...

3222
来自专栏Hadoop实操

使用命令行创建collection时Sentry给Solr赋权的问题

3323
来自专栏Hadoop实操

如何启用Oozie的HA

Oozie是基于Hadoop的作业调度工具,工作流引擎,在实际工作中,遇到对数据进行一连串的操作的时候很实用,不需要自己写一些处理代码了,只需要定义好各个act...

1.4K6
来自专栏Hadoop实操

如何在CDH未启用认证的情况下安装及使用Sentry

CDH平台中的安全,认证(Kerberos/LDAP)是第一步,授权(Sentry)是第二步。如果要启用授权,必须先启用认证。但在CDH平台中给出了一种测试模式...

2.4K8
来自专栏王磊的博客

Spring Boot 最佳实践(五)Spring Data JPA 操作 MySQL 8

JPA(Java Persistence API)Java持久化API,是 Java 持久化的标准规范,Hibernate是持久化规范的技术实现,而Spring...

2592
来自专栏SpringBoot 核心技术

第三十九章:基于SpringBoot & Quartz完成定时任务分布式单节点持久化

65210
来自专栏Hadoop实操

8.如何使用RedHat7的OpenLDAP和Sentry权限集成

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproje...

51211

扫码关注云+社区

领取腾讯云代金券