您的位置:首页 > 运维架构

Hadoop安装教程_单机及伪分布式

2015-08-10 01:11 405 查看
安装前的准备
准备的硬件与软件

安装概述

安装流程
hadoop安装前的设置
创建hadoop用户

配置网络

配置apache环境

配置java环境

配置ssh无密码登陆

hadoop的安装
放置文件

解压缩

设置J***A环境

单机及伪分布式配置
单机配置

伪分布式配置
配置文件

运行

yarn的运行
配置文件

运行

PATH环境变量

安装前的准备

准备的硬件与软件

虚拟机软件:VirtualBox

centos7镜像:CentOS-7-x86_64-DVD-1503-01.iso

java的开发环境:jdk-8u51-linux-x64

hadoop安装包:hadoop-2.7.1.tar.gz

软件ssh

软件rsync

软件httpd

安装概述

创建hadoop用户

配置网络

配置apache环境

配置java环境

配置ssh无密码登陆

安装hadoop

安装流程

hadoop安装前的设置

创建hadoop用户

[code]$ useradd hadoop
$ passwd hadoop
$ cat /etc/passwd | grep bin/bash
$ adduser hadoop sudo
$ exit


配置新的hadoop用户

查看是否配置成功

为hadoop用户增加管理员权限

退出重新登陆

配置网络

虚拟机设置为桥接,有两种方法配置网络:

1. 进入GUI界面网络设置,打开有线连接

2. 进入网络配置文件目录,修改如下内容

[code]$ cd  /etc/sysconfig/network-scripts/
$ vi  ifcfg-enp0s3


修改为

[code]HWADDR=00:0C:29:8D:24:73
TYPE=Ethernet
BOOTPROTO=static  #启用静态IP地址
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
UUID=ae0965e7-22b9-45aa-8ec9-3f0a20a85d11
ONBOOT=yes  #开启自动启用网络连接
IPADDR0=192.168.21.128  #设置IP地址
PREFIXO0=24  #设置子网掩码
GATEWAY0=192.168.21.2  #设置网关
DNS1=8.8.8.8  #设置主DNS
DNS2=8.8.4.4  #设置备DNS


其中,ip地址(一般和路由在一个区段)、网关(一般是路由的地址)、DNS服务器的设置至关重要。

然后,

[code]$ service network restart   #重启网络
$ ping www.baidu.com  #测试网络是否正常


配置apache环境

Centos7默认使用firewall作为防火墙,这里改为iptables防火墙。

这里配置apache环境的目的是可以在远端机器访问终端的Web界面。

关闭firewall

[code]$ systemctl stop firewalld.service #停止firewall
$ systemctl disable firewalld.service #禁止firewall开机启动


安装iptables防火墙

[code]$ yum install iptables-services #安装
$ vi /etc/sysconfig/iptables #编辑防火墙配置文件

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
:wq! #保存退出

$ systemctl restart iptables.service #最后重启防火墙使配置生效
$ systemctl enable iptables.service #设置防火墙开机启动


关闭selinux

[code]$ vi /etc/selinux/config

#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
:wq! #保存退出

$ setenforce 0 #使配置立即生效


安装apache

[code]$ yum install httpd #根据提示,输入Y安装即可成功安装
$ systemctl start httpd.service #启动apache      
$ systemctl stop httpd.service #停止apache       
$ systemctl restart httpd.service #重启apache        
$ systemctl enable httpd.service #设置apache开机启动


测试apache

在客户端浏览器中打开服务器IP地址,会出现TEST123的页面,说明apache安装成功

注意事项

在后面的设置中,很多情况下会因为iptables防火墙的设置导致端口无法通讯,此处可以使用

[code]$ service iptables status
$ service iptables stop


配置java环境

hadoop的安装需要配置Java环境。

检验系统原版本

[code]$ java -version


进一步查看JDK信息:

[code]$ rpm -qa | grep java


卸载OpenJDK,执行以下操作:

[code]$ rpm -e --nodeps tzdata-java-2014i-1.el7.noarch
$  rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.71-2.5.3.1
$ rpm -e --nodeps java-1.7.0-openjdk-1.7.0.71-2.5.3.1.el7_0.x86


安装JDK:

[code] rpm -ivh jdk-8u25-linux-x64.rpm


验证安装:

[code]$ java
$ javac
$ java -version


最后,配置环境变量,以备不时之需:

[code]$ vi + /etc/profile

J***A_HOME=/usr/java/jdk1.8.0_25
JRE_HOME=/usr/java/jdk1.8.0_25/jre
PATH=$PATH:$J***A_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$J***A_HOME/lib/dt.jar:$J***A_HOME/lib/tools.jar:$JRE_HOME/lib

$ source /etc/profile
$ echo $PATH
$ echo $J***A_HOME


配置ssh无密码登陆

首先,简单介绍下ssh的原理:

a要连接b,a先生成自己的公钥和私钥。然后把公钥派发给b。当a与b建立连接的时候,b会生成一个随机数并且用a的公钥对其进行加密返回a,然后a用私钥对其进行解密再返回b,如果和原来的随机数相等,则连接建立。

安装ssh,rsync

