實驗題目:Hadoop單機僞分佈式環境搭建及WordCount程序測試
實驗硬件環境:
Intel i5-8250u 1.6GHz
RAM 8GB ddr4
軟件環境:
Ubuntu 18.04.1LTS,IDEA,Hadoop 2.7.7
實驗步驟:
1、創建hadoop用戶(下面的操作均在hadoop用戶下完成)
useradd hadoop -s /bin/hash #創建用戶名爲hadoop的用戶
passwd hadoop #設置hadoop用戶的密碼
adduser hadoop sudo #可選,爲了方便後面在hadoop用戶下的 環境配置
2、安裝SSH並配置無密碼登錄
sudo apt-get install openssh-server
安裝成功後,運行下列命令完成配置無密碼登錄
ssh localhost #登錄ssh,要求輸入當前用戶的密碼
exit #退出登錄
cd ~/.ssh/ #進入.ssh目錄
ssh-keygen -t rsa #生成祕鑰
cat ./id_rsa.put >> ./authorized_keys#加入授權
完成配置,在嘗試登錄ssh可以直接免密登錄
3、安裝JDK
在bashrc文件中添加JDK安裝路徑
export JAVA_HOME=/usr/lib/jvm/jdk-11.0.2
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
完成後使bashrc生效
source ~/.bashrc
java -version #查看java版本
圖片描述
4、安裝Hadoop 2.7.7
從官網下載Hadoop2.7.7(不建議用Hadoop 3.*版本,問題多且論壇解決辦法少)
將Hadoop文件解壓至/usr/local/hadoop下,配置Hadoop路徑
#bashrc後添加如下三行內容
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
#使bashrc生效
source ~/.bashrc
hadoop -version #查看hadoop是否安裝成功
圖片描述
5、修改配置文件
(1)修改hadoop-env.sh(/usr/local/hadoop/etc/hadoop/)
主要更改JAVA_HOME
export JAVA_HOME=/usr/lib/jvm/jdk-11.0.2
(有的配置文件是$export JAVA_HOME=${JAVA_HOME}),可不更改
(2)修改core-site.xml(/usr/local/hadoop/etc/hadoop/)
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
(3)修改hdfs-site.xml(/usr/local/hadoop/etc/hadoop/)
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
(4)配置完成,格式化Namenode
cd /usr/local/hadoop/bin
./hdfs namenode -format
看到 Storage directory ××× has been successfully formatted.
和 Exiting with status 0
表示格式化正確
(5)開啓守護進程
/usr/local/hadoop/sbin/start-dfs.sh #啓動
/usr/local/hadoop/sbin/stop-dfs.sh #關閉
啓動完成通過jps查看java進程的狀態
圖片描述
至此,單機僞分佈式集羣配置完畢
5、在IDEA上編寫並運行MapReduce程序
(1)創建一個Maven項目
(2)在新項目中,依次選擇File->Project Structure,在新窗口中選擇Project Setting下的Modules,添加一個Module,名稱隨機。在右側窗口中選擇Dependencies頁面,添加JARs or directories,添加的文件主要包括/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/tools/lib,
/usr/local/hadoop/share/hadoop/yar/lib下的jar包(建議全部添加)
6、編寫MapReduce程序
7、單機運行MapReduce程序
(1)依次點擊Run->Edit Configuration,增加一個Application的配置,名稱隨意,MainClass爲MapReduce的主程序,Program arguments爲運行程序所需要的參數也就是程序的input目錄和output目錄
(2)點擊運行即可在單機情況下運行MapReduce程序(在該項目的根目錄下會由程序自己創建output文件夾,不需要提前創建,否則會出錯)
對"The Story of My Life by Helen Keller.txt"進行WordCount部分結果顯示
圖片描述
8、利用僞分佈式集羣運行MapReduce程序
(1)利用IDEA生成jar包
依次點擊File->Project Structure,選擇Project Setting 下的Artifacts,添加一個JAR。點擊OK。
主界面依次點擊就Build->Build Artifacts->Build,IDEA將在根目錄下生成一個out文件夾,在/out/artifacts/WordCount中爲打包好的jar包。
(2)將數據文件上傳到HDFS
首先接觸HDFS的安全模式
hdfs dfsadmin -safemode leave
查看/user目錄下的文件
hdfs dfs -ls /user
#如果提示沒有該文件夾可以自己創建
hdfs dfs -mkdir /user
利用-put命令將本地數據文件上傳到HDFS
hdfs dfs -mkdir /user/hadoop
hdfs dfs -mkdir /user/hadoop/input#創建input目錄
hdfs dfs -put /本地文件路徑 /user/input #上傳文件
將IDEA產生的jar包copy到hadoop目錄下,利用hadoop運行該jar包
hadoop jar WordCount.jar WordCount input output
運行結束,HDFS產生/user/hadoop/output目錄,存放程序運行狀態和結果
hdfs dfs -ls /user/hadoop/output
圖片描述
利用HDFS指令 -copyToLocal可以下載part-r-00000文件查看程序運行結果。
參考文檔:
hadoop搭建具體步驟——第一章(僞分佈式)[https://zhuanlan.zhihu.com/p/...]
SSH配置免密碼登錄後,仍需要輸入密碼——解決方案[https://blog.csdn.net/xiaoyi3...]
《深入理解大數據——大數據處理與編程實踐》