做者 | WenasWeihtml
在前面介紹過了Hadoop-離線批處理技術的總體架構,接下來便開始學習安裝配置並使用 Hadoop ; 將從如下幾點介紹:java
Hadoop須要使用到 Linux 環境上的一些基本的配置須要,Hadoop 用戶組和用戶添加,免密登陸操做,JDK安裝node
在使用 VMWare 安裝 Ubuntu18.04-Linux 操做系統下時產生系統配置問題能夠經過分享的博文進行配置,CSDN跳轉連接: VMWare中Ubuntu網絡配置git
其中包含了如下幾個重要操做步驟:apache
以 root 用戶登陸 Linux-Ubuntu 18.04虛擬機,執行命令:瀏覽器
$ groupadd hadoop $ useradd -r -g hadoop hadoop
將 /usr/local
目錄權限賦予 Hadoop 用戶, 命令以下:服務器
$ chown -R hadoop.hadoop /usr/local/ $ chown -R hadoop.hadoop /tmp/ $ chown -R hadoop.hadoop /home/
編輯/etc/sudoers
文件,在root ALL=(ALL:ALL) ALL
下添加hadoop ALL=(ALL:ALL) ALL
微信
$ vi /etc/sudoers Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" root ALL=(ALL:ALL) ALL hadoop ALL=(ALL:ALL) ALL %admin ALL=(ALL) ALL %sudo ALL=(ALL:ALL) ALL
$ passwd hadoop Enter new UNIX password: 輸入新密碼 Retype new UNIX password: 確認新密碼 passwd: password updated successfully
Linux安裝JDK能夠參照分享的博文《Logstash-數據流引擎》-<第三節:Logstash安裝>--(第二小節: 3.2 Linux安裝JDK進行)安裝配置到每一臺主機上,CSDN跳轉連接: Logstash-數據流引擎網絡
官網下載:https://hadoop.apache.org/rel... Binary download架構
例如:version3.3.0 https://mirrors.bfsu.edu.cn/a...
$ wget https://mirrors.bfsu.edu.cn/apache/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz
解壓、移動到你想要放置的文件夾: /usr/local
$ mv ./hadoop-3.3.0.tar.gz /usr/local $ cd /usr/local $ tar -zvxf hadoop-3.3.0.tar.gz
修改配置文件/etc/profile
:
$ vi /etc/profile # 類同JDK配置添加 export JAVA_HOME=/usr/local/java/jdk1.8.0_152 export JRE_HOME=/usr/local/java/jdk1.8.0_152/jre export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export HADOOP_HOME=/usr/local/hadoop-3.3.0 export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
使配置文件生效
$ source /etc/profile
查看Hadoop配置是否成功
$ hadoop version Hadoop 3.3.0 Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r aa96f1871bfd858f9bac59cf2a81ec470da649af Compiled by brahma on 2020-07-06T18:44Z Compiled with protoc 3.7.1 From source with checksum 5dc29b802d6ccd77b262ef9d04d19c4 This command was run using /usr/local/hadoop-3.3.0/share/hadoop/common/hadoop-common-3.3.0.jar
從結果能夠看出,Hadoop版本爲 Hadoop 3.3.0
,說明 Hadoop 環境安裝並配置成功。
Hadoop 提供了3種不一樣獲得安裝模式,分別爲單機模式、僞集羣模式和集羣模式。
單機模式(本地模式):Hadoop默認模式、即非分佈式模式、無需進行其餘配置便可運行非分佈式,即java單進程,方便進行調試、跟蹤和排除問題,只須要在 Hadoop 的 hadoop-env.sh
文件中配置 JAVA_HOME 便可。
本地單機模式以 Hadoop Jar 命令運行 Hadoop 程序,並將運行結果直接輸出到本地磁盤。
Hadoop在單節點(單點故障問題)上以僞分佈式的方式運行,Hadoop進程以分離的java進程來運行,節點既做爲NameNode也做爲DataNode,同時讀取的是HDFS中的文件。可以在邏輯上提供與集羣模式同樣的運行環境,在物理上僞集羣模式部署在單臺服務器上:而集羣模式須要部署在多臺服務器上,以實現物理上的徹底集羣分佈。
僞集羣模式中須要在 Hadoop 的 hadoop-env.sh 文件中配置JAVA HOME 外,還要配置 Hadoop 所使用的文件系統、HDFS 的副本數量和 YARN 地址,以及服務器的 SSH 免密碼登陸等。
僞集羣模式以 HadopJar 命令運行 Hadoop 程序,並將運行結果輸出到 HDFS 中。
集羣模式也稱徹底集羣模式,它與僞集羣模式有着本質的區別: 集羣模式是在物理服務器上實現的徹底分佈式集羣,部署在多臺物理服務器上;而僞集羣模式在邏輯上是集羣模式,但它是部署在單臺物理服務器上的。
對於生產環境,要求 Hadoop 環境的高可靠性和高可用性,每每某個節點故障就會致使整個集羣不可用;同時,要求生產環境的數據必須可靠,某個數據節點出現故障或者數據發生丟失後,數據必須可恢復。這就要求生產環境上必須部署Hadoop 的集羣模式,以應對生產環境的各類要求。
集羣模式的部署是3種安裝模式中最複雜的,它須要部署在多臺物理服務器上,要提早將服務器環境規劃好,除了要配置 Hadoop 所使用的文件系統、HDFS 的副本數量和 YARN 地址外。還要配置各臺服務器之間的 SSH 免密碼登陸、各 Hadoop 節點之間的 RPC通訊、NameNode 失敗自動切換機制、HA高可用等。另外,還須要安裝配置分佈式應用協調服務--Zookeeper。
集羣模式以 Hadoop Jar 命令運行 Hadoop 程序,並將運行結果輸出到 HDFS 中。
單機模式下修改 Hadoop 配置文件 hadoop-env.sh
,添加上 Java 環境配置路徑
$ vi /usr/local/hadoop-3.3.0/etc/hadoop/hadoop-env.sh # 查找到JAVA_HOME並添加JAVA_HOME地址 export JAVA_HOME=/usr/local/java/jdk1.8.0_152
建立目錄/home/hadoop/input
:
$mkdir -p /home/hadoop/input
建立測試數據文件data.input
:
$ cd /home/hadoop/input/ $ vi data.input # 寫入數據內容 hadoop mapreduce hive flume hbase spark storm flume sqoop hadoop hive kafka spark hadoop storm
運行 Hadoop 自帶的 MapReduce 示例程序,統計指定文件中的單詞個數。
運行 Hadoop 自帶的 MapReduce 程序命令:
$ hadoop jar /usr/local/hadoop-3.3.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount /home/hadoop/input/data.input /home/hadoop/output
通用格式說明以下:
hadoop-mapreduce-examples-3.3.0.jar
文件中存在多個MapReduce程序。參數說明以下。
執行成功結果:
2021-06-02 01:08:40,374 INFO mapreduce.Job: map 100% reduce 100% 2021-06-02 01:08:40,375 INFO mapreduce.Job: Job job_local794874982_0001 completed successfully
查看/home/hadoop/output
文件夾和生成文件以下:
$ cd /home/hadoop/output $ /home/hadoop/output# ll total 20 drwxr-xr-x 2 root root 4096 Jun 2 01:08 ./ drwxr-xr-x 4 root root 4096 Jun 2 01:08 ../ -rw-r--r-- 1 root root 76 Jun 2 01:08 part-r-00000 -rw-r--r-- 1 root root 12 Jun 2 01:08 .part-r-00000.crc -rw-r--r-- 1 root root 0 Jun 2 01:08 _SUCCESS -rw-r--r-- 1 root root 8 Jun 2 01:08 ._SUCCESS.crc
查看統計數據文件part-r-00000
:
$ cat part-r-00000 # 統計單詞個數結果 flume 2 hadoop 3 hbase 1 hive 2 kafka 1 mapreduce 1 spark 2 sqoop 1 storm 2
Hadoop 在單節點上以僞分佈式的方式運行、Hadoop 進程以分離的 Java 進程來運行,節點即爲 NameNode 也做爲 DataNode,同時、讀取的是 HDFS 中的文件。
須要修改的配置文件:core-site.xml 和 hdfs-site.xml、mapred-site.xml,每一個配置以聲明 property 的 name 和 value 的方式實現。
對於 Hadoop 僞集羣模式的配置,除了須要配置hadoop-env.sh 文件外,還須要配置如下4個文件:core site.xml、hdfs-site.xml、mapred-site.xml 和 yarn-site.xml,每一個文件與hadoop-env.sh 文件在同一個目錄下,各文件的做用以下:
指定 NameNode 的位置,hadoop.tmp.dir 是 Hadoop 文件系統依賴的基礎配置,不少路徑都依賴它。若是hdfs-site.xml 中不配置 Namenode 和 DataNode 的存放
位置,則默認就放在這個路徑中。
core-site.xml 配置文件以下:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop-3.3.0/tmp</value> <description>Abase for other temporary directories.</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop1:9000</value> </property> </configuration>
注意: 其中的 hadoop1 爲配置的主機名
配置NameNode和 DataNode存放文件的具體路徑,配置副本的數量。
hdfs-site.xml 配置文件以下:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/usr/local/hadoop-3.3.0/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/usr/local/hadoop-3.3.0/tmp/dfs/data</value> </property> </configuration>
注意: 僞分佈式只有一個節點,因此 dfs.replication
須要配置成 1 ,在集羣模式下至少配置3個節點; 此外還配置了datanode 和 namenode 的節點位置。
在以前版本的 Hadoop 中是沒有此文件的,須要將 mapred-site.xml.template
重命名:配置 MapReduce 做業是提交到 YARN 集羣仍是使用本地做業執行器在本地執行,其中須要配置Hadoop的環境配置: HADOOP_HOME。
mapred-site.xml 配置文件以下:
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> </configuration>
配置 ResourceManager 所在節點的主機名;配置輔助服務列表,這些服務由 NodeManager 執行。
yarn-site.xml 配置文件以下:
<?xml version="1.0"?> <configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop1</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
腳本目錄: /usr/local/hadoop-3.3.0/sbin
,須要賦予腳本root帳戶運行權限的有:start-dfs.sh、start-yarn.sh、stop-dfs.sh 和 stop-yarn.sh。
(1)start-dfs.sh 和 stop-dfs.sh 分別爲啓動和中止 HDFS 進程節點, 腳本頂部須要添加root運行權限以下:
HDFS_DATANODE_USER=root HADOOP_SECURE_DN_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
(2)start-yarn.ss 和 stop-yarn.sh 分別爲啓動和中止 yarn 進程節點, 腳本頂部須要添加root運行權限以下:
YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root
格式化 NameNode 執行命令:
$ hdfs namenode -format
當輸出結果中有以下信息是,說明格式化 NameNode 成功:
INFO common.Storage: Storage directory /usr/local/hadoop-3.3.0/tmp/dfs/name has been successfully formatted.
在命令行執行腳本啓動HDFS:
$ sh start-dfs.sh
jps 查看進程
$ jps 13800 Jps 9489 NameNode 9961 SecondaryNameNode 9707 DataNode
在命令行執行腳本啓動YARN:
$ sh start-yarn.sh
jps 查看進程
$ jps 5152 ResourceManager 5525 NodeManager 13821 Jps
驗證 Hadoop 僞集羣模式啓動成功的兩種方式: 一種在瀏覽器經過Hadoop暴露的接口查看NameNode的狀態是否爲"活動狀態", 另外一種是執行 MapReduce 程序來驗證是否安裝並啓動成功。
在瀏覽器中輸入地址進行訪問:
http://192.168.254.130:9870/
登陸界面如圖所示,節點爲"活躍狀態":
運行MapReduce程序驗證環境搭建步驟分爲如下四步:
在 HDFS 上新建 /data/input
目錄,具體操做以下:
$ hadoop fs -mkdir /data $ hadoop fs -mkdir /data/input $ hadoop fs -ls /data/ Found 1 items drwxr-xr-x - root supergroup 0 2021-06-05 11:11 /data/input
上傳本地模式下的數據文件 "data.input" 到HDFS中目錄: /data/input
$ hadoop fs -put /home/hadoop/input/data.input /data/input $ hadoop fs -ls /data/input Found 1 items -rw-r--r-- 1 root supergroup 101 2021-06-05 11:11 /data/input/data.input # 查看文件中的數據 $ hadoop fs -cat /data/input/data.input hadoop mapreduce hive flume hbase spark storm flume sqoop hadoop hive kafka spark hadoop storm
運行Hadoop自帶的 wordcount 計數程序,具體命令以下:
$ hadoop jar hadoop-mapreduce-examples-3.3.0.jar wordcount /data/input/data.input /data/output
查看執行結果
在 wordcount 計數程序執行過程當中,會自動建立 /data/output
目錄,先查看 HDFS 上建立的 /data/output
目錄,命令以下:
$ hadoop fs -ls /data/output Found 2 items -rw-r--r-- 1 root supergroup 0 2021-06-05 11:19 /data/output/_SUCCESS -rw-r--r-- 1 root supergroup 76 2021-06-05 11:19 /data/output/part-r-00000 $ hadoop fs -cat /data/output/part-r-00000 flume 2 hadoop 3 hbase 1 hive 2 kafka 1 mapreduce 1 spark 2 sqoop 1 storm 2
能夠從 part-r-00000 文件中正確的輸出了每一個單詞以及該單詞在測試數據文件中的數量,說明 Hadoop 的僞集羣模式正確的將 MapReduce 的結果輸出到了 HDFS 中。
本文主要是爲了後續部署 hadoop 等大數據組件的網絡策略處理,其中最主要的設置網絡靜態ip、主機名修改、設置免密登陸等操做,下一篇將介紹 Hadoop的集羣模式安裝,歡迎關注微信公衆號: 進擊的夢清 ; 我是一名在互聯網浪潮下的打工人,但願和你共同窗習進步,秉承信念: 你知道的越多,不知道的就越多。