Centos7上搭建hadoop3.0.3完全分布式 (.tar.gz)

这里搭建的是3个节点的完全分布式,即1个nameNode,2个dataNode,分别如下:

master    nameNode    192.168.0.249

node1    dataNode    192.168.0.251

node2    dataNode    192.168.0.252

1.首先创建好一个CentOS虚拟机,将它作为主节点我这里起名为master,起什么都行,不固定要求

2.VMware中打开虚拟机,输入java -version,检查是否有JDK环境,不要用系统自带的openJDK版本,要自己安装的版本

3.输入 firewall-cmd --state,若防火墙处于running状态,则关闭防火墙

systemctl stop firewalld.service       关闭防火墙

systemctl disable firewalld.service       禁用防火墙

4.输入mkdir /usr/local/hadoop   创建一个hadoop文件夹

5.将hadoop-3.0.3.tar.gz放到刚创建好的hadoop文件夹中

6.进入hadoop目录,输入tar -xvf hadoop-3.0.3.tar.gz 解压tar包

[root@master sbin]# cd /usr/local/hadoop/
[root@master hadoop]# ls
hadoop-3.0.3  hadoop-3.0.3.tar.gz 

7.输入 vi /etc/profile,配置环境变量。加入如如下内容

export HADOOP_HOME=/usr/local/hadoop/hadoop-3.0.3

export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin

eg:

8. 输入  exportfs -a ,使环境变量改动生效

9.任意目录输入hado,然后按Tab,如果自动补全为hadoop,则说明环境变量配的没问题,否则检查环境变量哪出错了

[root@master ~]# hadoop

10.创建3个之后要用到的文件夹,分别如下:

mkdir /usr/local/hadoop/tmp

mkdir -p /usr/local/hadoop/hdfs/name

mkdir /usr/local/hadoop/hdfs/data

创建结果如下:

11.进入hadoop-3.0.3解压后的 /etc/hadoop 目录,里面存放的是hadoop的配置文件,接下来要修改里面一些配置文件

12. 有两个 .sh 文件,需要指定一下java的目录,首先输入 vi hadoop-env.sh 修改配置文件

[root@master hadoop]# vi hadoop-env.sh

将原有的JAVA_HOME注释掉,根据自己的JDK安装位置,精确配置JAVA_HOME如下,保存并退出

export JAVA_HOME=/usr/local/java/jdk1.8.0_161/

13. 输入 vi yarn-env.sh 修改配置文件

[root@master hadoop]# vi yarn-env.sh

加入如下内容,指定JAVA_HOME,保存并退出

export JAVA_HOME=/usr/local/java/jdk1.8.0_161/

14. 输入 vi core-site.xml 修改配置文件

[root@master hadoop]# vi core-site.xml 

在configuration标签中,添加如下内容,保存并退出,注意这里配置的hdfs:master:9000是不能在浏览器访问的

<!--
        <property>
                <name> fs.default.name </name>
                <value>hdfs://master:9000</value>
                <description>指定HDFS的默认名称,HDFS的URI</description>
        </property>
        -->
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://master:9000</value>
                <description>HDFS的URI</description>
        </property>

        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/usr/local/hadoop/tmp</value>
                <description>节点上本地的hadoop临时文件夹</description>
        </property>

15. 输入 vi hdfs-site.xml 修改配置文件

[root@master hadoop]# vi hdfs-site.xml

在configuration标签中,添加如下内容,保存并退出

        <property>
                <name>dfs.namenode.http-address</name>
                <value>master:50070</value>
        </property>
        <!--
        <property>
                <name>dfs.datanode.http.address</name>
                <value>master:50075</value>
                <description>
                The datanode http server address and port.
                If the port is 0 then the server will start on a free port.
                </description>
        </property>
        -->
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/usr/local/hadoop/hdfs/name</value>
                <description>namenode上存储hdfs名字空间元数据 </description>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/usr/local/hadoop/hdfs/data</value>
                <description>datanode上数据块的物理存储位置</description>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
                <description>副本个数,默认是3,应小于datanode机器数量</description>
        </property>

16. 输入 vi mapred-site.xml 修改配置文件

[root@master hadoop]# vi mapred-site.xml

