• Hive基本概念(学习成本很低,sql)

    • 解决海量结构化日志的数据统计

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

    • 本质

      • 将HQL转化为MapReduce程序

      • Hive的基本概念+安装及配置

      • Hive处理的数据存储在HDFS

      • Hive分析数据底层的默认实现 是MapReduce   (可以spark)【离线存储可以用,吞吐量大】

      • 执行程序运行在Yarn上

        • Hive是一个客户端,不是分布式框架

    • Hive的优缺点

      • 优点

        • 操作接口采用类SQL语法,上手快

        • 避免去写MR,减少开发人员的学习成本

        • Hive的执行延迟比较高,因此Hive常用于数据分析,对实时性要求不高的场合。

        • Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高。(可用在科研,结合spark)

        • Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。

      • 缺点

        • Hive的HQL表达能力有限

          • 迭代式算法无法表达

          • 数据挖掘方面不擅长

        • Hive的效率比较低

          • Hive自动生成的MapReduce作业,通常情况下不够智能化

          • Hive调优比较困难,粒度较粗

      • Hive架构原理

        • Hive的基本概念+安装及配置Hive的基本概念+安装及配置

        • Hive 就红框中的部分(面试)

          • SQL解析器 检查HQL语法

          • 编译器  翻译成MR

          • 优化器   套用MR模板

          • 执行器   提交给Yarn 

      • 1.用户接口:Client

        • CLI(hive shell)、JDBC/ODBC(java访问hive)、WEBUI(浏览器访问hive)

      • 2.元数据:Metastore

        • 元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;

        • 默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore

      • 3.Hadoop

        • 使用HDFS进行存储,使用MapReduce进行计算。

      • 4.驱动器:Driver

        • (1)解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。

        • (2)编译器(Physical Plan):将AST编译生成逻辑执行计划。

        • (3)优化器(Query Optimizer):对逻辑执行计划进行优化。

        • (4)执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/Spark。

    • Hive的基本概念+安装及配置

    • Hive和数据库的比较

      • 由于 Hive 采用了类似SQL 的查询语言 HQL(Hive Query Language),因此很容易将 Hive 理解为数据库。其实从结构上来看,Hive 和数据库除了拥有类似的查询语言,再无类似之处。本文将从多个方面来阐述 Hive 和数据库的差异。数据库可以用在 Online 的应用中,但是Hive 是为数据仓库而设计的,清楚这一点,有助于从应用角度理解 Hive 的特性。

      • 查询语言

        • 由于SQL被广泛的应用在数据仓库中,因此,专门针对Hive的特性设计了类SQL的查询语言HQL。熟悉SQL开发的开发者可以很方便的使用Hive进行开发。

      • 数据存储位置  

        • Hive存储在HDFS中。而数据库则可以将数据保存在块设备或者本地文件系统中。

      • 数据更新

        • 由于Hive是针对数据仓库应用设计的,而数据仓库的内容是读多写少的。因此,Hive中不建议对数据的改写,所有的数据都是在加载的时候确定好的。而数据库中的数据通常是需要经常进行修改的,因此可以使用 INSERT INTO …  VALUES 添加数据,使用 UPDATE … SET修改数据。

      • 索引

        • Hive不支持索引

      • 执行引擎

        • Hive中大多数查询的执行是通过 Hadoop 提供的 MapReduce 来实现的。而数据库通常有自己的执行引擎。

      • 延迟高、可扩展性强、数据规模大

  • Hive安装

    • Hive安装地址

    • Hive安装及部署

      • 102

        • hdp.sh start(群启动)start-dfs.sh    start-yarn.sh (103)

        • 把两个jar放到 opt/software

        • tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /opt/module/

        • unzip mysql-libs.zip

          • 解压后删除zip包

        • 改名 mv apache-hive-1.2.1-bin/ hive

        • cd conf   改配置

          • Hive的基本概念+安装及配置

(5)配置hive-env.sh文件

    (a)配置HADOOP_HOME路径

    export HADOOP_HOME=/opt/module/hadoop-2.7.2

    (b)配置HIVE_CONF_DIR路径

    export HIVE_CONF_DIR=/opt/module/hive/conf

        • 启动 bin/hive

          • Hive的基本概念+安装及配置

          • Hive的基本概念+安装及配置

          • Hive的基本概念+安装及配置

          • 尝试insert into table student values(1,'stw'); 【一般不会向hive insert 采用load data的方式】

            • 是一个基于MR

            • Hive的基本概念+安装及配置

            • Hive的基本概念+安装及配置

          • select * from student;(不会走MR)

          • select count(*) from student ;(会走MR)

3.Hive基本操作

(1)启动hive

[[email protected] hive]$ bin/hive

(2)查看数据库

hive> show databases;

(3)打开默认数据库

hive> use default;

(4)显示default数据库中的表

hive> show tables;

(5)创建一张表

hive> create table student(id int, name string);

(6)显示数据库中有几张表

hive> show tables;

(7)查看表的结构

hive> desc student;

(8)向表中插入数据

hive> insert into student values(1000,"ss");

(9)查询表中数据

hive> select * from student;

(10)退出hive

