文件名稱 | 版本號 | 作者 | 備註 | |
---|---|---|---|---|
實操_大數據學習_v0.0.2_持續更新。。。 | v0.0.2 | 飛豺 | 8416837 | Hadoop2.7.7 | Ubuntu18 |
概念
- 分佈式文件系統
當數據容量超過所存儲在單個物理機上的存儲,多個物理機共同完成該數據存儲,管理這些跨機器的存儲操作就被稱爲分佈式文件系統。
文件系統管理的資源不一定直接相連本地,而是通過網絡節點連接;基於C/S
模式,由於對等特性,客戶機也可以發佈目錄作爲服務器供其它客戶機訪問,就像訪問本地驅動器一樣。 - Hadoop
將文件存儲於普通計算機組成的集羣,這樣可以使用廉價計算機構建大規模數據集存儲系統。它是分佈式存儲的基礎設施。 - DataNode與服務器節點
在數目上,副本與DataNode
一對一。 - Spark
基於分佈式存儲進行數據處理,不會存儲。理論上,Hadoop
可以拋開Spark
,使用MapReduce
進行數據處理。但一般來說,Spark
速度快過MapReduce
,它的處理方式是分步的:從集羣取出數據處理後,放回集羣,再取出更新後的數據,進行處理。 - HBase-大表
- 列族
Apache HBase
中的列被分組爲列族。列族的所有列成員具有相同的前綴。例如,courses:history
和courses:math
都是 courses 列族的成員。冒號字符(:)從列族限定符中分隔列族。列族前綴必須由可打印字符組成。限定尾部,列族限定符可以由任意字節組成。必須在 schema 定義時提前聲明列族,而列不需要在 schema 時定義,但可以在表啓動並運行時動態地變爲列。
在物理上,所有列族成員一起存儲在文件系統上。由於調音(tunings)和存儲(storage)規範是在列族級完成的,因此建議所有列族成員具有相同的一般訪問模式和大小特徵.
HDFS實操
Ubuntu OS環境下的操作 - 其他Linux類似
新建用戶組
- 新增Hadoop用戶 - 也可以直接用管理員
sudo addgroup hadoop_
sudo adduser --ingroup hadoop_ hduser_ # ↓圖
安裝SSH服務
執行命令:ssh localhost
進行登錄測試,若報錯,先安裝SSH
相關,方能便捷使用
sudo apt-get install ssh
sudo apt-get install rsync
免密登陸設置
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
# 可能以上命令沒起效 , 仍然需要輸入PW,Ubuntu OS ↓
cat /home/hduser_/.ssd/id_rsa.pub >> /home/hduser_/.ssh/authorized_keys # 可能報錯:沒有.ssd目錄
# Ubuntu系統下,免密若不起效,並不影響後續操作
執行腳本時,免密
sudo visudo
# 在%sudo ALL=(ALL:ALL) ALL下面添加一行
username ALL=(ALL) NOPASSWD: ALL
下載安裝
在官網下載Hadoop https://hadoop.apache.org/releases.html
下載binary
版,如hadoop-2.7.7.tar.gz
# 或者wget獲取
wget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz
# 解壓
sudo tar xvzf hadoop-xxx.jar -C 目標目錄 # sudo tar xvzf hadoop-2.7.7.tar.gz -C /home/app/
配置 - update下述文件
- 單節點
它們在${HADOOP_HOME}/etc/hadoop/
目錄,${HADOOP_HOME}
==Hadoop安裝的根目錄
- core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/app/hadooptmp</value>
<description>Parent dir for other temp dir</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:54310</value>
<description>The name of the default file system.</description>
</property>
</configuration>
- hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
<description>Default block replication.</description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/app/hdfsdata</value>
</property>
</configuration>
- mapred-site.xml.template
<configuration>
<property>
<name>mapreduce.jobtracker.address</name>
<value>localhost:54311</value>
<description>MapReduce job tracker runs at this host and port.</description>
</property>
</configuration>
- hadoop-env.sh
# export JAVA_HOME=${JAVA_HOME} # 註釋這行,改爲↓
export JAVA_HOME=/data/app/jdk1.8.0_201 # 你自己的JAVA_HOME
啓動
- 單節點
# 手動創建目錄並授權
sudo mkdir -p /home/app/hadooptmp
sudo chown -R abuntucc /home/app/hadooptmp
sudo mkdir -p /home/app/hdfsdata
sudo chown -R abuntucc /home/app/hdfsdata
# 格式化 namenode
cd ${HADOOP_HOME} # 你的Hadoop根目錄,因機而異。亦可把啓動命令配置到環境變量而簡化啓動腳本
bin/hadoop namenode -format
sbin/start-all.sh
# 如果啓動不完全,需要授權目錄,找到Hadoop相關目錄進行授權
sudo chown -R hduser_:hadoop_ ${HADOOP_HOME} # 將權限賦予該用戶-hduser_ chown的意思:變更文件所有者
# 如果報錯目錄不存在,請sudo mkdir -p 目錄 來創建目錄
啓動成功 exec jps 會看到5個Hadoop進程。五個。
- Web頁面的訪問地址
hadoop admin http://localhost:8088/cluster
namenode http://localhost:50070
hdfs namenode http://localhost:8042
hdfs hdfs://localhost:54310 - The name of the default file system.
請訪問上述地址試試
,跨機訪問請開放端口
- 配置環境變量
sudo vim /etc/profile
export HADOOP_HOME=/home/project/hadoop/hadoop-2.7.7
export PATH=$PATH:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin
source /etc/profile
這樣就可以直接使用hadoop命令了.
- 簡單命令
命令 | 意義 | 備註 |
---|---|---|
hadoop dfs -ls -R / | 遞歸查看根目錄下的目錄,以及子目錄 | 在http://domain:50070 也可以瀏覽目錄 |
MapReduce實操
- 先看個直觀圖,它具象了MR的操作
實例1 - 過濾關鍵詞 - 獲取文中的關鍵詞
- 步驟 - 閱讀註釋
# 新建用戶目錄
hadoop dfs -mkdir -p /user/hduser_/input007
# 進入Hadoop根目錄
cd ${HADOOP_HOME}
# 將一些xml文件放入input007目錄
hadoop dfs -put etc/hadoop/*.xml /user/hduser_/input007 # 如果當前用戶名稱是hduser_,則目錄可以省略/user/hduser_
# 執行mp,獲取文件中正則dfs[a-z.]+匹配的關鍵詞
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar grep /user/hduser_/input007 /user/hduser_/output007 'dfs[a-z.]+' # output007目錄自動創建
# 執行完畢,看下剛纔的成果,從output007裏取結果,output007對應上面的output007
hadoop dfs -cat /user/hduser_/output007/*
把xml文件放入了HDFS目錄後的效果↓
- 成功,結果見下圖
- 覈實. xml文件裏確有這幾個關鍵詞↓
實際應用場景:過濾敏感詞彙 | 查詢等
實例2 - 關鍵詞統計
新建words.txt文件,內容如下
# 將文件放入input007目錄
hadoop dfs -put /home/project/files/words.txt /user/hduser_/input007
# 進入根目錄
cd ${HADOOP_HOME}
# 執行mp,開始統計
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /user/hduser_/input007/words.txt /user/hduser_/output010
# 查看
hadoop dfs -ls /user/hduser_/output010
# 查看統計結果
hadoop dfs -cat /user/hduser_/output010/part-r-00000
統計成功
實際應用場景: 微博|評論|搜索詞頻統計等
實例3 - π值計算
shell
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar pi 100 100
增加投擲次數↓,更精確了。
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar pi 100 150
↑基於極限求π值,第一個參數:100個任務,第二個參數:每個任務處理100個點。兩個參數的乘積即是總的投擲次數。平均來說,投擲次數與精確度成正比。
計算的π值有點那個意思了。
更多實例待續。。。