旅游電商網(wǎng)站建設(shè)方案優(yōu)速網(wǎng)站建設(shè)優(yōu)化seo
HDFS 分布式存儲 spark storm HBase
分布式結(jié)構(gòu) master slave
name node client 負(fù)責(zé)文件的拆分 128MB 3份
data node
MapReduce 分布式計算 離線計算 2.X之前 速度比較慢 對比spark
編程思想 Map 分 Reduce 合
hadoop streaming Mrjob
Yarn 資源管理 cpu 內(nèi)存 MapReduce spark 分布式計算
RM NM AM
社區(qū)版 CDH
什么是Hive
-
基于Hadoop 數(shù)據(jù)保存到HDFS
-
數(shù)據(jù)倉庫工具
-
結(jié)構(gòu)化的數(shù)據(jù) 映射為一張數(shù)據(jù)庫表
01,張三,89
02,李四,91
03,趙武,92
-
HQL查詢功能 (Hive SQL)
-
本質(zhì) 把HQL翻譯成MapReduce 降低使用hadoop計算的門檻
-
離線數(shù)據(jù)分析開發(fā)效率比直接用MapReduce 高
Hive架構(gòu)
- 用戶接口:shell命令行
- 元數(shù)據(jù)存儲
- 數(shù)據(jù)庫 表 都保存到那些位置上
- 表中的字段名字 類型
- mysql derby(自帶)
- Drive
- 負(fù)責(zé)把HQL翻譯成mapreduce
- 或者翻譯成 shell 命令
Hive和Hadoop關(guān)系
- 利用hdfs存數(shù)據(jù) 利用mr算
- Hive只需要跟 Master節(jié)點打交道 不需要集群
Hive和關(guān)系型數(shù)據(jù)庫區(qū)別
- hive 離線計算 海量查詢
- hive最主要做查詢 不涉及刪除修改 默認(rèn)不支持刪除修改,默認(rèn)不支持事務(wù),并不完全支持標(biāo)準(zhǔn)sql
- sql CRUD全部支持, 支撐在線業(yè)務(wù),索引完整 支持事務(wù)
Hive 基本使用
- 創(chuàng)建表
CREATE TABLE student(classNo string, stuNo string, score int) row format delimited fields terminated by ',';
-
字段不需要指定占多少字節(jié)
-
需要通過row format delimited fields terminated by ','指定列的分隔符
-
加載表數(shù)據(jù)的時候盡量使用 load data方式 把整個文件put上去
load data local inpath '/home/hadoop/tmp/student.txt'overwrite into table student;
-
內(nèi)部表和外部表
-
managed table
-
創(chuàng)建表的時候
CREATE TABLE 表名(字段名 字段類型,)row format delimited fields terminated by ','
-
刪除表
元數(shù)據(jù)和數(shù)據(jù)一起刪除
-
數(shù)據(jù)位置
- 默認(rèn)是/user/hive/warehouse
-
-
external table
-
建表語句
CREATE External TABLE 表名(字段名 字段類型,)row format delimited fields terminated by ',' location '數(shù)據(jù)在hdfs上的路徑';
-
刪除表
- 只刪除元數(shù)據(jù) 數(shù)據(jù)會保留
-
數(shù)據(jù)可以在hdfs上的任意位置
-
-
-
分區(qū)表
-
當(dāng)數(shù)據(jù)量比較大的時候,使用分區(qū)表可以縮小查詢的數(shù)據(jù)范圍
-
分區(qū)表實際上就是在表的目錄下創(chuàng)建的子目錄
-
如果有分區(qū)表的話查詢的時候,盡量要使用分區(qū)字段
-
創(chuàng)建分區(qū)表的語句
create table 表名 (字段名,字段類型....) partitioned by (分區(qū)字段名 分區(qū)字段類型) row format delimited fields terminated by ',' lines terminated by '\n' stored as textfile;
-
向分區(qū)表中插入數(shù)據(jù)
load data local inpath '/home/hadoop/tmp/employee.txt' into table 表名 partition(分區(qū)字段名字='分區(qū)的具體值');
-
添加分區(qū)
alter table 表名 add if not exists partition(分區(qū)字段名字='分區(qū)的具體值');
-
動態(tài)分區(qū)
-
插入數(shù)據(jù)的時候指定分區(qū)的字段,會自動幫助創(chuàng)建分區(qū)所對應(yīng)的文件夾
-
需要關(guān)掉默認(rèn)設(shè)置
set hive.exec.dynamic.partition.mode=nonstrict;
-
-
UDF自定義函數(shù)
-
hive提供的函數(shù)不能滿足需求的時候就可以使用自定函數(shù)
-
使用別人已經(jīng)編譯好的.jar
-
jar加到 hive環(huán)境中
-
jar 可以在hdfs上 也可是在centos 上
-
創(chuàng)建一個臨時函數(shù)
CREATE TEMPORARY FUNCTION 自定義函數(shù)名字 as '自定義函數(shù)在jar包中的包名'
-
創(chuàng)建一個永久函數(shù)
CREATE FUNCTION 自定義函數(shù)名字 as '自定義函數(shù)在jar包中的包名' using jar 'jar位置';
-
-
自己寫python腳本實現(xiàn)udf、udaf
-
add file python文件的位置
-
SELECT TRANSFORM(fname, lname) USING 'python udf1.py' AS (fname, l_name) FROM u;
-
-
綜合案例
-
collect_set/collect_list
- group by之后 針對某一列聚合 結(jié)果放到[]
- 區(qū)別 一個去重 一個不去重
-
lateral view explode
-
explode函數(shù) 把復(fù)雜數(shù)據(jù)類型 array map 拆開 一行變多行
-
lateral view 和explode函數(shù) 配合使用 創(chuàng)建虛擬視圖 可以把explode的結(jié)果和其它列一起查詢
-
select article_id,kw from articles lateral view outer explode(key_words) t as kw
-
-
CONCAT, CONCAT_WS
- 不同列的字符串拼接到一起
- concat_ws 可以把array中的元素拼接到同一個字符串中 指定分割符
-
str_to_map 把具有key:value形式的字符串轉(zhuǎn)換成map
sqoop 介紹
-
作用 數(shù)據(jù)交換工具 可以實現(xiàn) 數(shù)據(jù)在mysql oracle<==> hdfs之間互相傳遞
-
原理 通過寫sqoop 命令 把sqoop命令翻譯成mapreduce 通過mapreduce連接各種數(shù)據(jù)源 實現(xiàn)數(shù)據(jù)的傳遞
-
通過sqoop 把數(shù)據(jù)從mysql導(dǎo)入到hdfs
- sqoop import --connect jdbc:mysql://mysql數(shù)據(jù)庫地址:3306/數(shù)據(jù)庫名字 --username root --password password --table 要導(dǎo)出數(shù)據(jù)的表名 -m mrjob的數(shù)量
- 默認(rèn)會把文件導(dǎo)入到 hdfs上 /user/linux用戶名 文件夾下
- 通過 --target-dir指定其它位置
HBase介紹
-
分布式開源數(shù)據(jù)庫
-
面向列
-
Big Table開源實現(xiàn)
-
適合非結(jié)構(gòu)化數(shù)據(jù)的存儲
-
PB級別數(shù)據(jù)
-
可以支撐在線業(yè)務(wù)
-
分布式系統(tǒng)特點 :易于擴展,支持動態(tài)伸縮,并發(fā)數(shù)據(jù)處理
面向列數(shù)據(jù)庫
-
關(guān)系型數(shù)據(jù)庫:行式存儲 每一行數(shù)據(jù)都是連續(xù)的 所有的記錄都放到一個連續(xù)的存儲空間中
-
列數(shù)據(jù)庫: 列式存儲 每一列對應(yīng)一個文件 不同列并不對應(yīng)連續(xù)的存儲空間
-
結(jié)構(gòu)化數(shù)據(jù) V.S. 非結(jié)構(gòu)化數(shù)據(jù)
- 結(jié)構(gòu)化數(shù)據(jù)
- 預(yù)定義的數(shù)據(jù)模型 模型一旦確定不會經(jīng)常變化(表結(jié)構(gòu)不會頻繁調(diào)整)
- 非結(jié)構(gòu)化數(shù)據(jù)
- 沒有預(yù)定義數(shù)據(jù)模型
- 模型不規(guī)則 不完整
- 文本 圖片 視頻 音頻
- 結(jié)構(gòu)化數(shù)據(jù)
-
Hive 和 Hbase區(qū)別
- hive hbase 共同點
- 都可以處理海量數(shù)據(jù)
- 文件都是保存到hdfs上
- hive 和 hbase不同
- 計算不是通過mapreduce實現(xiàn)的 自己實現(xiàn)的CRUD功能
- hive 通過mapreduce實現(xiàn) 數(shù)據(jù)查詢的
- hbase 可以有集群 集群的管理是通過zookeeper實現(xiàn)
- hive 只能做離線計算
- hbase 提供對數(shù)據(jù)的隨機實時讀/寫訪問功能
- hive hbase 共同點
-
HBase 對事務(wù)的支持 只支持行級別的事務(wù)
-
CAP定理
- 分區(qū)容錯性 分布式系統(tǒng)都要有的特性,任何時候都要能提供服務(wù) P保證
- HBase CP系統(tǒng) 強一致性
Hbase 數(shù)據(jù)模型
- NameSpace 對應(yīng) 關(guān)系型數(shù)據(jù)庫 database
- 表(table):用于存儲管理數(shù)據(jù),具有稀疏的、面向列的特點。
- 行 (row): 每一行都對應(yīng)一個row key 行鍵 Hbase有索引但是只是在行鍵 rowkey有索引
- 列 Column family 和 Column qualifier 組成
- 列族(ColumnFamily)保存的就是 鍵值對集合 key:value
- 時間戳(TimeStamp):是列的一個屬性
Hbase 和 傳統(tǒng)關(guān)系型數(shù)據(jù)庫區(qū)別
-
創(chuàng)建HBase表的時候只需要指定表名 和 列族
-
每一個行當(dāng)中 只需要列族相同就可以了 至于每個列族中的 key:value對 key可以完全不同
HBase基礎(chǔ)架構(gòu)
-
Client
-
Zookeeper
- 保證HMaster有一個活著
- HRegionServer HMaster地址存儲
- 監(jiān)控Region Server狀態(tài) 將Region Server信息通知HMaster
- 元數(shù)據(jù)存儲
-
HMaster
-
HRegionServer
-
HStore
- 每一個column family 對應(yīng)了一個HStore
-
HRegion
-
HLog
面向列數(shù)據(jù)庫 列式存儲
適合存非關(guān)系型數(shù)據(jù)
hbase 創(chuàng)建表的過程很簡單 只需要指定表名和列族的名字就可以了
create ‘表名’,‘列族名字’
NameSpace -》數(shù)據(jù)庫
table
row-key 行鍵 hbase的索引只在 row-key才有
column family 列族 key:value 這里面key 又叫 column quanlifier
不同行的 相同的column family 中 column quanlifier可以完全不同
組件
-
HMaster
-
HRegionServer
- HRegion
- Hstore (一個列族對應(yīng))
- memstore
- storefile
- Hstore (一個列族對應(yīng))
- HRegion
如果遇到 hdfs safe mode
通過 hdfs dfsadmin -safemode leave
hive 一定要先啟動元數(shù)據(jù)服務(wù)
- hive --service metastore&