1、ETL介紹:
數據抽取:把不一樣的數據源數據抓取過來,存到某個地方
數據清洗:過濾那些不符合要求的數據或者修正數據以後再進行抽取
不完整的數據:好比數據裏一些應該有的信息缺失,須要補全後再寫入數據倉庫
錯誤的數據:好比字符串數據後面有一個回車操做、日期格式不正確、日期越界等,須要修正以後再抽取
重複的數據:重複數據記錄的全部字段,須要去重
數據轉換:不一致的數據轉換,好比同一個供應商在結算系統的編碼是XX0001,而在CRM中編碼是YY0001,統一編碼 實現有多種方法:
一、藉助ETL工具(如Oracle的OWB、SQL Server的DTS、SQL Server的SSIS服務、Informatic等等)實現html
OWB:Oracle Warehouse Builder
DTS:Data Transformation Service
SSIS:SQL Server Integration Services
二、SQL方式實現
三、ETL工具和SQL相結合-----》間接引出hive
藉助工具能夠快速的創建起ETL工程,屏蔽了複雜的編碼任務,提升了速度,下降了難度,可是缺乏靈活性。
SQL的方法優勢是靈活,提升ETL運行效率,可是編碼複雜,對技術要求比較高。
第三種是綜合了前面二種的優勢,會極大地提升ETL的開發速度和效率java
2、大數據平臺架構概述:
數據抽取:Canal/Sqoop(主要解決數據庫數據接入問題)、還有大量的數據採用Flume解決方案
數據存儲:HDFS(文件存儲)、HBase(KV存儲)、Kafka(消息緩存)
調度:採用了Yarn的統一調度以及Kubernetes的基於容器的管理和調度的技術
計算分析:MR、HIVE、Storm、Spark、Kylin以及深度學習平臺好比Caffe、Tensorflow等等
應用平臺:交互分析sql,多維分析:時間、地域等等,
可視化:數據分析tableau,阿里datav、hcharts、echarts
數據應用就是指數據的業務node
3、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.htmlmysql
4、Hive的體系結構linux
client:
命令行 -經常使用
JDBC
metastore元數據:存儲在數據庫
默認的數據庫derby
改爲mysql
元數據:表名,表的所屬的數據庫,表的擁有者,表的分區信息,表的類型,表數據的存儲的位置
cli-》metastore
TBLS-》DBS-》hdfs的路徑
Driver:
解析器:解析的HQL語句
編譯器:把HQL翻譯成mapreduce代碼
優化器:優化
執行器:把代碼提交給yarn
Hadoop:
使用mapreduce的計算模型
使用hdfs進行存儲hive表數據nginx
5、Hive安裝及使用git
請訪問:http://www.cnblogs.com/xningge/p/8433792.htmlgithub
6、Hive客戶端的基礎語句:
一、進入到hive的客戶端:bin/hive;
二、查看數據庫:show databases;
三、建立數據庫:create database test;
四、進入到數據庫:use test;
五、查看錶:show tables;
六、數據類型:
tinyint、smallint、int、bigint -》int
float、double、date
string、vachar、char -》string
七、create table hive_table(
id int,
name string
);
八、加載數據:
load data local inpath '/opt/datas/hive_test.txt' into table hive_table;
local:指定本地的數據文件存放路徑
不加local:指定數據在hdfs的路徑
九、查詢語句:
select * from hive_table;
十、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;sql
7、hive在hdfs上的文件結構
數據倉庫的位置 數據庫目錄 表目錄 表的數據文件
/user/hive/warehouse /test.db /row_table /hive_test.txt
default默認的數據庫:指的就是這個/user/hive/warehouse路徑shell
8、修改元數據存儲的數據庫:
一、用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元數據存儲
二、安裝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
一、修改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>
二、將驅動jar包拷貝到hive的lib目錄下
mysql-connector-java-5.1.27-bin.jar
三、完成,能夠啓動hive bin/hive
四、在mysql的metastore數據庫中找到信息
DBS:database 存儲的hive數據庫的信息
TBLS:table 存儲hive表的信息
9、Hive操做命令
一、描述表信息
desc tablename;
desc extended 表名;
desc formatted 表名;
二、修改表名
alter table table_oldname rename to new_table_name;
三、給表增長一個列
alter table new_table add columns(age int);
alter table new_table add columns(sex string comment 'sex');添加註釋
四、修改列的名字以及類型
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;
五、替換列(不能刪除列,可是能夠修改和替換,)是全表替換
ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)
alter table test_change replace columns(foo int , too string);
六、清除表數據truncate
只清除表數據,元數據信息仍是存在的,表的結構已經表仍是在的
truncate table row_table;
七、刪除表數據drop
drop table row_table;
清除數據,表以及表的結構清除,元數據也清除
八、刪除數據庫
drop database test_db CASCADE;
刪除數據庫的信息,若是數據庫不爲空的話,則要加CASCADE字段
九、查看hive自帶的函數: show functions;
desc function when;
desc function extended when; ->查看詳細的用法
10、hive的經常使用配置
一、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
二、顯示數據庫和列名,添加配置信息到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>
11、hive經常使用的linux命令選項
查看幫助信息 bin/hive -help
一、--database指定登錄到哪一個database 下面去
bin/hive --database mydb;
二、指定一條sql語句,必須用引號包裹
bin/hive -e 'show databses'
bin/hive -e 'select * from mydb.new_table'
三、指定寫sql語句的文件,執行sql
bin/hive -f hivesql
指定一些較爲的sql語句,週期性的執行
四、查看sql語句文件
bin/hive -i hivesql
執行文件的sql語句並進入到hive的客戶端
用來初始化一些操做
五、bin/hive -S hivesql
靜默模式
六、在當前回話窗口修改參數的屬性,臨時生效
bin/hive --hiveconf hive.cli.print.header=false;
七、在hive的客戶端中使用set修改參數屬性(臨時生效),以及查看參數的屬性
set hive.cli.print.header -》查看參數的屬性
set hive.cli.print.header=true; -》修改參數屬性
八、經常使用的shell : ! 和 dfs
-》! 表示訪問的linux本地的文件系統 ->! ls /opt/modules/apache/
-》dfs表示訪問的是hdfs的文件系統 -> dfs -ls /;
九、CREATE database_name[LOCATION hdfs_path]
create database hive_test LOCATION "/location"; 自定義數據庫在hdfs上的路徑,把指定/location當成默認的數據庫, 因此這邊數據庫的名字不顯示