hbase源碼系列
❶ hbase 源碼 什麼語言開發的
是用java開發的,hbase包含兩個核心服務,一個是HMaster,一個是HRegionServer,在hbase部署的伺服器上調用jps命令能查看到這兩個進程。
❷ HBASE 系列 一個RegionServer的Region數量多少合適
HBase 官方文檔說一個RegionServer被設計跑20 200個regions,數據大小約5 50Gb。
但是,建議regions在100個左右。
首先 ,理解一個概念『MSLAB』,即MemStore-Local Allocation Buffer。
每個store都有一個memstore,為了避免在大量數據寫入,堆中產生很多碎片,導致stop-the-world GC出現,設置hbase.hregion.memstore.mslab.enabled,來預防此問題。即本地MemStore允許分配的內存大小。
當一個HRegion中的所有MemStore的大小總和超過了hbase.hregion.memstore.flush.size的大小,默認128MB。此時當前的HRegion中所有的MemStore會Flush到HDFS中。
當全局MemStore的大小超過了hbase.regionserver.global.memstore.upperLimit的大小,默認40%的內存使用量。此時當前HRegionServer中所有HRegion中的MemStore都會Flush到HDFS中,Flush順序是MemStore大小的倒序,直到總體的MemStore使用量低於hbase.regionserver.global.memstore.lowerLimit,默認38%的內存使用量。
.
❸ 如何在windows平台上用Eclipse調試運行HBase
操作步驟如下:
1.下載和安裝cygwin;
2.下載新的Zookeeper包和HBase包,這里ZooKeeper版本為3.3.1,HBase版本為0.20.4
3.把利用它們的源碼包在Eclipse下生成2個獨立的Project,注意:zookeeper工程,要把那個conf目錄加入到工程的src中去
4.修改zookeeper工程下的conf目錄中的zoo.cfg文件,例子如下:
# The number of milliseconds of each tick
tickTime=5000
# the directory where the snapshot is stored.
dataDir=D:/zookeeper-3.3.1/data
# the port at which the clients will connect
clientPort=2181
就是給zookeeper指定文件存放的地方以及埠
5.啟動zookeeper
在Eclipse中新建一個Run config,main class為:org.apache.zookeeper.server.quorum.QuorumPeerMain
啟動的程序參數為:D:/workspace/zookeeper3.3.1/conf/zoo.cfg
啟動的虛擬機參數為:
-Dzookeeper.log.dir=D:/workspace/zookeeper3.3.1/log
-Dzookeeper.root.logger=INFO,CONSOLE
如圖所示:
好了,這樣就可以在Eclipse中把ZooKeeper啟動起來了。
6.修改HBase project中的一個類
org.apache.hadoop.hbase.LocalHBaseCluster
找到它的main函數,把main函數改成下
public static void main(String[] args) throws IOException {
HBaseConfiguration conf = new HBaseConfiguration();
conf.set("hbase.zookeeper.quorum", "localhost");
conf.set("hbase.zookeeper.property.clientPort", "2181");
LocalHBaseCluster cluster = new LocalHBaseCluster(conf,1);
cluster.startup();
}
注意行:LocalHBaseCluster cluster = new LocalHBaseCluster(conf,1); 構造函數中的1是代表Region server的個數,在這里只想起一個region server.
7.修改HBase的配置文件
在HBase project下的src中可以看到hbase-default.xml和hbase-site.xml兩個文件,改哪個都可以。直接在hbase-default.xml改的,重要的是下面3個屬性hbase.rootdir,hbase.cluster.distributed,hbase.tmp.dir,
把hbase.rootdir,hbase.tmp.dir都指向了本地的目錄,當然可以根據自己的需要調整,當然格式一定一樣寫。
<property>
<name>hbase.rootdir</name>
<value>file:///D:/hbase-0.20.3/data</value>
<description>The directory shared by region servers.
Should be fully-qualified to include the filesystem to use.
E.g: hdfs://NAMENODE_SERVER:PORT/HBASE_ROOTDIR
</description>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>false</value>
<description>The mode the cluster will be in. Possible values are
false: standalone and pseudo-distributed setups with managed Zookeeper
true: fully-distributed with unmanaged Zookeeper Quorum (see hbase-env.sh)
</description>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>D:/hbase-0.20.3/tmp</value>
<description>Temporary directory on the local filesystem.</description>
</property>
<property>
8.啟動HBase,直接run org.apache.hadoop.hbase.LocalHBaseCluster就可以,run config不需要沒有什麼別的配置。當然就也可以debug了。
❹ hbase源代碼 純java開發的嗎
是的,純java開發的nosql
❺ hbase框架中使用了哪些概念
HBase提供了對HBase進行一系列的管理涉及到對表的管理、數據的操作java api。 常用的API操作有: 1、 對表的創建、刪除、顯示以及修改等,可以用HBaseAdmin,一旦創建了表,那麼可以通過HTable的實例來訪問表,每次可以往表裡增加數據。
❻ Hbase源代碼不開放
不開放。Hbase源代碼是進行過加密設置的,沒有進行對外開放,是為了更好的做好保密工作,有非常重要的信息技術類文件,各部門領導員工都非常重視。
❼ 如何搭建Hbase源碼閱讀環境,並能進行編譯運行
hbase源碼導入eclipse分三步:
1.svn下載源碼
2.mvn package -Dmaven.test.skip.exec=true編譯源碼
3.導入eclipse,可以用插件,用mvn eclipse:eclipse生成eclipse文件,導入eclipse。
❽ 大數據分析應該掌握哪些基礎知識呢
前言,學大數據要先換電腦:
保證電腦4核8G內存64位操作系統,盡量有ssd做系統盤,否則卡到你喪失信心。硬碟越大越好。
1,語言要求
java剛入門的時候要求javase。
scala是學習spark要用的基本使用即可。
後期深入要求:
java NIO,netty,多線程,ClassLoader,jvm底層及調優等,rpc。
2,操作系統要求
linux 基本的shell腳本的使用。
crontab的使用,最多。
cpu,內存,網路,磁碟等瓶頸分析及狀態查看的工具。
scp,ssh,hosts的配置使用。
telnet,ping等網路排查命令的使用
3,sql基本使用
sql是基礎,hive,sparksql等都需要用到,況且大部分企業也還是以數據倉庫為中心,少不了sql。
sql統計,排序,join,group等,然後就是sql語句調優,表設計等。
4,大數據基本了解
Zookeeper,hadoop,hbase,hive,sqoop,flume,kafka,spark,storm等這些框架的作用及基本環境的搭建,要熟練,要會運維,瓶頸分析。
5,maprece及相關框架hive,sqoop
深入了解maprece的核心思想。尤其是shuffle,join,文件輸入格式,map數目,rece數目,調優等。
6,hive和hbase等倉庫
hive和hbase基本是大數據倉庫的標配。要回用,懂調優,故障排查。
hbase看浪尖hbase系列文章。hive後期更新。
7,消息隊列的使用
kafka基本概念,使用,瓶頸分析。看浪尖kafka系列文章。
8,實時處理系統
storm和spark Streaming
9,spark core和sparksql
spark用於離線分析的兩個重要功能。
10,最終方向決策
a),運維。(精通整套系統及故障排查,會寫運維腳本啥的。)
b),數據分析。(演算法精通)
c),平台開發。(源碼精通)
自學還是培訓?
無基礎的同學,培訓之前先搞到視頻通學一遍,防止盲目培訓跟不上講師節奏,浪費時間,精力,金錢。
有基礎的盡量搞點視頻學基礎,然後跟群里大牛交流,前提是人家願意,
想辦法跟大牛做朋友才是王道。
❾ 如何使用scala+spark讀寫hbase
如何使用scala+spark讀寫Hbase
軟體版本如下:
scala2.11.8
spark2.1.0
hbase1.2.0
公司有一些實時數據處理的項目,存儲用的是hbase,提供實時的檢索,當然hbase裡面存儲的數據模型都是簡單的,復雜的多維檢索的結果是在es裡面存儲的,公司也正在引入Kylin作為OLAP的數據分析引擎,這塊後續有空在研究下。
接著上面說的,hbase存儲著一些實時的數據,前兩周新需求需要對hbase裡面指定表的數據做一次全量的update以滿足業務的發展,平時操作hbase都是單條的curd,或者插入一個批量的list,用的都是hbase的java api比較簡單,但這次涉及全量update,所以如果再用原來那種單線程的操作api,勢必速度回慢上許多。
關於批量操作Hbase,一般我們都會用MapRece來操作,這樣可以大大加快處理效率,原來也寫過MR操作Hbase,過程比較繁瑣,最近一直在用scala做spark的相關開發,所以就直接使用scala+spark來搞定這件事了,當然底層用的還是Hbase的TableOutputFormat和TableOutputFormat這個和MR是一樣的,在spark裡面把從hbase裡面讀取的數據集轉成rdd了,然後做一些簡單的過濾,轉化,最終在把結果寫入到hbase裡面。
整個流程如下:
(1)全量讀取hbase表的數據
(2)做一系列的ETL
(3)把全量數據再寫回hbase
核心代碼如下:
//獲取conf
val conf=HBaseConfiguration.create() //設置讀取的表
conf.set(TableInputFormat.INPUT_TABLE,tableName) //設置寫入的表
conf.set(TableOutputFormat.OUTPUT_TABLE,tableName)//創建sparkConf
val sparkConf=new SparkConf() //設置spark的任務名
sparkConf.setAppName("read and write for hbase ") //創建spark上下文
val sc=new SparkContext(sparkConf)
//為job指定輸出格式和輸出表名
val newAPIJobConfiguration1 = Job.getInstance(conf)
newAPIJobConfiguration1.getConfiguration().set(TableOutputFormat.OUTPUT_TABLE, tableName)
newAPIJobConfiguration1.setOutputFormatClass(classOf[TableOutputFormat[ImmutableBytesWritable]])
//全量讀取hbase表
val rdd=sc.newAPIHadoopRDD(conf,classOf[TableInputFormat]
,classOf[ImmutableBytesWritable]
,classOf[Result]
)
//過濾空數據,然後對每一個記錄做更新,並轉換成寫入的格式
val final_rdd= rdd.filter(checkNotEmptyKs).map(forDatas)
//轉換後的結果,再次做過濾
val save_rdd=final_rdd.filter(checkNull)
//最終在寫回hbase表
save_rdd.saveAsNewAPIHadoopDataset(newAPIJobConfiguration1.getConfiguration)
sc.stop()
從上面的代碼可以看出來,使用spark+scala操作hbase是非常簡單的。下面我們看一下,中間用到的幾個自定義函數:
第一個:checkNotEmptyKs
作用:過濾掉空列簇的數據
def checkNotEmptyKs(f:((ImmutableBytesWritable,Result))):Boolean={ val r=f._2 val rowkey=Bytes.toString(r.getRow) val map:scala.collection.mutable.Map[Array[Byte],Array[Byte]]= r.getFamilyMap(Bytes.toBytes("ks")).asScala if(map.isEmpty) false else true
}
第二個:forDatas
作用:讀取每一條數據,做update後,在轉化成寫入操作
def forDatas(f: (ImmutableBytesWritable,Result)): (ImmutableBytesWritable,Put)={ val r=f._2 //獲取Result
val put:Put=new Put(r.getRow) //聲明put
val ks=Bytes.toBytes("ks") //讀取指定列簇
val map:scala.collection.mutable.Map[Array[Byte],Array[Byte]]= r.getFamilyMap(ks).asScala
map.foreach(kv=>{//遍歷每一個rowkey下面的指定列簇的每一列的數據做轉化
val kid= Bytes.toString(kv._1)//知識點id
var value=Bytes.toString(kv._2)//知識點的value值
value="修改後的value"
put.addColumn(ks,kv._1,Bytes.toBytes(value)) //放入put對象
}
) if(put.isEmpty) null else (new ImmutableBytesWritable(),put)
}
第三個:checkNull 作用:過濾最終結果裡面的null數據
def checkNull(f:((ImmutableBytesWritable,Put))):Boolean={ if(f==null) false else true
}
上面就是整個處理的邏輯了,需要注意的是對hbase裡面的無效數據作過濾,跳過無效數據即可,邏輯是比較簡單的,代碼量也比較少。
除了上面的方式,還有一些開源的框架,也封裝了相關的處理邏輯,使得spark操作hbase變得更簡潔,有興趣的朋友可以了解下,github鏈接如下:
❿ hbase源碼怎麼導入eclipse
如何使用Eclipse導入並運行源碼(
網上關於Eclipse配置和開發入門程序的文章很多,可是要麼很粗淺,要麼很高深,卻很少看到講解如何把別人的源碼導入到自己的Eclipse環境中編譯運行的描述。做為初學者,能夠學習網上一些優秀源碼是提高的必由之路,可是Eclipse卻不象VC和Delphi那樣容易上手,對於很多初學者來說,它似乎還是太難了點。在找不到很好的關於Eclipse入門教程的情況下,為了能運行網上下載的Java源碼,我頗費了一些時間尋找如何正確的導入源碼並運行的方法,不敢獨美,特貢獻出來與初學者共享。
運行環境:
Java EE 5.0
Eclipse 3.1 中文版
源代碼用例(都是Java Application):
模擬Windows記事本
連連看
上述的兩個源代碼在賽迪網上可以找到。關於JDK的配置、安裝和Eclipse的安裝本文不再贅述,讀者可以很容易地找到相關的資料。本文只講使用Eclipse來導入源代碼的方法。
首先確保你的工作空間已經創建好,在我的機器上工作空間所在的目錄是「e:/workspace」。源代碼存放路徑假設為「我的文檔/cai/Java/一個仿windows的記事本」和「我的文檔/cai/Java/連連看/kyodai」。
下面開始介紹導入源碼的方法。
◎選擇菜單「文件/新建/項目」,選擇「Java項目」,彈出「創建Java項目」對話框。
◎在「創建Java項目」中輸入「項目名」,項目名可以為任意名字,不必和main類的名字一樣。這里假設為「Notepad」。
在「內容」中有兩個單選按鈕,視你的需要來使用。其中「在工作空間中創建新項目」會在你的工作空間中創建一個新目錄,目錄名與項目名一致;「從現有資源創建項目」可以在源碼所在目錄中直接編譯運行,生成的class文件也會存放在源碼目錄中。
下面先講「在工作空間中創建新項目」的方法。
◎在「內容」中單選「在工作空間中創建新項目」,點擊「完成」按鈕。此時在e:/workspace下生成Notepad目錄。
◎下面需要導入源碼到工作空間去。選擇菜單「文件/導入」,選擇「文件系統」。彈出「文件系統」對話框。
◎在「從目錄」中選擇源碼存放目錄「我的文檔/cai/Java/一個仿windows的記事本」,勾選上所有的.java源碼,其他的垃圾不要選上。下面又有兩個選擇:對話框下方有兩個選項,若選擇「創建完整的文件夾結構」,就會按源碼所存放的路徑完整地在工作空間中創建目錄,創建完畢會由於main方法類的路徑不對而在包資源管理器內的圖標上顯示叉叉,無法編譯成功;若選擇「只創建選擇的文件夾」,則會在工作空間創建的目錄下導入所有的文件而不會保留原目錄,此時可以編譯成功。
◎若選擇「創建完整的文件夾結構」,導入完成後,選擇菜單「項目/屬性/Java構建路徑/源代碼」,點擊「添加文件夾」,把子目錄逐級點開,直到源代碼所在這級目錄為止,勾選上該目錄。彈出的提示對話框點擊確定即可。注意上級目錄不要勾選,否則會報錯。這樣這種方法導入的源碼也可以編譯運行了。
◎注意若源代碼中含有子目錄,在main程序中會有import ...的語句,此時要注意import後面的目錄級別,在選擇Java構建路徑時要勾選上import指明的上級目錄名。例如,連連看代碼中有子目錄topbar,在main程序中有import kyodai.topbar語句,那麼就要勾選到「我的文檔/cai/Java/連連看/」這級目錄,而非源碼所在的「我的文檔/cai/Java/連連看/kyodai」目錄。
◎在連連看源碼中,作者已經把所有源碼都打包成了一個Jar,此時只需要添加該Jar包而不需要導入其他源碼就可以運行了(但不能調試,因為Jar包中不含源碼)。方法是創建完新項目後,選擇菜單「項目/屬性/Java構建路徑」,點擊「庫」頁,點擊「添加外部JAR」按鈕,選擇源碼自帶的Jar包即可運行。
下面介紹「從現有資源創建項目」的方法。
◎在「創建Java項目」對話框中,點擊「下一步」按鈕,彈出「Java設置」對話框。
◎在「Java設置」對話框中選擇「庫」頁,選擇「添加JAR」,若找不到隨源碼提供的Jar包,就選擇「添加外部JAR」。一般如果Jar存放的目錄正確,在「添加JAR」中是可以找到該條目的。雙擊出現的Jar包即可添加進去。若不需要額外的庫支持,則點擊「完成」。
這樣,用上面兩種方法創建的項目就可以編譯運行了。下面就介紹運行的方法。
◎選擇菜單「Run/運行」,彈出「創建、管理和運行配置」對話框。
◎根據源碼的種類在左邊的列表中進行選擇。我們用的兩個例子都是Java應用程序,所以雙擊「Java應用程序」,在對話框右邊可以輸入運行的配置。
◎如果新建了項目還沒有運行過,那麼右邊的「項目」欄預設值即為剛創建的項目。在「名稱」欄中輸入運行配置的名稱,建議與項目名稱一致(也可以不一致),不能與其他的運行配置重名。
◎點擊「Main類」欄右方的「搜索」按鈕,一般只有一個main類,在彈出的對話框中雙擊下面那個欄目的main類即可。如果需要以其他的main方法做為程序入口,可以勾選上「Main類」欄下方的兩個復選框,選擇其他的入口。
◎如果需要增加特殊的環境變數,例如有的源碼可能需要添加classpath環境變數,則可以在「環境」頁中添加。
◎運行配置中的內容也會同樣反映在調試配置中,運行和調試使用相同的配置。
創建了一堆新項目後,包資源管理器中會有一堆亂七八糟項目,有些是你需要的,有些是早已廢棄不用的,你可以刪除那些不用的項目,方法是右鍵點擊該項目,選擇「刪除」。這里要提醒讀者一下的是,刪除對話框有兩個選項,問你是否刪除該項目目錄下的內容,預設是「不刪除內容」,如果選擇刪除,那麼那個目錄就整個被刪除掉了,如果你這個目錄下的東西還有用,那你只好哭了。
刪除掉沒用的項目後,運行/調試對話框中多餘的配置也可以刪除,方法是右鍵點擊不用的配置名,選擇刪除。
好了,這是我初學Eclipse的一些心得,希望能對廣大想要使用Eclipse又擔心它煩瑣的初學者有些幫助。