Hadoop安装

1.创建hadoop用户组;

$sudo addgrouphadoop

记下这里为hadoop用户设置的密码,后面使用hadoop用户登录时需要用到。

2.创建hadoop用户;

$sudo adduser -ingroup hadoop hadoop

3.给hadoop用户添加权限,打开/etc/sudoers文件;

$sudo gedit /etc/sudoers

给hadoop用户赋予root用户同样的权限。
在 root ALL=(ALL:ALL) ALL下添加如下内容:
hadoop ALL=(ALL:ALL) ALL

4.配置环境变量

$sudo gedit /etc/profile

在文件的末尾加上如下内容,保存并关闭文件

#Java Environment
export JAVA_HOME=/usr/jdk
exportJRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
#Hadoop Environment
export HADOOP_HOME=/usr/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

使设置生效:到此部JDK的配置就都完成了

$source /etc/profile

为保证正确性,进行简单的测试

$java -version

输出:

Java version"1.8.0"
Java(TM) SE RuntimeEnvironment (build 1.8.0)
Java HotSpot(TM) ServerVM

5.修改机器名

打开/etc/hostname文件;

$sudo gedit /etc/hostname

将/etc/hostname文件中的Ubuntu改为对应机器,如主节点中,修改为”master”,重启生效。
修改/etc/hosts文件

$sudo gedit /etc/hosts

改为如下所示,并且将每台机器的IP设置为固定IP:

127.0.0.1 localhost
192.168.0.1 Master
192.168.0.2 Slave1
192.168.0.3 Slave2

6.配置SSH无密码访问

1.如果是RHEL7.0的系统过程如下:

1.ssh-keygen
2.ssh-copy-id -i id_rsa.pub 目标IP
3.ssh 目标IP(测试是否成功)

2.如果是Ubuntu系统过程如下:

$sudo apt-get install openssh-server

首先要转换成hadoop用户,执行以下命令:

$sudo su - hadoop

ssh生成密钥有rsa和dsa两种生成方式,默认情况下采用rsa方式。
创建ssh-key,,这里我们采用rsa方式;

$ ssh-keygen -t rsa -P ""

请注意,ssh-kengen 是用连字符连着的,千万不要分开。问题如下:
(注:回车后会在~/.ssh/下生成两个文件:id_rsa和id_rsa.pub这两个文件是成对出现的)
创建授权文件authorized_keys
进入~/.ssh/目录下,发现开始是没有authorized_keys文件的,可以使用以下两种方法:
(1) 将id_rsa.pub追加到authorized_keys授权文件中;

$cd ~/.ssh 
     $cat id_rsa.pub >> authorized_keys

(2) 复制id_rsa.pub 为 authorized_keys

$ cp ~/.ssh/id_rsa.pub~/.ssh/authorized_keys

登录localhost;

$ ssh localhost

显示welcome…后面还有很多字不记得了 就是成功了。
执行退出命令(exit或CTRL+D);
使Master登录一个Slave都是免密码

scp   authorized_keys slave1:/home/hadoop/.ssh/

7.同步集群中所有节点的时间

  1. 安装ntpdate工具
#sudo apt-get installntpdate
  1. 设置系统时间与网络时间同步
#sudo ntpdatecn.pool.ntp.org
  1. 将系统时间写入硬件时间
#sudohwclock –w

4.将硬件时间同步到系统时间

#sudohwclock –s

8.配置Hadoop

hadoop-env.sh

export JAVA_HOME=/usr/jdk

yarn-env.sh

export JAVA_HOME=/usr/jdk
exportHADOOP_HOME=/usr/hadoop

mapred-en.sh

export JAVA_HOME=/usr/jdk

core-site.xml

<configuration>
    <property>
        <name>fs.default.name</name>(指定NameNode主机名和请求端口号)
        <value>hdfs://localhost:9000</value>
    </property>
    <property>
        <name>hadoop.http.staticuser.user</name>(指定HDFS的默认用户名)
        <value>hdfs</value>
    </property>
    <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>(运行时临时文件存放位置)
        <value>file:/usr/hadoop/hdfs/tmp</value>
    </property>
    <property>
        <name>hadoop.proxyuser.hadoop.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.hadoop.groups</name>
        <value>*</value>
    </property>
    <property>
        <name>fs.checkpoint.period</name>
        <value>3600</value>
    </property>
    <property>
        <name>fs.checkpoint.size</name>
        <value>67108864</value>
    </property>
</configuration>

hdfs-site.xml