[code]$ yum install openssh-server
$ yum install rsync
$ rpm -qa | grep ssh #验证安装成功
$ rpm -qa | grep rsync #验证安装成功


配置无密码登陆

[code]$ cd ~/.ssh/   # 创建存放密匙的目录
$ ssh-keygen -t rsa     # 生成公匙
$ cat id_rsa.pub >> authorized_keys  # 加入授权
$ chmod 700 ~/.ssh # 设置相应权限,否则无法登陆
$ chmod 600 ~/.ssh/authorized_keys  
$ ssh localhost #验证


hadoop的安装

放置文件

通过WinScp程序,将下载好的hadoop文件放于/usr/local目录下,该目录一般用于存放用户的应用程序。

进入/usr/local目录。

解压缩

[code]$ tar -zxf hadoop-2.7.1.tar.gz
$ mv ./hadoop-2.7.1/ ./hadoop
$ cd hadoop
$ ./bin/hadoop


目前,hadoop安装完成。

设置J***A环境

[code]$ vim etc/hadoop/hadoop-env.sh 

# set to the root of your Java installation
export J***A_HOME=/usr/java/jdk1.8.0_51


单机及伪分布式配置

单机配置

单机模式,hadoop作为一个java进程,通常用于debug。

[code] $ mkdir input
 $ cp etc/hadoop/*.xml input
 $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar grep input output 'dfs[a-z.]+'
 $ cat output/*

 1       dfsadmin


伪分布式配置

配置文件

[code]$ vim etc/hadoop/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>

$ vim etc/hadoop/hdfs-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>


运行

格式化hdfs的文件系统

[code]$ bin/hdfs namenode -format


status 0表明格式化成功。

开启NameNode和DataNode的守护进程

[code] $ sbin/start-dfs.sh

 $ jps #确认开启
 20752 SecondaryNameNode
 20497 DataNode
 20344 NameNode
 21432 Jps


浏览NameNode对应的网页

[code]NameNode - http://localhost:50070/


使HDFS文件夹做好准备,需要先创建好用户目录

[code] $ bin/hdfs dfs -mkdir -p /user/hadoop


将输入拷贝到HDFS文件系统

[code] $ bin/hdfs dfs -mkdir input #在用户目录即hadoop目录下创建input文件夹,采用相对地址
 $ bin/hdfs dfs -put etc/hadoop/*.xml input
 $ bin/hdfs dfs -ls input #查看hdfs下面的输入文件夹
 $ bin/hdfs dfs -ls / #查看hdfs下面的根目录


运行一些实例

[code]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'


伪分布式运行 MapReduce 作业的方式跟单机模式相同,区别在于伪分布式读取的是HDFS中的文件(可以将单机步骤中创建的本地 input 文件夹删掉以及运行结果来验证这一点)。

查看结果

[code]  $ bin/hdfs dfs -get output output
  $ cat output/*  #取回本地查看结果
  $ rm -r ./output #运行时输出目录不能存在否则报错

  $ bin/hdfs dfs -cat output/*  #在hdfs上查看结果
  $ bin/hdfs dfs -rm -r /user/hadoop/output #运行时输出目录不能存在否则报错


关闭NameNode和DataNode的守护进程

[code]$ sbin/stop-dfs.sh
$ jps #确认关闭


yarn的运行

配置文件

[code]$ vim etc/hadoop/yarn-env.sh

# some Java parameters
export J***A_HOME=/opt/jdk1.8.0_51

$ vim etc/hadoop/mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

$ vim etc/hadoop/yarn-site.xml

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>


运行

首先,进行到伪分布配置,开启NameNode,DataNode,SeconaryNameNode

[code]$ sbin/start-dfs.sh


接着,开启NodeManager,ResourceManager

[code]$ sbin/start-yarn.sh
$ jps

22753 NameNode
22914 DataNode
24436 NodeManager
24312 ResourceManager
24600 Jps
23178 SecondaryNameNode


可以通过web浏览ResourceManager

[code]ResourceManager - http://localhost:8088/


运行mapreduce的程序

结束yarn

[code]$ sbin/stop-yarn.sh


PATH环境变量

在这里额外讲一下 PATH 这个环境变量(可执行
echo $PATH
查看,当中包含了多个目录)。例如我们在执行
ls
这个命令时,实际执行的是
/bin/ls
这个程序,而不是
~/ls
这个程序(假如存在)。系统是根据 PATH 这个环境变量中包含的目录位置,逐一进行查找,直至在这些目录位置下找到匹配的程序(若没有匹配的则提示该命令不存在)。


上面的教程中,我们都是先进入到
/usr/local/hadoop
目录中,再执行
sbin/hadoop
,实际上等同于运行
/usr/local/hadoop/sbin/hadoop
。我们可以将 Hadoop 命令的相关目录加入到 PATH 环境变量中,这样就可以直接通过
start-dfs.sh
开启 Hadoop,也可以直接通过 hdfs 访问 HDFS 的内容,方便平时的操作。


同样我们选择在’ ~/.bashrc ‘中进行设置(’vim ~/.bashrc’,与 J***A_HOME 的设置相似),在文件最前面加入如下单独一行:

[code]$ export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin
$ source ~/.bashrc
$ hdfs dfs -ls input
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: