一、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的默认数据分隔符是\001,也就是^A ,分割符 " ", "," ,"\t"等等
    如果说数据的分隔符与表的数据分隔符不一致的话,读取数据为null
      按下crtl+v然后再按下crtl+a就会出来^A(\001)

    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当成默认的数据库,
      所以这边数据库的名字不显示

    

hive权威指南<一>的更多相关文章

  1. 关于纠正《Hive权威指南》中的结论~“hive在使用set自定义变量时,hivevar命名空间是可选的”~的论证

    背景: 根据<Hive权威指南>上讲,在hive-0.8.0以后可以使用--define key=value命令定义用户自定义的变量以便在Hive脚本中引用.当用户使用这个功能时,Hive ...

  2. 《hadoop权威指南》关于hive的第一个小例子的演示

    本文是<hadoop权威指南>关于hive的小例子,通过这个例子可以很好地看出来hive是个什么东西. 前提是已经配置好hive的远程连接版本的环境,我是用了MYSQL数据库保存元数据. ...

  3. Hadoop权威指南学习笔记一

    Hadoop简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考,有什么不到之处还望指出.一起学习一起进步. 转载请注明:http://blog.csdn.net/ ...

  4. JavaScript权威指南 - 函数

    函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...

  5. JavaScript权威指南 - 对象

    JavaScript对象可以看作是属性的无序集合,每个属性就是一个键值对,可增可删. JavaScript中的所有事物都是对象:字符串.数字.数组.日期,等等. JavaScript对象除了可以保持自 ...

  6. JavaScript权威指南 - 数组

    JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...

  7. 《Ansible权威指南》笔记(3)——Ad-Hoc命令集,常用模块

    五.Ad-Hoc命令集1.Ad-Hoc命令集通过/usr/bin/ansible命令实现:ansible <host-pattern> [options]    -v,--verbose  ...

  8. 《Ansible权威指南》笔记(1)——安装,ssh密钥登陆,命令

    2016-12-23 读这本<Ansible权威指南>学习ansible,根据本书内容和网上的各种文档,以及经过自己测试,写出以下笔记.另,这本书内容很好,但印刷错误比较多,作者说第二版会 ...

  9. 读《Android编程权威指南》

    因为去年双十二购买了一折的<Android 编程权威指南(第一版)>,在第二版出来后图灵社区给我推送了第二版的优惠码,激动之余就立马下单购买电子书,不得不说Big Nerd Ranch G ...

随机推荐

  1. BZOJ:1443: [JSOI2009]游戏Game

    原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1443 反正不看题解我是完全想不出系列…… 先把棋盘黑白染色,也就是同一对角线上颜色相同,使 ...

  2. hihoCoder 1051 补提交卡(贪心,枚举)

    #1051 : 补提交卡 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho给自己定了一个宏伟的目标:连续100天每天坚持在hihoCoder上提交一个程序.100天过 ...

  3. [51nod Round 15 B ] 完美消除

    数位DP. 比较蛋疼的是,设a[i]表示第i位上数字,比方说a[1]<a[2]>a[3],且a[1]==a[3]时,这两位上的数可以放在一起搞掉. 所以就在正常的f数组里多开一维,表示后面 ...

  4. [国嵌攻略][103][Linux内核模块基础]

    什么是内核模块 Linux内核的整体结构非常庞大,其中包含的组件也非常多,如何使用这些组件.一种方式是把所有的组件都编译进内核文件,即zImage或bzImage,但这样会导致一个问题,占用内存过多. ...

  5. 基于 fireasy 构建的 asp.net core 示例

    最近花时间弄了一个关于fireasy使用的demo,已放到 github 上供大家研究,https://github.com/faib920/zero 该 demo 演示了如何使用 fireasy 创 ...

  6. 自定义alert弹框

    /**************** UIAlertControllerStyleAlert *************************/ /*创建一个 可以自定义文字颜色和字体大小的IAler ...

  7. Dig out WeChat deleted chat messages on Android Phone

    As we know that WeChat will wipe deleted chat messages. That's why forensic guys could  not dig out ...

  8. Sublime Text 使用介绍、全套快捷键及插件推荐

    开篇:如果说Notepad++是一款不错Code神器,那么Sublime Text应当称得上是神器滴哥.Sublime Text最大的优点就是跨平台,Mac和Windows均可完美使用:其次是强大的插 ...

  9. Java Draw

    简单绘画 直线 矩形 圆 根据矩阵画图 package com.zhoudm; import java.awt.*; import javax.swing.*; public class Draw e ...

  10. FormsAuthentication.HashPasswordForStoringInConfigFile 的替代方法

    由于项目中要和php对接,要将一段字符串生成md5(16位)验证码,在英文字符时,没有太大问题,但在遇到中文时,两边字条始终不一致. php是别人的项目,看不到源码,网上一查,估计是这样写的: < ...