NOSQL筆記
ACID
Atomicity 原子性
Consistency 一致性
Isolation 隔離性
Durability 持久性
CAP
Consistency 一致性
Availability 可用性
Partition 容錯性
CA:RMDB
AP:Key-Value
SNS Social Networking Services 網路社群服務
因為一致性沒那麼重要,A看C的資料 和B看C的資料差幾秒是沒有感覺的。
2013年1月23日 星期三
2013年1月14日 星期一
Hadoop 實作
開機注意事情:
顯然 755的權限不夠於 hadoop.tmp.dir 資料夾
hadoop 0.20 以後:設定在 core-site.xml 內的 hadoop.tmp.dir 到 /var/hadoop
/opt/hadoop/bin/hadoop stop-all.sh
--------
在CentOS實作Hadoop單機..
設定登入免密碼(因為如果要多台運算,每台都必須輸入密碼。)
安裝Java-JDK(已包含JDE),把預設的Open-JDK改成Sun-JDK。
//修改預設JDK
#alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_22/bin/java 1
#alternatives --install /usr/bin/javac javac /usr/java/jdk1.6.0_22/bin/javac 1
//檢查指令
java -version
//有無正確執行
java or javac
下載安裝hadoop(使用0.20.2)
修改三個設定檔。(hadoop-env.sh,core-site.xml,hdfs-site.xml,mapred-site.xml)
提供最簡單的設定檔。
//hadoop-env.sh
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop/hadoop-\${user.name}</value>
</property>
</configuration>
//core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop/hadoop-\${user.name}</value>
</property>
</configuration>
//hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
//mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>
format namenode, secondnamenode, tasktracker
./opt/hadoop/bin/hadoop namenode -format
//啟動Hadoop
./opt/hadoop/bin/start-all.sh
//檢查運作狀態
http://localhost:50030 50060 50070 看結果。
真是惡夢~
修了10幾個錯誤才能執行,從昨天下午到現在花了一天的時間,我晚點整理在放上來!
1.localhost:50030 50060跑不出來~
2.Exception in thread "main" java.lang.IllegalArgumentException: n must be positive
Hadoop Common HADOOP-6766 apache pacth
https://issues.apache.org/jira/browse/HADOOP-6766
3.INFO ipc.Client: Retrying connect to server: localhost/127.0.0.1:54310. Already tried 0 time(s).
4.file could only be replicated to 0 nodes, instead of 1' in hadoop?
5.ERROR org.apache.hadoop.hdfs.ser:ver.datanode.DataNode: java.io.IOException:
Exception in thread "main" org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist:
沒有把檔案傳進去hdfs
hadoop fs -rmr input
顯然 755的權限不夠於 hadoop.tmp.dir 資料夾
chmod -R 777 /tmp/hadoop
*
hadoop 0.20 以後:設定在 core-site.xml 內的 hadoop.tmp.dir 到 /var/hadoop
sudo mkdir /var/hadoop
sudo chown USERNAME:USERNAME /var/hadoop
sudo chmod 777 /var/hadoop
通常hadoop 遇到問題而開不起來,通常只好重新namenode -format ,然而還是會遇到問題
/opt/hadoop/bin/stop-all.sh
rm -rf /var/hadoop/*
rm -rf /tmp/hadoop*
rm -rf /opt/hadoop/logs/*
/opt/hadoop/bin/hadoop namenode -format
/opt/hadoop/bin/hadoop start-all.sh/opt/hadoop/bin/hadoop stop-all.sh
--------
在CentOS實作Hadoop單機..
設定登入免密碼(因為如果要多台運算,每台都必須輸入密碼。)
安裝Java-JDK(已包含JDE),把預設的Open-JDK改成Sun-JDK。
//修改預設JDK
#alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_22/bin/java 1
#alternatives --install /usr/bin/javac javac /usr/java/jdk1.6.0_22/bin/javac 1
//檢查指令
java -version
//有無正確執行
java or javac
下載安裝hadoop(使用0.20.2)
修改三個設定檔。(hadoop-env.sh,core-site.xml,hdfs-site.xml,mapred-site.xml)
提供最簡單的設定檔。
//hadoop-env.sh
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop/hadoop-\${user.name}</value>
</property>
</configuration>
//core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop/hadoop-\${user.name}</value>
</property>
</configuration>
//hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
//mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>
format namenode, secondnamenode, tasktracker
./opt/hadoop/bin/hadoop namenode -format
//啟動Hadoop
./opt/hadoop/bin/start-all.sh
//檢查運作狀態
http://localhost:50030 50060 50070 看結果。
真是惡夢~
修了10幾個錯誤才能執行,從昨天下午到現在花了一天的時間,我晚點整理在放上來!
1.localhost:50030 50060跑不出來~
2.Exception in thread "main" java.lang.IllegalArgumentException: n must be positive
Hadoop Common HADOOP-6766 apache pacth
https://issues.apache.org/jira/browse/HADOOP-6766
3.INFO ipc.Client: Retrying connect to server: localhost/127.0.0.1:54310. Already tried 0 time(s).
4.file could only be replicated to 0 nodes, instead of 1' in hadoop?
5.ERROR org.apache.hadoop.hdfs.ser:ver.datanode.DataNode: java.io.IOException:
Exception in thread "main" org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist:
沒有把檔案傳進去hdfs
hadoop fs -rmr input
2013年1月9日 星期三
Hadoop使用教學(三)(Hbase介紹)
HBase:
index = row key
一個column family就是column label的集合,label可以新增而不用重新設定table
舉例:
使用('row key', 'family:label', 'timestamp')
('ricky', 'score', 'T5') 得到 ricky, T5, Eng:30
特點:
NOSQL
- HBase是架構在HDFS上的分散式資料庫
- 使用row and column為索引存取資料值
- 每一筆資料都有timestamp,可以一不同時間存取多筆資料
index = row key
一個column family就是column label的集合,label可以新增而不用重新設定table
舉例:
使用('row key', 'family:label', 'timestamp')
('ricky', 'score', 'T5') 得到 ricky, T5, Eng:30
特點:
- 可以將資料表分為許多region,region是由一到數列所組成,並存放在不同主機,存放region的主機就是region server
- 還有master server用來記錄每一個region對應的region server
- master server自動將不能工作的region重新分配到其他refion server
- 提供MapReduce的城市當做資料來源或儲存媒介,提供TableMapper/Reducer類別讓程式中的Mapper/Reducer類別繼承,可以把MapReduce中的Key,Value更方便從HBase取出存入。
NOSQL
Hadoop使用教學(二)(Hadoop架構)
Hadoop架構:
bin/
MapReduce
簡單說MapReduce是一個分散式程式框架,運算工作可以分成兩個部分,Map和Reduce,開始的時候,會被系統轉換成一組組Key,Value的序對並切割成許多部分,分別丟給Mapper處理,Mapper處理完後將運算結果整理成一組組的Key,Value序對,再傳給Reducer整合Mapper的結果,將結果輸出。
MapReduce詳細介紹:
map: [1,2,3,4] - (*2) -> [2,4,6,8]
reduce: [1,2,3,4] - (sum) -> 10
對應Divide and conquer演算法,將問題分解成很多個小問題,再做總和。
HDFS
Hadoop專案中的檔案系統。實作Google File System。
Metadata ( name, path, copies, blocks ),然後要求datanodes抓出來。
副本備份機制:
可靠性機制:
Hadoop Distributed File System
將分散的儲存資源整合成一個具容錯能力、高效率且超大容量的環境。
Hadoop運算產生的資料都是存放在HDFS。
HDFS是master/slave架構,由兩種角色組成。Namenode + Datanodes
Namenode負責各檔案的屬性權限管理及儲存。記錄Datanodes檔案存放位置。
Datanodes由切割成數個Block區塊儲存在不同的Datanodes,每一區塊還會有副本存在不同節點。
名詞介紹:
Job - 任務。
Task - 工作。
JobTracker - 任務分派者。
TaskTracker - 工作執行者。
Map - 對應。
Reduce - 彙整。
Namenode - 名稱節點。
Datanode - 資料節點。
Replication - 副本。
Blocks - 檔案區塊(64M)。
Metadata - 屬性資料。
HDFS Layer - 管理資料
Namenode
簡單說MapReduce是一個分散式程式框架,運算工作可以分成兩個部分,Map和Reduce,開始的時候,會被系統轉換成一組組Key,Value的序對並切割成許多部分,分別丟給Mapper處理,Mapper處理完後將運算結果整理成一組組的Key,Value序對,再傳給Reducer整合Mapper的結果,將結果輸出。
MapReduce詳細介紹:
map: [1,2,3,4] - (*2) -> [2,4,6,8]
reduce: [1,2,3,4] - (sum) -> 10
對應Divide and conquer演算法,將問題分解成很多個小問題,再做總和。
- JobTracker跟NameNode取得需要運算的blocks
- JobTracker選數個TaskTracker來做Map運算
- JobTracker將中間檔案整合排序後,複製到需要的TaskTracker
- JobTracker派遣TaskTracker作reduce
- reduce完成後通知JobTracker與Namenode以產生output
- 建立一個JobConf類別的物件
- 設定MapperClass/ReducerClass的類別
- 設定輸入輸出資料的格式
- 設定輸出資料的類型
- 提交運算工作
- 依據InputFormat的設定取得資料,並分割轉換為Key,Value
- 交由Mapper運算
- Mapper將運算結果輸出為Key,Value序對,也稱為intermediate資料
- 系統將暫時的結果排序暫存起來
- 所有Mapper工作結束
- 依照不同的Key值傳送給不同的Reducer彙整
- 相同Key值會放在container裡傳給同一個Reducer處理
- Reducer利用values.next()依序取得value值
- 結果整理
- 依OutputFormat設定輸出檔案
HDFS
Hadoop專案中的檔案系統。實作Google File System。
- 硬體錯誤容忍能力 - 可自行處理錯誤,不需人工來修理
- 串流式的資料資料存取 - Goolge搜尋,高Latency(等待時間)
- 大規模資料 - 支援Perabytes等級
- 一致性模型 - 一次寫入(收集的東西),多次存取(結果),比如說搜尋引擎 - 去全球的網頁拉資料,一起進去算,算出來存下結果,讓使用者讀取。
- 在地運算 - 資料在哪裡就用那一台運算,如果沒資料會找最近的資料copy
- 異質平台移植性 - 不同硬體可以擴充
Metadata ( name, path, copies, blocks ),然後要求datanodes抓出來。
副本備份機制:
可靠性機制:
- 資料完整性 - (透過CRC32 和 用副本取代出錯資料)
- Datanode壞掉 - 定期送heartbeat送Namenode透過證明自己存在
- FSImage(核心映像檔)、Editlog(日誌檔),當Namoenode掛掉,Secondarynamenode啟動。管理者要用FSImage和Editlog載入給Secondarynamenode。Secondary可以有好幾台。
- 易於擴充的分散式檔案系統
- 運作於廉價的普通硬體上
- 容錯功能
- 提供大量的用戶總體性能教高的服務
Hadoop Distributed File System
將分散的儲存資源整合成一個具容錯能力、高效率且超大容量的環境。
Hadoop運算產生的資料都是存放在HDFS。
HDFS是master/slave架構,由兩種角色組成。Namenode + Datanodes
Namenode負責各檔案的屬性權限管理及儲存。記錄Datanodes檔案存放位置。
Datanodes由切割成數個Block區塊儲存在不同的Datanodes,每一區塊還會有副本存在不同節點。
名詞介紹:
Job - 任務。
Task - 工作。
JobTracker - 任務分派者。
TaskTracker - 工作執行者。
Map - 對應。
Reduce - 彙整。
Namenode - 名稱節點。
Datanode - 資料節點。
Replication - 副本。
Blocks - 檔案區塊(64M)。
Metadata - 屬性資料。
HDFS Layer - 管理資料
Namenode
- Master
- 管理HDFS的名稱空間
- 控制對檔案的讀寫
- 配置副本策略(如果有Datanode節點損壞,進行資料搬遷與複製)
- 對名稱空間做檢查及記錄
- 一個
- Workers
- 執行讀 / 寫動作
- 執行Namonode的副本策略(負責執行)
- 多個
MapReduce Layer - 分派程序
Jobtracker- Master
- 使用者發起工作
- 指派工作給Tasktrackers
- 排成決策、工作分配、錯誤處理
- 一個
- Workers
- 運作Map與Reduce的工作
- 管理儲存;回覆運算結果
- 多個
bin/
各項執行檔,包括start-all.sh,stop-all.sh,hadoop
conf/
設定檔。hadoop-env.sh,hadoop-site.conf
docs/
Hadoop api與說明文件
contrib/
eclipse外掛
lib/
Hadoop函式庫
src/
Hadoop原始碼
build/
Hadoop編譯後資料夾
logs/
日誌
Hadoop使用教學(一)(歷史簡介)
Hadoop是什麼?
是一個讓使用者簡易撰寫並執行處理海量資料應用程式的軟體平台。
比喻:
處理海量資料的生產線,只需學會定義 map 跟 reduce 工作站該做哪些事情。
特色:
Hadoop軟體歷史起源:
Hadoop是由Apache Lucene的建立者Doug Cutting所開發維護。
2003年 - Google發表雲端運算論文 (GFS/Bigtable/MapReduce)
2004年 - Doug Cutting 開放原始碼實作,NDFS
2004年 - Google發佈MapReduce的架構
2005年 - Doug Cutting實作MapReduce
2006年 - Doug Cutting將Nutch改名為Hadoop,並加入Yahoo團隊。
2006年 - MapReduce和NDFS分別被納入Hadoop的項目中。
2008年 - Yahoo宣布達成 10000-core Hadoop cluster
2009年 - Yahoo破了世界紀錄1T的資料分析(62秒),打敗Google的68秒。
其他事件:
名詞解釋:
Lucene:用Java設計的高效能文件索引引擎API,索引文件中的每一字,讓搜尋的效率比傳統逐字比較還要高很多。
Nutch:是一個開放原始碼(自Nutch 0.8開始),以Java來實作的搜尋引擎,利用Lucene為函式庫。
是一個讓使用者簡易撰寫並執行處理海量資料應用程式的軟體平台。
比喻:
處理海量資料的生產線,只需學會定義 map 跟 reduce 工作站該做哪些事情。
特色:
- 海量:擁有儲存與處理大量資料的能力。
- 經濟:可以用在一般PC所架設的叢集環境內。
- 效率:透過分散式檔案系統的幫助,可以得到快速回應。
- 可靠:節點發生錯誤,即時自動取得備份資料與部屬運算資源。
Hadoop軟體歷史起源:
Hadoop是由Apache Lucene的建立者Doug Cutting所開發維護。
2003年 - Google發表雲端運算論文 (GFS/Bigtable/MapReduce)
2004年 - Doug Cutting 開放原始碼實作,NDFS
2004年 - Google發佈MapReduce的架構
2005年 - Doug Cutting實作MapReduce
2006年 - Doug Cutting將Nutch改名為Hadoop,並加入Yahoo團隊。
2006年 - MapReduce和NDFS分別被納入Hadoop的項目中。
2008年 - Yahoo宣布達成 10000-core Hadoop cluster
2009年 - Yahoo破了世界紀錄1T的資料分析(62秒),打敗Google的68秒。
其他事件:
- Nutch後來遇到儲存大量網站資料的瓶頸。
- Google在會議分享他們的三大關鍵技術。 (GFS/Bigtable/MapReduce)
- Hadoop創辦人曾經參考Google的設計。
- 原本的Nutch Distributed File System 變成了 Hadoop DFS (HDFS)
名詞解釋:
Lucene:用Java設計的高效能文件索引引擎API,索引文件中的每一字,讓搜尋的效率比傳統逐字比較還要高很多。
Nutch:是一個開放原始碼(自Nutch 0.8開始),以Java來實作的搜尋引擎,利用Lucene為函式庫。
訂閱:
文章 (Atom)