分享

about云日志分析项目准备7:Hive安装和配置

Oner 发表于 2016-12-24 20:34:50 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 2 3553
问题导读:
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,需要我们自己下载
  1. wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
复制代码

2. 安装mysql
  1. sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
  2. sudo yum -y install mysql-community-server
复制代码

3. 初始化mysql
  1. sudo mysql_install_db --user=mysql
复制代码
注意:这一步必须要执行:否则之后登陆mysql时很有可能出错。

4. 启动mysql服务
  1. sudo systemctl start mysqld # 启动mysql服务
  2. sudo systemctl enable mysqld # 开机自启mysql
复制代码

5. 修改root用户密码
  1. mysqladmin -u root password 'nopassword'  # 将root用户密码设置为nopassword
复制代码

6. 登录mysql
  1. mysql -uroot -pnopassword # 以root用户登录mysql
复制代码

7. 创建hiveUser用户
  1. create user 'hiveUser'@'%' identified by 'hive'; # 创建一个可以在任何机器上登录的hive用户,密码为hive
复制代码

8. 赋予hiveUser用户权限
  1. grant all privileges  on hiveMetada.* to hiveUser@'%' identified by 'hive'; # hiveUser用户可以在任何机器上对hiveMetada库下的所有表进行任何操作
  2. flush privileges; # 刷新权限
复制代码

注意:在将hive元数据存入mysql中时,最好不要修改mysql的编码,否则在hive启动时会出现:Specified key was too long; max key length is 767 bytes异常。在文章中保留是为了将这个问题记录下来。
9. 修改mysql编码
查看现有的编码:
  1. show variables like '%character%';
复制代码
20161224162027.jpg
为了防止以后中文乱码,所以需要将所有编码设置为utf8。具体操作就是修改my.cn文件
  1. sudo vim /etc/my.cnf
复制代码
需要保证[mysql]、[mysqld_safe]和[client] 标签有以下配置:
  1. default-character-set=utf8
复制代码

此外,在[mysqld]标签下还需增加以下配置:
  1. character_set_server=utf8
复制代码
20161224164241.jpg
重启mysqld,并登录mysql
  1. sudo systemctl restart mysqld
复制代码
登录mysql,查看现有编码
20161224171332.jpg



二、安装hive

1. 解压安装包
  1. tar -zxvf ~/jar/apache-hive-1.2.1-bin.tar.gz -C /data
  2. mv apache-hive-1.2.1-bin/ hive-1.2.1/
复制代码

2. 添加java链接mysql驱动

将java连接mysql的驱动放入${HIVE_HOME}/lib目录下
  1. scp ~/jar/mysql-connector-java-5.1.40-bin.jar /data/hive-1.2.1/lib/
  2. 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文件拷贝得到
  1. cp hive-env.sh.template hive-env.sh
  2. cp hive-default.xml.template hive-site.xml
复制代码

配置文件1:hive-env.sh
  1. export HADOOP_HOME=/data/hadoop-2.6.5
  2. export HIVE_HOME=/data/hive-1.2.1
  3. export HIVE_CONF_DIR=/data/hive-1.2.1/conf
  4. export HIVE_AUX_JARS_PATH=/data/hive-1.2.1/lib,/data/hive-1.2.1/hcatalog/share/hcatalog
  5. export JAVA_HOME=/data/jdk1.8.0_111
  6. export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native
复制代码
说明:
hive.aux.jars.path:当用户自定义了UDF或者SerDe,这些插件的jar都要放到这个目录下,无默认值;

配置文件2:hive-site.xml
  1. <configuration>
  2.         <property>
  3.                 <name>javax.jdo.option.ConnectionURL</name>
  4.                 <value>jdbc:mysql://localhost:3306/hiveMetada?createDatabaseIfNotExist=true</value>
  5.                 <description>JDBC connect string for a JDBC metastore</description>
  6.         </property>

  7.         <property>
  8.                 <name>javax.jdo.option.ConnectionDriverName</name>
  9.                 <value>com.mysql.jdbc.Driver</value>
  10.                 <description>Driver class name for a JDBC metastore</description>
  11.         </property>

  12.         <property>
  13.                 <name>javax.jdo.option.ConnectionUserName</name>
  14.                 <value>hiveUser</value>
  15.                 <description>username to use against metastore database</description>
  16.         </property>

  17.         <property>
  18.                 <name>javax.jdo.option.ConnectionPassword</name>
  19.                 <value>hive</value>
  20.                 <description>password to use against metastore database</description>
  21.         </property>

  22.         <property>
  23.                 <name>hive.aux.jars.path</name>
  24.                 <value>file:///data/hive-1.2.1/lib/mysql-connector-java-5.1.40-bin.jar
  25.                 </value>
  26.         </property>
  27. </configuration>
复制代码

4. 添加环境变量


将以下内容加入到~/.bashrc文件中,
  1. export HIVE_HOME=/data/hive-1.2.1
  2. export PATH=$HIVE_HOME/bin:$PATH
复制代码

然后执行下面的命令:source ~/.bashrc

5. 启动验证

在shell命令中直接输入hive,然后使用create table mytest(age int, name string);如果成功的话,结果会如下图所示:
20161224202210.jpg
如果失败的话,可以看下第三部分的错误总结。

三、趟过的坑

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的默认编码


已有(2)人评论

跳转到指定楼层
pig2 发表于 2017-4-8 19:43:16
本帖最后由 pig2 于 2017-4-8 19:44 编辑

由于版本的原因出现下面错误
  1. [ERROR] Terminal initialization failed; falling back to unsupported
  2. java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
  3.         at jline.TerminalFactory.create(TerminalFactory.java:101)
  4.         at jline.TerminalFactory.get(TerminalFactory.java:158)
  5.         at jline.console.ConsoleReader.<init>(ConsoleReader.java:229)
  6.         at jline.console.ConsoleReader.<init>(ConsoleReader.java:221)
  7.         at jline.console.ConsoleReader.<init>(ConsoleReader.java:209)
  8.         at org.apache.hadoop.hive.cli.CliDriver.setupConsoleReader(CliDriver.java:787)
  9.         at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:721)
  10.         at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:681)
  11.         at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:621)
  12.         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  13.         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  14.         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  15.         at java.lang.reflect.Method.invoke(Method.java:497)
  16.         at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
  17.         at org.apache.hadoop.util.RunJar.main(RunJar.java:136)

  18. Exception in thread "main" java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
  19.         at jline.console.ConsoleReader.<init>(ConsoleReader.java:230)
  20.         at jline.console.ConsoleReader.<init>(ConsoleReader.java:221)
  21.         at jline.console.ConsoleReader.<init>(ConsoleReader.java:209)
  22.         at org.apache.hadoop.hive.cli.CliDriver.setupConsoleReader(CliDriver.java:787)


复制代码




解决办法:
进入/data/hadoop/share/hadoop/yarn/lib找到 jline-0.9.94.jar 文件删除。然后在启动






回复

使用道具 举报

pig2 发表于 2017-4-8 19:47:55
9. 修改mysql编码
只需要修改
[mysqlid]即可
1.jpg


ERROR 1 (HY000): Can't create/write to file './hive/db.opt' (Errcode: 2 - No such file or directory)

1) 创建目录 /var/lib/mysql/tmp

2)授权 chown mysql:mysql /var/lib/mysql/tmp

3) 在/etc/my.cnf中 [mysqld] 部分添加: tmpdir = /var/lib/mysql/tmp

4) 重启mysql

sudo systemctl restart mysqld


回复

使用道具 举报

关闭

推荐上一条 /2 下一条