大資料 Hadoop介紹、配置與使用
前言
Hadoop
是Apache軟體基金會旗下的一個開源分散式計算平臺。
- 大資料 基礎概念
- 大資料 Centos基礎
- 大資料 Shell基礎
- 大資料 ZooKeeper
- 大資料 Hadoop介紹、配置與使用
- 大資料 Hadoop之HDFS
- 大資料 MapReduce
- 大資料 Hive
- 大資料 Yarn
- 大資料 MapReduce使用
- 大資料 Hadoop高可用HA
介紹
Hadoop
是Apache軟體基金會旗下的一個開源分散式計算平臺。以Hadoop
分散式檔案系統HDFS
(Hadoop Distributed File System,)和MapReduce
(Google MapReduce的開源實現)為核心的Hadoop
為使用者提供了系統底層細節透明的分散式基礎架構。HDFS
的高容錯性、高伸縮性等優點允許使用者將Hadoop
部署在低廉的硬體上,形成分散式系統;MapReduce
分散式程式設計模型允許使用者在不瞭解分散式系統底層細節的情況下開發並行應用程式。所以使用者可以利用Hadoop
輕鬆地組織計算機資源,從而搭建自己的分散式計算平臺,並且可以充分利用叢集的計算和儲存能力,完成海量資料的處理。
Hadoop的優勢
- 高可靠性。Hadoop按位儲存和處理資料的能力值得人們信賴。
- 高擴充套件性。Hadoop是在可用的計算機集簇間分配資料完成計算任務的,這些集簇可以方便地擴充套件到數以千計的節點中。
- 高效性。Hadoop能夠在節點之間動態地移動資料,以保證各個節點的動態平衡,因此其處理速度非常快。
- 高容錯性。Hadoop能夠自動儲存資料的多份副本,並且能夠自動將失敗的任務重新分配。
Hadoop的重要元件
HDFS
和MapReduce
是Hadoop
的兩大核心。
元件 | 說明 |
---|---|
HDFS |
分散式檔案系統 |
MapReduce |
分散式運算程式開發框架。MapReduce 是一種程式設計模型,用於大規模資料集(大於1TB)的並行運算。對映Map 、化簡Reduce 的概念和它們的主要思想都是從函數語言程式設計語言中借鑑而來的。 |
Hive |
基於大資料技術(檔案系統+運算框架)的SQL資料倉儲工具。它提供了一些用於對Hadoop檔案中的資料集進行資料整理、特殊查詢和分析儲存的工具。 |
HBase |
基於Hadoop 的分散式海量資料庫。HBase 是一個分散式的、面向列的開源資料庫,該技術來源於Google論文《Bigtable:一個結構化資料的分散式儲存系統 》。HBase主要用於需要隨機訪問、實時讀寫的大資料Big Data 。 |
ZooKeeper |
分散式協調服務基礎元件。ZooKeeper 是一個為分散式應用所設計的開源協調服務。它主要為使用者提供同步、配置管理、分組和命名等服務,減輕分散式應用程式所承擔的協調任務。 |
Mahout |
基於mapreduce/spark/flink 等分散式運算框架的機器學習演算法庫 |
Oozie |
工作流排程框架 |
Sqoop |
資料匯入匯出工具 |
Flume |
日誌資料採集框架 |
Pig |
Pig 是一個對大型資料集進行分析、評估的平臺。Pig 最突出的優勢是它的結構能夠經受住高度並行化的檢驗,這個特性使得它能夠處理大型的資料集。 |
HDFS
介紹
HDFS採用了主從Master/Slave
結構模型,一個HDFS
叢集是由一個NameNode
和若干個DataNode
組成的。其中NameNode
作為主伺服器,管理檔案系統的名稱空間和客戶端對檔案的訪問操作;叢集中的DataNode
管理儲存的資料。HDFS
允許使用者以檔案的形式儲存資料。從內部來看,檔案被分成若干個資料塊,而且這若干個資料塊存放在一組DataNode
上。NameNode
執行檔案系統的名稱空間操作,比如開啟、關閉、重新命名檔案或目錄等,它也負責資料塊到具體DataNode
的對映。DataNode
負責處理檔案系統客戶端的檔案讀寫請求,並在NameNode
的統一排程下進行資料塊的建立、刪除和複製工作。
NameNode
是所有HDFS
後設資料的管理者,使用者需要儲存的資料不會經過NameNode
,而是直接流向儲存資料的DataNode
。
HBase
角色 | 職責 |
---|---|
主伺服器 | 管理整個叢集的所有域,監控每臺伺服器的執行情況。 |
域伺服器 | 接受來自伺服器的分配域,處理客戶端的域讀寫請求並回寫對映檔案等。 |
客戶端 | 查詢使用者域所在的域伺服器地址資訊。 |
MapReduce
介紹
MapReduce
是一種並行程式設計模式,利用這種模式軟體開發者可以輕鬆地編寫出分散式並行程式。
MapReduce
框架是由一個單獨執行在主節點的JobTracker
和執行在每個叢集從節點的TaskTracker
共同組成的。主節點負責排程構成一個作業的所有任務,這些任務分佈在不同的從節點上。主節點監控它們的執行情況,並且重新執行之前失敗的任務;從節點僅負責由主節點指派的任務。當一個Job
被提交時,JobTracker
接收到提交作業和其配置資訊之後,就會將配置資訊等分發給從節點,同時排程任務並監控TaskTracker
的執行。
HDFS and MapReduce
HDFS
和MapReduce
共同組成了Hadoop
分散式系統體系結構的核心。HDFS
在叢集上實現了分散式檔案系統,MapReduce
在叢集上實現了分散式計算和任務處理。HDFS
在MapReduce
任務處理過程中提供了對檔案操作和儲存等的支援,MapReduce
在HDFS
的基礎上實現了任務的分發、跟蹤、執行等工作,並收集結果,二者相互作用,完成了Hadoop
分散式叢集的主要任務。
Hadoop應用
- 資料服務基礎平臺
- 使用者畫像
- 網站點選流日誌資料探勘
Hadoop配置
直接從搭建環境開始吧~
O(∩_∩)O哈哈~
免密登入訪問
參見【大資料 zookeeper】——免密登入配置部分。
配置Java環境
參見【Linux安裝常用軟體】——
Ctrl+F
搜尋JDK
關鍵字,按照對應教程配置環境。
同步時間
- 先下載同步工具:
yum install -y ntpdate
- 同步網路時間:
ntpdate time.nist.gov
- 調整硬體時間:
hwclock -w
- 執行成功後, 檢視系統硬體時間(不出意外的話,現在date和hwclock現實的時間均為internet時間)。
配置Hadoop
好啦,準備工作完成了,我們要開始搭建環境了。
O(∩_∩)O哈!
下載Hadoop
配置環境
- 解壓
Hadoop
:tar -zxvf hadoop-2.6.5.tar.gz
- 移動到
opt
:mv hadoop-2.6.5/ /opt/
- 改名:
mv hadoop-2.6.5 hadoop
Hadoop配置
目錄結構說明
資料夾 | 說明 |
---|---|
bin |
Hadoop 的一些操作命令。 |
etc |
配置檔案。 |
include |
語言本地庫。 |
lib |
本地庫。 |
libexec |
|
sbin |
系統管理啟動的命令。 |
share |
文件和相關的jar包。 |
官方文件,建議一看:Apache Hadoop Document
hadoop-env.sh
在./etc/hadoop/
中,找到hadoop-env.sh
,使用vim hadoop-env.sh
開啟,修改export JAVA_HOME={JAVA_HOME}
為export JAVA_HOME=/opt/jdk1.8.0_161
(注意,根據實際的JDK
路徑配置哈~)
core-site.xml
在<configuration></configuration>
中增加以下內容:
fs.defaultFS
指定Hadoop
所使用的檔案系統schema(URI)
,HDFS
的老大NameNode
的地址。- 說明:
node0
需要在/etc/hosts
中配置。 - 增加一個IP地址別名,後面配置使用。
vim /ect/hosts
- 說明:IP地址 別名
192.168.80.8 node0
192.168.80.9 node1
192.168.80.10 node2
192.168.80.11 node3
- 說明:
hadoop.tmp.dir
指定hadoop
執行時產生檔案的儲存目錄。/opt/hadoopData
目錄需要自行建立。
<configuration>
<!-- 指定 HADOOP 所使用的檔案系統 schema ( URI ),
HDFS 的老大( NameNode )的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node0:9000</value>
</property>
<!-- 指定 hadoop 執行時產生檔案的儲存目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoopData</value>
</property>
</configuration>
hdfs-site.xml
node0
配置請看本文章的core-site.xml
跳轉中的內容。
<configuration>
<!-- 指定 HDFS 副本的數量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.secondary.http.address</name>
<value>node0:50090</value>
</property>
</configuration>
slaves
說明:這個是用於配置
DataNode
結點的,在本教程中,我配置了三個DataNode
,所以我的檔案內容如下:
node1、node2、node3
配置請看本文章的core-site.xml
跳轉中的內容。
node1
node2
node3
分發到其他結點
使用scp
指令分發到其他幾個結點。
node1、node2、node3
配置請看本文章的core-site.xml
跳轉中的內容。
scp -r /opt/hadoop/ root@node1:/opt/
scp -r /opt/hadoop/ root@node2:/opt/
scp -r /opt/hadoop/ root@node3:/opt/
Hadoop使用
啟動
- 啟動方式
./sbin/start-all.sh
。
- 如果
yarn
啟動不了,就需要先關閉所有結點./sbin/stop-all.sh
,再NameNode
上執行./sbin/start-dfs.sh
,在其中一個DataNode
上執行./sbin/start-yarn.sh
。
NameNode
上jps
結果:
6163 NameNode
6308 SecondaryNameNode
6510 Jps
DataNode
上jps
結果:
3763 ResourceManager
3859 NodeManager
3381 DataNode
3903 Jps
- 可以在瀏覽器上訪問:http://node0:50070,視覺化展示具體資訊。
- 注意:
node0
配置請看本文章的core-site.xml
跳轉中的內容。
- 注意:
- 可以使用
jps
【JDK自帶的一個指令,位於./bin/jps
】檢視當前啟動的java
程式。
啟動成功的
jps
輸出資訊如下:
NameNode
結點JPS
資訊
1747 Jps
1292 SecondaryNameNode
1149 NameNode
DataNode
結點JPS
資訊
1376 Jps
1057 DataNode
Hadoop之HDFS
- 上傳
jdk-8u161-linux-x64.tar.gz
到根目錄下:hadoop fs -put jdk-8u161-linux-x64.tar.gz /
- 開啟http://node0:50070/explorer.html#/,在輸入框中輸入
/
,可以檢視根目錄下的內容
- 也可以去文章前面配置的儲存路徑
/opt/hadoopData
檢視。yum -y install tree
cd /opt/hadoopData
tree
在
DataNode node1
裡面tree
出來的結果。
[root@node1 hadoopData]# tree
.
├── dfs
│ └── data
│ ├── current
│ │ ├── BP-1656524081-192.168.80.8-1536912218458
│ │ │ ├── current
│ │ │ │ ├── dfsUsed
│ │ │ │ ├── finalized
│ │ │ │ │ └── subdir0
│ │ │ │ │ └── subdir0
│ │ │ │ │ ├── blk_1073741825
│ │ │ │ │ └── blk_1073741825_1001.meta
│ │ │ │ ├── rbw
│ │ │ │ └── VERSION
│ │ │ ├── dncp_block_verification.log.curr
│ │ │ ├── dncp_block_verification.log.prev
│ │ │ └── tmp
│ │ └── VERSION
│ └── in_use.lock
└── nm-local-dir
├── filecache
├── nmPrivate
└── usercache
14 directories, 8 files
在
DataNode node3
裡面tree
出來的結果。
[root@node3 hadoopData]# tree
.
├── dfs
│ └── data
│ ├── current
│ │ ├── BP-1656524081-192.168.80.8-1536912218458
│ │ │ ├── current
│ │ │ │ ├── dfsUsed
│ │ │ │ ├── finalized
│ │ │ │ │ └── subdir0
│ │ │ │ │ └── subdir0
│ │ │ │ │ ├── blk_1073741826
│ │ │ │ │ └── blk_1073741826_1002.meta
│ │ │ │ ├── rbw
│ │ │ │ └── VERSION
│ │ │ ├── dncp_block_verification.log.curr
│ │ │ ├── dncp_block_verification.log.prev
│ │ │ └── tmp
│ │ └── VERSION
│ └── in_use.lock
└── nm-local-dir
├── filecache
├── nmPrivate
└── usercache
14 directories, 8 files
存放原理
- node1情況:
[root@node1 subdir0]# ls -lh
total 130M
-rw-r--r-- 1 root root 128M Sep 14 05:23 blk_1073741825
-rw-r--r-- 1 root root 1.1M Sep 14 05:23 blk_1073741825_1001.meta
- node3情況:
[root@node3 subdir0]# ls -lh
total 54M
-rw-r--r-- 1 root root 53M Sep 14 05:23 blk_1073741826
-rw-r--r-- 1 root root 424K Sep 14 05:23 blk_1073741826_1002.meta
- 上傳檔案大小
[root@node0 ~]# ls -lh
total 181M
-rw-r--r-- 1 root root 181M Sep 15 07:16 jdk-8u161-linux-x64.tar.gz
我們可以看出,拆分出來的塊的大小相加剛好等於原來的大小。我們也可以驗證一下,將分佈在node1
和node3
的兩個meta
塊直接用cat
命令合併,再嘗試解壓即可。
- 將
node1
的meta
放到node0
的/root/
下。scp blk_1073741825 root@node0:/root/
- 將
node3
的meta
放到node0
的/root/
下。scp blk_1073741826 root@node0:/root/
- 在
node0
中進行合併- 注意:塊是連續的,所以要按照編號拼接。
cat blk_1073741825 > jdk.tar.gz
cat blk_1073741826 >> jdk.tar.gz
ls -lh jdk.tar.gz
-rw-r--r-- 1 root root 181M Sep 15 07:22 jdk.tar.gz
tar -zxvf jdk.tar.gz
,解壓成功,O(∩_∩)O哈哈~
- 在HDFS的儲存中,所有的檔案都是按照塊的形式進行分隔的(塊的大小是可以配置的。)
Hadoop指令
- 檢視根目錄下的內容
hadoop fs -ls 路徑
- 上傳檔案
hadoop fs -put 檔案 路徑
- 檢視檔案內容
hadoop fs -cat 儲存的檔案的路徑及名稱
hadoop fs -cat /a.txt
- 下載檔案
hadoop fs -get 儲存的檔案的路徑及名稱 下載到指定路徑
hadoop fs -get /jdk-8u161-linux-x64.tar.gz /tmp
- 在
HDFS
中建立資料夾hadoop fs -mkdir -p /hello/world
Hadoop示例
- 建立資料資料夾
hadoop fs -mkdir -p /data/input
- 建立資料夾
hadoop fs -mkdir -p /data/input
- 上傳檔案
hadoop fs -put novel.txt /data/input
- 執行
jar
cd /opt/hadoop/share/hadoop/mapreduce/
hadoop jar hadoop-mapreduce-examples-2.6.5.jar wordcount /data/input /data/output
執行結果
- 執行成功將會輸出以下資訊:
18/09/15 08:33:59 INFO client.RMProxy: Connecting to ResourceManager at node1/192.168.80.9:8032
18/09/15 08:34:02 INFO input.FileInputFormat: Total input paths to process : 1
18/09/15 08:34:03 INFO mapreduce.JobSubmitter: number of splits:1
18/09/15 08:34:04 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1537014830845_0001
18/09/15 08:34:05 INFO impl.YarnClientImpl: Submitted application application_1537014830845_0001
18/09/15 08:34:05 INFO mapreduce.Job: The url to track the job: http://node1:8088/proxy/application_1537014830845_0001/
18/09/15 08:34:05 INFO mapreduce.Job: Running job: job_1537014830845_0001
18/09/15 08:34:30 INFO mapreduce.Job: Job job_1537014830845_0001 running in uber mode : false
18/09/15 08:34:30 INFO mapreduce.Job: map 0% reduce 0%
18/09/15 08:34:50 INFO mapreduce.Job: map 100% reduce 0%
18/09/15 08:35:04 INFO mapreduce.Job: map 100% reduce 100%
18/09/15 08:35:05 INFO mapreduce.Job: Job job_1537014830845_0001 completed successfully
18/09/15 08:35:05 INFO mapreduce.Job: Counters: 49
File System Counters
FILE: Number of bytes read=5172
FILE: Number of bytes written=224841
FILE: Number of read operations=0
FILE: Number of large read operations=0
FILE: Number of write operations=0
HDFS: Number of bytes read=5209
HDFS: Number of bytes written=5118
HDFS: Number of read operations=6
HDFS: Number of large read operations=0
HDFS: Number of write operations=2
Job Counters
Launched map tasks=1
Launched reduce tasks=1
Data-local map tasks=1
Total time spent by all maps in occupied slots (ms)=17907
Total time spent by all reduces in occupied slots (ms)=10738
Total time spent by all map tasks (ms)=17907
Total time spent by all reduce tasks (ms)=10738
Total vcore-milliseconds taken by all map tasks=17907
Total vcore-milliseconds taken by all reduce tasks=10738
Total megabyte-milliseconds taken by all map tasks=18336768
Total megabyte-milliseconds taken by all reduce tasks=10995712
Map-Reduce Framework
Map input records=6
Map output records=6
Map output bytes=5142
Map output materialized bytes=5172
Input split bytes=103
Combine input records=6
Combine output records=6
Reduce input groups=6
Reduce shuffle bytes=5172
Reduce input records=6
Reduce output records=6
Spilled Records=12
Shuffled Maps =1
Failed Shuffles=0
Merged Map outputs=1
GC time elapsed (ms)=223
CPU time spent (ms)=2260
Physical memory (bytes) snapshot=235151360
Virtual memory (bytes) snapshot=4155752448
Total committed heap usage (bytes)=136302592
Shuffle Errors
BAD_ID=0
CONNECTION=0
IO_ERROR=0
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0
File Input Format Counters
Bytes Read=5106
File Output Format Counters
Bytes Written=5118
ResourceManage
啟動失敗將會出現以下錯誤:
18/09/15 08:29:09 INFO client.RMProxy: Connecting to ResourceManager at node1/192.168.80.9:8032
18/09/15 08:29:11 INFO ipc.Client: Retrying connect to server: node1/192.168.80.9:8032. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
- 解決方案:
- 在
NameNode
結點上./sbin/stop-all.sh
- 然後在
NameNode
上啟動./sbin/start-dfs.sh
- 在任意一個
DataNode
上啟動./sbin/start-yarn.sh
。
- 在
啟動成功的
jps
輸出資訊如下:
NameNode
結點JPS
資訊
1747 Jps
1292 SecondaryNameNode
1149 NameNode
DataNode
結點JPS
資訊
1376 Jps
1057 DataNode
執行結果檢視
- 使用命令檢視輸出的內容
hadoop fs -ls /data/output/
[root@node0 mapreduce]# hadoop fs -ls /data/output/
Found 2 items
-rw-r--r-- 1 root supergroup 0 2018-09-15 12:16 /data/output/_SUCCESS
-rw-r--r-- 1 root supergroup 1481 2018-09-15 12:16 /data/output/part-r-00000
- 檢視文字內容
hadoop fs -cat /data/output/part-r-00000
Always 1
Dream 1
Have 1
...省略
附錄
- 《Hadoop實戰(第2版)》陸嘉恆著
- Hadoop架構
相關文章
- 大資料和Hadoop平臺介紹大資料Hadoop
- 大資料系統框架中hadoop服務角色介紹大資料框架Hadoop
- 1、大資料 Hadoop配置和單機Hadoop系統配置大資料Hadoop
- Hadoop進階命令使用介紹Hadoop
- golang資料型別基本介紹與使用Golang資料型別
- 《Hadoop大資料分析技術》簡介Hadoop大資料
- LVS介紹與配置
- Hadoop Hive介紹HadoopHive
- Hadoop Sqoop介紹Hadoop
- Nacos配置中心 (介紹與配置)
- Hadoop - 企業級大資料管理平臺CDH(介紹和準備工作)Hadoop大資料
- 大資料崗位介紹-引子大資料
- 大資料hadoop資料大資料Hadoop
- 《Hadoop+Spark大資料分析實戰》簡介HadoopSpark大資料
- Hadoop叢集中Hbase的介紹、安裝、使用Hadoop
- HSQL 資料庫介紹(2)--使用SQL資料庫
- GoogleTagManager 介紹與使用Go
- Influxdb 介紹與使用UX
- 四種大資料分析方法介紹!大資料
- 大資料分析三大實用工具介紹!大資料
- Nacos 配置中心介紹及使用
- Hadoop大資料分散式處理系統簡介Hadoop大資料分散式
- oracle 大頁配置詳細介紹Oracle
- Hadoop大資料部署Hadoop大資料
- 大資料hadoop工具大資料Hadoop
- 大資料專欄 - 基礎1 Hadoop安裝配置大資料Hadoop
- Redis的介紹安裝以及啟動與使用還有五大資料型別Redis大資料資料型別
- java ShutdownHook介紹與使用JavaHook
- IIS Express介紹與使用Express
- JQuery的介紹與使用jQuery
- 大資料學習,大資料發展趨勢和Spark介紹大資料Spark
- Hadoop-HA節點介紹Hadoop
- 1.1 大資料簡介-hadoop-最全最完整的保姆級的java大資料學習資料大資料HadoopJava
- **大資料hadoop瞭解**大資料Hadoop
- 資料庫介紹資料庫
- H2 資料庫介紹(2)--使用資料庫
- iOS證書申請與配置介紹iOS
- Webpack的基本配置和打包與介紹Web