写点什么

安装和体验 hive

作者:程序员欣宸
  • 2022-11-01
    广东
  • 本文字数:3855 字

    阅读完需:约 13 分钟

安装和体验hive

欢迎访问我的 GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

关于 hive

  • Hive 是种基于 Hadoop 的数据仓库工具,将结构化的数据文件映射为一张数据库表,并提供类 SQL 查询功能。

环境信息

  • 本文对应的环境信息如下:


  1. CentOS Linux release 7.5.1804

  2. JDK:1.8.0_191

  3. hadoop:2.7.7

  4. hive:1.2.2

hadoop 的部署和启动

  • hadoop 环境的部署和启动请参考《Linux 部署 hadoop2.7.7 集群》

  • 注意: 确保环境变量中有 HADOOP_HOME 的配置;

安装和配置 MySQL(5.7.27 版本)

  • MySQL 用来存储元数据,我这里为了简化操作是在 docker 环境下部署的,一行命令即可:


docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=888888 -idt mysql:5.7.27
复制代码


  • 进入 mysql 容器:


docker exec -it mysql /bin/bash
复制代码


  • 进入容器后连接 mysql,密码是 888888


mysql -h127.0.0.1 -uroot -p
复制代码


  • 新建名为 hive 的 mysql 账号:


CREATE USER 'hive' IDENTIFIED BY '888888';
复制代码


  • 给 hive 账号授权访问(并且 hvie 账号还有权给其他账号授权):


GRANT ALL PRIVILEGES ON *.* TO 'hive'@'%' WITH GRANT OPTION;
复制代码


  • 刷新权限数据:


flush privileges;
复制代码


  • 在宿主机的终端执行以下命令重启 mysql 服务:


docker exec mysql service mysql restart
复制代码


  • 再次进入 mysql 容器,以 hive 账号的身份登录 mysql:


mysql -uhive -p
复制代码


  • 创建名为 hive 的数据库:


CREATE DATABASE hive;
复制代码

安装 hive

  • 去 hive 官网下载,地址是:http://mirror.bit.edu.cn/apache/hive/ ,选择合适的版本,如下图:

  • 注意 :接下来的操作用的账号都不是 root,而是 hadoop

  • 在 hadoop 账号的家目录下解压刚刚下载的 apache-hive-1.2.2-bin.tar.gz 文件,是个名为 apache-hive-1.2.2-bin 的目录;

  • 编辑 hadoop 账号的 .bash_profile 文件,增加一个环境变量,就是将刚刚解压出来的 apache-hive-1.2.2-bin 文件夹的完整路径:


export HIVE_HOME=/home/hadoop/apache-hive-1.2.2-bin
复制代码


  • 修改完毕后,重新打开一个 ssh 连接,或者执行 source ~/.bash_profile 让环境变量立即生效;

  • 进入目录 apache-hive-1.2.2-bin/conf/ ,用模板文件复制一份配置文件:


cp hive-default.xml.template hive-default.xml
复制代码


  • 在此目录创建名为 hive-site.xml 的文件,内容如下:


<?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://127.0.0.1:3306/hive?createDatabaseIfNotExist=true</value>  </property>  <property>    <name>javax.jdo.option.ConnectionDriverName</name>    <value>com.mysql.jdbc.Driver</value>  </property>  <property>    <name>javax.jdo.option.ConnectionUserName</name>    <value>hive</value>  </property>  <property>    <name>javax.jdo.option.ConnectionPassword</name>    <value>888888</value>  </property></configuration>
复制代码


初始化和启动 hive

  • 进入目录 apache-hive-1.2.2-bin/bin ,执行以下命令初始化:


./schematool -initSchema -dbType mysql
复制代码


  • 操作成功后,控制台提示:


[hadoop@node0 bin]$ ./schematool -initSchema -dbType mysqlMetastore connection URL:   jdbc:mysql://127.0.0.1:3306/hive?createDatabaseIfNotExist=trueMetastore Connection Driver :   com.mysql.jdbc.DriverMetastore connection User:   hiveStarting metastore schema initialization to 1.2.0Initialization script hive-schema-1.2.0.mysql.sqlInitialization script completedschemaTool completed
复制代码


  • 在 mysql 上看一下,数据库 hvie 下建了多个表:


