Hive 1.2.1&Spark&Sqoop安装指南
目录
5.4.1. 修改/etc/profile或~/.profile 5
5.4.2.3. 修改hive-log4j.properties 7
5.4.2.4. 修改hive-exec-log4j.properties 7
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:<value>hive</value>。
4) 修改javax.jdo.option.ConnectionPassword
将值设置为访问hive数据库的密码:<value>hive2016</value>。
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机器上执行,重复执行会报错。如果用的不是 mysql,而是 derby,则:schematool -dbType derby -initSchema。Derby 是一个 Java 实现的开源切入式数据库。
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.<init>(HiveMetaStoreClient.java:164) at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.<init>(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.<init>(HiveMetaStore.java:286) at org.apache.hadoop.hive.metastore.RetryingHMSHandler.<init>(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。