第十一天 - 大数据项目结构 - Hive简介与安装配置、基本操作

第十一天 - 大数据项目结构 - Hive简介与安装配置、基本操作

一、大数据项目模块简介

数据源管理
  • 给每个用户分配固定的存储路径,根据用户标识分配独有的空间用于存储该用户的数据源和结果输出

    1. 给每个用户分配固定的存储路径:在项目部署时手动创建;

      根据用户标识分配独有的空间:在用户注册时生成对应的路径

    2. 数据源名称和数据文件需要有映射关系,并且能获取输入数据文件路径inputPath

  • 添加数据源

    1. 在数据库中进行记录(当前用户的数据表中记录数据文件的相关信息,路径,数据源名称)
    2. 上传文件至相应路径
  • 删除数据源

    1. 在数据源列表中选择要删除的数据
    2. 清除数据库中的记录信息
    3. 在hdfs中将数据文件删除
  • 数据源信息

    1. 数据文件的基本信息:数据名称、数据大小、上传时间等
    2. 数据预览,比如展示前20条
  • 数据源分组

    一个用户上传了多份数据源,进行归类分组,对每一个组添加一个标识(组名)

计算任务
  • 在列表中罗列显示当前应用中支持的算法,可以固定写死或者通过配置文件读取展示
  • 向项目中添加算法时,重新编译jar包上传,更改jps页面或者更改web应用配置文件
  • 用户选择相应的算法,生成命令执行所需要的信息
结果展示
  • 到相应的目录下读取结果文件,展示信息
数据流程管理
  • 记录整个数据处理流程,数据源,计算节点,结果文件,执行顺序,数据流程状态标识
  • 数据流程列表(根据数据流程状态标识区分)
    1. 对于已经完成的流程,可以查看结果、重新运行、删除结果、修改执行流程
    2. 对于新建的流程,可以进行修改流程、运行
  • 数据流程id,记录了节点(包括数据源/计算/展示)以及执行顺序

二、将项目部署到Linux中运行

项目地址

mapreduce与web进行交互案例

步骤
  1. 在eclipse中执行导出,导出格式为war

    右键项目 – export – war File – 选择输出路径

  2. 使用Xftp将导出的wat文件上传至Linux下的tomcat安装路径下的webapps目录中

    1536637337801

  3. 启动tomcat,详见tomcat配置

  4. 通过浏览器访问地址:sz01/WebProject,选择数据源文件和计算任务

    1536637539310

    运行结果:

    1536637809695

注意事项

MapReduce执行以队列方式执行,意思是同时跑多个MapReduce任务时,只会执行一个MapReduce任务,其他需要排队等待。所以在同时访问WebProject并且执行任务时,会排队执行MapReduce任务,等待时间较长。

三、Hive简介与安装配置、基本操作

本文以hive-1.2.2作为学习版本。

Hive简介

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能(Hive SQL,简称HQL)。 Hive使用HDFS作为数据存储,核心工作是将hql语句转换为MapReduce任务运行,默认使用Hadoop中的yarn作为资源调度系统。

Hive的特点
  • 可扩展
    Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。
  • 延展性
    Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
  • 容错
    良好的容错性,节点出现问题SQL仍可完成执行。
Hive架构

1536662394339

Hive包含用户访问接口(CLI、JDBC/ODBC、Web GUI和Thrift Server)、元数据存储(Metastore)、驱动组件(编译器、优化器、执行器)。   

用户访问接口即用户用来访问Hive数据仓库所使用的工具接口。

MySql补充

数据库(mysql)包含数据文件、数据元信息,其中数据文件在本地磁盘中进行存储,而数据元信息记录表结构(表名,字段名,列名),记录在特定的数据表中。

mysql数据库,在库information_schema中,表schemata存储数据库信息,tables存储表的信息

schemata:

1536663178489

tables:

1536663238987

MySql(RDBMS)与Hive对比
项目 MySql Hive
数据存储 本地磁盘 HDFS
执行器 Executor MapReduce
数据插入 批量/单条 批量/单条
数据操作 以行位单位更新删除 覆盖追加
处理数据规模
处理数据延迟
分区 支持 支持
拓展性
数据加载模式 写时模式 读时模式

对数据的操作:

  • 小数据量:

    MySql先进行数据校验,数据是否符合格式,符合才能追加写入数据文件;

    Hive直接通过插入语句生成新的数据,在相应的目录下创建新的文件,由于在集群进行操作,所以需要创建多个文件,各个节点的数据进行同步。

    由于数据量小,所以Hive所花费的时间大部分花在了数据节点之间的通信、同步上,所以小数据量时的感受是mysql速度快于hive。

  • 大数据量:

    MySq支持l批量sql、结构化文件导入,首先获取数据元信息(结构信息),然后对数据库中的数据进行变更;

    Hive则是将数据文件(本地磁盘)上传或移动到hdfs对应目录下,需要进行查询计算时再读取元信息,得出结果。

写时模式与读时模式对比:

MySql:写时模式,当数据发生变化时(数据插入)进行校验

Hive:读时模式,写入数据时是将数据文件移动到了目标文件夹下,当数据被使用时(查询数据、计算数据)才进行校验,容错性较强,当数据格式不对应时也不会立即报错,

Hive存储
  • Hive同样包含数据文件、数据元信息,其中数据文件存储在hdfs上,数据元信息则借助mysql存储。
  • hive管理的库在hdfs储存为文件夹,warehouse为default库所在的路径,其他的库以.db为结尾(存储路径可在hive-site.xml中进行配置);
  • hive管理的表在hdfs存储为文件夹,在相应的库文件夹下,存储的是各个表文件夹
  • hive管理的表的数据在hdfs存储为文件,在相应的表文件夹下
Hive安装
  1. 通过官网下载apache-hive-1.2.2-bin.tar.gz

  2. 将apache-hive-1.2.2-bin.tar.gz通过Xftp上传至CentOS的bigdata用户家目录

  3. 解压缩

    tar -zxvf apache-hive-1.2.2-bin.tar.gz

  4. 配置

    • 用户环境变量

      修改.bash_profie

      vi .bash_profile

      添加两行

      HIVE_HOME=/home/bigdata/apache-hive-1.2.2-bin

      PATH=$PATH:$HIVE_HOME/bin

      1536650785738

      保存退出

      刷新配置文件

      source .bash_profile

      通过which hive命令检测环境变量是否配置成功

    • 配置文件

      hive-site.xml

      <?xml version="1.0" encoding="UTF-8" standalone="no"?>
      <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
      <configuration>
      <!--配置hive元数据存储使用的数据库连接驱动名-->
      <property>
              <name>javax.jdo.option.ConnectionDriverName</name>
              <value>com.mysql.jdbc.Driver</value>
      </property>
      <!--配置hive元数据存储使用的数据库URL和存储库位置(是否自动创建)-->
      <property>
              <name>javax.jdo.option.ConnectionURL</name>
              <value>jdbc:mysql://SZ01:3306/hive?createDatabaseIfNotExist=true</value>
      </property>
      <!--配置hive元数据存储使用的数据库连接用户名-->
      <property>
              <name>javax.jdo.option.ConnectionUserName</name>
              <value>root</value>
      </property>
      <!--配置hive元数据存储使用的数据库连接密码-->
      <property>
              <name>javax.jdo.option.ConnectionPassword</name>
              <value>root</value>
      </property>
      <!-- 
      <!--配置hive数据可视化需要的包-->
          <property>  
              <name>hive.hwi.war.file</name>  
              <value>lib/hive-hwi-1.2.2.war</value>
          </property>
      -->
      <!--配置hive数据文件在hdfs中的存储位置,如果未配置则默认/user/hive/warehouse-->
      <property>
              <name>hive.metastore.warehouse.dir</name>
          <value>/user/hive/warehouse</value>
      </property>
      </configuration>

      hive-log4j.properties(19-21行)

      
      #日志级别
      
      hive.root.logger=DEBUG,DRFA
      
      #日志存储目录
      
      hive.log.dir=/home/${user.name}
      
      #日志名
      
      hive.log.file=hive.log
    • 引入jdbc的jar包

      将mysql-connector-java-5.1.46-bin.jar放在hive安装路径下的lib目录中

    • 修改mysql在任何host下都能以root的用户密码登录

      1. 使用命令启动mysql,注意加上-h选项

      mysql -u root -h sz01 -p

      1. 修改密码

      set password=password(‘root’)

      1. 刷新权限

      flush privileges

Hive启动

可以直接使用hive命令启动hive客户端

1536666015555

hive启动成功后,会根据hive-site.xml和hive-log4j.properties配置文件在对应的mysql数据库中生成相应的表,在对应的位置创建日志文件

  • 通过navicat远程连接至CentOS中的mysql查看

    1. 创建库

      create database test;

      库hive中表DBS存储了创建库的信息

      1536666223360

      1536655169705

      hdfs中/user/hive/warehouse目录下创建了对应的数据库test.db文件夹用于存储表文件夹

    1536655202469

    1. 创建表

      use test;

      create table t1(

      c1 int

      );

      1536655419374

      库hive中表TBLS存储了创建表的信息

      1536655400714

      库hive中表记录表信息

      1536655437759

      hdfs中/user/hive/warehouse/test.db目录下创建了对应的表文件夹用于存储表数据文件

      1536655467476

对Hive的数据基本操作(一)
  1. 插入数据

    insert into t1 values (1);

    insert into t1 values (2);

    插入数据后,将存储在hdfs中相应的表文件夹下

    1536655826353

  2. 创建第二个表,第二个表有两列

    create table t2(

    c1 int,

    c2 int

    );

    插入数据

    insert into t2 values(3,3);

    当表出现多个列时,查看hdfs中存储的hive数据文件,会有一个制表符进行分割

    1536656613837

  3. 将结构化数据文件导入到hive表中

    数据导入时,需要指定行分隔符,列分隔符,通过这两个分隔符去解析文件中的数据

    如数据文件1内容为:

    aaa,bbb,ccc;111,222,333;
    ddd,eee,fff;444,555,666;
    ggg,hhh,iii;777,888,999;

    当指定行分隔符为”;”,列分隔符为”,”时,以上文件则解析为六行,每行有三列数据。

    指定的分隔符必须与文件中的分隔符相一致,否则虽然导入时不会出问题,但是在读取、操作数据时就会出现错误

    例如:

    数据文件2内容为:以“-”为列分隔符,”\n“为行分隔符

    1-1-1\n
    2-2-2\n
    3-3-3\n

    将此文件作为数据导入源文件

    此时有一个表test,以c1 int, c2 int, c3 int为表数据结构,当读取此导入的数据时,期待的数据应该是

    1 1 1
    2 2 2
    3 3 3

    但此时如果指定了以“\n”为行分隔符,“,”为列分隔符进行读取时,读取到的数据将会是:

    1-1-1 null null
    2-2-2 null null
    3-3-3 null null

    不符合预期,所以在读取数据时需要指定与源文件向符合的行、列分隔符。

猜你喜欢

转载自blog.csdn.net/cry970795248/article/details/82632114
今日推荐