在configuration标签中,添加如下内容,保存并退出

        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
                <description>指定mapreduce使用yarn框架</description>
        </property>

17. vi yarn-site.xml 修改配置文件

[root@master hadoop]# vi yarn-site.xml

在configuration标签中,添加如下内容,保存并退出

        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>master</value>
                <description>指定resourcemanager所在的hostname</description>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
                <description>
                NodeManager上运行的附属服务。
                需配置成mapreduce_shuffle,才可运行MapReduce程序
                </description>
        </property>

18. 输入 vi workers 修改配置文件(老版本是slaves文件,3.0.3 用 workers 文件代替 slaves 文件)

[root@master hadoop]# pwd
/usr/local/hadoop/hadoop-3.0.3/etc/hadoop
[root@master hadoop]# vi workers 

将localhost删掉,加入如下内容,即dataNode节点的主机名

node1
node2

19. 将虚拟机关闭,再复制两份虚拟机,重命名为node1,node2,注意这里一定要关闭虚拟机,再复制

20. 将3台虚拟机都打开,后两台复制的虚拟机打开时,都选择“我已复制该虚拟机”

21. 在master机器上,输入vi /etc/hostname,将localhost改为master,保存并退出

22. 在node1机器上,输入 vi /etc/hostname,将localhost改为node1,保存并退出

23. 在node2机器上,输入 vi /etc/hostname,将localhost改为node2,保存并退出

24. 在三台机器分别输入 vi /etc/hosts 修改文件,其作用是将一些常用的网址域名与其对应的IP地址建立一个关联,当用户在访问网址时,系统会首先自动从Hosts文件中寻找对应的IP地址

三个文件中都加入如下内容,保存并退出,注意这里要根据自己实际IP和节点主机名进行更改,IP和主机名中间要有一个空格

192.168.0.249 master
192.168.0.251 node1
192.168.0.252 node2

25. 配置三台机器间的免密登录ssh (搭hadoop必须要配免密登录)

可参见https://blog.csdn.net/wudinaniya/article/details/80845845

26. 如果node节点还没有hadoop,则master机器上分别输入如下命令将hadoop复制

scp /usr/local/hadoop/* root@node1:/usr/local/hadoop

scp /usr/local/hadoop/* root@node2:/usr/local/hadoop

27. 在master机器上,任意目录输入 hdfs namenode -format 格式化namenode,第一次使用需格式化一次,之后就不用再格式化,如果改一些配置文件了,可能还需要再次格式化

hdfs namenode -format

格式化完成。

28. 在master机器上,进入hadoop的sbin目录,输入 ./start-all.sh 启动hadoop(若只配了hdfs,则可以 输入 ./start-dfs.sh 启动hdfs)

[root@master sbin]# ./start-dfs.sh 

29. 输入jps查看当前java的进程,

该命令是JDK1.5开始有的,作用是列出当前java进程的PID和Java主类名,nameNode节点除了JPS,还有3个进程,启动成功

若为了只使用hdfs而只配了hdfs,采用 ./start-dfs.sh 启动, 则

30. 在node1机器和node2机器上分别输入 jps 查看进程如下,说明配置成功

若只配置了hdfs, 采用 ./start-dfs.sh 启动。 则

31. 在浏览器访问nameNode节点的8088端口和50070端口可以查看hadoop的运行状况

32. 在master机器上,进入hadoop的sbin目录,输入 ./stop-all.sh 关闭hadoop 或 输入 ./stop-dfs.sh 关闭dfs




遇到的坑:Attempting to operate on hdfs namenode as root

写在最前注意:
1、master,slave都需要修改start-dfs.sh,stop-dfs.sh,start-yarn.sh,stop-yarn.sh四个文件
2、如果你的Hadoop是另外启用其它用户来启动,记得将root改为对应用户

HDFS格式化后启动dfs出现以下错误:

[root@master sbin]# ./start-dfs.sh
Starting namenodes on [master]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [slave1]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.

在/usr/local/hadoop/hadoop-3.0.3/sbin路径下:

将start-dfs.sh,stop-dfs.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

修改后重启 ./start-dfs.sh,成功!

猜你喜欢

转载自blog.csdn.net/wudinaniya/article/details/81218248