Hadoop是Apache基金會旗下的一個開源的分布式計算平臺,是基于Java語言開發(fā)的庶喜,有很好的跨平臺特性小腊,并且可以部署在廉價的計算機集群中。用戶無需了解分布式底層細節(jié)久窟,就可以開發(fā)分布式程序秩冈,充分利用集群的威力進行高速運算和存儲。
Ubuntu 版本: 18.x ~ 20.x
Hadoop版本:3.2.2? (http://hadoop.apache.org/)
1. 安裝 JDK
? ? $ sudo apt-get update
? ? $ sudo apt-get install openjdk-8-jdk
? ? $ java -version
? ? openjdk version "1.8.0_275"
? ? OpenJDK Runtime Environment (build 1.8.0_275-8u275-b01-0ubuntu1~18.04-b01)
? ? OpenJDK 64-Bit Server VM (build 25.275-b01, mixed mode)
? ? $ update-alternatives --config java
? ? There is only one alternative in link group java (providing /usr/bin/java): /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
2. 設置 JAVA_HOME
? ? $ sudo vi /etc/profile
? ? JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
? ? JRE_HOME=$JAVA_HOME/jre
? ? CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
? ? PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
? ? export JAVA_HOME JRE_HOME CLASS_PATH PATH
? ? $ source /etc/profile
? ? $ echo $JAVA_HOME
3. 安裝 Hadoop 到主機
? ? $ wget https://mirrors.bfsu.edu.cn/apache/hadoop/common/hadoop-3.2.2/hadoop-3.2.2.tar.gz? ? ? # 下載 hadoop
? ? $ mv ./hadoop-3.2.2.tar.gz ~/apps/? ? # 移動到你想要放置的文件夾
? ? $ tar -zvxf hadoop-3.2.2.tar.gz? ? # ~/apps/hadoop-3.2.2
? ? 本地配置 SSH 無密碼訪問:
? ? $ cd ~/.ssh
? ? $ ssh-keygen -t rsa
? ? $ cat ./id_rsa.pub >> ./authorized_keys
? ? $ ssh localhsot
4. 配置 Hadoop
? ? 創(chuàng)建 Hadoop用戶和組斥扛,并授予執(zhí)行權限
? ? $ sudo addgroup hadoop
? ? $ sudo usermod -a -G hadoop xxx # 將當前用戶加入到hadoop組
? ? $ sudo vim /etc/sudoers ? ? ? ? # 將hadoop組加入到sudoer
? ? 在 root ALL=(ALL) ALL? 后
? ? 添加一行 hadoop ALL=(ALL) ALL
? ? $ sudo chmod -R 755 ~/apps/hadoop-3.2.2
? ? $ sudo chown -R xxx:hadoop ~/apps/hadoop-3.2.2? ? # 否則ssh會拒絕訪問
? ? $ sudo vim /etc/profile? (增量配置入问,不要刪除之前的 JAVA_HOME ...)
? ? HADOOP_HOME=/home/xxx/apps/hadoop-3.2.2
? ? PATH=.$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
? ? export HADOOP_HOME
? ? $ sudo source /etc/profile
? ? $ echo $HADOOP_HOME
? ?
5. 單機模式運行 Hadoop
? ? $ hadoop version? ? # 測試是否配置成功
? ? $ cd ~/apps/hadoop-3.2.2
? ? $ mkdir input
? ? $ cp README.txt input
? ? $ hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-3.2.2-sources.jar org.apache.hadoop.examples.WordCount input output
6. 偽分布式配置 Hadoop
? ? $ cd ~/apps/hadoop-3.2.2
? ? $ vim ./etc/hadoop/hadoop-env.sh
? ? ? ? export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
? ? $ vim ./etc/hadoop/core-site.xml
? ? <configuration>
? ? ? ? <property>
? ? ? ? ? ? <name>hadoop.tmp.dir</name>
? ? ? ? ? ? <value>file:/home/xxx/apps/hadoop-3.2.2/tmp</value>
? ? ? ? ? ? <description>Abase for other temporary directories.</description>
? ? ? ? </property>
? ? ? ? <property>
? ? ? ? ? ? <name>fs.defaultFS</name>
? ? ? ? ? ? <value>hdfs://localhost:9000</value>
? ? ? ? </property>
? ? </configuration>
? ? *注:路徑里的 ‘xxx’ 是 ubuntu 用戶的home目錄名丹锹,下同?
? ? $ vim ./etc/hadoop/hdfs-site.xml
? ? <configuration>
? ? ? ? <property>
? ? ? ? ? ? <name>dfs.replication</name>
? ? ? ? ? ? <value>1</value>
? ? ? ? </property>
? ? ? ? <property>
? ? ? ? ? <name>dfs.http.address</name>
? ? ? ? ? <value>0.0.0.0:50070</value>
? ? ? ? </property>? ? ? ?
? ? ? ? <property>
? ? ? ? ? ? <name>dfs.namenode.name.dir</name>
? ? ? ? ? ? <value>file:/home/xxx/apps/hadoop-3.2.2/tmp/dfs/name</value>
? ? ? ? </property>
? ? ? ? <property>
? ? ? ? ? ? <name>dfs.datanode.data.dir</name>
? ? ? ? ? ? <value>file:/home/xxx/apps/hadoop-3.2.2/tmp/dfs/data</value>
? ? ? ? </property>
? ? </configuration>
? ? $ hdfs namenode -format
? ? $ ./sbin/start-dfs.sh
? ? 遇到報錯:localhost: ERROR: JAVA_HOME is not set and could not be found.
? ? 解決方案:其實是hadoop里面hadoop-env.sh文件里面的java路徑設置不對,hadoop-env.sh ./etc/hadoop目錄下芬失,具體的修改辦法如下:? ?
? ? $ vim ./etc/hadoop/hdoop-env.sh
? ? 將語句
? ? export JAVA_HOME=$JAVA_HOME?
? ? # 也有可能語句為export JAVA_HOME=? (且被注釋掉了)
? ? 修改為
? ? export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64? # 自己的Java home路徑楣黍,可以在終端輸入$JAVA_HOME 查看
? ? 保存后退出,重新執(zhí)行 ./sbin/start-dfs.sh
? ? 輸入jps命令查看是否啟動成功, namenode和datanode都要出現(xiàn)才算成功棱烂?租漂?
? ? 訪問 http://localhost:50070 查看節(jié)點信息
? ? 關閉hdfs: ./sbin/stop-dfs.sh
7. 配置yarn(可選項)
? ? $ vim ./etc/hadoop/mapred-site.xml
? ? <configuration>
? ? ? ? ? ? <property>
? ? ? ? ? ? ? ? <name>mapreduce.framework.name</name>
? ? ? ? ? ? ? ? <value>yarn</value>
? ? ? ? ? ? </property>
? ? </configuration>
? ? $ vim ./etc/hadoop/yarn-site.xml
? ? <configuration>
? ? ? ? <property>
? ? ? ? ? ? <name>yarn.nodemanager.aux-services</name>
? ? ? ? ? ? <value>mapreduce_shuffle</value>
? ? ? ? </property>
? ? </configuration>
? ? 啟動yarn(要先啟動了hdfs:start-dfs.sh)
? ? $ ./sbin/start-yarn.sh
? ? 開啟歷史服務器,查看歷史任務颊糜,這樣可以在web界面中查看任務運行情況:
? ? $ ./sbin/mr-jobhistory-daemon.sh start historyserver
? ? 啟動成功后可以在 http://localhost:8088/cluster 訪問集群資源管理器哩治。
? ? 不啟用 YARN 時,是 “mapred.LocalJobRunner” 在跑任務衬鱼,啟用 YARN 之后业筏,是 “mapred.YARNRunner” 在跑任務。啟動 YARN 有個好處是可以通過 Web 界面查看任務的運行情況:http://localhost:8088/cluster 鸟赫。
8. HDFS文件操作
? ? $ hdfs dfsadmin -report? ? # 查看信息
? ? $ hdfs dfs -mkdir /test? ? # create folder
? ? $ hdfs dfs -rm -r /test? ? # delete folder
? ? $ hdfs dfs -ls -R /? ? ? ? #? recursive list folder
? ? $ hdfs dfs -put data.txt /test? ? ? # put file from local
? ? $ hdfs dfs -get /test/data.txt? ? ? # get file to local
9. 集群/分布式配置 Hadoop
? ? 一臺主機 hadoop-master-vm蒜胖,一臺輔機 hadoop-slave-vm,配置主輔機之間SSH無密碼訪問(把各自的~/.ssh/id_rsa.pub 放入對方的 ~/.ssh/authorized_keys 中)
? ? 1) 主機hadoop-master-vm抛蚤, 修改/etc/hosts
? ?
? ? ? ? 127.0.0.1? ? localhost
? ? ? ? #127.0.1.1? ? hadoop-master-vm
? ? ? ? 192.168.0.3? ? hadoop-master-vm
? ? ? ? 192.168.0.4? ? hadoop-slave-vm
? ? ? ? ...
? ? 2) 輔機hadoop-slave-vm翠勉, 修改/etc/hosts
? ?
? ? ? ? 127.0.0.1? ? localhost
? ? ? ? #127.0.1.1? ? hadoop-slave-vm
? ? ? ? 192.168.0.3? ? hadoop-master-vm
? ? ? ? 192.168.0.4? ? hadoop-slave-vm
? ? ? ? ...
? ? 3) 修改主機上的 hadoop 配置
? ? ? ? $ cd ~/apps/hadoop-3.2.2
? ? ? ? $ vim ./etc/hadoop/workers
? ? ? ? ? ? #localhost
? ? ? ? ? ? hadoop-slave-vm
? ? ? ? $ vim ./etc/hadoop/core-site.xml
? ? ? ? ? ? <configuration>
? ? ? ? ? ? ? ? <property>
? ? ? ? ? ? ? ? ? ? <name>hadoop.tmp.dir</name>
? ? ? ? ? ? ? ? ? ? <value>file:/home/xxx/apps/hadoop-3.2.2/tmp</value>
? ? ? ? ? ? ? ? ? ? <description>Abase for other temporary directories.</description>
? ? ? ? ? ? ? ? </property>
? ? ? ? ? ? ? ? <property>
? ? ? ? ? ? ? ? ? ? <name>fs.defaultFS</name>
? ? ? ? ? ? ? ? ? ? <value>hdfs://hadoop-master-vm:9000</value>
? ? ? ? ? ? ? ? </property>
? ? ? ? ? ? </configuration>
? ? ? ? $ vim ./etc/hadoop/hdfs-site.xml
? ? ? ? ? ? <configuration>
? ? ? ? ? ? ? ? <property>
? ? ? ? ? ? ? ? ? ? <name>dfs.replication</name>
? ? ? ? ? ? ? ? ? ? <value>1</value>
? ? ? ? ? ? ? ? </property>
? ? ? ? ? ? ? ? <property>
? ? ? ? ? ? ? ? ? <name>dfs.http.address</name>
? ? ? ? ? ? ? ? ? <value>hadoop-master-vm:50070</value>
? ? ? ? ? ? ? ? </property>? ? ? ?
? ? ? ? ? ? ? ? <property>
? ? ? ? ? ? ? ? ? ? <name>dfs.namenode.name.dir</name>
? ? ? ? ? ? ? ? ? ? <value>file:/home/xxx/apps/hadoop-3.2.2/tmp/dfs/name</value>
? ? ? ? ? ? ? ? </property>
? ? ? ? ? ? ? ? <property>
? ? ? ? ? ? ? ? ? ? <name>dfs.datanode.data.dir</name>
? ? ? ? ? ? ? ? ? ? <value>file:/home/xxx/apps/hadoop-3.2.2/tmp/dfs/data</value>
? ? ? ? ? ? ? ? </property>
? ? ? ? ? ? </configuration>
? ? ? ? $ vim ./etc/hadoop/mapred-site.xml? # MapReduce 相關
? ? ? ? ? ? <configuration>
? ? ? ? ? ? ? ? <property>
? ? ? ? ? ? ? ? ? ? <name>mapreduce.framework.name</name>
? ? ? ? ? ? ? ? ? ? <value>yarn</value>
? ? ? ? ? ? ? ? </property>
? ? ? ? ? ? ? ? <property>
? ? ? ? ? ? ? ? ? ? <name>mapreduce.jobhistory.address</name>
? ? ? ? ? ? ? ? ? ? <value>hadoop-master-vm:10020</value>
? ? ? ? ? ? ? ? </property>
? ? ? ? ? ? ? ? <property>
? ? ? ? ? ? ? ? ? ? <name>mapreduce.jobhistory.webapp.address</name>
? ? ? ? ? ? ? ? ? ? <value>hadoop-master-vm:19888</value>
? ? ? ? ? ? ? ? </property>
? ? ? ? ? ? </configuration>
? ? ? ? $ vim ./etc/hadoop/yarn-site.xml
? ? ? ? ? ? <configuration>
? ? ? ? ? ? ? ? <property>
? ? ? ? ? ? ? ? ? ? <name>yarn.resourcemanager.hostname</name>
? ? ? ? ? ? ? ? ? ? <value>hadoop-master-vm</value>
? ? ? ? ? ? ? ? </property>
? ? ? ? ? ? ? ? <property>
? ? ? ? ? ? ? ? ? ? <name>yarn.nodemanager.aux-services</name>
? ? ? ? ? ? ? ? ? ? <value>mapreduce_shuffle</value>
? ? ? ? ? ? ? ? </property>
? ? ? ? ? ? </configuration>
? ? $ hdfs namenode -format
? ? ? ? 把主機的hadoop目錄 ~/apps/hadoop-3.2.2 完全同步到輔機上,輔機的JAVA_HOME, HADOOP_HOME 等參考主機的配置霉颠。
? ? 4) 在主機上運行
? ? ? ? $ ./sbin/start-dfs.sh
? ? ? ? $ ./sbin/start-yarn.sh
? ? ? ? # $ mr-jobhistory-daemon.sh start historyserver
? ? ? ? (1) 主機上查看節(jié)點
? ? ? ? ? ? xxx@hadoop-master-vm:~/apps/hadoop-3.2.2$ jps
? ? ? ? ? ? 6807 NameNode
? ? ? ? ? ? 7752 ResourceManager
? ? ? ? ? ? 7082 SecondaryNameNode
? ? ? ? ? ? 8171 Jps
? ? ? ? ? ? 8156 JobHistoryServer? ?
? ? ? ? (2)輔機上查看節(jié)點
? ? ? ? ? ? xxx@hadoop-slave-vm:~/apps/hadoop-3.2.2$ jps
? ? ? ? ? ? 2368 remoting.jar
? ? ? ? ? ? 6192 DataNode
? ? ? ? ? ? 20802 Jps?
? ? ? ? (3)主輔機上查看report
? ? ? ? ? ? $ hdfs dfsadmin -report
? ? ? ? ? ? ? ? Configured Capacity: 490651459584 (456.95 GB)
? ? ? ? ? ? ? ? Present Capacity: 410068922368 (381.91 GB)
? ? ? ? ? ? ? ? DFS Remaining: 410068877312 (381.91 GB)
? ? ? ? ? ? ? ? DFS Used: 45056 (44 KB)
? ? ? ? ? ? ? ? DFS Used%: 0.00%
? ? ? ? ? ? ? ? ...
? ? ? ? ? ? ? ? -------------------------------------------------
? ? ? ? ? ? ? ? Live datanodes (1):
? ? ? ? ? ? ? ? Name: 192.168.0.4:9866 (hadoop-slave-vm)
? ? ? ? ? ? ? ? Hostname: hadoop-slave-vm
? ? ? ? ? ? ? ? Decommission Status : Normal
? ? ? ? ? ? ? ? Configured Capacity: 490651459584 (456.95 GB)
? ? ? ? ? ? ? ? DFS Used: 45056 (44 KB)
? ? ? ? ? ? ? ? Non DFS Used: 55587368960 (51.77 GB)
? ? ? ? ? ? ? ? DFS Remaining: 410068877312 (381.91 GB)
? ? ? ? ? ? ? ? DFS Used%: 0.00%
? ? ? ? ? ? ? ? DFS Remaining%: 83.58%
? ? ? ? ? ? ? ? ...
10. Web UI
? ? 1) Hadoop node overview
? ? ? ? http://hadoop-master-vm:50070/
? ?
? ? 2) Hadoop cluster
? ?
? ? ? ? http://hadoop-master-vm:8088/?