zoukankan      html  css  js  c++  java
  • hive权威指南<一>

    一、ETL介绍:
      数据抽取:把不同的数据源数据抓取过来,存到某个地方
      数据清洗:过滤那些不符合要求的数据或者修正数据之后再进行抽取
        不完整的数据:比如数据里一些应该有的信息缺失,需要补全后再写入数据仓库
        错误的数据:比如字符串数据后面有一个回车操作、日期格式不正确、日期越界等,需要修正之后再抽取
        重复的数据:重复数据记录的所有字段,需要去重
      数据转换:不一致的数据转换,比如同一个供应商在结算系统的编码是XX0001,而在CRM中编码是YY0001,统一编码 实现有多种方法:
    1、借助ETL工具(如Oracle的OWB、SQL Server的DTS、SQL Server的SSIS服务、Informatic等等)实现

      OWB:Oracle Warehouse Builder
      DTS:Data Transformation Service
      SSIS:SQL Server Integration Services
    2、SQL方式实现
    3、ETL工具和SQL相结合-----》间接引出hive
      借助工具可以快速的建立起ETL工程,屏蔽了复杂的编码任务,提高了速度,降低了难度,但是缺少灵活性。
      SQL的方法优点是灵活,提高ETL运行效率,但是编码复杂,对技术要求比较高。
      第三种是综合了前面二种的优点,会极大地提高ETL的开发速度和效率

    二、大数据平台架构概述:
      数据抽取:Canal/Sqoop(主要解决数据库数据接入问题)、还有大量的数据采用Flume解决方案
      数据存储:HDFS(文件存储)、HBase(KV存储)、Kafka(消息缓存)
      调度:采用了Yarn的统一调度以及Kubernetes的基于容器的管理和调度的技术
      计算分析:MR、HIVE、Storm、Spark、Kylin以及深度学习平台比如Caffe、Tensorflow等等
      应用平台:交互分析sql,多维分析:时间、地域等等,
      可视化:数据分析tableau,阿里datav、hcharts、echarts
      数据应用就是指数据的业务

    三、hive概述:
    由Facebook开源用于解决海量结构化日志的数据统计,后称为Apache Hive为一个开源项目
      结构化数据:数据类型,字段,value---》hive
      非结构化数据:比如文本、图片、音频、视频---》会有非关系型数据库存储,或者转换为结构化
      结构化日志数据:服务器生成的日志数据,会以空格或者指表符分割的数据,比如:apache、nginx等等
    Hive 是一个基于 Hadoop 文件系统之上的数据仓库架构,存储用hdfs,计算用mapreduce
    Hive 可以理解为一个工具,不存在主从架构,不需要安装在每台服务器上,只需要安装几台就行了
    hive还支持类sql语言,它可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能
    hive有个默认数据库:derby,默认存储元数据---》后期转换成关系型数据库存储mysql
      hive的版本:apache-hive-1.2.1 、hive-0.13.1-cdh5.3.6
      https://github.com/apache/ 主要查看版本的依赖
    下载地址:
      apache的:http://archive.apache.org/dist/hive/
      cdh的:http://archive.cloudera.com/cdh5/cdh/5/
    sql on hadoop的框架:
    hive--》披着sql外衣的map-reduce
    impala--》查询引擎,适用于交互式的实时处理场景
    presto--》分布式的sql查询引擎,适用于实时的数据分析
    spark sql
    等等。。。。
    https://www.cnblogs.com/tgzhu/p/7483422.html

    四、Hive的体系结构

      client:
        命令行 -常用
        JDBC

    metastore元数据:存储在数据库
      默认的数据库derby
      改成mysql
    元数据:表名,表的所属的数据库,表的拥有者,表的分区信息,表的类型,表数据的存储的位置
      cli-》metastore
      TBLS-》DBS-》hdfs的路径
    Driver:
      解析器:解析的HQL语句
      编译器:把HQL翻译成mapreduce代码
      优化器:优化
      执行器:把代码提交给yarn

    Hadoop:
      使用mapreduce的计算模型
      使用hdfs进行存储hive表数据

    五、Hive安装及使用

    请访问:http://www.cnblogs.com/xningge/p/8433792.html

    六、Hive客户端的基础语句:
      1、进入到hive的客户端:bin/hive;
      2、查看数据库:show databases;
      3、创建数据库:create database test;
      4、进入到数据库:use test;
      5、查看表:show tables;
      6、数据类型:
        tinyint、smallint、int、bigint -》int
        float、double、date
        string、vachar、char -》string
      7、create table hive_table(
          id int,
          name string
        );
      8、加载数据:
          load data local inpath '/opt/datas/hive_test.txt' into table hive_table;
          local:指定本地的数据文件存放路径
          不加local:指定数据在hdfs的路径
      9、查询语句:
        select * from hive_table;
      10、hive的默认数据分隔符是01,也就是^A ,分割符 " ", "," ," "等等
        如果说数据的分隔符与表的数据分隔符不一致的话,读取数据为null
          按下crtl+v然后再按下crtl+a就会出来^A(01)

        create table row_table(
          id int,
          name string
          )ROW FORMAT DELIMITED FIELDS TERMINATED BY " ";

         load data local inpath '/opt/datas/hive_test.txt' into table row_table;

    七、hive在hdfs上的文件结构
          数据仓库的位置                数据库目录           表目录          表的数据文件
      /user/hive/warehouse             /test.db             /row_table       /hive_test.txt
      default默认的数据库:指的就是这个/user/hive/warehouse路径

    八、修改元数据存储的数据库:
      1、用bin/hive同时打开多个客户端会报错
        java.sql.SQLException: Another instance of Derby may have already booted the database /opt/modules/apache/hive-1.2.1/metastore_db.

        derby数据库默认只能开启一个客户端,这是一个缺陷,换个数据库存储元数据
        数据库可选有这几种:derby mssql mysql oracle postgres
        一般选择mysql元数据存储
      2、安装mysql
        查看自己虚拟机有没有mysql的安装包
        sudo rpm -qa | grep mysql
        卸载:sudo rpm -e --nodeps mysql-libs-5.1.66-2.el6_3.x86_64
        卸载完成之后再查看一下,确保卸载完成

        安装mysql服务:
        sudo yum -y install mysql-server
        (如果yum源有问题,那就更换一下yum源即可)
        安装完成之后
        sudo rpm -qa | grep mysql
        mysql-server-5.1.73-8.el6_8.x86_64
        mysql-5.1.73-8.el6_8.x86_64
        mysql-libs-5.1.73-8.el6_8.x86_64
        》查看mysql的服务
          chkconfig | grep mysql
        》开启mysqld的服务
        启动:sudo service mysqld start
        设置登陆密码:mysqladmin -u xningge password '????'
        设置开机启动:sudo chkconfig mysqld on
        进入mysql:
        mysql -uxningge -p????
        查询用户信息
        mysql> select User,Host,Password from user;
        设置远程登录权限
        mysql> grant all privileges on *.* to 'xningge'@'%' identified by '????' with grant option;
        删除用户信息
        mysql> delete from user where user='root' and host='127.0.0.1';
        刷新信息
        mysql> flush privileges;
        重启mysqld服务
        service mysqld restart
        退出mysql客户端
        qiut+;或者crtl+C
        重启mysqld服务
        sudo service mysqld restart

        可选项:用Windows工具操作linux上的mysql
        授权:grant all privileges on *.* to 'root'@'192.168.111.1' identified by '123456' with grant option;
        刷新信息
        mysql> flush privileges;
      3.配置hive-site.xml
        1、修改hive-site.xml
          https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin

        <property>
          <name>javax.jdo.option.ConnectionURL</name>
          <value>jdbc:mysql://hadoop01.xningge.com/metastore?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>xningge</value>
        </property>

        <property>
          <name>javax.jdo.option.ConnectionPassword</name>
          <value>????</value>
        </property>

      2、将驱动jar包拷贝到hive的lib目录下
        mysql-connector-java-5.1.27-bin.jar
      3、完成,可以启动hive bin/hive

      4、在mysql的metastore数据库中找到信息
        DBS:database 存储的hive数据库的信息
        TBLS:table 存储hive表的信息

    九、Hive操作命令
      1、描述表信息
        desc tablename;
        desc extended 表名;
        desc formatted 表名;
      2、修改表名
        alter table table_oldname rename to new_table_name;
      3、给表增加一个列
        alter table new_table add columns(age int);
        alter table new_table add columns(sex string comment 'sex');添加注释
      4、修改列的名字以及类型
        create table test_change(a int,b int,c int);
        修改列名 a -> a1
        alter table test_change change a a1 int;
        a1改a2,数据类型改成String,并且放在b的后面;
        alter table test_change change a1 a2 string after b int;
        将c改成c1,并放在第一列
        alter table test_change change c c1 int first;

      5、替换列(不能删除列,但是可以修改和替换,)是全表替换
        ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)
        alter table test_change replace columns(foo int , too string);

      6、清除表数据truncate
        只清除表数据,元数据信息还是存在的,表的结构已经表还是在的
        truncate table row_table;
      7、删除表数据drop
        drop table row_table;
        清除数据,表以及表的结构清除,元数据也清除
      8、删除数据库
        drop database test_db CASCADE;
       删除数据库的信息,如果数据库不为空的话,则要加CASCADE字段
      9、查看hive自带的函数: show functions;
        desc function when;
        desc function extended when; ->查看详细的用法

    十、hive的常用配置
      1、hive的日志文件log4j:默认是在${java.io.tmpdir}/${user.name}也就是/tmp/hadoop/hive.log
        修改 hive-log4j.properties.template 修改为hive-log4j.properties
        修改 hive.log.dir=/opt/modules/apache/hive-1.2.1/logs
      2、显示数据库和列名,添加配置信息到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常用的linux命令选项
      查看帮助信息 bin/hive -help
        1、--database指定登陆到哪个database 下面去
          bin/hive --database mydb;

        2、指定一条sql语句,必须用引号包裹
          bin/hive -e 'show databses'
          bin/hive -e 'select * from mydb.new_table'

        3、指定写sql语句的文件,执行sql
          bin/hive -f hivesql
          指定一些较为的sql语句,周期性的执行

        4、查看sql语句文件
          bin/hive -i hivesql
          执行文件的sql语句并进入到hive的客户端
          用来初始化一些操作

        5、bin/hive -S hivesql
          静默模式

        6、在当前回话窗口修改参数的属性,临时生效
          bin/hive --hiveconf hive.cli.print.header=false;

        7、在hive的客户端中使用set修改参数属性(临时生效),以及查看参数的属性
          set hive.cli.print.header -》查看参数的属性
          set hive.cli.print.header=true; -》修改参数属性

        8、常用的shell : !dfs
          -》! 表示访问的linux本地的文件系统 ->! ls /opt/modules/apache/
          -》dfs表示访问的是hdfs的文件系统 -> dfs -ls /;

        9、CREATE database_name[LOCATION hdfs_path]
          create database hive_test LOCATION "/location";
          自定义数据库在hdfs上的路径,把指定/location当成默认的数据库,
          所以这边数据库的名字不显示


        

  • 相关阅读:
    jesperreport+ireport简单理解
    tomcat服务器奇异事件
    Spring+SpringMvc+Mybatis整合注意事项
    Websocket简单例子
    uploadify前台上传文件,java后台处理的例子
    违反完整约束条件 (XXX)
    插入排序
    选择排序
    冒泡算法(思路二)
    2-3树
  • 原文地址:https://www.cnblogs.com/xningge/p/8439970.html
Copyright © 2011-2022 走看看