<configuration>
    <property>
        <name>dfs.replication</name>             
        <value>3</value>                    
    </property>
    <property>
        <name>dfs.permissions</name>(HDFS的权限问题)
        <value>false</value>
    </property>
    <property>
         <name>dfs.namenode.name.dir</name>(NameNode的数据存储目录)
         <value>file:/usr/hadoop/hdfs/namenode</value>
    </property>
    <property>
         <name>fs.checkpoint.dir</name>(SecondaryNameNode的数据存储目录)
         <value>file:/usr/hadoop/hdfs/secondarynamenode</value>
    </property>
    <property>
         <name>fs.checkpoint.edits.dir</name>
         <value>file:/usr/hadoop/hdfs/secondarynamenode </value>
    </property>
    <property>
         <name>dfs.datanode.data.dir</name>(DataNode的数据存储目录)
         <value>file:/usr/hadoop/hdfs/datanode</value>
    </property>
    <property>
         <name>dfs.namenode.http-address</name>
         <value>localhost:50070</value>
    </property>
    <property>
          <name>dfs.namenode.secondary.http-address</name>
          <value>secondarynamenode:50090</value>
    </property>
    <property>
          <name>dfs.webhdfs.enabled</name>
          <value>true</value>
    </property>
</configuration>

mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>(指定MR框架名,告诉MR
        <value>yarn</value>    它将作为YARN、local、classic的应用程序运行)
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>(MR应用程序通过内部协议
        <value>localhost:10020</value>  发送作业历史记录的主机名和端口号)
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>(管理员或用户用来
        <value>localhost:19888</value>查看已完成MR工作的主机名和端口号)
    </property>
    <property>
        <name>yarn.app.mapreduce.am.staging-dir</name>(MR作业在HDFS中创
        <value>/mapreduce</value>                  建临时数据的数据暂存区)
    </property>
</configuration>

yarn-site.xml

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>(告诉MapReduce如何进行Shuffle)
    </property>
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHadnler</value>
    </property>
    <property>
        <name>yarn.nodemanager.recovery.enabled</name>
         <value>默认为false,设置为true启用特性 <value>
    </property>
    <property>
        <name>yarn.nodemanager.recovery.dir</name>
        <value>默认为$hadoop.tmp.dir/yarn-nm-recovery,NM保存container状态的本地目录</value>
    </property>
    <property>
        <name>yarn.nodemanager.address</name>
         <value>默认${yarn.nodemanager.hostname}:0,即随机使用临时端口,官方解释是"The address of the container manager in the NM"。NodeManager不能对RPC server使用临时端口,因为NM在重启后会更换端口,会打断重启前的container与NodeManager的连接,设置后可以固定使用同一个的端口。 </value>
    </property>
    <property>
        <name>yarn.web-proxy.address</name>
        <value>yarn_proxy:YARN_PROXY_PORT</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>localhost:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>localhost:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>localhost:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>localhost:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>localhost:8080</value>
    </property>
    <property>
        <name> mapreduce.job.ubertask.enable</name>
        <value>true</value>  (小作业JVM重用机制)
    </property>
</configuration>

9.添加Slaves

打开${HADOOP_HOME}/etc/hadoop/slaves文件,添加作为slave的主机名,一行一个。
例如:

Slave1
Slave2
Slave3

10.添加Secondarynamenode

打开${HADOOP_HOME}/etc/hadoop/masters文件,
添加作为secondarynamenode的主机名,一行一个。

Secondarynamenode

11.调整Java堆大小

大多数进程的默认堆大小为1GB,因为我们将可能运行在一个和标准服务器相比只有有限资源的工作站上,所以要调整堆的大小。(不要忘记删除每一行前面的“#”)。
hadoop-env.sh

HADOOP_HEAPSIZE=500
HADOOP_NAMENODE_INIT_HEAPSIZE=”500”

mapred-env.sh

HADOOP_JOB_HISTORYSERVER_HEAPSIZE=250

yarn-env.sh

JAVA_HEAP_MAX=Xmx500m
YANR_HEAPSIZE=500

12.向各个节点复制Hadoop,JDK,Eclipse等

scp– r  hadoop/  slave1:/usr/
scp– r  jdk/ slave1:/usr/
scp– r  eclipse/  slave1:/usr/

13.关闭防火墙

1.如果是RHEL系统关闭防火墙:

systemctl disable firewalld.service

2.如果是Ubuntu系统如下:

sudoufw disable
serviceiptables stop / start
serviceiptables status

14.运行Hadoop

进Hadoop目录下,格式化HDFS文件系统,初次运行Hadoop时一定要有该操作,

$ cd /usr/hadoop/
   $ bin/hdfs namenode -format

启动sbin/start-all.sh
进入sbin目录下 $./start-all.sh
关闭:同目录下 $./stop-all.sh
检测hadoop是否启动成功

$ jps

Web查看

http://localhost:8080/ ResourceManager
http://localhost:10020/ JobHistory
http://localhost:19888/ 已完成MR
http://localhost:50070/ NameNode

15.执行测试程序

hadoop jar {安装路径}/share/hadoop/mapreduce/hadoop-mapreduce-examples-版本号.jar 参数有很多 随便选