大数据 Hive

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Notzuonotdied/article/details/82796238

前言

Hive是Hadoop中的一个重要子项目,它利用的是MapReduce编程技术,实现了部分SQL语句,提供了类SQL的编程接口。Hive的出现极大地推进了Hadoop在数据仓库方面的发展。

Hive 特点

  • 适用于批处理系统,任务是较高延迟的。
  • 不提供数据排序和查询Cache的功能。
  • 不提供在线事务处理。
  • 不提供实时的查询和记录级的更新。
  • 可以处理不变的大规模的数据集,如网络日志等批量任务。
  • 具备可扩展性,基于Hadoop平台可以自动适应机器数目和用户定义的函数库。
  • 可延展性,结合MapReduce和用户定义的函数库。
  • 良好的容错性
  • 低约束的数据输入格式。

Hive 数据存放

Hive数据在HDFSwarehouse目录下,一个表对应一个子目录。本地的/tmp目录存放日志和执行计划。

Hive 表

类型 说明
内部表 创建内部表时,会将数据移动到数据仓库指向的路径;在删除表的时候,内部表的元数据和数据会被一起删除
外部表 创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变;在删除表的时候,外部表只删除元数据,不删除数据
  • 外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。

Hive配置安装

环境:Centos 7

由于Hive的元数据可能要面临不断地更新、修改和读取操作,所以它显然不适合使用Hadoop文件系统进行存储。目前Hive将元数据存储在RDBMS中,比如存储在MySQL中。

MySQL配置安装

  • 任选Hadoop中的一个节点安装,我选择的是我的Node2节点。
  • 安装需要的依赖:
    • yum -y install perl perl-devel
    • yum -y install libaio-devel
  • 下载:
    • wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz
  • 解压:tar -zxvf mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz
  • 添加用户组:groupadd mysql
  • 添加用户mysql到用户组mysqluseradd -g mysql mysql
  • 移动mysqlcd /usr/local/mysql/
  • 创建数据存放目录:mkdir ./data/mysql
  • 修改所属用户组:chown -R mysql:mysql ./
  • 修改数据目录:./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data/mysql
  • 复制启动脚本:cp support-files/mysql.server /etc/init.d/mysqld
  • 授予执行权限:chmod 755 /etc/init.d/mysqld
  • 复制mysql的配置文件:cp support-files/my-default.cnf /etc/my.cnf
  • 修改启动脚本:vim /etc/init.d/mysqld
    • 找到basedirdatadir并修改:
    • basedir=/usr/local/mysql/
    • datadir=/usr/local/mysql/data/mysql
  • 启动mysqlservice mysqld start
  • 关闭mysqlservice mysqld stop
  • mysql状态:service mysqld status
  • 修改密码:mysqladmin -u root password "newpwd"
  • 进入MySQL命令行:./bin/mysql -uroot
  • 加入环境变量:vim /etc/profile
    • export PATH=$PATH:/usr/local/mysql/bin
    • source /etc/profile

授权

  • 授权:
    • *.*:所有库下的所有表。
    • %:任何IP地址或主机都可以连接。
  • 启动mysql的命令行:/bin/mysql -uroot,在命令行中输入一下内容:
    • GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
    • FLUSH PRIVILEGES;

安装出现的错误

  • sqlyog连接时,报1130错误,是由于没有给远程连接的用户权限问题。
    • 解决1:更改 ‘mysql’数据库‘user’表‘host’项,从‘localhost’改成‘%’。
      • use mysql;
      • select 'host' from user where user='root';
      • update user set host = '%' where user ='root';
      • flush privileges;
    • 解决2:直接授权
      • GRANT ALL PRIVILEGES ON *.* TO ‘root’@'%’ IDENTIFIED BY ‘youpassword’ WITH GRANT OPTION;

安装Hive

  • 下载:下载页面
    • 本文使用的Hive的版本是1.2.2
    • wget http://mirror.bit.edu.cn/apache/hive/hive-1.2.2/apache-hive-1.2.2-bin.tar.gz
  • 解压:tar -zxvf apache-hive-1.2.2-bin.tar.gz
  • 修改配置文件请参照下一小节脚本配置
  • 启动方式:bin/hive

脚本配置

Hiveconf目录下增加脚本hive-site.xml,向其中写入一下内容:

  • javax.jdo.option.ConnectionURL
    • 这里的配置需要自行修改node2的值为mysql安装的节点的IP地址。
  • javax.jdo.option.ConnectionUserName
    • mysql数据库的用户名,如果是按照上述配置就不用修改。
  • javax.jdo.option.ConnectionPassword
    -mysql数据库的登录密码,如果是按照上述配置就不用修改。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://node2:3306/hive?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>root</value>
    <description>username to use against metastore database</description>
  </property>

  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>root</value>
    <description>password to use against metastore database</description>
  </property>
</configuration>

可能出现的错误

  • The specified datastore driver ("com.mysql.jdbc.Driver") was not found in the CLASSPATH.——缺少JDBC驱动。
    • 下载:wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.47.tar.gz
    • 解压:tar -zxvf mysql-connector-java-5.1.47.tar.gz
    • 将其中的*.jar移动到Hivelib目录下mv *.jar hive/lib
  • Exception in thread "main" java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
    • 问题分析:Hadoop 2.6版本的lib中的Jline版本和Hive 1.2.2版本的lib下的Jline版本不一致。
    • 解决:删除所有Hadoop下的lib下的Jline,替换为Hive的lib下的Jline

Mysql配置成功

当启动完毕Hive之后,可以去Mysql中查看Hive数据库是否创建了表。如果提示如下,则安装成功了。

mysql> use hive;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+---------------------------+
| Tables_in_hive            |
+---------------------------+
| BUCKETING_COLS            |
| CDS                       |
| COLUMNS_V2                |
| DATABASE_PARAMS           |
| DBS                       |
| FUNCS                     |
| FUNC_RU                   |
| GLOBAL_PRIVS              |
| PARTITIONS                |
| PARTITION_KEYS            |
| PARTITION_KEY_VALS        |
| PARTITION_PARAMS          |
| PART_COL_STATS            |
| ROLES                     |
| SDS                       |
| SD_PARAMS                 |
| SEQUENCE_TABLE            |
| SERDES                    |
| SERDE_PARAMS              |
| SKEWED_COL_NAMES          |
| SKEWED_COL_VALUE_LOC_MAP  |
| SKEWED_STRING_LIST        |
| SKEWED_STRING_LIST_VALUES |
| SKEWED_VALUES             |
| SORT_COLS                 |
| TABLE_PARAMS              |
| TAB_COL_STATS             |
| TBLS                      |
| VERSION                   |
+---------------------------+
29 rows in set (0.00 sec)

Hive 使用

Hive

  • bin/hive

Thrift

  • 服务端启动:
    • 启动为前台:bin/hiveserver2
    • 启动为后台:nohup bin/hiveserver2 1>/var/log/hiveserver.log 2>/var/log/hiveserver.err &
  • 客户端启动:
    • 启动客户端bin/beeline,命令行中输入以下命令:
    • !connect jdbc:hive2://localhost:10000

Hive学习资料

网址 地址
Hive的Wiki页面 http://wiki.apache.org/hadoop/Hive
Hive入门指南 http://wiki.apache.org/hadoop/Hive/GettingStarted
HQL查询语言指南 http://wiki.apache.org/hadoop/Hive/HiveQL
演示文稿 http://wiki.apache.org/hadoop/Hive/Presentations

附录

猜你喜欢

转载自blog.csdn.net/Notzuonotdied/article/details/82796238