Hadoop集群搭建

来源:互联网 发布:微信扫码抽奖软件 编辑:程序博客网 时间:2024/05/17 20:08

Hadoop分布式安装集群

一、安装虚拟机

如果安装完整版的需要执行下面操作。该步骤是安装mini版本和完整版的区别。mini版的可以完全不用做该操作。
这里写图片描述
按照图示选取选项
1、安装时配置网络
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
里面所有的参数按照下面的方式查找。
这里写图片描述
这里写图片描述
按照系统提示操作。
进入centos7系统。
2、使该用户具有root的临时权限,这个是做不做都可以。
这里写图片描述
大概在92行加入红色线框的内容,中间用一个Tab键隔开。
这里写图片描述
保存并退出。
3、在centos7里面修改用户名
这里写图片描述
命令:hostname:查看当前主机名
这里写图片描述
用命令:reboot重启
第二种方法:
这里写图片描述
这里写图片描述
reboot重新启动
以上两种方法不管是在root用户还是具有root临时权限的用户下,进行创建hostname还是修改network文件,hostname的执行力度会比network的强。比如:如果同时修改两个文件并且两个修改的名字不一样,会按照hostname的名字显示。
4、配置静态IP(这里不展示root用户的操作)
这是转载网络配置的的详解:
Linux网卡配置文件详解:
DEVICE=eth0 #指出设备名称
NM_CONTROLLED=yes #network mamager的参数,实时生效,不需要重启
ONBOOT=yes #设置为yes,开机自动启用网络连接
IPADDR=192.168.21.129 #IP地址
BOOTPROTO=none #设置为none禁止DHCP,设置为static启用静态IP地址,设置为dhcp开启DHCP服务
NETMASK=255.255.255.0 #子网掩码
DNS1=8.8.8.8 #第一个dns服务器
TYPE=Ethernet #网络类型为:Ethernet
GATEWAY=192.168.21.2 #设置网关
DNS2=8.8.4.4 #第二个dns服务器
IPV6INIT=no #禁止IPV6
USERCTL=no #是否允许非root用户控制该设备,设置为no,只能用root用户更改
HWADDR=00:0C:29:2C:E1:0F #网卡的Mac地址
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
NAME=”System eth0” #定义设备名称
Linux网卡配置文件详解:
DEVICE=eth0 #指出设备名称
NM_CONTROLLED=yes #network mamager的参数,实时生效,不需要重启
ONBOOT=yes #设置为yes,开机自动启用网络连接
IPADDR=192.168.21.129 #IP地址
BOOTPROTO=none #设置为none禁止DHCP,设置为static启用静态IP地址,设置为dhcp开启DHCP服务
NETMASK=255.255.255.0 #子网掩码
DNS1=8.8.8.8 #第一个dns服务器
TYPE=Ethernet #网络类型为:Ethernet
GATEWAY=192.168.21.2 #设置网关
DNS2=8.8.4.4 #第二个dns服务器
IPV6INIT=no #禁止IPV6
USERCTL=no #是否允许非root用户控制该设备,设置为no,只能用root用户更改
HWADDR=00:0C:29:2C:E1:0F #网卡的Mac地址
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
NAME=”System eth0” #定义设备名称
也可以只留下下面的部分:
这里写图片描述
修改主机名和ip的键值关系
这里写图片描述
这里写图片描述
保存并退出。
重启虚拟机reboot或者重启网络systemctl restart network
重启时有时会遇到下面的错误(这个解决方案是对于个人来说),查看本机只是将NM_CONTROLLED (#network mamager的参数,实时生效,不需要重启,同时也是控制uuid 等的地方)的值是否是yes,或者直接删除;
这里写图片描述
这里写图片描述
具体解决方法请参考博客。
http://www.myexception.cn/ai/1952747.html
http://blog.csdn.net/u201017971/article/details/45841659/
5、验证是否网络设置成功。ping连接
ping -c [连接次数] -i [每次之间的间隔]o
拼接主机和ip
这里写图片描述
ping外网是否ping通。
6、创建hadoop用户,所有关于hadoop的操作都在这里面运行。
创建用户和密码
这里写图片描述
查看所有的用户:
这里写图片描述
安装JDK1.8
查看电脑里面安装的jdk版本:
rpm -qa |grep jdk
将jdk1.8和hadoop安装包传到hadoop当前用户的home目录。
安装jdk
让hadoop用户具有root临时权限。按照上面的方法,这里就不介绍了。
这里写图片描述
解压hadoop安装包
tar -xzvf 压缩文件的相对路径
解压后安装包里的比较重要文件中的作用

下面是解压后文件目录的作用:
sbin:hadoop的启动或者停止相关服务的脚本,比如start-dfs.sh start.all.sh(已过时),stop-dfs.sh stop-all.sh(deprecated) start-yarn.sh 等
bin :对hadoop相关服务(HDFS YARN)进行的脚本操作
etc :hadoop的配置文件
share:hadoop 依赖的jar包和文档,文档可进行删除
lib:hadoop的本地仓库(对文件进行压缩解压缩)修改配置文件
4)、配置环境变量:在用户根目录下 vi .bashrc

Java Environment Varieble

export JAVA_HOME=/usr/java/jdk1.8.0_121 jdk安装目录

Hadoop Environment Varieble

export HADOOP_HOME=/home/hadoop/hadoop-2.7.3 这是hadoop的解压后的路径
export HADOOP_INSTALL=HADOOPHOMEexportHADOOPMAPREDHOME=HADOOP_HOME
export HADOOP_COMMON_HOME=HADOOPHOMEexportHADOOPHDFSHOME=HADOOP_HOME
export YARN_HOME=HADOOPHOMEexportHADOOPCOMMONLIBNATIVEDIR=HADOOP_HOME/lib/native

Path

export PATH=PATH:JAVA_HOME/bin:HADOOPHOME/bin:HADOOP_HOME/sbin
5)、加载文件:source .bashrc
6)、验证环境变量是否安装成功:echo JAVAHOMEechoHADOOP_HOME echo $PATH

二、克隆多个虚拟机每个虚拟机的名字及IP地址如下,名字和ip按照下面分配,具体的ip根据实际情况来说。

主机名 IP地址
Master 192.168.133.100
Slaver1 192.168.133.101
Slaver2 192.168.133.102
Slaver3 192.168.133.103
保证各个节点的网络畅通:配置主机名和IP地址的映射关系
虚拟机内:vi /etc/hosts 将本机的名字写到127.0.0.1的后面,将静态IP和各个节点的机子的名字一一对应各起一行
外部计算机:找到C:\Windows\System32\drivers\etc下面的hosts文件,在里面加上静态IP和各个节点的机子的名字一一对应各起一行,前面不加“#”
分别在外部计算机和各个虚拟机里面命令行窗口分别ping 主机名和ip地址看是否畅通,必须畅通,不行再分别查看ip和主机名是否正确。
并且修改根目录下的/etc/hostname 使其每个虚拟机的主机按照上面来写。
将ip和主机名都写到/etc/hosts里面
这里写图片描述
以及/etc/sysconfig/network-scripts/ifcfg-ens33里面的ip地址
这里写图片描述

三、SSH配置,使其个主节点可以无条件访问子节点

一般情况下,主节点可以无密码访问从节点,则要把主节点产生的公共密匙放到从节点里面;如果要是相互访问则密匙要分别写入各个节点。
分别在各个节点的hadoop用户下
1)、各个节点产生.ssh文件:ssh localhost ll -a 查看是否产生文件,注意:一定要在hadoop用户下
这里写图片描述
这里写图片描述
2)、主节点生成密匙文件:进入.ssh文件夹下,ssh-keygen -t rsa 会产生id_rsa(私匙) id_rsa.pul (公匙)等文件
这里写图片描述
这里写图片描述
3)、将id_rsa.pul内容复制到authorized_keys文件里面:
cat id_rsa.pub>> authorized_keys
这里写图片描述

4)、将authorized_keys的权限设置成600 :chmod 600 authorized_keys
5)、验证是否能够无需密码登陆成功:ssh localhost
这里写图片描述
6)、将主节点authorized_keys远程复制到从节点的.ssh文件夹下,方法同1) (注意:从节点一定要按照上述方法生成.ssh文件夹。) :
scp authorized_keys hadoop@从节点主机名 : ~/.ssh
注意:这里一定要保证网络的畅通,即可以用主机和ip相互ping通
7)、验证主节点是否可以无密码访问从节点:ssh 从节点主机名

扩展:

直接在你要无密码登录到别的机子上的主机上运行:
ssh-copy-id 主机名
这一种方法也OK

四、修改配置文件

可以直接在虚拟机里面改,也可以移出来改完之后再放回去
子节点和从节点的配置文件都要修改。
Master绝对路径: /home/hadoop/hadoop2.7./etc/hadoop/
修改文件hadoop-env.sh
这里面有时候找不到JAVA_HOME所以最好还是固定JAVA_HOME的路径,即jdk的文件目录
文件core-site.xml修改成:

<configuration>            <property>                            <!--这是hdfs的namenode默认的地址-->                            <name>fs.defaultFS</name>                             <!--这里主节点的主机名一定要正确,hdfs://协议,ip地址 在:端口好-->                              <value>hdfs://Master:9000</value>            </property>            <!--这是hadoop运行时产生数据的存储目录,不是临时目录-->             <property>                <name>hadoop.tmp.dir</name>                    <value>file:/home/hadoop/hadoop-2.7.3/tmp</value><!--hadoop的路径一定要正确-->               </property></configuration>

文件hdfs.xml修改成:

   <property>            <name>dfs.namenode.secondary.http-address</name>             <value>Master:50090</value><!--这里主节点的主机名一定要正确-->    </property>    <property>        <!--指定hdfs存储的副本的默认数量,本机不产生副本-->            <name>dfs.replication</name><!--这是默认从节点主机的个数——>            <value>1</value>    </property>    <property>            <name>dfs.namenode.name.dir</name>  <!--这是默认namenode的文件夹的存储目录——>            <value>file:/home/hadoop/hadoop-2.7.3/tmp/dfs/name</value><!--hadoop的路径一定要正确-->    </property>    <property>            <name>dfs.datanode.data.dir</name><!--这是datanode下的数据的存储目录-->            <value>file:/home/hadoop/hadoop-2.7.3/tmp/dfs/data</value><!--hadoop的路径一定要正确-->    </property>


文件mapred.xml修改成
这里在原文件夹下它的名字是mapred.xml.template,要把.template去掉,即mv mapred.xml.template mapred.xml

<configuration>       <property>            <!--指定mapreduce编程模型运行在yarn上-->                <name>mapreduce.framework.name</name>                <value>yarn</value>        </property>        <property>                <name>mapreduce.jobhistory.address</name><!--mapreduce的本地工作记录的地址-->                <value>Master:10020</value><!--这里主节点的主机名一定要正确-->        </property>        <property>                <name>mapreduce.jobhistory.webapp.address</name><!--mapreduce的网页工作记录的地址-->                <value>Master:19888</value><!--这里主节点的主机名一定要正确-->        </property></configuration>

文件yarn.xml设置成:

<configuration><!-- Site specific YARN configuration properties -->        <property>            <!--指定yarn的老大ResourceManager的地址-->                <name>yarn.resourcemanager.hostname</name>                <value>Master</value><!--这里主节点的主机名一定要正确-->        </property>        <property>                <!--mapreduce执行shuffle时获取数据的方式-->                <name>yarn.nodemanager.aux-services</name>                <value>mapreduce_shuffle</value><!--mapreduce里面每次要清洗-->        </property></configuration>

slaves :这里面是Slaver的主机名,即所有的从节点的主机名字

五、关闭防火墙在(至少关闭从节点的):

查看防火墙的状态:systemctl status firewalld 如果前面原点不亮就是关闭了 或者 service iptable status
查看执行状态:getenforce 是否是permission
关闭防火墙;systemctl stop firewalld 开启防火墙 systemctl start firewalld 或者service iptable stop
设置状态为自由的: sudo setenforce 0
0是指permission
1是指enforcing

六、格式化namenode(HDFS)

第一次启动前必须格式化,即删除所有节点 hdfs namenode -format
注意:
从分布式切换到伪分布式时,不要忘记修改 slaves 配置文件;
在两者之间切换时,若遇到无法正常启动的情况,可以删除所涉及节点的临时文件夹,这样虽然之前的数据会被删掉,但能保证集群正确启动。所以如果集群以前能启动,但后来启动不了,特别是 DataNode 无法启动,不妨试着删除所有节点(包括 Slave 节点)上的 /usr/local/hadoop/tmp 文件夹,再重新执行一次hdfs namenode -format,再次启动试试。

七、启动hadoop

按照顺序启动
jps查看启动的进程
start-dfs.sh
这里写图片描述
start-yarn.sh
这里写图片描述
mr-jobhistory-daemon.sh start historyserver
这里写图片描述
从节点的线程有:
这里写图片描述

八、外部网络查看日志

查看本机的端口状态:netstat -an
网址:主机名:50070
主机名:8088
这里写图片描述
这里写图片描述

九、关闭Hadoop

注意关闭的顺序。
stop-yarn.sh
stop-dfs.sh
mr-jobhistory-daemon.sh stop historyserver

十、错误排查:

在日志文件.log查看最后几行的内容:
tail -n 50 hadoop-hadoop-namenode.log 查看最后50行的内容
CentOS 6:
1) 永久性生效,重启后不会复原
开启: chkconfig iptables on
关闭: chkconfig iptables off
2) 即时生效,重启后复原
开启: service iptables start
关闭: service iptables stop
CentOS 7:
systemctl start firewalld.service#启动firewall
systemctl stop firewalld.service#停止firewall
systemctl disable firewalld.service#禁止firewall开机启动

查询TCP连接情况:
netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’
查询端口占用情况:
netstat -anp | grep portno(例如:netstat –apn | grep 80)

原创粉丝点击