hive> quit;

    • 将本地文件导入Hive

      • 需求

      • 将本地/opt/module/datas/student.txt这个目录下的数据导入到hive的student(id int, name string)表中。

1    tiezhu

2    baozhu

3    stw

4    hj

      • load data local inpath  '/opt/module/data/stu.txt' into table student;   加载数据

        • Hive的基本概念+安装及配置

        • 从hdfs中加载数据 去掉local

      • Hive的基本概念+安装及配置

        • 需要注意分隔符在建表时 保持一致

      • create table stu (id int,name string) row format delimited fields terminated by '\t';

        • Hive的基本概念+安装及配置

      • load data local inpath  '/opt/module/data/stu.txt' into table stu; 

        • vi stu1.txt

5       fxl

6       cy

7       lw

        • hadoop fs -put stu1.txt /user/hive/warehouse/stu   (最常见的操作)

          • select *from stu;   可以查到

          • Hive的基本概念+安装及配置

      • 测试从hdfs来load data

        • hadoop fs -put stu2.txt

        • load data inpath  '/stu2.txt';

      • 总结:从本地load data local 相当于 cp

        • 从hdfs load data相当于 mv (实际上只是namenode改了元数据信息,没有移动)

        • 默认使用derby数据库,只能开一个客户端

    • MySQL安装 (切换到root权限)

      • 卸载

        • rpm -qa |grep mysql

      • rpm -e --nodeps mysql-libs-5.1.73-7.el6.x86_64 

      • cd /opt/software

      • cd mysql-libs/

      • Hive的基本概念+安装及配置

        • rpm -ivh MySQL-server

      • Hive的基本概念+安装及配置cat /root/.mysql_secret 初始密码

      • Hive的基本概念+安装及配置

      • Hive的基本概念+安装及配置

      • 安装MySQL客户端

        • Hive的基本概念+安装及配置

        • Hive的基本概念+安装及配置

        • Hive的基本概念+安装及配置

        • quit

        • Hive的基本概念+安装及配置

      • 配置无主机登录

        • Hive的基本概念+安装及配置

        • Hive的基本概念+安装及配置

        • Hive的基本概念+安装及配置

        • flush privileges

        • quit

      • Hive的基本概念+安装及配置

    • 设置hive元数据存储在 MySQL

      • su atguigu 用户

      • tar -zxvf mysql-connector-java-5.1.27.tar.gz

      • 用完删掉

      • cp ./mysql-connector-java-5.1.27-bin.jar /opt/module/hive/lib/

      • cd conf

      • touch hive-site.xml

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

<property>

  <name>javax.jdo.option.ConnectionURL</name>

  <value>jdbc:mysql://hadoop102:3306/metastore?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>000000</value>

  <description>password to use against metastore database</description>

</property>

</configuration>

    • 重新启动bin/hive

    • create table aa (id int);   遇到FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:For direct MetaStore DB connections, we don't support retries at the client level.)

      • 是因为MetaStore的数据库的编码集要是默认的

        Hive的基本概念+安装及配置Hive的基本概念+安装及配置

      • 尝试开两个hive客户端

    • Hive JDBC访问(生产环境基本不使用)

      • 给data中加入aa.txt   load data local inpath'' into table aa; 

      • 启动hiveserver2服务   bin/hiverserver2   是一个阻塞进程 (查看日志)

      • 启动 beeline    bin/beeline  

        • !connect jdbc:hive2://hadoop102:10000: atguigu

          • show tables;

    • Hive 常用交互命令(crontab)

      • Hive的基本概念+安装及配置

        • bin/hive -e "select * from aa;"

        • bin/hive -f ./hive.hql 

          • bin/hive -f ./hive.hql > /opt/module/datas/result.txt

    • Hive其他命令操作

      • dfs -ls /;  在hive cli 查看hdfs文件系统

      • ! ls ./;   在hive cli查看linux本地文件系统

      • /home/atguigu 家目录下存着 .hivehistory文件   cat .hivehistory

    • Hive常见属性配置

      • Hive 数据仓库的位置配置

        • Hive的基本概念+安装及配置

      • 查询后信息显示配置(显示字段名,当前数据库名)

        • 在hive-site.xml中添加

<property>

<name>hive.cli.print.header</name>

<value>true</value>

</property>

<property>

<name>hive.cli.print.current.db</name>

<value>true</value>

</property>

          • Hive的基本概念+安装及配置

      • Hive运行日志信息配置

        • hive/conf/log4j文件

        • mv log4j.tem log4j

        • vim  

          • hive.log.dir=/opt/module/hive/logs

          • Hive的基本概念+安装及配置

    • 参数配置方式

      • 查看当前所有配置信息

        • hive>set

      • 配置的三种方式

        • Hive的基本概念+安装及配置

        • Hive的基本概念+安装及配置

        • Hive的基本概念+安装及配置

          • 注意属性优先级  site文件<进hive时配置<hive内配置<代码配置

总结:

大数据重点:

  • 第一位 Spark

  • 第二位 Hive

  • 第三位 Kafka (消息队列)

 

大数据主要解决的问题:海量数据的传输,海量数据的存储,海量数据的处理与计算(hive)

 

 

相关文章: