问题导读:
1. 如何在centos7.0下安装mysql5.6?
2. 如何安装hive?
3. 安装hive可能会遇到哪些问题?
接上篇:about云日志分析项目准备6-1:Hadoop、Spark集群搭建
这一篇主要讲解hive的安装过程
一、安装MySQL
1. 下载mysql源
由于hive默认的元数据存在derby中,但是这样会有很多弊端,所以改为MySQL,这儿简单说下MySQL的安装过程。1. 下载mysql
由于cent os 7.0 使用mariadb作为默认的数据库,所以在yum源中并没有mysql,需要我们自己下载
- wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
复制代码
2. 安装mysql
- sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
- sudo yum -y install mysql-community-server
复制代码
3. 初始化mysql
- sudo mysql_install_db --user=mysql
复制代码 注意:这一步必须要执行:否则之后登陆mysql时很有可能出错。
4. 启动mysql服务
- sudo systemctl start mysqld # 启动mysql服务
- sudo systemctl enable mysqld # 开机自启mysql
复制代码
5. 修改root用户密码
- mysqladmin -u root password 'nopassword' # 将root用户密码设置为nopassword
复制代码
6. 登录mysql
- mysql -uroot -pnopassword # 以root用户登录mysql
复制代码
7. 创建hiveUser用户
- create user 'hiveUser'@'%' identified by 'hive'; # 创建一个可以在任何机器上登录的hive用户,密码为hive
复制代码
8. 赋予hiveUser用户权限
- grant all privileges on hiveMetada.* to hiveUser@'%' identified by 'hive'; # hiveUser用户可以在任何机器上对hiveMetada库下的所有表进行任何操作
- flush privileges; # 刷新权限
复制代码
注意:在将hive元数据存入mysql中时,最好不要修改mysql的编码,否则在hive启动时会出现:Specified key was too long; max key length is 767 bytes异常。在文章中保留是为了将这个问题记录下来。
9. 修改mysql编码
查看现有的编码:
- show variables like '%character%';
复制代码
为了防止以后中文乱码,所以需要将所有编码设置为utf8。具体操作就是修改my.cn文件
需要保证[mysql]、[mysqld_safe]和[client] 标签有以下配置:
- default-character-set=utf8
复制代码
此外,在[mysqld]标签下还需增加以下配置:
- character_set_server=utf8
复制代码
重启mysqld,并登录mysql
- sudo systemctl restart mysqld
复制代码 登录mysql,查看现有编码
二、安装hive
1. 解压安装包
- tar -zxvf ~/jar/apache-hive-1.2.1-bin.tar.gz -C /data
- mv apache-hive-1.2.1-bin/ hive-1.2.1/
复制代码
2. 添加java链接mysql驱动
将java连接mysql的驱动放入${HIVE_HOME}/lib目录下
- scp ~/jar/mysql-connector-java-5.1.40-bin.jar /data/hive-1.2.1/lib/
- chmod 664 mysql-connector-java-5.1.40-bin.jar # 修改权限
复制代码
链接:http://pan.baidu.com/s/1boSbJ7x 密码:3d94
3. 配置hive
修改${HIVE_HOME}/conf目录下的配置文件,涉及到的配置文件有以下几个:
hive-env.sh
hive-site.xml
这两个文件从template文件拷贝得到
- cp hive-env.sh.template hive-env.sh
- cp hive-default.xml.template hive-site.xml
复制代码
配置文件1:hive-env.sh
- export HADOOP_HOME=/data/hadoop-2.6.5
- export HIVE_HOME=/data/hive-1.2.1
- export HIVE_CONF_DIR=/data/hive-1.2.1/conf
- export HIVE_AUX_JARS_PATH=/data/hive-1.2.1/lib,/data/hive-1.2.1/hcatalog/share/hcatalog
- export JAVA_HOME=/data/jdk1.8.0_111
- export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native
复制代码 说明:
hive.aux.jars.path:当用户自定义了UDF或者SerDe,这些插件的jar都要放到这个目录下,无默认值;
配置文件2:hive-site.xml
- <configuration>
- <property>
- <name>javax.jdo.option.ConnectionURL</name>
- <value>jdbc:mysql://localhost:3306/hiveMetada?createDatabaseIfNotExist=true</value>
- <description>JDBC connect string for a JDBC metastore</description>
- </property>
- <property>
- <name>javax.jdo.option.ConnectionDriverName</name>
- <value>com.mysql.jdbc.Driver</value>
- <description>Driver class name for a JDBC metastore</description>
- </property>
- <property>
- <name>javax.jdo.option.ConnectionUserName</name>
- <value>hiveUser</value>
- <description>username to use against metastore database</description>
- </property>
- <property>
- <name>javax.jdo.option.ConnectionPassword</name>
- <value>hive</value>
- <description>password to use against metastore database</description>
- </property>
- <property>
- <name>hive.aux.jars.path</name>
- <value>file:///data/hive-1.2.1/lib/mysql-connector-java-5.1.40-bin.jar
- </value>
- </property>
- </configuration>
复制代码
4. 添加环境变量
将以下内容加入到~/.bashrc文件中,
- export HIVE_HOME=/data/hive-1.2.1
- export PATH=$HIVE_HOME/bin:$PATH
复制代码
然后执行下面的命令:source ~/.bashrc
5. 启动验证
在shell命令中直接输入hive,然后使用create table mytest(age int, name string);如果成功的话,结果会如下图所示:
如果失败的话,可以看下第三部分的错误总结。
三、趟过的坑
1. Terminal initialization failed; falling back to unsupported
hive配置好了之后,启动出错抛出Terminal initialization failed; falling back to unsupported异常。
[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.<init>(ConsoleReader.java:229)
at jline.console.ConsoleReader.<init>(ConsoleReader.java:221)
at jline.console.ConsoleReader.<init>(ConsoleReader.java:209)
at org.apache.hadoop.hive.cli.CliDriver.setupConsoleReader(CliDriver.java:787)
at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:721)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:681)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:621)
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)
Exception in thread "main" java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
at jline.console.ConsoleReader.<init>(ConsoleReader.java:230)
at jline.console.ConsoleReader.<init>(ConsoleReader.java:221)
at jline.console.ConsoleReader.<init>(ConsoleReader.java:209)
at org.apache.hadoop.hive.cli.CliDriver.setupConsoleReader(CliDriver.java:787)
at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:721)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:681)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:621)
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)
解决办法:删除位于$HADOOP_HOME/share/hadoop/yarn/lib/jline-0.9.94.jar 的 jline-0.9.94.jar 文件,重新启动。
2. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes
如果修改mysql的编码了,启动hive时,在/tmp/{user.name}/hive.log(在这儿就是/tmp/aboutyun/hive.log)中会出现该异常,之后建表时也会报错。
解决办法:不要修改mysql的默认编码
|