1、Hive入门教程

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据。它架构在Hadoop之上,总归为大数据,并使得查询和分析方便。

在Hive中,Hive是SQL解析引擎,它将SQL语句转译成M/R Job然后在Hadoop执行。Hive的表其实就是HDFS的目录/文件,按表名把文件夹分开。如果是分区表,则分区值是子文件夹,可以直接在M/RJob里使用这些数据。

最初,Hive是由Facebook开发,后来由Apache软件基金会开发,并作为进一步将它作为名义下ApacheHive为一个开源项目。它用在好多不同的公司。例如,亚马逊使用它在Amazon Elastic、MapReduce。

1)Hive原理图

2)Hive系统架构

Hive系统架构图:

  • 用户接口:

CLI,即Shell命令行。

JDBC/ODBC是Hive的Java,与使用传统数据库JDBC的方式类似。

WebGUI是通过浏览器访问Hive。

Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++,Java, Go,Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript,Node.js, Smalltalk, and OCaml这些编程语言间无缝结合的、高效的服务。

解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划(plan)的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。

Hive的数据存储在HDFS中,大部分的查询由MapReduce完成(包含*的查询,比如select *from table不会生成MapRedcue任务)。

Hive将元数据存储在数据库中(metastore),目前只支持mysql、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。

  • Metastore组件

Hive的Metastore组件是Hive元数据集中存放地。Metastore组件包括两个部分:Metastore服务和后台数据的存储。后台数据存储的介质就是关系数据库,例如Hive默认的嵌入式磁盘数据库derby,还有mysql数据库。Metastore服务是建立在后台数据存储介质之上,并且可以和Hive服务进行交互的服务组件,默认情况下,Metastore服务和Hive服务是安装在一起的,运行在同一个进程当中。我也可以把Metastore服务从Hive服务里剥离出来,Metastore独立安装在一个集群里,Hive远程调用Metastore服务,这样我们可以把元数据这一层放到防火墙之后,客户端访问Hive服务,就可以连接到元数据这一层,从而提供了更好的管理性和安全保障。使用远程的Metastore服务,可以让Metastore服务和hive服务运行在不同的进程里,这样也保证了Hive的稳定性,提升了Hive服务的效率。

Hive的执行流程如下图所示:

3)前置条件

Hive是建立Hadoop环境安装之上的,所以需要Hadoop的集群环境搭建,Hive即需要依赖于HDFS又需要依赖YARN。安装好Hadoop后需要进行启动HDFS和YARN。

环境安装参考资料:Linux搭建Hadoop-2.7.2分布式集群

环境安装参考资料:

1、Hive下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.3.7/apache-hive-2.3.7-bin.tar.gz

2、Hadoop和Hbase版本关系表:

Hive版本

Hadoop版本

Hive-2.3.0

2.x.y

Hive-2.2.0

2.x.y

Hive-2.1.1

2.x.y

Hive-2.1.0

2.x.y

Hive-2.0.0

2.x.y

Hive-1.2.2

1.x.y、2.x.y

Hive-1.2.1

1.x.y、2.x.y

Hive-1.1.1

1.x.y、2.x.y

Hive-1.0.1

1.x.y、2.x.y

Hive-1.0.0

1.x.y、2.x.y

Hive-0.13.1

0.20.x.y、0.23.x.y、1.x.y、2.x.y

Hive-0.13.0

0.20.x.y、0.23.x.y、1.x.y、2.x.y

Hive-0.12.0

0.20.x.y、0.23.x.y、1.x.y、2.x.y

Hive-0.11.0

0.20.x.y、0.23.x.y、1.x.y、2.x.y

Hive-0.10.0

0.20.x.y、0.23.x.y、1.x.y、2.x.y

4)安装Hive

1、下载Hive安装包

[root@node1 ~]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.3.7/apache-hive-2.3.7-bin.tar.gz

2、解压Hive安装包

[root@node1 ~]# tar xf apache-hive-2.3.7-bin.tar.gz

[root@node1 ~]# mv apache-hive-2.3.7-bin /usr/local/hive

