Hadoop(CentOS)安裝及MapReduce實現(xiàn)數(shù)據(jù)去重

B站好像不支持markdown文檔,排版有點亂,強迫癥患者請看:https://blog.csdn.net/qq_44891434/article/details/131222907
1. JDK安裝
1.1 資源下載:
下載地址:https://pan.quark.cn/s/17d7266205f9
hadoop的安裝 包
java ?jdk安裝包
eclipse連接hadoop工具
所學其他工具可自行在官網(wǎng)下載
Vmware下載:https://www.vmware.com/products/workstation-pro.html
下載之后安裝完成,到輸入密鑰的地方時候,可以直接在百度上搜一個,超簡單的啦!
centos下載地址:https://www.centos.org/centos-linux/
1.2 虛擬機網(wǎng)絡配置
Vmware配置及 xshell連接:https://zjxweb.github.io/#/techBlog/vmware/
先輸入
ip addr
查看ip的內(nèi)容,發(fā)現(xiàn)沒有ip 地址,所以進行ip的配置。需要先關閉網(wǎng)絡管理器,之后要開啟網(wǎng)絡。

2. 在編輯中找到虛擬網(wǎng)絡編輯器,查看ip 地址的范圍,查看子網(wǎng)掩碼以及網(wǎng)關。



3. 輸入命令,修改相關配置
vim /etc/sysconfig/network-scripts/ifcfg-ens33

設置完成之后,開啟網(wǎng)絡,輸入
ip addr
查看ip地址,發(fā)現(xiàn)ip地址已經(jīng)有了,之后ping www.baidu.com
查看是否可以連接外網(wǎng)。(暫停 Ctrl+Z)
1.2.1 防火墻關閉
[zjx@localhost ~] systemctl stop firewalld
[zjx@localhost ~] systemctl disable firewalld.service
1.3 JDK安裝
1.3.1 卸載虛擬機自帶的JDK
注意:如果你的虛擬機是最小化安裝不需要執(zhí)行這一步。
[zjx@localhost ~] rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
rpm -qa:查詢所安裝的所有rpm軟件包
grep -i:忽略大小寫
xargs -n1:表示每次只傳遞一個參數(shù)
rpm -e –nodeps:強制卸載軟件
如果沒有
rpm
請安裝[zjx@localhost ~] yum install rpm
重啟虛擬機
[zjx@localhost ~] reboot
1.3.2 使用 rz
從xshell上傳所需的包
lrzsz這個軟件,可以讓我們直接從linux上,下載和上傳文件的操作
yum install -y lrzsz
1.3.3 JDK安裝過程
新建目錄(按自己的來)
cd /home
mkdir software && cd software
rz
上傳包到此目錄下解壓
[zjx@localhost software]$ tar zxvf jdk-8u171-linux-x64.tar.gz
.新建
/etc/profile.d/my_env.sh
文件sudo vim /etc/profile.d/my_env.sh
添加如下內(nèi)容
#JAVA_HOME
export JAVA_HOME=/home/software/jdk1.8.0_171
export PATH=$PATH:$JAVA_HOME/binsource一下/etc/profile文件,讓新的環(huán)境變量PATH生效
source /etc/profile
測試JDK是否安裝成功
java -version

