大數(shù)據(jù)入門之Hadoop基礎(chǔ)學(xué)習(xí)
前言
目前人工智能和大數(shù)據(jù)火熱,使用的場景也越來越廣,日常開發(fā)中前端同學(xué)也逐漸接觸了更多與大數(shù)據(jù)相關(guān)的開發(fā)需求。因此對大數(shù)據(jù)知識也有必要進(jìn)行一些學(xué)習(xí)理解
基礎(chǔ)概念
大數(shù)據(jù)的本質(zhì)
一、數(shù)據(jù)的存儲:分布式文件系統(tǒng)(分布式存儲)
二、數(shù)據(jù)的計算:分部署計算
基礎(chǔ)知識
學(xué)習(xí)大數(shù)據(jù)需要具備Java知識基礎(chǔ)及Linux知識基礎(chǔ)
學(xué)習(xí)路線
(1)Java基礎(chǔ)和Linux基礎(chǔ)
(2)Hadoop的學(xué)習(xí):體系結(jié)構(gòu)、原理、編程
***階段:HDFS、MapReduce、HBase(NoSQL數(shù)據(jù)庫)
第二階段:數(shù)據(jù)分析引擎 -> Hive、Pig
- 數(shù)據(jù)采集引擎 -> Sqoop、Flume
第三階段:HUE:Web管理工具
- ZooKeeper:實現(xiàn)Hadoop的HA
- Oozie:工作流引擎
(3)Spark的學(xué)習(xí)
- ***階段:Scala編程語言
- 第二階段:Spark Core -> 基于內(nèi)存、數(shù)據(jù)的計算
- 第三階段:Spark SQL -> 類似于mysql 的sql語句
- 第四階段:Spark Streaming ->進(jìn)行流式計算:比如:自來水廠
(4)Apache Storm 類似:Spark Streaming ->進(jìn)行流式計算
NoSQL:Redis基于內(nèi)存的數(shù)據(jù)庫
HDFS
分布式文件系統(tǒng) 解決以下問題:
- 硬盤不夠大:多幾塊硬盤,理論上可以***大
- 數(shù)據(jù)不夠安全:冗余度,hdfs默認(rèn)冗余為3 ,用水平復(fù)制提高效率,傳輸按照數(shù)據(jù)庫為單位:Hadoop1.x 64M,Hadoop2.x 128M
管理員:NameNode 硬盤:DataNode
- 
MapReduce
基礎(chǔ)編程模型:把一個大任務(wù)拆分成小任務(wù),再進(jìn)行匯總
- MR任務(wù):Job = Map + Reduce
Map的輸出是Reduce的輸入、MR的輸入和輸出都是在HDFS
MapReduce數(shù)據(jù)流程分析:
- Map的輸出是Reduce的輸入,Reduce的輸入是Map的集合
HBase
什么是BigTable?: 把所有的數(shù)據(jù)保存到一張表中,采用冗余 ---> 好處:提高效率
- 因為有了bigtable的思想:NoSQL:HBase數(shù)據(jù)庫
- HBase基于Hadoop的HDFS的
- 描述HBase的表結(jié)構(gòu)
核心思想是:利用空間換效率
Hadoop環(huán)境搭建
環(huán)境準(zhǔn)備
Linux環(huán)境、JDK、http://mirrors.shu.edu.cn/apache/hadoop/common/hadoop-3.0.0/hadoop-3.0.0-src.tar.gz
安裝
1、安裝jdk、并配置環(huán)境變量
- vim /etc/profile 末尾添加
- 
2、解壓hadoop-3.0.0.tar.gz、并配置環(huán)境變量
- tar -zxvf hadoop-3.0.0.tar.gz -C /usr/local/
- mv hadoop-3.0.0/ hadoop
vim /etc/profile 末尾添加
配置
Hadoop有三種安裝模式:
本地模式 :
- 1臺主機(jī)
- 不具備HDFS,只能測試MapReduce程序
偽分布模式:
- 1臺主機(jī)
- 具備Hadoop的所有功能,在單機(jī)上模擬一個分布式的環(huán)境
- (1)HDFS:主:NameNode,數(shù)據(jù)節(jié)點:DataNode
- (2)Yarn:容器,運(yùn)行MapReduce程序
- 主節(jié)點:ResourceManager
- 從節(jié)點:NodeManager
全分布模式:
- 至少3臺
我們以偽分布模式為例配置:
修改hdfs-site.xml:冗余度1、權(quán)限檢查false
- <!--配置冗余度為1-->
- <property>
- <name>dfs.replication</name>
- <value>1</value>
- </property>
- <!--配置權(quán)限檢查為false-->
- <property>
- <name>dfs.permissions</name>
- <value>false</value>
- </property>
修改core-site.xml
- <!--配置HDFS的NameNode-->
- <property>
- <name>fs.defaultFS</name>
- <value>hdfs://192.168.56.102:9000</value>
- </property>
- <!--配置DataNode保存數(shù)據(jù)的位置-->
- <property>
- <name>hadoop.tmp.dir</name>
- <value>/usr/local/hadoop/tmp</value>
- </property>
修改mapred-site.xml
- <!--配置MR運(yùn)行的框架-->
- <property>
- <name>mapreduce.framework.name</name>
- <value>yar</value>
- </property>
- <property>
- <name>yarn.app.mapreduce.am.env</name>
- <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
- </property>
- <property>
- <name>mapreduce.map.env</name>
- <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
- </property>
- <property>
- <name>mapreduce.reduce.env</name>
- <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
- </property>
- <property>
- <name>mapreduce.application.classpath</name>
- <value>
- /usr/local/hadoop/etc/hadoop,
- /usr/local/hadoop/share/hadoop/common/*,
- /usr/local/hadoop/share/hadoop/common/lib/*,
- /usr/local/hadoop/share/hadoop/hdfs/*,
- /usr/local/hadoop/share/hadoop/hdfs/lib/*,
- /usr/local/hadoop/share/hadoop/mapreduce/*,
- /usr/local/hadoop/share/hadoop/mapreduce/lib/*,
- /usr/local/hadoop/share/hadoop/yarn/*,
- /usr/local/hadoop/share/hadoop/yarn/lib/*,
- </value>
- </property>
修改yarn-site.xml
- <!--配置ResourceManager地址-->
- <property>
- <name>yarn.resourcemanager.hostname</name>
- <value>192.168.56.102</value>
- </property>
- <!--配置NodeManager執(zhí)行任務(wù)的方式-->
- <property>
- <name>yarn.nodemanager.aux-service</name>
- <value>mapreduce_shuffle</value>
- </property>
格式化NameNode
- hdfs namenode -format
看到common.Storage: Storage directory /usr/local/hadoop/tmp/dfs/name has been successfully formatted表示格式化成功
啟動
- start-all.sh
(*)HDFS:存儲數(shù)據(jù)
(*)YARN:
訪問
- (*)命令行
- (*)Java Api
- (*)WEB Console
HDFS: http://192.168.56.102:50070
Yarn: http://192.168.56.102:8088
查看HDFS管理界面和yarn資源管理系統(tǒng)
基本操作:
HDFS相關(guān)命令
- -mkdir 在HDFD創(chuàng)建目錄 hdfs dfs -mkdir /data
- -ls 查看目錄 hdfs dfs -ls
- -ls -R 查看目錄與子目錄 hdfs dfs -ls -R
- -put 上傳一個文件 hdfs dfs -put data.txt /data/input
- -copyFromLocal 上傳一個文件 與-put一樣
- -moveFromLocal 上傳一個文件并刪除本地文件
- -copyToLocal 下載文件 hdfs dfs -copyTolocal /data/input/data.txt
- -put 下載文件 hdfs dfs -put/data/input/data.txt
- -rm 刪除文件 hdfs dfs -rm
- -getmerge 將目錄所有文件先合并再下載
- -cp 拷貝
- -mv 移動
- -count 統(tǒng)計目錄下的文件個數(shù)
- -text、-cat 查看文件
- -balancer 平衡操作
MapReduce示例
結(jié)果:
如上 一個最簡單的MapReduce示例就執(zhí)行成功了
思考
Hadoop是基于Java語言的,前端日常開發(fā)是用的PHP,在使用、查找錯誤時還是蠻吃力的。工作之余還是需要多補(bǔ)充點其它語言的相關(guān)知識,編程語言是我們開發(fā)、學(xué)習(xí)的工具,而不應(yīng)成為限制我們技術(shù)成長的瓶頸