[root@node1 ~]# ls -l /usr/local/hive/

total 56

drwxr-xr-x 3 root root 133 Dec 3 10:56 bin

drwxr-xr-x 2 root root 4096 Dec 3 10:56 binary-package-licenses

drwxr-xr-x 2 root root 4096 Dec 3 10:56 conf

drwxr-xr-x 4 root root 34 Dec 3 10:56 examples

drwxr-xr-x 7 root root 68 Dec 3 10:56 hcatalog

drwxr-xr-x 2 root root 44 Dec 3 10:56 jdbc

drwxr-xr-x 4 root root 12288 Dec 3 10:56 lib

-rw-r--r-- 1 root root 20798 Mar 10 2020 LICENSE

-rw-r--r-- 1 root root 230 Apr 8 2020 NOTICE

-rw-r--r-- 1 root root 361 Apr 8 2020 RELEASE_NOTES.txt

drwxr-xr-x 4 root root 35 Dec 3 10:56 scripts

注解:

bin:包含hive的命令shell脚本

binary-package-licenses:包含了LICENSE说明文件

conf:包含hive配置文件

examples:包含了示例

hcatalog:Metastore操作的元数据目录

jdbc:提供了hive-jdbc-2.3.0-standalone.jar包

scripts:提供了sql脚本

3、配置环境变量

[root@node1 ~]# vim /etc/profile

export HIVE_HOME=/usr/local/hive

export PATH=$PATH:$HIVE_HOME/bin

4、执行命令source /etc/profile使其生效

[root@node1 ~]# source /etc/profile

5、配置Hive

[root@node1 ~]# cd /usr/local/hive/conf

[root@node1 conf]# cp hive-default.xml.template hive-site.xml

# 新建HDFS目录

[root@node1 conf]# hadoop fs -mkdir -p /data/hive/warehouse

[root@node1 conf]# hadoop fs -mkdir -p /data/hive/tmp

[root@node1 conf]# hadoop fs -mkdir -p /data/hive/log

[root@node1 conf]# hadoop fs -chmod -R 777 /data/hive/warehouse

[root@node1 conf]# hadoop fs -chmod -R 777 /data/hive/tmp

[root@node1 conf]# hadoop fs -chmod -R 777 /data/hive/log

# 用以下命令检查目录是否创建成功

[root@node1 conf]# hadoop fs -ls /user/hive

Found 3 items

drwxrwxrwx - root supergroup 0 2020-12-03 13:36 /data/hive/log

drwxrwxrwx - root supergroup 0 2020-12-03 13:34 /data/hive/tmp

drwxrwxrwx - root supergroup 0 2020-12-03 13:36 /data/hive/warehouse

6、修改hive-site.xml

# 搜索hive.exec.scratchdir,将该name对应的value修改为/data/hive/tmp

hive.exec.scratchdir

/data/hive/tmp

# 搜索hive.querylog.location,将该name对应的value修改为

/data/hive/log/hadoop

hive.querylog.locationname>

/data/hive/log/hadoopvalue>

Location of Hive run time structured logfiledescription>

property>

# 搜索javax.jdo.option.connectionURL,将该name对应的value修改为Mysql的地址

javax.jdo.option.ConnectionURL

jdbc:mysql://172.168.1.14:3306/hive?createDatabaseIfNotExist=true

JDBC connectstring for a JDBC metastore.

To use SSL toencrypt/authenticate the connection, provide

database-specific SSL flag in theconnection URL.

For example,jdbc:postgresql://myhost/db?ssl=true for postgres database.

# 搜索javax.jdo.option.ConnectionDriverName,将该name对应的value修改为Mysql驱动类路径

javax.jdo.option.ConnectionDriverName

com.mysql.jdbc.Driver

Driverclass name for a JDBC metastore

# 搜索javax.jdo.option.ConnectionUserName,将对应的value修改为Mysql数据库登录名

javax.jdo.option.ConnectionUserName

hive

Username touse against metastore database

# 搜索javax.jdo.option.ConnectionPassword,将对应的value修改为Mysql数据库的登录密码

javax.jdo.option.ConnectionPassword

123456

password to useagainst metastore database

# 创建tmp目录

[root@node1 conf]# mkdir ../tmp

# 把${system:java.io.tmpdir}改成/usr/local/hive/tmp

[root@node1 conf]# sed -i 's#${system:java.io.tmpdir}#/usr/local/hive/tmp#g' hive-site.xml

# 把${system:user.name}改成${user.name}

[root@node1 conf]# sed -i 's#${system:user.name}#${user.name}#g' hive-site.xml

7、修改hive-env.sh

[root@node1 conf]# mv hive-env.sh.template hive-env.sh

[root@node1 conf]# vim hive-env.sh

# 加入以下内容

HADOOP_HOME=/usr/local/hadoop-2.7.2

export HIVE_CONF_DIR=/usr/local/hive/conf

8、下载Mysql驱动包

[root@node1 conf]# cd ../lib/

[root@node1 lib]# https://cdn.mysql.com/archives/mysql-connector-java-5.1/mysql-connector-java-5.1.46.zip

[root@node1 lib]# unzip mysql-connector-java-5.1.46.zip

[root@node1 lib]# mv mysql-connector-java-5.1.46/mysql-connector-java-5.1.46.jar .

[root@node1 lib]# rm -rf mysql-connector-java-5.1.46*

9、创建hive数据库及授权

[root@node1 ~]# mysql -uroot -p

mysql> create database hive;

mysql> grant all on hive_test@'%' identifide by '123456';

mysql> flush privileges;

10、初始化Mysql

[root@node1 lib]# cd ../bin

[root@node1 bin]# ./schematool -initSchema -dbType mysql

SLF4J: Class path contains multiple SLF4J bindings.

SLF4J: Found binding in [jar:file:/usr/local/hive/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Found binding in [jar:file:/usr/local/hadoop-2.7.2/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLo

ggerBinder.class]SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]

Metastore connection URL:     jdbc:mysql://172.168.1.14:3306/hive?createDatabaseIfNotExist=true

Metastore Connection Driver :     com.mysql.jdbc.Driver

Metastore connection User:     hive

Starting metastore schema initialization to 2.3.0

Initialization script hive-schema-2.3.0.mysql.sql

Initialization script completed

schemaTool completed

# 看到schemaTool completed表示初始化成功。

5)启动Hive

[root@node1 lib]# hive

which: no hbase in (/usr/local/jdk1.8.0_181/bin:/usr/local/jdk1.8.0_181/jre/bin:/data/mysql/bin:/usr/local/jdk1.8.0_181/bin:/usr/local/jdk1.8.0_181/jre/bin:/data/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/bin:/usr/local/hadoop-2.7.2/bin:/root/bin:/bin:/usr/local/hadoop-2.7.2/bin:/usr/local/hive/bin)

SLF4J: Class path contains multiple SLF4J bindings.

