hadoop3.0 分布式搭建/安装

最近打算尝试在服务器上安装hadoop3.0,因为服务器上原本搭建好hadoop2.6,而且是用root用户安装。我不打算删除原来的hadoop2.6,html

因此准备新建两个用户,hadoop2.6及hadoop3.0;将位于/usr/local/hadoop/目录下的hadoop2.6移到hadoop2.6用户目录下,而且将本来在/etc/profilejava

中配置的环境变量删除,而后在hadoop2.6用户目录中的.bashrc文件设置环境变量。使得两个用户各自使用不一样的版本。node

Preface

这次将用4台服务器搭建,一台为master节点,三台为slave节点。以前的hosts设置以下
master  116.57.56.220
slave1  116.57.86.221
slave2  116.57.86.222
slave3  116.57.86.223

1、建立新用户

<pre name="code" class="plain">sudo useradd -d /home/hadoop3.0 -m hadoop3.0  //-d设置用户目录路径,-m设置登陆名
<pre name="code" class="plain">passwd hadoop3.0 //设置密码
 
 
 而后使用切换至hadoop3.0时,命令行开头只显示$:,而且一些shell语句没法使用。 
查询资料后发现此时的shell被设置为sh,故在/etc/passwd将/bin/sh改成/bin/bash后恢复正常。
hadoop3.0:x:1002:1002::/home/hadoop3.0:/bin/bash
关于sh与bash的区别
http://blog.csdn.net/eager7/article/details/14221901
http://blog.chinaunix.net/uid-24709751-id-3575988.html

接着在使用sudo时报错,缘由是新建立的用户须要在/etc/sudoers中添加sudo权限

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
hadoop3.0 ALL=(ALL)ALL

将环境变量设置到.bashrc中
export JAVA_HOME=/usr/local/java/jdk1.8.0_101  //hadoop3.0须要java8
export HADOOP_HOME=~/usr/local/hadoop/hadoop-3.0.0-alpha1
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:${HIVE_HOME}/lib
export SCALA_HOME=~/usr/local/scala/scala-2.10.5
export SPARK_HOME=~/usr/local/spark/spark-2.0.1-bin-hadoop2.7
export SQOOP_HOME=~/usr/local/sqoop/sqoop-1.4.6
export HIVE_HOME=~/usr/local/hive/hive-1.2.1
export HBASE_HOME=~/usr/local/hbase/hbase-1.0.1.1
export PATH=${SPARK_HOME}/bin:${SCALA_HOME}/bin:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${SQOOP_HOME}/bin:${HADOOP_HOME}/lib:${HIVE_HOME}/bin:${HBASE_HOME}/bin:$PATH

2、新建用户设置ssh免密码登录

ssh-keygen -t rsa  //生成密钥id-rsa、公钥id-rsa.pub
将公钥的内容复制到须要ssh免密码登录的机器的~/.ssh/authorized_keys文件中。

例如:A机器中生成密钥及公钥,而后将公钥内容复制到B机器的authorized_keys文件中,这样变实现了A免密码ssh登录B。

3、hadoop配置

hadoop3.0须要配置的文件有core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml、hadoop-env.sh、workers

1.core-site.xml配置文件
<configuration>
  <property>
    <name>fs.defaultFS</name> 
     <value>hdfs://master:9000</value>
  </property>

  <property>
      <name>hadoop.tmp.dir</name>
      <value>file:///home/hadoop3.0/usr/local/hadoop/hadoop-3.0.0-alpha1/tmp</value>
  </property>
</configuration>

2.hdfs-site.xml配置文件

<configuration>
 <property>
   <name>dfs.replication</name>
   <value>3</value>
 </property>
 <property>
   <name>dfs.namenode.name.dir</name>
   <value>file:///home/hadoop3.0/usr/local/hadoop/hadoop-3.0.0-alpha1/hdfs/name</value>
 </property>
 <property>
   <name>dfs.datanode.data.dir</name>
   <value>file:///home/hadoop3.0/usr/local/hadoop/hadoop-3.0.0-alpha1/hdfs/data</value>
 </property>
 <property>
   <name>dfs.namenode.secondary.http-address</name>
   <value>slave1:9001</value>
 </property>
</configuration>

3.workers中设置slave节点,将slave机器的名称写入
slave1
slave2
slave3

4.mapred-site配置

cp mapred-site.xml.template mapred-site.xml
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>

<property>
 <name>mapreduce.application.classpath</name>
 <value>
  /home/hadoop3.0/usr/local/hadoop/hadoop-3.0.0-alpha1/etc/hadoop,
  /home/hadoop3.0/usr/local/hadoop/hadoop-3.0.0-alpha1/share/hadoop/common/*,
  /home/hadoop3.0/usr/local/hadoop/hadoop-3.0.0-alpha1/share/hadoop/common/lib/*,
  /home/hadoop3.0/usr/local/hadoop/hadoop-3.0.0-alpha1/share/hadoop/hdfs/*,
  /home/hadoop3.0/usr/local/hadoop/hadoop-3.0.0-alpha1/share/hadoop/hdfs/lib/*,
  /home/hadoop3.0/usr/local/hadoop/hadoop-3.0.0-alpha1/share/hadoop/mapreduce/*,
  /home/hadoop3.0/usr/local/hadoop/hadoop-3.0.0-alpha1/share/hadoop/mapreduce/lib/*,
  /home/hadoop3.0/usr/local/hadoop/hadoop-3.0.0-alpha1/share/hadoop/yarn/*,
  /home/hadoop3.0/usr/local/hadoop/hadoop-3.0.0-alpha1/share/hadoop/yarn/lib/*
 </value>
</property>
</configuration>

上面的mapreduce.application.classpath一开始没有配置,致使使用mapreduce时报错
Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster

后来在此帖子找到缘由http://youling87.blog.51cto.com/5271987/1548227

5.yarn-site.xml配置
<configuration>

<!-- Site specific YARN configuration properties -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>master:8025</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>master:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>master:8040</value>
    </property>
</configuration>

6.hadoop-env.sh中配置java_home
export JAVA_HOME=/usr/local/java/jdk1.8.0_101

以上配置完成后,将hadoop整个文件夹复制到其余三台机器。

4、启动hadoop

1.格式化namenode
hdfs namenode -format
若没有设置路径$HADOOP_HOME/bin为环境变量,则需在$HADOOP_HOME路径下执行
bin/hdfs namenode -format
2.启动dfs及yarn
start-dfs.sh
start-yarn.sh
若没有设置路径$HADOOP_HOME/sbin为环境变量,则需在$HADOOP_HOME路径下执行
sbin/start-dfs.sh
sbin/start-yarn.sh

如今即可以打开页面http://master:8088及http://master:9870;看到下面两个页面时说明安装成功。







    5、mapreduce程序测试

使用自带的example进行测试

1.生成HDFS请求目录执行MapReduce任务
hdfs dfs -mkdir /user  
hdfs dfs -mkdir /user/hduser

2.将输入文件拷贝到分布式文件系统
hdfs dfs -mkdir /user/hduser/input   
hdfs dfs -put etc/hadoop/*.xml /user/hduser/input

3.运行提供的示例程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.0-alpha1.jar grep /user/hduser/input output 'dfs[a-z.]+'

4.查看输出文件:
将输出文件从分布式文件系统拷贝到本地文件系统查看:
hdfs dfs -get output output  
cat output/*