一、概述
hadoop是什么
Hadoop被公認是一套行業大數據標准開源軟件,在分布式環境下提供了海量數據的處理能力。幾乎所有主流廠商都圍繞Hadoop開發工具、開源軟件、商業化工具和技術服務。今年大型IT公司,如EMC、Microsoft、Intel、Teradata、Cisco都明顯增加了Hadoop方面的投入。
hadoop能干什么
hadoop擅長日志分析,facebook就用Hive來進行日志分析,2009年時facebook就有非編程人員的30%的人使用HiveQL進行數據分析;淘寶搜索中的自定義篩選也使用的Hive;利用Pig還可以做高級的數據處理,包括Twitter、LinkedIn 上用於發現您可能認識的人,可以實現類似Amazon.com的協同過濾的推薦效果。淘寶的商品推薦也是!在Yahoo!的40%的Hadoop作業是用pig運行的,包括垃圾郵件的識別和過濾,還有用戶特征建模。(2012年8月25新更新,天貓的推薦系統是hive,少量嘗試mahout!)
hadoop的核心
1.HDFS: Hadoop Distributed File System 分布式文件系統
2.YARN: Yet Another Resource Negotiator 資源管理調度系統
3.Mapreduce:分布式運算框架
HDFS的架構
主從結構
•主節點, namenode
•從節點,有很多個: datanode
namenode負責:
•接收用戶操作請求
•維護文件系統的目錄結構
•管理文件與block之間關系,block與datanode之間關系
datanode負責:
•存儲文件
•文件被分成block存儲在磁盤上
•為保證數據安全,文件會有多個副本
Secondary NameNode負責:
合並fsimage和edits文件來更新NameNode的metedata
二、docker部署
環境說明
操作系統 | docker版本 | ip地址 | 配置 |
centos 7.6 | 19.03.12 | 192.168.31.229 | 4核8g |
拉取鏡像
這里采用dockerhub現有,鏡像大小為:777MB
docker pull kiwenlau/hadoop-master:0.1.0
運行容器
下載源代碼
cd /opt/ git clone https://github.com/kiwenlau/hadoop-cluster-docker
創建網橋
docker network create hadoop
運行容器
cd /opt/hadoop-cluster-docker/ ./start-container.sh
運行結果:
start master container...
start slave1 container...
start slave2 container...
一共開啟了3個容器,1個master, 2個slave。開啟容器后就進入了master容器root用戶的根目錄(/root)。
查看master的root用戶家目錄的文件:
root@hadoop-master:~# ls hdfs input run-wordcount.sh start-hadoop.sh
start-hadoop.sh是開啟hadoop的shell腳本,
run-wordcount.sh是運行wordcount的shell腳本,可以測試鏡像是否正常工作。
開啟hadoop
bash start-hadoop.sh
注意:這一步會ssh連接到每一個節點,確保ssh信任是正常的。
Hadoop的啟動速度取決於機器性能
運行wordcount
bash run-wordcount.sh
此腳本會連接到fdfs,並生成幾個測試文件。
運行結果:
... input file1.txt: Hello Hadoop input file2.txt: Hello Docker wordcount output: Docker 1 Hadoop 1 Hello 2
wordcount的執行速度取決於機器性能
三、配置文件說明
進入hadoop-master容器,hadoop的配置文件目錄為:/usr/local/hadoop/etc/hadoop
core-site.xml
<?xml version="1.0"?> <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop-master:9000/</value> </property> </configuration>
hdfs-site.xml
<?xml version="1.0"?> <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop-master:9000/</value> </property> </configuration> root@hadoop-master:/usr/local/hadoop/etc/hadoop# pwd /usr/local/hadoop/etc/hadoop root@hadoop-master:/usr/local/hadoop/etc/hadoop# cat hdfs-site.xml <?xml version="1.0"?> <configuration> <property> <name>dfs.namenode.name.dir</name> <value>file:///root/hdfs/namenode</value> <description>NameNode directory for namespace and transaction logs storage.</description> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///root/hdfs/datanode</value> <description>DataNode directory</description> </property> <property> <name>dfs.replication</name> <value>2</value> </property> </configuration>
注意:這里是配置一個Master節點和兩個Slave節點。所以dfs.replication配置為2。
dfs.namenode.name.dir和dfs.datanode.data.dir分別配置為NameNode和DataNode的目錄路徑
mapred-site.xml
<?xml version="1.0"?> <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
指定運行mapreduce的環境是yarn
hadoop-env.sh
注意:這里必須要指定java的路徑。否則啟動Hadoop時,提示找不到變量JAVA_HOME
# The java implementation to use. export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
四、測試Hadoop
hadoop管理頁面
http://ip地址:8088/cluster/nodes
效果如下:
hdfs 管理頁面
http://ip地址:50070/
點擊datanode,效果如下:
瀏覽文件系統
默認有2個文件夾,這里面的文件是看不到的。
由於默認開啟了安全默認,默認是沒有權限查看文件的。需要關閉安全模式才行!
關閉安全模式
進入hadoop-master容器,執行命令:
hadoop dfsadmin -safemode leave
授權tmp文件權限
hdfs dfs -chmod -R 755 /tmp
刷新頁面,點擊tmp
返回上一級目錄,進入/user/root/input,就可以看到腳本創建的2個文件了!
注意:hdfs存放目錄為:/root/hdfs。如果需要做持久化,將此目錄映射出來即可!
本文參考鏈接:
https://blog.csdn.net/sb985/article/details/82722451
https://blog.csdn.net/gwd1154978352/article/details/81095592