SLF4J: Found binding in [jar:file:/usr/local/hive/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Found binding in [jar:file:/usr/local/hadoop-2.7.2/share/hadoop/common/lib/slf4j-log4j12-1.7.10.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.apache.logging.slf4j.Log4jLoggerFactory]

Logging initialized using configuration in jar:file:/usr/local/hive/lib/hive-common-2.3.7.jar!/hive-log4j2.properties Async: true

Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.

hive> show databases;

OK

default

Time taken: 0.068 seconds, Fetched: 1 row(s)

至此,Hive数据仓库搭建完毕。

  • 输入编号:7714,直达文章

  • 输入m|M,直达目录列表

sql安装目录下log文件夹_Linux安装Hive数据仓库工具相关推荐

  1. python 实现统计ftp服务器指定目录下文件夹数目、文件数目及所有文件大小 本次主要为满足应用方核对上传到ftp服务器的文件是否缺漏。 主要要求:指定目录下,文件夹数目/文件数目/所有文件大小

    python 实现统计ftp服务器指定目录下文件夹数目.文件数目及所有文件大小 本次主要为满足应用方核对上传到ftp服务器的文件是否缺漏. 主要要求:指定目录下,文件夹数目/文件数目/所有文件大小,类 ...

  2. shell访问php文件夹,Shell获取某目录下所有文件夹的名称

    Shell获取某目录下所有文件夹的名称以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Shell获取某目录下所有文件夹的 ...

  3. ubuntu下无法在目录下创建文件夹,权限不足解决办法

    ubuntu下无法在目录下创建文件夹,权限不足解决办法 Ubuntu linux系统下 su:出现: authentication failure的解决办法 ubuntu下 sudo passwd r ...

  4. SpringBoot模块中,resources目录下各文件夹作用

    文章目录 前言 1.public目录: 2.resources目录: 3.static目录: 4.templates目录: 5.src/main/resources目录(根目录): 6.META/IN ...

  5. CMD命令读取某个目录下所有文件夹名或文件名

    CMD命令读取某个目录下所有文件夹名或文件名 CMD命令读取某个目录下所有文件夹名或文件名 要用到的dir命令 开始操作 CMD命令读取某个目录下所有文件夹名或文件名 目的是给自己留个笔记! 要用到的 ...

  6. java删除Linux目录下的文件夹

    在java程序中删除Linux目录下的文件夹主要步骤如下: String path = "/home/deledir";//文件夹路径 String[] cmd = new Str ...

  7. cmd进入到python安装目录下_在python中安装basemap

    在python中安装basemap 1. 确保python环境安装完毕且已配置好环境变量 2. 安装geos: pip install geos 3. 下载.whl文件: (1)pyproj‑1.9. ...

  8. (转)Inno Setup入门(六)——在程序目录下创建文件夹

    本文转载自:http://blog.csdn.net/yushanddddfenghailin/article/details/17250789 创建文件夹可以使用[dirs]段实现,代码如下: [s ...

  9. pyhton 读取目录下所有文件夹下的文件(指定文件)

    前言 1.有的时候比如我们操作错了,将一个文件夹里的.png图片都弄到了不同的文件夹中,现在想还原,如果一个个手工选择剪切,恐怕不是一个好办法. 2.有的时候,想把某个目录下的所有文件夹中的jpg格式 ...

最新文章

  1. linux c 内存泄漏调试工具 《valgrind用户手册》 2. 使用和理解Valgrind核心
  2. mybais传入多个参数的方法
  3. 【数据分析】数据分析(EDA)学习总结!
  4. ZOJ-3494 BCD Code (ac自动机+数位dp)
  5. limit实现原理 mysql_值得一生典藏:MySQL的事务实现原理
  6. 如何找到 SAP Spartacus 里某个 Component TypeScript 编译后生成的 JavaScript 位置
  7. 网管日志-06.07.25
  8. Spring Boot 自定义属性值
  9. 八、Linux系统日志管理
  10. mysql 小技巧
  11. ad17如何删除3d实体_3D打印的过程/流程
  12. Markdown list状态下插入代码
  13. 00-高通msm8953 Android驱动教程
  14. 虚拟示波器---匿名上位机
  15. 【推荐】技术面试结束后,如何向技术面试官提问?
  16. 《经济学通识》八、劳动关系
  17. 做量化交易需要了解的国外在线量化平台有哪些?
  18. 通过js点击事件处理防止表单重复提交
  19. ddr2代内存最大升级到多少_DDR2台式内存条单条最大多少G?
  20. 排列组合之错排问题总结

热门文章

  1. 超长数列中n个整数排序C++代码实现
  2. Centos启动和禁用网卡命令
  3. matlab 小技巧
  4. 优先队列(priority_queue)的原理及用法
  5. 【编程】堆(heap)和栈(stack)的区别
  6. 科大星云诗社动态20201216
  7. 学长毕业日记 :本科毕业论文写成博士论文的神操作20170324
  8. 撒花!斯坦福深度学习最新视频发布,吴恩达主讲!
  9. 台湾大学林轩田机器学习基石课程学习笔记6 -- Theory of Generalization
  10. 测试公众号修改名称_微信公众号开通个人认证,只需三步