hadoop 分布式安装

一、环境


  • vmware
  • 三台Linux64位虚拟机
  • jdk1.8
  • hadoop2.7
  • ssh

二、步骤


1、配置hosts和hostname

hosts中添加

192.168.179.129     master
192.168.179.130     slave1
192.168.179.131     slave2

hostname中添加

master

其他两台相应的为slave1和slave2

2、给三台Linux配置ssh无密码登录,可以互相登录

安装ssh

sudo apt-get install openssh-server

生成RSA密钥对

ssh-keygen -t rsa

在/root/.ssh下找到生成的两个密钥文件id_rsa.pub 和id_rsa,前者是公钥,后者是私钥,把这个公钥添加到另外两台的~/.ssh目录下的authorized_keys文件里面,如果没有的话自己生成,同时要添加的本台~/.ssh目录下的authorized_keys文件里面,也要实现登陆自己的无密码登陆
可以使用

scp id_rsa.pub root@slave1:/home/root/Desktop 

把公钥发送到slave1的桌面路径下,再使用命令

cat /home/root/Desktop/id_rsa.pub >> ~/.ssh/authorized_keys

把公钥添加到authorized_keys文件中

其他主机的添加是一样的方法。


3、安装jdk,通过使用ssh进行传输进行其他两台的安装

  • 解压
tar xvf jdk1.8
  • 配置环境变量
#set java environment

export JAVA_HOME=/home/root/java/jdk1.8
export JRE_HOME=/home/root/java/jdk1.8/jre
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export CLASS_PATH=./:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib

其中有一部分是hadoop的环境变量,注意分辨

  • 测试jdk是否安装成功
java -version

4、安装hadoop,通过使用ssh进行传输进行其他两台的安装

  • 解压
tar xvf hadoop2.7.3
  • 配置环境变量
#set java environment and hadoop environment

export JAVA_HOME=/home/root/java/jdk1.8
export JRE_HOME=/home/root/java/jdk1.8/jre
export HADOOP_HOME=/home/root/hadoop/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export CLASS_PATH=./:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
  • 测试hadoop是否安装成功
hadoop version
  • hadoop相关文件配置

路径/hadoop/etc/hadoop/下的hadoop-env.sh和yarn-env.sh中将JAVA_HOME改为相应路径

export JAVA_HOME=/home/root/java/jdk1.8

配置core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml如下
core-site.xml

<configuration>

 <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/home/root/hadoop/hadoop/tmp</value>
    </property>
    <property>
        <name>io.file.buffer.size</name>
        <value>131702</value>
    </property>

</configuration>

hdfs-site.xml

<configuration>

<property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/home/root/hadoop/hadoop/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/home/roothadoop/hadoop/dfs/data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>master:9001</value>
    </property>
    <property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
    </property>

</configuration>

mapred-site.xml

<configuration>

  <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>master:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>master:19888</value>
    </property>

</configuration>

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.auxservices.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>master:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>master:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>master:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>master:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>master:8088</value>
    </property>
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>1024</value>
    </property>

</configuration>

将配置好的hadoop和profile复制到另外两台计算机上面,使用scp命令

scp -r hadoop root@slave1:/home/root/hadoop/

在scp复制文件夹的时候要使用-r,意思是循环复制。

5、格式化namenode,启动hadoop,检查进程是否都已启动


  • 格式化namenode
hadoop namenode -format
  • 启动hadoop

在这个版本里面bin目录下面的start-all.sh已经摒弃,最好使用sbin目录下面的

start-dfs.sh
start-yarn.sh

6、验证hadoop是否已经全部启动

查看java进程

jps

在master下可以看到

6149 ResourceManager
5768 NameNode
7148 Jps
5982 SecondaryNameNode

在slave下可以看到

4401 Jps
4169 DataNode
4301 NodeManager

表明hadoop已经启动

7、将hdfs文件复制到本地,本地文件导入hdfs

  • hdfs文件复制到本地
    建立想要存放导出文件的目录,然后使用命令来导出
 hdfs dfs -get /data/output/result/part-r-00000 output/
 或者
 hdfs dfs -copytolocal /data/output/result/part-r-00000 output/

其中copytolocal后面对应的是hdfs文件目录,本地目录

  • 本地文件复制到hdfs
hdfs dfs -put README.txt  /data/input  
或者
hdfs dfs -copyfromlocal README.txt  /data/input  

三、在安装过程中出现的问题


问题1:

在使用

hdfs dfs -put README.txt  /data/input  

的时候,出现错误

17/02/24 16:03:13 WARN hdfs.DFSClient: DataStreamer Exception
org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /data/input/README.txt._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1).  There are 0 datanode(s) running and no node(s) are excluded in this operation.

使用

hdfs dfsadmin -report

查看存储容量情况发现全部为零

Configured Capacity: 0 (0 B)
Present Capacity: 0 (0 B)
DFS Remaining: 0 (0 B)
DFS Used: 0 (0 B)
DFS Used%: NaN%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
Missing blocks (with replication factor 1): 0

在slave中查看启动log发现datanode连接不到master

在master中查看9000端口监听情况

tcp        0      0 127.0.1.1:9000          0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:52680         127.0.1.1:9000          TIME_WAIT 

这样就发现了问题出在hosts配置的问题在hosts中把

127.0.1.1 master

那行删除,在slave1和slave2中删除相应行,重启hadoop就好了


问题二:

将文件放到hdfs目录下,在运行mapreduce程序的时候,

hdfs dfs -put README.txt  /data/input  

在hadoop/share/hadoop/mapreduce下运行示例程序

hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /data/input /data/output/result

程序一直挂起,不能运行,发现是nodemanager没有运行,查看log

NodeManager from  slave1 doesn't satisfy minimum allocations, Sending SHUTDOWN signal to the NodeManager

可见是内存分配的问题,yarn-site.xml中的内存设置必须大于1G ,而这里设置的是768mb,可能是因为给虚拟机分配的内存较少,导致的,将这个更改为1G就好了

    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>1024</value>
    </property>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值