openstack:雲棧
keystone:編錄,認證(token,identity)
Nova:(compute,scheduler,network,volume,console,consoleauth)
glance:(image as a service)
swift:(object store),分佈式文件系統
horizon:dashboard
cinder:(nova-volume)
quantum:(nova-network)open vswitch
消息隊列:異步協作
請求服務:生產者
提供服務:消費者
高級消息隊列協議(advanced message queue protocol):rabbitmq,zeromq,qpid
cloudstack:Apache
opennebular
eucaptulys
iass,paas,saas
openstack:hypervisor
200GB:
2012-11-11:
100W,
文本文件:
RDBM(關係型數據庫表)
字段、數據類型、約束
結構化數據
google:
20億:
ab:100
非結構化數據(unstructured data)
PageRank(頁面排序算法)
半結構化數據(semi-structured):XML(擴展標記語言),json
Hadoop官方網站:hadoop.apach.org
Hadoop三種模式:
本地模式
僞分佈式模式
完全分佈式模式
Facebook:一個社交站點 PV,500億:
化整爲零:
500G:500*1G
並行處理:將一個大問題切割成多個小問題
OLAP:數據挖掘
機器學習:deep learning(深度學習)
分佈式文件系統,Google:20億
並行處理:
處理:
keyword:次數
A:10
C:67
key-value pair
存儲:
map reduce:
函數式編程API
運行框架
map(相當於尋找生成鍵值,並且把相同的鍵值發送到相同的reduce) reduce(相當於把尋找的結果合併起來):函數式編程API
運行框架
實時處理:即時結果
批處理:在後臺運行一段無法預估的時長
mapreduce:simplified data processing on large clusters
2003:the Google file system:Google的分佈式文件系統
Lucene
nutch
Hadoop:
DFS --》 HDFS
mapreduce:
1.編程模型
2.運行框架
3.mapreduce編程思想的具體實現
http協議,用http軟件來具體實現
Hadoop=hdfs+mapreduce
Hadoop就是兩個集羣合併在一起的:HDFS集羣和mapreduce集羣(這兩個是核心)
jobtracker:mapreduce的控制節點,來決定在哪些節點上啓動多少個map和reduce任務(相當於進程)
HDFS的兩個節點
namenode:簡稱NN
datanode:簡稱DN
mapreduce兩個節點
jobtracker(jt節點)處理用戶請求,以及指揮啓動map,是一個調度器
tasktracker(tt節點)具體運行map和reduce的任務
slot:插槽
page1:1
page2:1
page1:1
page2:1
page3:1
page3:1
page1:2
page2:2
page3:2
Hadoop運行框架:
調度
數據和代碼協同工作
同步
錯誤和故障處理
combiner:把相同的鍵值先合併起來在發送到reduce中去
partitioner(起分組作用):決定把哪個鍵值發到哪個reduce中去,以及決定要啓動幾個reduce
一個Hadoop中可以沒有reduce,但是一定要有map,因爲鍵值就是我們需要的最終的結果
hdfs:
1.hdfs設計用來存儲大文件,對海量小文件的存儲不太適合
2.hdfs是用戶空間的文件系統
3.hdfs不支持修改,新版本支持追加
4.不支持掛載,並能通過系統調用進行訪問,只能使用專用訪問接口,如專用命令行工具、API
Facebook:scribe,flume,把數據導入到hdfs中去
nosql:稀疏格式存儲方案,只能進行創建,修改,更新,刪除操作
hive:類似於SQL,存儲,來輔助mapreduce工作,主要處理用戶的sql查詢操作,避免用戶自己寫map,reduce函數,相當於mapreduce前置端口
hbase:主要用來修改數據,存儲,來輔助mapreduce工作,運行在hdfs上面
R語言,RHadoop:專用於Hadoop的R語言
rdbms--》sqoop--》hbase--》HDFS
mapreduce:SQL,存儲
HBase:修改,存儲
學習Hadoop
首先學習安裝配置hdfs
在學習安裝配置mapreduce
其次hbase
然後hive
然後sqoop
最後flume/scribe/chukwa等其他的工具
hdfs:三種模式
本地模式
僞分佈式(使用一個節點就可以)
完全分佈式(四個以上的節點)
SaaS
存儲雲:
收集分佈式日誌的工具:
flume(ASF)
shukwa(ASF)
scribe(Facebook)
Hadoop:
mapreduce
編程框架
運行環境
HDFS
client連進來,jobtracker來決定啓動多少了map以及reduce(reduce如果程序員不規定則默認由jobtracker決定)進程,並且jobtracker還是一個調度器,來決定調度到哪個map上面,map處理之後,經過分組排序送到給reduce,最終reduce變化成一個一個part-r-0000,part-r-0001,等等
RDBMS
行式數據庫
BigTable,HBase(Data source,Date sink)
列式數據庫
日誌收集器:主要把其它服務例如web等日誌收集到hdfs之中,進行分析
flume,由Apache提供
chukwa,由Apache提供
scribe,由Facebook提供
pig與Hive以及crunch作用一樣,主要是爲了簡化寫mapreduce函數一個編程接口
Avro:主要把一些非序列化的數據變成序列化,也可以把序列化數據變成非序列化數據通常與日誌收集器結合起來使用
sqoop:主要轉變關係型數據庫(RDBMS)
mahout:機器學習工具,實現智能化
zookeeper:相當於高可用集羣的信息管理層,協調各個節點之間運行
Hadoop:並行處理集羣
CDH網站上整合了Hadoop各個組件,建議在此網站上下載Hadoop
安裝僞分佈式Hadoop
一個最基本的Hadoop有五個進程:
jobtracker
tasktracker
namenode
sencondarynamenode
datanode
rpm -ivh jdk-7u5-linux-i586.rpm
vim /etc/profile.d/java.sh
JAVA_HOME=/usr/java/latest
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
vim /etc/profile.d/hadoop.sh
HADOOP_HOME=/usr/local/hadoop
PATH=$PATH_HOME/bin:$PATH
export HADOOP_HOME PATH
tar -zxvf hadoop-0.20.2-chd3u5.tar.gz -C /usr/local/
cd /usr/local
ln -sv hadoop-0.20.2-chd3u5 hadoop
java -version
hadoop version
cd /usr/local/hadoop/
ls bin/
ls conf/
useradd hduser
chown -R hduser.hduser /usr/local/hadoop/
su - hduser
cd /usr/local/hadoop
cd conf
cat masters
cat slaves
mkdir /usr/local/hadoop/temp -pv
chown -R hduser.hdsuer /usr/local/hadoop/temp
以下配置及操作均在hduser用戶下進行
vim core-site.xml(主配置文件)
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/temp/</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:8020</value>
</property>
</configuration>
vim mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:8021</value>
</propery>
</configuration>
vim hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<vaule>1</value>
</property>
</configuration>
ssh-keygen -t rsa-P ''
ssh-copy-id -i .ssh/id_rsa.pub hduser@localhost
格式化hdfs
hadoop namenode -format
start-all.sh
jps
cd /usr/lcoal/hadoop/logs
tail -f hadoop-hduser-namenode-node1.magedu.com.log
如果啓動報JAVA_HOME is not set 請改Hadoop配置文件中hadoop-env.sh,改成絕對路徑:export JAVA_HOME=/usr/java/jdk1.6.0_45
hadoop fs -mkdir test
hadoop fs -ls
hadoop fs -put text.txt test/
hadoop fs -ls test/
hadoop job -list all
hadoop fs -put test2.txt test/
hadoop jar /usr/lcoal/hadoop/hadoop-examples-0.20.2-cdh3u5.jar wordcount test wordcount-out
hadoop job -list all
hadoop fs -ls wordcount-out
hadoop fs -cat wordcount-out/part-r-0000
hadoop dfsadmin
hadoop dfsadmin -report
hadoop fsck -openforwrite -files
hadoop fsck -openforwrite -files -blocks -locations
安裝完全分佈式Hadoop:三個節點配置文件一樣
第一個節點運行:namenode jobtracker(master)
第二個節點運行:secondnamenode(master:一般情況下secondnamenode和namenode是運行在一個節點上的這裏分開了,防止單點故障)
第三個節點運行:datanode tasktracker(slave)
每個主機進行各個主機名解析,以及多機互信,時間保持一致
node1:172.16.100.11:
rpm -ivh jdk-7u5-linux-i586.rpm
vim /etc/profile.d/java.sh
JAVA_HOME=/usr/java/latest
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
vim /etc/profile.d/hadoop.sh
HADOOP_HOME=/usr/local/hadoop
PATH=$PATH_HOME/bin:$PATH
export HADOOP_HOME PATH
tar -zxvf hadoop-0.20.2-chd3u5.tar.gz -C /usr/local/
cd /usr/local
ln -sv hadoop-0.20.2-chd3u5 hadoop
useradd hduser
password hduser
chown -R hduser.hduser /usr/local/hadoop/
su - hduser
java -version
hadoop version
cd /usr/local/hdoop/conf
vim masters
172.16.100.12(這裏填寫的是secondnamenode節點的IP)
vim slaves
172.16.100.13
mkdir /hadoop/temp -pv
chown -R hduser:hduser /hadoop/temp/
vim core-site.xml
<configuration>
<property>
<name>fs.default.name</name> <value>hdfs://172.16.100.11:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/temp</value>
<property>
</configuration>
vim mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>172.16.100.11:8021</value>
</property>
</configuration>
vim hdfs-site.xml
<configuration>
<property>
<name>dfs.relication</name>
<value>1</value>(slave的節點數量)
<description>The actual number of replications can be specified when the file is created.</description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/hadoop/data</value>
<final>ture</final>
<description>The directories where the datanode stores blocks.</description>
</property>
<property>
<name>fs.checkpoint.dir</name>
<value>/hadoop/namesecondary</value>
<final>ture</final>
<description>The directories where the secondarynamenode stores checkpoints.</description>
</property>
</configuration>
scp *-site.xml 172.16.100.12:/usr/local/hadoop/conf/ 172.16.100.13:/usr/local/hadoop/conf/
hadoop namenode -format
start-all.sh
jps
node2:172.16.100.12
rpm -ivh jdk-7u5-linux-i586.rpm
vim /etc/profile.d/java.sh
JAVA_HOME=/usr/java/latest
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
vim /etc/profile.d/hadoop.sh
HADOOP_HOME=/usr/local/hadoop
PATH=$PATH_HOME/bin:$PATH
export HADOOP_HOME PATH
tar -zxvf hadoop-0.20.2-chd3u5.tar.gz -C /usr/local/
cd /usr/local
ln -sv hadoop-0.20.2-chd3u5 hadoop
useradd hduser
password hduser
chown -R hduser.hduser /usr/local/hadoop/
mkdir -pv /hadoop/temp
chown -R hduser.hduser /hadoop/temp/
su - hduser
java -version
hadoop version
node3:172.16.100.13
rpm -ivh jdk-7u5-linux-i586.rpm
vim /etc/profile.d/java.sh
JAVA_HOME=/usr/java/latest
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
vim /etc/profile.d/hadoop.sh
HADOOP_HOME=/usr/local/hadoop
PATH=$PATH_HOME/bin:$PATH
export HADOOP_HOME PATH
tar -zxvf hadoop-0.20.2-chd3u5.tar.gz -C /usr/local/
cd /usr/local
ln -sv hadoop-0.20.2-chd3u5 hadoop
useradd hduser
passwrd hduser
chown -R hduser.hduser hdoop/
su - hduser
hadoop version
java -version
mkdir -pv /hadoop/temp/
chown -R /hadoop/temp/
hadoop fs -mkdir wc-in
hadoop fs -put /etc/rc.d/rc.sysinit wc-in
hadoop fs -put /etc/rc.d/init.d/functions wc-in
hadoop jar /usr/local/hadoop/hadoop-examples-0.20.0-cdh3u5.jar wordcount wc-in wc-out
存儲雲: