PS:

1.参考博主:(感谢博主回答我的疑惑,让我配置成功,非常感谢)

2.仅个人学习记录,具体什么还不理解(如有不对望提出,一起进步)

3.设置的方法比较笨+小白,步骤繁琐

正文:

1.准备:

        (1)机器:

        三台Linux虚拟机,CentOS7系统。

        (1)网络设置:(次设置Hadoop集群没有设置静态ip)

        桥接网络模式,本次设置通过个人手机热点连接电脑,这样ip会固定

        (但换其他网络ip会变,不使用校园网,因为校园网一直变变变,换其他手机热点也会变,嗯。。。就用自己手机热点搞吧,重装了三次,每次都没变,很好!!!)

2.创建用户:(三台都要)

注意:

本人在下载中已经设置创建了hadoop用户,修改了主机名,要修改主机名,不然后面步骤会有问题,

本次设置使用的主机名:hadoop1,hadoop2,hadoop3

用户:hadoop(三台都是)

3.配置hosts:(三台都要)

vi /etc/hosts

添加内容:

x.x.x.x  虚拟机1
x.x.x.x  虚拟机2
x.x.x.x  虚拟机3

本人在此设置的是连接网络的那个ip,使用ifconfig查看连接网络的ip,然后三台的ip+主机名添加上去

虚拟机启动hadoop之前应该做什么工作 虚拟机如何启动hadoop_大数据

4.关闭防火墙:(三台都要)

systemctl stop firewalld    //本次关闭防火墙
systemctl disable firewalld.service    //永远关掉防火墙

5.配置SSH免密

[注意:本人这里是手动的哈哈,代码怎么都配不进去,直接手动修复bug]

第一台(hadoop1):(啊啊啊,这里注意,要用前面创建的hadoop用户,别用root,root和普通用户的ssh不是同一个路径,不然启动也要用root,普通用户直接是免密不了的!)

(1)创建密钥:

ssh-keygen -t rsa

(2)到~/.ssh下面复制到共用密码:

cat id_rsa.pub >> authorized_keys

(3)查看authorized_keys,方便复制粘贴

cat authorized_keys

第二台(hadoop2)和第三台(hadoop3)和上面一样的步骤,然后将三台查看的authorized_keys的合并,就是手动复制粘贴进去,最后三台的密钥都要在authorized_keys里面

(4)设置权限:(三台都要)

sudo chmod 700 /home/hadoop/.ssh
sudo chmod 600 /home/hadoop/.ssh/authorized_keys

这里根据个人设置换,这里的路径是你authorized_keys的路径,如果以管理员root可以忽略这一步,普通用户就要设置,不然也免密不了

(5)检验免密是否成功:(不要密码就ok了)

ssh 主机名

6.安装jdk:(这里步骤有点简略,具体可以看别的博主的)

(1)删除自带的jdk:(要管理员root权限)

yum -y remove python-javapackages.noarch

(2)安装解压

tar -zxvf jdk.tar.gz  -C  /home/hadoop/

(3)配置环境,环境生效:

vim ~/.bashrc

export JAVA_HOME=/home/hadoop/jdk
export CLASSPATH=$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin

source ~/.bashrc

7.安装hadoop:

(1)安装解压:

tar -zxvf hadoop.tar.gz  -C  /home/hadoop/

(2)配置环境,环境生效:

vim ~/.bashrc

export HADOOP_HOME=/home/hadoop/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

source ~/.bashrc

8.配置hadoop文件:(三台一样的配置,其中一些配置要变,比如主机名改成自己的,数据保存路径改成自己的)

文件路径都在:hadoop安装路径/etc/hadoop/

(1)hadoop-env.sh:(自己jdk路径)

export JAVA_HOME=/home/hadoop/jdk

(2)core-site.xml文件:

<configuration>
	<!-- 指定 NameNode 的地址 -->
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://hadoop1:8020</value>
	</property>
	<!-- 指定 hadoop 数据的存储目录 -->
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/home/hadoop/hadoop/tmp</value>
	</property>
	<!-- 配置 HDFS 网页登录使用的静态用户为当前操作系统用户 -->
	<property>
		<name>hadoop.http.staticuser.user</name>
		<value>hadoop</value>
	</property>
</configuration>

(3)hdfs-site.xml:

<configuration>
	<!-- NameNode web 端访问地址-->
	<property>
		<name>dfs.namenode.http-address</name>
		<value>hadoop1:9870</value>
	</property>
	<!-- 2NameNode web 端访问地址-->
	<property>
		<name>dfs.namenode.secondary.http-address</name>
		<value>hadoop3:9868</value>
	</property>
	<!-- 备份数量 -->
	<property>
		<name>dfs.replication</name>
		<value>2</value>
	</property>
	<!-- 打开webhdfs -->
	<property>
		<name>dfs.webhdfs.enabled</name>
		<value>true</value>
	</property>
</configuration>

(4)yarn-site.xml:

<configuration> 
    <!-- 指定 MR 走 shuffle --> 
    <property> 
        <name>yarn.nodemanager.aux-services</name> 
        <value>mapreduce_shuffle</value> 
    </property> 
 
    <!-- 指定 ResourceManager 的地址--> 
    <property> 
        <name>yarn.resourcemanager.hostname</name> 
        <value>hadoop2</value> 
    </property> 
 
    <!-- 环境变量的继承 --> 
    <property> 
        <name>yarn.nodemanager.env-whitelist</name> 
        
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> 
    </property> 
</configuration>

(5)mapred-site.xml:

<configuration>
	<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>
	<!-- 历史服务器 web 端地址 -->
	<property>
		<name>mapreduce.jobhistory.webapp.address</name>
		<value>hadoop1:19888</value>
	</property>
</configuration>

(6)workers:(自己主机名)

hadoop1
hadoop2
hadoop3

9.启动Hadoop集群:(ps:注意在hadoop安装路径/sbin/下启动服务)

第一次启动hdfs服务时,需要先对NameNode进行格式化。在NameNode所在的hadoop1,

hadoop namenode -format

hadoop1上启动hdfs:

start-dfs.sh

启动yarn服务:(hadoop2上启动)

start-yarn.sh

10.查看服务:

jps  #查看服务

DataNode:数据节点
NameNode:名称服务
SecondaryNameNode:备份名称服务