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當成默認的數據庫,
      所以這邊數據庫的名字不顯示


    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM