Java進階筆記(持續(xù)更新~)

目錄??

  • 一.MySQL
    • 1.執(zhí)行一條SQL的過程
      • (A)連接器
      • (B)緩存
      • (C)分析器
      • (D)優(yōu)化器
      • (E)執(zhí)行器
    • 2.MySQL引擎的區(qū)別
      • (A)MyISAM:不支持事務 操作表數(shù)據(jù)鎖表
      • (B)InnoDB: 支持事務 操作表數(shù)據(jù)鎖行
    • 3.數(shù)據(jù)庫優(yōu)化思路
      • (A)SQL語句優(yōu)化
      • (B)索引優(yōu)化
      • (C)數(shù)據(jù)庫結(jié)構(gòu)優(yōu)化
      • (D)服務器硬件優(yōu)化
  • 二.JVM
    • Java類的加載過程
      • (A)加載(將class文件轉(zhuǎn)換成class實例)
      • (B)驗證 (驗證類數(shù)據(jù)信息是否符合JVM規(guī)范)
        • (a)格式檢查:魔數(shù)驗證谴咸,版本檢查洪唐,長度檢查
        • (b)語義檢查:是否繼承final璧瞬,是否有父類缎脾,是否實現(xiàn)抽象方法
        • (c)字節(jié)碼驗證:跳轉(zhuǎn)指令是否指向正確的位置袜茧,操作數(shù)類型是否合理
        • (d)符號引用驗證:符號引用的直接引用是否存在
      • (C)準備 (分配靜態(tài)變量的內(nèi)存空間)
      • (D)解析(將常量池中的符號引用轉(zhuǎn)為直接引用)
      • (E)初始化 (加載start塊和給start變量賦值)
  • Java運行時數(shù)據(jù)區(qū)結(jié)構(gòu)
    • (A)PC寄存器/程序計數(shù)器(每個線程有一個獨立的程序計數(shù)器途凫,且互不影響危纫,獨立儲存)
      • (a)保存當前正在執(zhí)行的程序的內(nèi)存地址财破。
    • (B)Java棧 Java Stack(每條線程對應一個棧掰派,一個棧中對應多個棧幀,執(zhí)行一個方法壓入一個棧幀左痢,結(jié)束一個方法出一個棧幀)
      • (a)棧幀是每個方法關聯(lián)起來的靡羡,每運行一個方法就創(chuàng)建一個棧幀系洛,每個棧幀會含有一些局部變量,每當一個方法執(zhí)行完成時略步,該棧幀就會彈出這個棧幀的元素作為這個方法的返回值描扯,并清除這個棧幀。
      • (b)Java棧頂?shù)臈褪钱斍皥?zhí)行的活動棧趟薄,也就是正在執(zhí)行的方法绽诚,PC寄存器會指向該地址
      • (c)棧幀的結(jié)構(gòu):局部變量表竟趾,操作數(shù)棧憔购,動態(tài)連接方法,返回的地址
    • (C)堆 Heap(堆時JVM所管理的內(nèi)存中最大的一塊岔帽,被所有的Java線程鎖共享玫鸟,不是線程安全的,在JVM啟動時創(chuàng)建)
      • (a)所有對象實例以及數(shù)組都要在堆上分配犀勒。
      • (b)Java堆時GC管理的主要區(qū)域屎飘,現(xiàn)在GC基本都采用分代收集算法,所有堆還可以細分為:新生代和老年代新生代再細致一點有Eden空間贾费,F(xiàn)rom Survivor空間钦购,To Survivor空間等。
    • (D)方法區(qū)Method Area(方法區(qū)存放了要加載類的信息(名稱褂萧,修飾符等)類中定義為靜態(tài)常量押桃,類中的Field信息,類中的方法信息导犹,方法區(qū)是被Java線程共享的
      • (a)方法區(qū)數(shù)據(jù)雖然時被線程共享唱凯,但是不會像Java堆一樣被GC頻繁回收,它儲存的信息相對比較穩(wěn)定谎痢,再一定條件下會被GC
    • (E)常量池Constant Pool(常量池本身是方法區(qū)的一個數(shù)據(jù)結(jié)構(gòu)磕昼。
      • (a)常量池中儲存了如字符串,final變量值节猿,類名和方法名變量值票从。常量池在編譯期間就被確定,并保存在已編譯的滨嘱。class文件中峰鄙。
    • (F)本地方法棧Native Method Stack(本地方法棧和Java棧所發(fā)揮的作用非常相似,區(qū)別不過是Java棧為JVM執(zhí)行Java方法服務太雨,而本地方法棧為JVM執(zhí)行Native方法服務先馆。本地方法棧也會拋出StackOverflowError和OutOfMemoryError異常。)
  • JMM
  • 三.Hadoop
    • 1.區(qū)分hdfs hbase hive 區(qū)別以及應用場景
  • 四.Redis
  • 五.MQ
  • 六.微服務

??MySql

一躺彬,執(zhí)行一條SQL的過程

1.連接器和客戶端建立連接

  • 驗證賬號密碼 -> 賬號不對煤墙,報錯:“Access denied for user”
  • 認證通過梅惯,在權限表中查詢擁有的權限
    1.在連接過程才會從權限表中讀取權限信息,中途對權限更新不會影響已經(jīng)建立的連接
    2.若規(guī)定時間內(nèi)無活動仿野,則自動會斷開連接铣减。規(guī)定時間由 wait_timeout控制,默認為8個小時
    優(yōu)化:防止數(shù)據(jù)庫中出現(xiàn)占用大量內(nèi)存的情況脚作,可以用:
    1.定期斷開長連接或者占用內(nèi)存過大的連接葫哗。
    2.MySQL5.7以上的版本,每次執(zhí)行一個較大的操作球涛,可執(zhí)行mysql_reset_connection命令來初始化連接資源劣针,該操作不會重連和重新獲取授權,只是恢復到剛建立連接的狀態(tài)亿扁。

2. 查詢緩存(MySQL8.0后將刪除該功能)

  • 之前執(zhí)行的過的語句捺典,會以語句為Key,執(zhí)行后的結(jié)果集為Value儲存在內(nèi)存中从祝。
  • 如果緩存命中襟己,則直接返回結(jié)果
  • 如果緩存沒有命中,則繼續(xù)執(zhí)行牍陌,并且將語句和結(jié)果集以key-value的形式存于內(nèi)存擎浴。
    1.只要更新表,將會把該表緩存全部清空(緩存適用于不常更新的靜態(tài)表)
    優(yōu)化:
    1.設置默認為不適用緩存毒涧,只針對不常用的靜態(tài)表指定使用緩存(將query_cache_type 設置為 DEMAND,默認SQL不使用查詢緩存)
select SQL_CACHE * from T where ID = 10;

3.分析器

  • 1.詞法分析
    識別SQL關鍵字贮预,提出主要成分。MySQL根據(jù)select得出這是一條查詢語句契讲,根據(jù)from T識別表萌狂,將ID識別為列名。
  • 2.語法分析
    根據(jù)語法規(guī)則判斷是否符合SQL的語法怀泊。如果出現(xiàn)錯誤,則提示:You have an error in your SQL syntax...后面是錯誤的地方误趴,需要你關注use naer后的內(nèi)容霹琼。

4.優(yōu)化器

  • 選取最優(yōu)的執(zhí)行方式:
    1.當涉及到多個索引時,決定用哪個索引
    2.多表關聯(lián)時凉当,決定連接順序
select * from t1 join t2 using(ID) where t1.c=10 and t2.d=20;
該步驟決定了先從t1表中取出`c=10`的ID值還是先查找出t2表中`d=20`的ID值枣申。

5.執(zhí)行器

  • 1.根據(jù)連接器取到權限,判斷該用戶是否對T表有權限看杭。
  • 2.若有權限忠藤,繼續(xù)打開表繼續(xù)操作。
    打開表后楼雹,根據(jù)表的引擎定義模孩,使用提供的接口解析數(shù)據(jù):
    • 表T中ID字段無索引:
      1. 調(diào)用InnoDB提供的接口尖阔,取出第一行,ID=10時榨咐,將該行數(shù)據(jù)放入結(jié)果集介却。不符合則再次調(diào)用引擎接口獲取下一行,再次判斷块茁,直到執(zhí)行完最后一行齿坷。
      2. 將結(jié)果集存入緩存,返回給客戶端数焊。
    • 表T中的ID字段有索引:
      1. 調(diào)用InnoDB的索引方法獲取滿足條件的第一行接口永淌,server層還會再判斷一次值是否正確,然后放入結(jié)果集佩耳,接著繼續(xù)訪問滿足條件的下一行接口遂蛀,這些結(jié)構(gòu)時引擎已經(jīng)定義好的。其原理是使用B+tree蚕愤。

問題:

  • 如果在查詢語句中的字段不存在答恶,會在哪個階段報錯?
    分析器階段萍诱。
  • MySQL中解析器和預處理器有什么作用?
    解析器:處理語法啊和解析查詢悬嗓,生成一顆對應的解析樹。
    預處理器:進一步檢查解析樹的合法性裕坊,比如:數(shù)據(jù)表和數(shù)據(jù)列是否存在包竹,別名是否有歧義等。如果通過則生成新的解析樹籍凝,再提交給優(yōu)化器周瞎。
  • Connect_timeout和wait_timeout是指什么?
    Connect_timeout :連接過程中的等待時間饵蒂。
    wait_timeout:連接完成后声诸,使用過程中的等待時間。

二退盯,MySQL引擎的區(qū)別

MySQL有四種引擎:ISAM , MyISAM彼乌,HEAP,InnoDB
ISAM :ISAM執(zhí)行讀取操作的速度很快渊迁,不支持事務處理慰照,也不能夠容錯。
MyISAM:MyISAM是MySQL的ISAM擴展格式和缺省的數(shù)據(jù)庫引擎琉朽。
HEAP:HEAP允許只駐留在內(nèi)存里的臨時表格毒租。駐留在內(nèi)存里讓HEAP要比ISAM和MYISAM都快。
InnoDB:支持事務等高級操作箱叁。

  • MySQL5.1之前默認引擎是MyISAM墅垮,MySQL5.1之后默認引擎改為InnoDB
    InnoDB支持事務并且更新數(shù)據(jù)是行鎖惕医,MyISAM不支持事務更新數(shù)據(jù)是表鎖
    MyISAM數(shù)據(jù)文件比InnoDB多出一種索引文件,MyISAM比InnoDB的查詢速度塊很多噩斟。

三曹锨,數(shù)據(jù)庫優(yōu)化思路

1.SQL語句優(yōu)化:

  • 盡量避免放棄使用索引而引起全表掃描,例如:
    • where子句中使用剃允!=
    • where子句中使用<>
    • where子句中改變=號左邊的值
    • where子句中對字段進行null值判斷 is nullselect id from user where num is null
  • 優(yōu)化建議:
    • 將為null的值由0代替select id from user where num = 0
    • 很多時候使用exists代替in是一個好的選擇
    • 用where子句替換having子句因為having只會在檢索出所有記錄之后才會對結(jié)果集進行過濾

2.索引優(yōu)化

  • 在具有這些性質(zhì)的字段上建立索引:
    • 經(jīng)常搜索(可以加快搜索速度)
    • 作為主鍵的列沛简,強制該列的唯一性和組織表中的排序結(jié)構(gòu)
    • 在經(jīng)常用于連接的列上(外鍵,可以加快連接速度)
    • 在經(jīng)常需要根據(jù)范圍進行搜索的列上(索引以及排序斥废,指定范圍是連續(xù)的)
    • 在經(jīng)常需要排序的字段
    • 在經(jīng)常使用where的列上(加快條件的判斷速度)
  • 不應該建立索引列的特征:
    • 查詢中很少使用或者參考的列
    • 數(shù)據(jù)值很少的列椒楣,例如:性別
    • 類型定義為text,image和bit數(shù)據(jù)類型的列
    • 修改遠遠大于檢索的列

3.數(shù)據(jù)庫結(jié)構(gòu)優(yōu)化

  • 范式優(yōu)化:
    • 消除沉余(節(jié)省空間)
  • 反范式優(yōu)化:
    • 適當加沉余(減少join)
  • 拆分表:
    • 分區(qū)將在物理硬盤上分割開牡肉,不同分區(qū)的數(shù)據(jù)可以制定保存在處于不同磁盤的數(shù)據(jù)文件里捧灰。當對這個表查詢時,只需要在表分區(qū)中進行掃描统锤,而不必進行全表掃描毛俏,另外處于不同磁盤的分區(qū)也將對這個表的數(shù)據(jù)傳輸分散在不同的磁盤I/O,一個良好的分區(qū)可以將數(shù)據(jù)傳輸對磁盤I/O競爭均勻地分散開饲窿。對數(shù)據(jù)量大的時候可采用此方法煌寇。
    • 例:1.產(chǎn)品表(數(shù)據(jù)量10萬,穩(wěn)定)逾雄,2.訂單表(數(shù)據(jù)量200萬阀溶,且有增長趨勢)3.用戶表(數(shù)據(jù)量100萬,且有增長趨勢)
    • 垂直拆分
      • 方案:吧產(chǎn)品表和用戶表放在一個server上訂單表單獨放到一個server上
      • 解決問題:表于表之間的io競爭
      • 不解決的問題:單表中數(shù)據(jù)量增加出現(xiàn)的壓力
    • 水平拆分
      • 方案:用戶表通過性別拆分男用戶和女用戶鸦泳,訂單表通過已完成訂單和未完成訂單拆分银锻,將未完成數(shù)據(jù)單獨放在一個server上,已完成訂單和男用戶放在一個server上
      • 解決問題:單表中數(shù)據(jù)量增加出現(xiàn)的壓力
      • 不解決的問題:表與表之間的io爭奪

4.服務器硬件的優(yōu)化

  • 花錢擴展服務器性能做鹰,搭建集群等等

??JVM

Java類的加載過程

  • 類從被加載到JVM中開始击纬,到卸載為止,整個生命周期包括:加載钾麸、驗證更振、準備解析喂走、初始化使用卸載七個階段谋作。
  • 其中類加載過程包括加載芋肠、驗證準備遵蚜、解析初始化五個階段帖池。

加載(將Class文件轉(zhuǎn)換成Class對象實例)

  • 1.類加載器根據(jù)一個類的全限定名來讀取此類的二進制字節(jié)流到JVM中奈惑,然后轉(zhuǎn)換為一個與類目標對應的java.lang.Class對象實例。
    • ①BootstrapClassLoader:負責加載$JAVA_HOME中jre/lib/rt.jar里所有的class,由C++實現(xiàn)睡汹,不是ClassLoader子類肴甸。
    • ②ExtClassLoader:負責加載java平臺中擴展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目錄下的jar包囚巴。
    • ③AppClassLoader:負責加載ClassPath中指定的jar包及目錄中的class
    • ④CustomClassLoader:屬于應用程序根據(jù)自身需要自定義的ClassLoader原在,如tomcat,Jboss都會根據(jù)j2ee規(guī)范自行實現(xiàn)ClassLoader彤叉。
  • defineClass方法將字節(jié)碼的byte數(shù)組轉(zhuǎn)換為一個類的class對象實例庶柿,如果希望在類被加載到JVM時就被鏈接,可以在自定義類加載器中調(diào)用resolve'Class方法秽浇。
    • 自定義類加載器需要繼承抽象類ClassLoader,實現(xiàn)findClass方法浮庐,該方法會在lodClass調(diào)用的時候被調(diào)用,findClass默認會拋出異常柬焕。
      • findClass:表示根據(jù)類名查找類對象审残。
      • loadClass:表示根據(jù)類名進行雙親委派模型進行類加載并返回類對象。
      • defineClass:表示根據(jù)類的字節(jié)碼轉(zhuǎn)換為類對象斑举。

驗證(驗證數(shù)信息是否符合JVM規(guī)范搅轿,是否是一個有效的字節(jié)碼文件)

  • 驗證內(nèi)容:類數(shù)據(jù)信息的格式驗證,語義分析懂昂,操作驗證等介时。
    • 格式驗證:驗證是否符合class文件規(guī)范
    • 語義驗證:檢查一個被標記為final的類型是否包含子類;檢查一個類中的final方法視頻被子類進行重寫凌彬;確保父類和子類之間沒有不兼容的一些方法聲明(比如方法簽名相同沸柔,但方法的返回值不同)
    • 操作驗證:在操作數(shù)棧中的數(shù)據(jù)必須進行正確的操作,對常量池中的各種符號引用執(zhí)行驗證(通常在解析階段執(zhí)行铲敛,檢查是否通過富豪引用中描述的全局定名定位到指定類型上褐澎,以及類成員信息的訪問修飾符)

準備(為類追蹤的所有靜態(tài)變量分配內(nèi)存空間,并為其設置一個初始值(由于還沒產(chǎn)生對象伐蒋,實例變量不在此操作范圍內(nèi)))

  • 被final修飾的靜態(tài)變量工三,會直接賦予原值。
  • 類字段的字段屬性表中存在ConstantValue屬性先鱼,則在準備階段俭正,其值就是ConstantValue的值。

解析(將常量池中的符號引用轉(zhuǎn)為直接引用(得到類或者字段焙畔,方法在內(nèi)存中的指針或者偏移量掸读,一遍直接調(diào)用該方法,這個可以在初始化之后再執(zhí)行))

  • 可以認為是一些靜態(tài)綁定的會被解析,動態(tài)綁定則只會在運行時進行解析儿惫。
  • 靜態(tài)綁定包括一些final方法(不可重寫)澡罚,static方法(只屬于當前類),構(gòu)造器(不會被重寫)

初始化(將一個類中所有被static關鍵字表示得代碼統(tǒng)一執(zhí)行一遍)

  • 如果執(zhí)行得是靜態(tài)變量肾请,那么就會使用用戶指定得值覆蓋之前在準備階段設置得初始值
  • 如果執(zhí)行得是static代碼塊留搔,那么在初始化階段,JVM就會執(zhí)行static代碼塊中定義的所有操作铛铁。
  • 所有類變量初始化語句和靜態(tài)代碼塊都會在編譯時被前端編譯器放在收集器里頭隔显,存放到一個特殊的方法中,這個方法就是<clinit>方法避归,即類/接口初始化方法荣月。該方法的作用就是初始化一個中的變量,使用用戶指定的值覆蓋之前在準備階段里設定的初始值梳毙,任何invoke之類的字節(jié)碼都無法調(diào)用<clinit>方法哺窄,由JVM負責保證一個類的<clinit>方法執(zhí)行之前,它的父類<clinit>方法已經(jīng)被執(zhí)行账锹。
  • JVM必須確保一個類在初始化的過程中萌业,如果多線程需要同時初始化它,僅僅只能允許其中一個線程對其執(zhí)行操作奸柬,其余線程必須等待生年,只有在活動線程執(zhí)行完對類的初始化操作之后,菜會通知正在等待的其他線程廓奕。

Java運行時數(shù)據(jù)區(qū)結(jié)構(gòu)

- (A)PC寄存器/程序計數(shù)器(每個線程有一個獨立的程序計數(shù)器抱婉,且互不影響,獨立儲存)
  - (a)保存當前正在執(zhí)行的程序的內(nèi)存地址桌粉。
- (B)Java棧 Java Stack(每條線程對應一個棧蒸绩,一個棧中對應多個棧幀,執(zhí)行一個方法壓入一個棧幀铃肯,結(jié)束一個方法出一個棧幀)
  - ![](https://upload-images.jianshu.io/upload_images/14037200-6f9066f05140f0ef.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

  - (a)棧幀是每個方法關聯(lián)起來的患亿,每運行一個方法就創(chuàng)建一個棧幀,每個棧幀會含有一些局部變量押逼,每當一個方法執(zhí)行完成時步藕,該棧幀就會彈出這個棧幀的元素作為這個方法的返回值,并清除這個棧幀挑格。
  - (b)Java棧頂?shù)臈褪钱斍皥?zhí)行的活動棧咙冗,也就是正在執(zhí)行的方法,`PC寄存器會指向該地址`漂彤。  
  - (c)棧幀的結(jié)構(gòu):`局部變量表雾消,操作數(shù)棧瞬逊,動態(tài)連接方法,返回的地址`
- (C)堆 Heap(堆時JVM所管理的內(nèi)存中最大的一塊仪或,被所有的Java線程鎖共享,不是線程安全的士骤,在JVM啟動時創(chuàng)建)
  - (a)所有對象實例以及數(shù)組都要在堆上分配范删。
  - (b)Java堆時GC管理的主要區(qū)域,現(xiàn)在GC基本都采用`分代收集算法`拷肌,所有堆還可以細分為:`新生代和老年代`新生代再細致一點有`Eden空間到旦,F(xiàn)rom Survivor空間,To Survivor空間`等巨缘。
- (D)方法區(qū)Method Area(方法區(qū)存放了要加載類的信息(名稱添忘,修飾符等)類中定義為靜態(tài)常量,類中的Field信息若锁,類中的方法信息搁骑,`方法區(qū)是被Java線程共享的`)
  - (a)方法區(qū)數(shù)據(jù)雖然時被線程共享,但是不會像Java堆一樣被GC頻繁回收又固,它儲存的信息相對比較穩(wěn)定仲器,再一定條件下會被GC
- (E)常量池Constant Pool(`常量池本身是方法區(qū)的一個數(shù)據(jù)結(jié)構(gòu)。`)
  - (a)常量池中儲存了如字符串仰冠,final變量值乏冀,類名和方法名變量值。常量池在編譯期間就被確定洋只,并保存在已編譯的辆沦。class文件中。
- (F)本地方法棧Native Method Stack(本地方法棧和Java棧所發(fā)揮的作用非常相似识虚,區(qū)別不過是Java棧為JVM執(zhí)行Java方法服務肢扯,而本地方法棧為JVM執(zhí)行Native方法服務。本地方法棧也會拋出StackOverflowError和OutOfMemoryError異常舷礼。)

??Hadoop

區(qū)分hdfs hbase hive 區(qū)別以及應用場景

Hive

Hive在Hadoop中扮演數(shù)據(jù)倉庫的角色鹃彻。建立在Hadoop集群的最頂層,對存儲在Hadoop群上的數(shù)據(jù)提供類SQL的接口進行操作妻献。你可以用HiveQL進行selelct蛛株,join等等操作。
特點:支持SQL查詢
注意:Hive現(xiàn)在適合再離線下進行數(shù)據(jù)操作育拨,不使用于在線查詢谨履,因為一個字“慢”
適用場景:不想用程序語言開發(fā)MapReduce的朋友們,熟悉SQL的朋友可以使用Hive開離線進行數(shù)據(jù)處理分析工作熬丧。如果你有數(shù)據(jù)倉庫的需求并且你擅長寫SQL并且不想寫MapReduce jobs就可以用Hive代替笋粟。

HBase

HBase是一個數(shù)據(jù)庫,一個NoSql數(shù)據(jù)庫,像其他數(shù)據(jù)庫一樣提供隨即讀寫功能害捕,Hadoop不能滿足于實時需要绿淋,HBase正可以滿足。
特點:即時讀寫
適用場景:需要實時訪問一些數(shù)據(jù)尝盼,就可以把它存入HBase吞滞,你也可以用Hadoop作為靜態(tài)數(shù)據(jù)倉庫,HBase作為數(shù)據(jù)存儲盾沫,放那些進行一些操作會改變的數(shù)據(jù)茶凳。

問題:

什么情況下應用HBase?

  • 1.成熟的數(shù)據(jù)分析主題唉匾,查詢模式已經(jīng)確立,并且不會輕易改變。
  • 2.傳統(tǒng)的關系型數(shù)據(jù)庫已經(jīng)無法承受負荷灶伊,高速插入减响,大量存取覆积。
  • 3.適合海量的共缕,但同時也是簡單的操作(例如 key-value)。

官方解釋

Use Apache HBase? when you need random, realtime read/write access to your Big Data. This project's goal is the hosting of very large tables -- billions of rows X millions of columns -- atop clusters of commodity hardware. Apache HBase is an open-source, distributed, versioned, non-relational database modeled after Google's Bigtable: A Distributed Storage System for Structured Data by Chang et al. Just as Bigtable leverages the distributed data storage provided by the Google File System, Apache HBase provides Bigtable-like capabilities on top of Hadoop and HDFS.

Pig VS Hive

Hive更適合于數(shù)據(jù)倉庫的任務谭确,Hive主要用于靜態(tài)的結(jié)構(gòu)以及需要經(jīng)常分析的工作掀潮,Hive于SQL相似促使其成為Hadoop與其他BI工具結(jié)合的理想交集。
Pig賦予開發(fā)人員在大數(shù)據(jù)集領域更多的靈活性琼富,并允許開發(fā)簡介的腳本用于轉(zhuǎn)換數(shù)據(jù)流以便潛入到較大的應用程序仪吧。
Pig相比Hive輕量,它主要的優(yōu)勢時相比于直接使用Hadoop Java APIs可大幅削減代碼量鞠眉。正因如此薯鼠,Pig仍然是吸引大量的軟件開發(fā)人員。
Hive和Pig都可以與HBase組合使用械蹋,Hive和Pig還為HBase提供了高層語言支持出皇,使得在HBase上進行數(shù)據(jù)統(tǒng)計處理變的非常簡單。

Hive VS HBase

Hive 是建立在Hadoop之上為了減少MapReduce jobs編寫工作的批處理程序,HBases是為了支持彌補Hadoop對實時操作的缺陷彌補的項目哗戈。
想象你在操作RMDB數(shù)據(jù)庫郊艘,如果是全表掃描,就用Hive+Hadoop唯咬,如果索引訪問纱注,就用HBase+Hadoop。
Hive query就是MapReduce jobs 可以從5分鐘到數(shù)小時不止胆胰,HBase是非常高效的狞贱,肯定比Hive高效的多。

JDBC

未完待續(xù)~

文中有錯誤希望大家在評論區(qū)指出蜀涨,謝謝~~~~~~~~~

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瞎嬉,一起剝皮案震驚了整個濱河市蝎毡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌氧枣,老刑警劉巖沐兵,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異便监,居然都是意外死亡痒筒,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門茬贵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人移袍,你說我怎么就攤上這事解藻。” “怎么了葡盗?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵螟左,是天一觀的道長。 經(jīng)常有香客問我觅够,道長胶背,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任喘先,我火速辦了婚禮钳吟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘窘拯。我一直安慰自己红且,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布涤姊。 她就那樣靜靜地躺著暇番,像睡著了一般。 火紅的嫁衣襯著肌膚如雪思喊。 梳的紋絲不亂的頭發(fā)上壁酬,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音恨课,去河邊找鬼舆乔。 笑死,一個胖子當著我的面吹牛剂公,可吹牛的內(nèi)容都是我干的蜕煌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼诬留,長吁一口氣:“原來是場噩夢啊……” “哼斜纪!你這毒婦竟也來了贫母?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤盒刚,失蹤者是張志新(化名)和其女友劉穎腺劣,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體因块,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡橘原,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了涡上。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片趾断。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖吩愧,靈堂內(nèi)的尸體忽然破棺而出芋酌,到底是詐尸還是另有隱情,我是刑警寧澤雁佳,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布脐帝,位于F島的核電站,受9級特大地震影響糖权,放射性物質(zhì)發(fā)生泄漏堵腹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一星澳、第九天 我趴在偏房一處隱蔽的房頂上張望疚顷。 院中可真熱鬧,春花似錦禁偎、人聲如沸荡含。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽释液。三九已至,卻和暖如春装处,著一層夾襖步出監(jiān)牢的瞬間误债,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工妄迁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留寝蹈,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓登淘,卻偏偏與公主長得像箫老,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子黔州,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355