一、 环境准备
以下为本教程环境,其他环境可自备。如果不会操作,请自行度娘或Google
- VMware15 PRO
- CentOS 7.6 并配置好网络(静态IP 本教程为192.9.6.25)
- jdk 1.8 并配置环境变量
- 关闭防火墙
二、配置主机名和IP映射关系
-
修改主机名
vim /etc/hostname
为自己定义的主机名例如 hadoop -
执行
hostname hadoop
配置即可生效 -
修改hosts文件配置映射关系
vim /etc/hosts
在后面追加
192.9.6.25 hadoop
三、上传并解压Hadoop
- 上传hadoop压缩包
? hadoop-3.1.2.tar.gz
-
创建一个用于存放Hadoop的文件夹
mkdir /app/hadoop
-
将hadoop解压到指定/app/hadoop
tar -zxvf hadoop-3.1.2.tar.gz -C /app/hadoop/
四、配置Hadoop
需要配置五个配置文件,进入到hadoop下的etc下的hadoop目录,查看改目录下所有的配置文件,并配置其中的五个。
cd /app/hadoop/hadoop-3.1.2/etc/hadoop/
ls
-
配置hadoop-env.sh文件,该配置文件用于指定hadoop运行时jdk的路径
vim hadoop-env.sh export JAVA_HOME=/app/java/jdk1.8.0_211/
-
配置core-site.xml文件,该配置文件时用户自定义文件,用于配置hadoop的文件系统
vim core-site.xml
2.1 配置hdfs的namenode的地址,使用的时hdfs协议
<property><name>fs.defaultFS</name><!-- hadoop是你自己配置的主机名,代表当前虚拟机 --><value>hdfs://hadoop:9000</value> </property>
2.2 配置hadoop运行时产生数据的存储目录, 不是临时目录
<property><name>hadoop.tmp.dir</name><value>/app/hadoop/tmp</value> </property>
-
配置 hdsf-site.xml文件,配置在hdfs中,一份文件存几份,默认是3份,一台机器只能存一份。
vim hdfs-site.xml
<property><name>dfs.replication</name><value>1</value>
</property>
- 配置mapred-site.xml文件,map-reduce是hadoop中的一种计算模型,运行在yarn(资源调度系统)中。
vim mapred-site.xml
<!--指定mapreduce运行在yarn上-->
<property><name>mapreduce.framework.name</name><value>yarn</value>
</property>
-
配置yarn-site.xml文件,指定yarn的老大resourcemanager的地址(该地址是resourcemanager的主机地址,即主机名或该主机的ip地址)。
vim yarn-site.xml
<property><name>yarn.resourcemanager.hostname</name><value>hadoop</value> </property> <!--指定mapreduce执行shuffle时获取数据的方式--> <property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value> </property>
五、启动脚本配置
进入到hadoop的sbin目录
cd /app/hadoop/hadoop-3.1.2/sbin
-
编辑start-dsf.sh 和stop-dsf.sh 文件,在顶部注释下面(有效代码顶部)加入:
HDFS_DATANODE_USER=root HDFS_DATANODE_SECURE_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
-
编辑start-yarn.sh 文件和stop-yarn.sh,在顶部注释下面(有效代码顶部)加入:
YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root
六、配置SSH免密登录
-
在root用户的根目录,输入
ls -al
,可以看到有个.ssh的目录。 -
输入
cd .ssh/
进入到该目录。 -
输入
ls -al
查看该目录的内容。 -
在该目录下,输入:
ssh-keygen -t rsa
一直回车即可。此时会生成一个RSA 2048文件,生成了一对公钥,一对私钥。 -
输入ls 查看生成的私钥和公钥。如果想要查看生成的一对秘钥,可以使用 more 秘钥名即可;
查看公钥: more id_rsa.pub
查看私钥: more id_rsa
-
进入到hadoop的根目录,执行以下命令:把公钥拷贝到使用ssh的当前机器上
ssh-cp-id localhost
(或者是你的主机名);ssh-copy-id localhost
(或者是你的主机名);输入一次密码(登录linux系统的密码),待拷贝完成。
七、启动Hadoop
-
初始化hdfs
该初始化不是启动hadoop的hdfs,而是对hdfs做格式化,需要到hadoop的bin目录中进行相关命令的操作。
进入到hadoop的bin目录:
cd /app/hadoop/hadoop-3.1.2/bin
输入
./hdfs namenode -format
进行初始化; -
启动Hadoop
进入到hadoop的sbin目录:
cd /app/hadoop/hadoop-3.1.2/sbin
./start-all.sh
启动成功后,使用
jps
命令可以看到6个进程(pid请忽略):23217 SecondaryNameNode 23640 NodeManager 23801 Jps 22842 NameNode 22187 ResourceManager 22991 DataNode
-
使用浏览器访问hadoop的hdfs,如果访问成功,则说明伪分布式环境已搭建成功:
192.9.6.25:9870
-
配置Hadoop环境变量,方便使用hadoop命令
vim /etc/profile
在最下方新增export HADOOP_HOME=/app/hadoop/hadoop-3.1.2 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
保存后执行
source /etc/profile
使其生效
八、测试
使用hadoop自带的wordcount进行测试。wordcount是计算文件中出现字母的次数。
我们先上传一个文件hello.txt用来测试,内容如下:
在hdfs中新建一个目录/input用来存放文件 hadoop fs -mkdir /input
查看hdfs中的文件 hadoop fs -ls /
把hello.txt 上传到hdfs 中的/input目录下 hadoop fs -put hello.txt /input
然后通过命令 hadoop fs -ls /input
就可以看到hello.txt 已经存在input目录下了
接下来使用hadoop自带的示例程序wordcount计算出hello.txt中各单词出现的次数,执行下面命令
sh hadoop jar /app/hadoop/hadoop-3.1.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.2.jar wordcount /input /output
然后可能会报错
解决方式:
执行 hadoop classpath
将输出的内容复制下来并且添加到yarn-site.xml
<property><name>yarn.application.classpath</name><value>hadoop classpath 输出的内容</value>
</property>
重启yarn
stop-yarn.sh
start-yarn.sh
再次执行刚刚的脚本
sh hadoop jar /app/hadoop/hadoop-3.1.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.2.jar wordcount /input /output
执行成功如下:
查看hdfs下的文件hadoop fs -ls /
可以看到生成了output目录和tmp目录
查看output下 hadoop fs -ls /output
可以看到有_SUCCESS和part-r-00000文件,说明已经运行成功了
直接打开part-r-00000便可以查看结果
hadoop fs -cat /output/part-r-00000