mysql> show tables;+---------------------------+| Tables_in_hive            |+---------------------------+| BUCKETING_COLS            || CDS                       || COLUMNS_V2                || COMPACTION_QUEUE          || COMPLETED_TXN_COMPONENTS  || DATABASE_PARAMS           || DBS                       || DB_PRIVS                  || DELEGATION_TOKENS         || FUNCS                     || FUNC_RU                   || GLOBAL_PRIVS              || HIVE_LOCKS                || IDXS                      || INDEX_PARAMS              || MASTER_KEYS               || NEXT_COMPACTION_QUEUE_ID  || NEXT_LOCK_ID              || NEXT_TXN_ID               || NOTIFICATION_LOG          || NOTIFICATION_SEQUENCE     || NUCLEUS_TABLES            || PARTITIONS                || PARTITION_EVENTS          || PARTITION_KEYS            || PARTITION_KEY_VALS        || PARTITION_PARAMS          || PART_COL_PRIVS            || PART_COL_STATS            || PART_PRIVS                || ROLES                     || ROLE_MAP                  || 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                      || TBL_COL_PRIVS             || TBL_PRIVS                 || TXNS                      || TXN_COMPONENTS            || TYPES                     || TYPE_FIELDS               || VERSION                   |+---------------------------+53 rows in set (0.00 sec)
复制代码


  • 在目录 /home/hadoop/apache-hive-1.2.2-bin/bin 执行命令 ./hive 即可启动;

  • 初始化和启动已经完成,接下来验证 hive;

验证

  • 前面执行 ./hive 之后,已进入了对话模式,输入以下命令创建名为 test001 的数据库:


CREATE database test001;
复制代码


  • 选择该数据库:


use test001;
复制代码


  • 创建一个名为 test_table 的表:


create table test_table(id  INT,word  STRING)ROW FORMAT DELIMITEDFIELDS TERMINATED BY  '\t'STORED AS TEXTFILE;
复制代码


  • 新建一个 ssh 连接,创建名为 hive_test.txt 的文本文件,内容如下:


1  aaa2  bbb3  ccc4  ddd5  eee6  fff
复制代码


  • 回到和 hive 对话模式的控制台,输入以下命令,将上述文本文件的内容导入到 test001.test_table 表中:


LOAD DATA LOCAL INPATH '/home/hadoop/hive_test.txt' INTO TABLE test001.test_table;
复制代码


控制台提示如下:


hive> LOAD DATA LOCAL INPATH '/home/hadoop/hive_test.txt' INTO TABLE test001.test_table;Loading data to table test001.test_tableTable test001.test_table stats: [numFiles=1, totalSize=36]OKTime taken: 0.264 seconds
复制代码


  • 执行 select 操作,可以看到数据已经全部入库:


hive> select * from test_table;OK1  aaa2  bbb3  ccc4  ddd5  eee6  fffTime taken: 0.453 seconds, Fetched: 6 row(s)
复制代码


  • 执行 group by 查询:


select word,count(word) from test_table GROUP BY word;
复制代码


  • 此时会启动一个 job 来完成上述查询,控制台输出如下:


hive> select word,count(word) from test_table GROUP BY word;Query ID = hadoop_20191007190528_3bd50401-267b-4d75-8b08-17ead5f0d790Total jobs = 1Launching Job 1 out of 1Number of reduce tasks not specified. Estimated from input data size: 1In order to change the average load for a reducer (in bytes):  set hive.exec.reducers.bytes.per.reducer=<number>In order to limit the maximum number of reducers:  set hive.exec.reducers.max=<number>In order to set a constant number of reducers:  set mapreduce.job.reduces=<number>Starting Job = job_1570427946161_0002, Tracking URL = http://node0:8088/proxy/application_1570427946161_0002/Kill Command = /home/hadoop/hadoop-2.7.7/bin/hadoop job  -kill job_1570427946161_0002Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 12019-10-07 19:05:34,812 Stage-1 map = 0%,  reduce = 0%2019-10-07 19:05:39,991 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 1.29 sec2019-10-07 19:05:46,201 Stage-1 map = 100%,  reduce = 100%, Cumulative CPU 3.23 secMapReduce Total cumulative CPU time: 3 seconds 230 msecEnded Job = job_1570427946161_0002MapReduce Jobs Launched: Stage-Stage-1: Map: 1  Reduce: 1   Cumulative CPU: 3.23 sec   HDFS Read: 7000 HDFS Write: 36 SUCCESSTotal MapReduce CPU Time Spent: 3 seconds 230 msecOKaaa  1bbb  1ccc  1ddd  1eee  1fff  1Time taken: 18.614 seconds, Fetched: 6 row(s)
复制代码


  • 至此,hive 的安装和体验实战就完成了,希望本文能给一起学习 hive 的读者们一些参考。

欢迎关注 InfoQ:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...


发布于: 8 小时前阅读数: 11
用户头像

搜索"程序员欣宸",一起畅游Java宇宙 2018-04-19 加入

前腾讯、前阿里员工,从事Java后台工作,对Docker和Kubernetes充满热爱,所有文章均为作者原创,个人Github:https://github.com/zq2599/blog_demos

评论

发布
暂无评论
安装和体验hive_hadoop_程序员欣宸_InfoQ写作社区