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的默认数据分隔符是\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权威指南<一>的更多相关文章
- 关于纠正《Hive权威指南》中的结论~“hive在使用set自定义变量时,hivevar命名空间是可选的”~的论证
		背景: 根据<Hive权威指南>上讲,在hive-0.8.0以后可以使用--define key=value命令定义用户自定义的变量以便在Hive脚本中引用.当用户使用这个功能时,Hive ... 
- 《hadoop权威指南》关于hive的第一个小例子的演示
		本文是<hadoop权威指南>关于hive的小例子,通过这个例子可以很好地看出来hive是个什么东西. 前提是已经配置好hive的远程连接版本的环境,我是用了MYSQL数据库保存元数据. ... 
- Hadoop权威指南学习笔记一
		Hadoop简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考,有什么不到之处还望指出.一起学习一起进步. 转载请注明:http://blog.csdn.net/ ... 
- JavaScript权威指南 - 函数
		函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ... 
- JavaScript权威指南 - 对象
		JavaScript对象可以看作是属性的无序集合,每个属性就是一个键值对,可增可删. JavaScript中的所有事物都是对象:字符串.数字.数组.日期,等等. JavaScript对象除了可以保持自 ... 
- JavaScript权威指南 - 数组
		JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ... 
- 《Ansible权威指南》笔记(3)——Ad-Hoc命令集,常用模块
		五.Ad-Hoc命令集1.Ad-Hoc命令集通过/usr/bin/ansible命令实现:ansible <host-pattern> [options] -v,--verbose ... 
- 《Ansible权威指南》笔记(1)——安装,ssh密钥登陆,命令
		2016-12-23 读这本<Ansible权威指南>学习ansible,根据本书内容和网上的各种文档,以及经过自己测试,写出以下笔记.另,这本书内容很好,但印刷错误比较多,作者说第二版会 ... 
- 读《Android编程权威指南》
		因为去年双十二购买了一折的<Android 编程权威指南(第一版)>,在第二版出来后图灵社区给我推送了第二版的优惠码,激动之余就立马下单购买电子书,不得不说Big Nerd Ranch G ... 
随机推荐
- 2017 ICPC/ACM 沈阳区域赛HDU6228
			Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Subm ... 
- Java大数应用
			1.大数加法 import java.math.BigInteger; import java.util.Scanner; public class Main { public static void ... 
- light oj 1184 Marriage Media
			题目: You run a marriage media. You take some profiles for men and women, and your task is to arrange ... 
- java包装类简析
			对于8个基本类型,java提供了他们相应的包装类: 基本类型 包装类 byte java.lang.Byte short java.lang.Short int java.lang.Integer l ... 
- vue中使用Ueditor编辑器
			一. 下载包: 从Ueditor的官网下载1.4.3.3jsp版本的Ueditor编辑器,官网地址为: http://ueditor.baidu.com/website/ 下载解压后会得到如果下文 ... 
- Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类
			Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ... 
- div流加载
			var hasNext=true;//触发开关,防止多次调用事件 var nScrollHight = 0; //滚动距离总长(注意不是滚动条的长度) var nScrollTop = 0; //滚动 ... 
- 关于mybatis 注解sql  sum(参数)传参写法
			新手出道 验证了很久sum()里面带参数方式 #{参数}一直不行日志显示参数已经传进 但就是加不上去 返回的始终是0 后面换成$(参数)之后就行了 @Select("select sum($ ... 
- nginx服务器的作用与简单搭建(windows)
			Nginx是一款开源代码的反向代理服务器. 何为反向代理呢?即以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连 ... 
- Servlet--HttpServletRequest接口,HttpServletResponse接口
			HttpServletRequest接口 定义 public interface HttpServletRequest extends ServletRequest; 用来处理一个对 Servlet ... 
