Hadoop簡介
Hadoop是用于存儲數(shù)據(jù)和商用硬件集群運行應(yīng)用程序的開源軟件框架胞锰,它提供了海量存儲任何類型的數(shù)據(jù),極大的處理能力和處理幾乎無限的并發(fā)任務(wù)或作業(yè)的能力国裳。
Hadoop的優(yōu)勢
Hadoop博得廣大人群眼球的主要原因是它能夠存儲和處理大兩數(shù)據(jù)的能力鞠苟,可以支持任何類型的數(shù)據(jù),計算快熔酷;隨著數(shù)據(jù)量和品種的不斷增加孤紧,特別是社交媒體和物聯(lián)網(wǎng)行業(yè),Hadoop是一個重要的考慮因素拒秘,其中使用Hadoop的優(yōu)勢如下:
- 計算能力:它的分布式計算模型快速處理大數(shù)據(jù)号显,用的越多計算節(jié)點,數(shù)據(jù)的處理能力會更大躺酒;
- 靈活性:不同于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫押蚤,你不要存放前必須進行預(yù)處理的數(shù)據(jù),只要需要使用羹应,可以保存盡可能多的數(shù)據(jù)揽碘,并決定以后怎么使用它,這包括文本量愧、圖像和視頻的非結(jié)構(gòu)化數(shù)據(jù)钾菊;
- 容錯能力:數(shù)據(jù)和應(yīng)用程序處理保護,以防止硬件故障偎肃,如果一個節(jié)點出現(xiàn)故障煞烫,作業(yè)自動重定向到其他的節(jié)點,以確分布式計算不會失敗累颂,它會自動存儲所有數(shù)據(jù)的多個副本滞详;
- 低成本:開源框架是免費的凛俱,使用商業(yè)硬件來存儲大量數(shù)據(jù);
- 可擴展性:可以輕松簡單地通過增加更多的節(jié)點增加你的系統(tǒng)料饥。
Hadoop組件
- Hadoop Common -- 其它Hadoop的模塊使用的庫和工具
- Hadoop Distributed File System (HDFS) -- 存儲在多臺計算機的數(shù)據(jù)蒲犬,恕不另行組織基于Java的可擴展系統(tǒng)。
- MapReduce -- 軟件編程模型的并行處理大型數(shù)據(jù)集
- YARN -- 從分布式應(yīng)用程序的調(diào)度和處理資源請求的資源管理框架岸啡。
其他Hadoop相關(guān)組件
- Ambari?:配置管理和監(jiān)控的Apache Hadoop集群基于Web的工具原叮,其中包括Hadoop的HDFS,MapReduce的Hadoop的Hive, HCatalog, HBase, ZooKeeper, Oozie, Pig and Sqoop支持巡蘸,Ambari還提供查看集群運行狀態(tài)奋隶,如熱圖,并直觀地查看MapReduce的Pig和Hive應(yīng)用非常久遠的功能悦荒,診斷一個用戶友好的方式表現(xiàn)自己的能力特點的儀表板唯欣。
- Avro的?:數(shù)據(jù)序列化系統(tǒng)
- Chukwa?:用于管理大型分布式系統(tǒng)的數(shù)據(jù)采集系統(tǒng)。
- HBase的?:支持大表結(jié)構(gòu)化數(shù)據(jù)存儲可擴展的分布式數(shù)據(jù)庫搬味。
- Hive?:數(shù)據(jù)倉庫基礎(chǔ)設(shè)施境氢,提供數(shù)據(jù)匯總和及時查詢。
- Mahout?:一種可擴展的機器學(xué)習(xí)和數(shù)據(jù)挖掘庫碰纬。
- Pig?:并行計算的高級數(shù)據(jù)流語言和執(zhí)行框架萍聊。
- Spark?:Hadoop的數(shù)據(jù)的快速和通用計算引擎。Spark提供了支持廣泛的應(yīng)用嘀趟,包括ETL脐区,機器學(xué)習(xí)愈诚,流處理和圖形計算的簡單和表現(xiàn)的編程模型她按。
- Tez?:廣義數(shù)據(jù)流編程框架,建立在Hadoop的YRAN炕柔,它提供了一個強大而靈活的引擎來執(zhí)行任務(wù)的任意DAG來處理批處理和交互式的使用數(shù)據(jù)情況酌泰,TEZ正在通過Hive,pig和Hadoop的生態(tài)系統(tǒng)中其他框架匕累,也可以通過其他商業(yè)軟件(例如:ETL工具)以取代的Hadoop MapReduce的?作為底層執(zhí)行引擎陵刹。
- ZooKeeper的?:分布式應(yīng)用的高性能協(xié)調(diào)服務(wù)。
Hadoop集群安裝
主機規(guī)劃:
序號 | ip | 主機名 | 角色 |
---|---|---|---|
1 | 110.12.4.92 | LFTd-Hadoop01 | NodeManager/ResourceManager/SecondaryNameNode/DataNode/NameNode |
2 | 110.12.4.93 | LFTd-Hadoop02 | NodeManager/DataNode |
3 | 110.12.4.94 | LFTd-Hadoop03 | NodeManager/DataNode |
Step 1 安裝配置Java環(huán)境
在所有主機安裝配置Java環(huán)境欢嘿,命令如下:
# java -version
java version "1.8.0_92"
Java(TM) SE Runtime Environment (build 1.8.0_92-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.92-b14, mixed mode)
Step 2 創(chuàng)建hadoop用戶
在所有主機創(chuàng)建hadoop用戶并配置密碼衰琐,命令如下:
# useradd hadoop
# passwd hadoop
Step 3 配置本地hosts解析
在所有主機配置hosts解析,命令如下:
10.12.4.92 master hadoop-namenode LFTd-Hadoop01
10.12.4.93 slave01 hadoop-datanode-1 LFTd-Hadoop02
10.12.4.94 slave02 hadoop-datanode-2 LFTd-Hadoop03
Step 4 配置ssh免密登陸
在所有主機配置ssh免密登陸炼蹦,命令如下:
# su - hadoop
$ ssh-keygen -t rsa
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@hadoop-namenode
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@hadoop-datanode-1
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@hadoop-datanode-2
$ chmod 0600 ~/.ssh/authorized_keys
Step 5 安裝hadoop源碼包
在所有主機下載安裝hadoop源碼包羡宙,命令如下:
# mkdir -p /opt/hadoop
# chown hadoop:hadoop /opt/hadoop
# su - hadoop
$ cd /opt/hadoop
$ wget http://www-us.apache.org/dist/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz
$ tar xzf hadoop-2.7.3.tar.gz
$ ln -s /opt/hadoop/hadoop-2.7.3 /opt/hadoop/hadoop
Step 6 配置hadoop用戶環(huán)境變量
為所有主機配置hadoop用戶的環(huán)境變量,命令如下:
$ cat .bash_profile
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
export HADOOP_PREFIX=/opt/hadoop/hadoop
export HADOOP_HOME=/opt/hadoop/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$JAVA_HOME/jre/bin:$JAVA_HOME/bin
Step 7 修改hadoop配置文件
在master進行修改hadoop配置文件:
cd $HADOOP_HOME/etc/hadoop
core-site.xml:
$ cat core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/opt/hadoop/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>dfs.name.dir</name>
<value>/opt/hadoop/dfs/name/</value>
</property>
<property>
<name>hadoop.proxyuser.worker.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.worker.groups</name>
<value>*</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop-namenode:9000/</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/hadoop/tmp</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
hdfs-site.xml:
$ cat hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/opt/hadoop/dfs/data</value>
<final>true</final>
</property>
<property>
<name>dfs.name.dir</name>
<value>/opt/hadoop/dfs/name</value>
<final>true</final>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.http.address</name>
<value>hadoop-namenode:50070</value>
</property>
</configuration>
mapred-site.xml:
$ cat mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>hadoop-namenode:9001</value>
</property>
</configuration>
同步配置文件至所有slave:
# su - hadoop
$ rsync -auvx $HADOOP_HOME/ hadoop-datanode-1:$HADOOP_HOME/
$ rsync -auvx $HADOOP_HOME/ hadoop-datanode-2:$HADOOP_HOME/
Step 8 配置master的slave節(jié)點
只在master節(jié)點配置掐隐,命令如下:
# su - hadoop
$ cd $HADOOP_HOME/etc/hadoop
$ vi slaves
hadoop-datanode-1
hadoop-datanode-2
Step 9 啟動hadoop集群
在master節(jié)點啟動:
# su - hadoop
$ start-all.sh
Step 10 檢查hadoop集群啟動情況
master節(jié)點:
$ jps
34720 NodeManager
34609 ResourceManager
34440 SecondaryNameNode
34234 DataNode
43663 Jps
34095 NameNode
slave節(jié)點:
# su - hadoop
$ jps
5392 DataNode
5512 NodeManager
13578 Jps