2. Hadoop安裝
# 切換到software目錄
cd /home/software
rz #上傳hadoop
[root@localhost software]# tar zxvf hadoop-2.7.7.tar.gz
將Hadoop添加到環(huán)境變量
bin目錄:存放對Hadoop相關服務(hdfs,yarn,mapred)進行操作的腳本
etc目錄:Hadoop的配置文件目錄,存放Hadoop的配置文件
lib目錄:存放Hadoop的本地庫(對數(shù)據(jù)進行壓縮解壓縮功能)
sbin目錄:存放啟動或停止Hadoop相關服務的腳本
share目錄:存放Hadoop的依賴jar包、文檔、和官方案例
將Hadoop添加到環(huán)境變量
sudo vim /etc/profile.d/my_env.sh
在my_env.sh文件末尾添加如下內(nèi)容
export HADOOP_HOME=/home/software/hadoop-2.7.7
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbinsource一下/etc/profile文件,讓新的環(huán)境變量PATH生效
source /etc/profile
測試是否安裝成功
[root@localhost software]# hadoop version
Hadoop 2.7.7hadoop 目錄介紹
bin目錄:存放對Hadoop相關服務(hdfs,yarn,mapred)進行操作的腳本
etc目錄:Hadoop的配置文件目錄,存放Hadoop的配置文件
lib目錄:存放Hadoop的本地庫(對數(shù)據(jù)進行壓縮解壓縮功能)
sbin目錄:存放啟動或停止Hadoop相關服務的腳本
share目錄:存放Hadoop的依賴jar包、文檔、和官方案例
3. Hadoop運行模式
Hadoop官方網(wǎng)站:http://hadoop.apache.org
Hadoop運行模式包括:本地模式、偽分布式模式以及完全分布式模式。
本地模式:單機運行,只是用來演示一下官方案例。生產(chǎn)環(huán)境不用。
偽分布式模式:也是單機運行,但是具備Hadoop集群的所有功能,一臺服務器模擬一個分布式的環(huán)境。個別缺錢的公司用來測試,生產(chǎn)環(huán)境不用。
完全分布式模式:多臺服務器組成分布式環(huán)境。生產(chǎn)環(huán)境使用。
4. hadoop偽分布式配置
接下來是hadoop偽分布式配置。Hadoop 可以在單節(jié)點上以偽分布式的方式運行,Hadoop 進程以分離的 Java 進程來運行,節(jié)點既作為 NameNode 也作為 DataNode,同時,讀取的是 HDFS 中的文件。
Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,偽分布式需要修改2個配置文件 core-site.xml 和 hdfs-site.xml 。Hadoop的配置文件是 xml 格式,每個配置以聲明 property 的 name 和 value 的方式來實現(xiàn)。
cd /home/software/hadoop-2.7.7/etc/hadoop
vim core-site.xml
<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>
注意:這里可能會報權限錯誤的問題,所以說我們要分配權限
cd /home/software/hadoop-2.7.7/etc/hadoop
chmod +w core-site.xml
接著配置hdfs文件
cd /home/software/hadoop-2.7.7/etc/hadoop
vim hdfs-site.xml
chmod +w core-site.xml
<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>
Hadoop 的運行方式是由配置文件決定的(運行 Hadoop 時會讀取配置文件),因此如果需要從偽分布式模式切換回非分布式模式,
需要刪除 core-site.xml 中的配置項。
配置完成后,執(zhí)行 NameNode 的格式化:
cd /home/software/hadoop-2.7.7
./bin/hdfs namenode -format接著開啟 NameNode 和 DataNode 守護進程。
cd /home/software/hadoop-2.7.7
./sbin/start-dfs.sh
或者使用all來開啟/結束hadoop全部進程
cd /home/software/hadoop-2.7.7
./sbin/start-all.sh
./sbin/stop-all.sh啟動完成后,可以通過命令 jps 來判斷是否成功啟動
jps

5. Linux系統(tǒng)下eclipse中配置Hadoop插件
用
rz
工具將下載好的 hadoop-eclipse-plugin-2.7.3 傳輸?shù)絜clipse目錄下的plugins文件夾下即可.
5.1 開始配置
cd到eclipse目錄下,輸入命令
./eclipse
打開eclipseeclipse安裝簡單說明一下吧
下載-> 解壓-> cd 進去解壓的目錄 ->
./eclipse
依次點擊:頂部菜單欄的
Window → Open Perspective → Other…→ Map/Reduce → OK
出現(xiàn)如下界面即說明操作正確

如果打開eclipse是該界面,點擊圖中指向的按鈕即可

接著點擊
Map/Reduce Locations
,在下方空白處單擊右鍵 → 點擊New Hadoop location…

自定義一個Location name,接著將Host中的內(nèi)容修改為你的master節(jié)點的IP地址,右邊的Port改為9000 (這是因為在你的core-site.xml配置文件中配置的端口號為9000)
然后點擊上圖中黑色箭頭指向的Advanced parameters,出現(xiàn)如下界面,滾動鼠標滾輪下拉找到 hadoop.tmp.dir,修改后面的路徑

找hadoop.tmp.dir路徑的方法: 打開一個新的終端,cd到(以筆者為例)cd /home/software/hadoop-2.7.7/etc/hadoop/ 路徑下面,輸入命令vim core-site.xml 打開配置文件,就可以找到你的hadoop.tmp.dir相應的路徑
完成后點擊finish即可,若出現(xiàn)類似如下界面,則說明成功了

:在這之前要先將Hadoop集群啟動,否則將會失敗
6. MapReduce實現(xiàn)數(shù)組去重
[root@localhost zjx]# cd /home/software/hadoop-2.7.7/
vim file1.txt
vim file2.txtfile1.txt
2012-3-1 a
2012-3-2 b
2012-3-3 c
2012-3-4 d
2012-3-5 a
2012-3-6 b
2012-3-7 c
2012-3-3 cfile2.txt
2012-3-3 b
2012-3-4 d
2012-3-5 a
2012-3-6 c
2012-3-7 d
2012-3-3 c
6.1 開始啦
先在HDFS創(chuàng)建DateRemove文件夾
cd /home/software/hadoop-2.7.7/
./bin/hdfs dfs -mkdir /user/hadoop/DateRemove # 如果報錯請運行這個 ./bin/hdfs dfs -mkdir -p /user/hadoop/DateRemove用ls查看文件是否創(chuàng)建成功
./bin/hdfs dfs -ls /user/hadoop

在HDFS下創(chuàng)建一個名稱為DateRemove/input的目錄
./bin/hdfs dfs -mkdir /user/hadoop/DateRemove/input
將file1.txt和file2.txt傳到hdfs的/user/hadoop/DateRemove/input文件夾中
./bin/hdfs dfs -put ./file1.txt ?/user/hadoop/DateRemove/input
./bin/hdfs dfs -put ./file2.txt ?/user/hadoop/DateRemove/input
./bin/hdfs dfs -ls ?/user/hadoop/DateRemove/input

6.2 在Linux下的eclipse中創(chuàng)建一個MapReduce工程
6.2.1 開始創(chuàng)建MapReduce
配置Hadoop路徑
依次點擊:頂部菜單欄的Window → Preferences,出現(xiàn)如下界面:

選擇左邊的 Hadoop Map/Reduce,點擊右邊Browse…,選擇Hadoop文件夾的路徑即可
創(chuàng)建工程 依次點擊:頂部菜單欄的File → New → Project,出現(xiàn)如下界面:

選擇Map/Reduce Project,點擊右下方 Next> 然后輸入項目名稱wordcount,點擊右下方 Next>,再點擊Finish,創(chuàng)建項目。此時插件會把hadoop根目錄和lib目錄下的所有jar包自動導入
按照如下目錄創(chuàng)建你自己的目錄

DedupMapper.java
package Data_De_duplication;
import java.io.IOException;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
public class DedupMapper extends Mapper<LongWritable, Text, Text, NullWritable> {
? ?private static Text field = new Text(); ?
? ?@Override ?
? ?protected void map(LongWritable key, Text value, Context context) ?
? ? ? ? ? ?throws IOException, InterruptedException { ?
? ? ? ?field = value; ?
? ? ? ?context.write(field, NullWritable.get()); ?
? ?} ?
}
DedupReducer.java
package Data_De_duplication;
import java.io.IOException;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
public class DedupReducer extends Reducer<Text, NullWritable, Text, NullWritable>{
? ?@Override ?
? ?protected void reduce(Text key, Iterable<NullWritable> values, ?
? ? ? ? ? ?Context context) throws IOException, InterruptedException { ?
? ? ? ?context.write(key, NullWritable.get()); ?
? ?} ?
}
DedupRunner.java
package Data_De_duplication;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class DedupRunner {
? ?public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
? ? ? ?Configuration conf = new Configuration();
? ? ? ?Job job = Job.getInstance(conf);
? ? ? ?job.setJarByClass(DedupRunner.class);
? ? ? ?job.setMapperClass(DedupMapper.class);
? ? ? ?job.setReducerClass(DedupReducer.class);
? ? ? ?job.setOutputKeyClass(Text.class);
? ? ? ?job.setOutputValueClass(NullWritable.class);
? ? ? ?FileInputFormat.setInputPaths(job, new Path("hdfs://localhost:9000/user/hadoop/DateRemove/input"));
? ? ? ?
? ? ? ?// 指定處理完成之后的結果所保存的位置
? ? ? ?FileOutputFormat.setOutputPath(job, new Path("hdfs://localhost:9000/user/hadoop/DateRemove/output"));
? ? ? ?job.waitForCompletion(true);
? ?}
}
點擊剛創(chuàng)建的DedupRunner.java,選擇Run As -> Run Configurations,設置運行時的相關參數(shù)如下

run起來吧


hdfs://localhost:9000/user/hadoop/DateRemove/input
hdfs://localhost:9000/user/hadoop/DateRemove/output
結果

參考鏈接(感謝各位大佬的博客)
Hadoop集群的配置:https://blog.csdn.net/qq_54542910/article/details/127366061
虛擬機安裝Hadoop https://blog.csdn.net/qq_54542910/article/details/127364777?spm=1001.2014.3001.5501
Hadoop 安裝與配置:https://blog.csdn.net/weixin_43571612/article/details/129168659
大數(shù)據(jù)之Hadoop3.x 運行環(huán)境搭建(手把手搭建集群):https://blog.csdn.net/yuan2019035055/article/details/120901871
大數(shù)據(jù)之Hadoop學習(十二)對數(shù)據(jù)文件中的數(shù)據(jù)進行去重基于(MapReduce編程):https://blog.csdn.net/qq_42585108/article/details/105982486?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-105982486-blog-40559781.235^v38^pc_relevant_anti_vip&spm=1001.2101.3001.4242.1&utm_relevant_index=3
Linux系統(tǒng)下eclipse中配置Hadoop插件:https://blog.csdn.net/hxhRxz/article/details/105030871?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-105030871-blog-49561361.235^v38^pc_relevant_anti_vip&spm=1001.2101.3001.4242.1&utm_relevant_index=3
在Linux下的eclipse中創(chuàng)建一個MapReduce工程:https://blog.csdn.net/hxhRxz/article/details/105053119?spm=1001.2014.3001.5502
Centos之上傳下載命令rz和sz-yellowcong:https://dandelioncloud.cn/article/details/1530902039366483969