ubuntu14.04安装分布式hadoop2.6.0过程记录

前期准备

  • 安装3台虚拟机ubuntu14.04,装机的时候分别将3台主机命名为:namenode、datanode1、datanode2
  • 设置root密码,输入sudo passwd root,接着重复输入好几次root密码即可
  • 登陆root用户,终端su root,给虚机安装vmware tools,以便后续共享文件
  • 修改三台虚机的hostname以及hosts,执行vi /etc/hostname,修改hostname分别为namenode、datanode1、datanode2。执行vi /etc/hosts,分别查看3台虚机的ip地址,一一对应写入hosts文件(3台虚机均需要执行)
  • 为保证后续使用host名访问无误,需要设置虚拟机的静态ip地址
  • 配置免密SSH登陆
  • 安装jdk
  • 安装、配置hadoop
  • hadoop启动及查看节点运行情况

VMware Fusion设置ubuntu静态ip

网上的资料几乎都是在虚拟机内修改resolv.conf或者interfaces文件,笔者修改完后均不能正常上网。重新查找资料才发现在VMware Fusion中设置才行得通,设置步骤如下:

  • 查询虚拟机的mac地址,在虚机的settings里面找到network adapter,找到advanced options,可以查看到当前虚机的mac地址
  • 在本机的/Library/Preferences/VMware Fusion/vmnet8文件夹中找到dhcpd.conf文件修改
    • 注意:命令行中的空格需要用转义字符\,所以上句其实应该是cd /Library/Preferences/VMware\ Fusion/vmnet8
  • 在配置文件中添加:
 	host (你的虚机名,需要完全一样) {
		hardware ethernet (你的虚机mac地址);
		fixed-address (你的虚机ip地址);
	}
  • 注意:虚机名最好不要有空格
  • 修改完成后重启VMware Fusion即可

配置免密SSH登陆

  • 三台虚机均需要安装ssh server,在终端执行:apt-get install openssh-server
  • 关闭防火墙,并且默认开启ssh server,在终端新建文件:vi /etc/profile.d/hadoop.sh,然后在文件内写入:
#关闭防火墙
ufw disable
#设置自动启动ssh server
/etc/init.d/ssh start
  • 用三台虚机分别产生公钥,并且都互相加入到各自的authorized_keys中。这一步用来保证三个节点可以互相免密访问:

    • 在三个节点中均执行:ssh-keygen -t dsa -P ''
    • 生成的公钥保存在~/.ssh文件夹中
  • 接下来把三个节点各自生成的公钥拷贝到共享文件夹,以便于其他节点粘贴到自己的authorized_keys文件夹

  • 在namenode中执行:scp ~/.ssh/id_dsa.pub /mnt/hgfs/share/id_dsa0.pub
    在datanode1和datanode2中分别执行该操作,注意把粘贴后的名字改为id_dsa1.pub和id_dsa2.pub即可

  • 在三个节点中均执行:

cat /mnt/hgfs/share/id_dsa0.pub >> ~/.ssh/authorized_keys
cat /mnt/hgfs/share/id_dsa1.pub >> ~/.ssh/authorized_keys
cat /mnt/hgfs/share/id_dsa2.pub >> ~/.ssh/authorized_keys

这一步的目的是把其他节点生成的公钥放入自己的authorized_keys中

  • 接下来可以测试:ssh localhost,输入一次yes后不需要密码即可登陆。也可测试ssh datanode1,同样yes过后下次可以直接登陆

出现的问题总结

  • 输入ssh localhost时出现ssh: connect to host localhost port 22: Connection refused:刚配置完需要重启才可以用ssh登陆
    再次登陆时,需要先将host加入可信节点,下次再登陆就不用yes了

安装vmware tools方法

  • 在虚拟机设置中找到vmware tools安装选项,点击后进入光盘内,打开终端,将压缩包解压到/usr/src中(tar zxvf 压缩包名 -C /usr/src
  • 如果虚拟机设置中安装vmware tools的选项不可选,关掉虚拟机再开即可。(重启有时没用,最好关机,再开启)
  • 进入/usr/src/vmware(具体的名字具体分析)文件夹内,执行./vmware-install.pl即可(该语句在光盘内有说明)

安装jdk流程

  • 将jdk压缩包解压到/usr/src文件夹中,并给jdk文件夹改名:mv jdk1.8.0_161 jdk1.8,此处改名的原因在于:原先解压的文件名比较长,配置环境变量的时候打字很麻烦,所以环境变量都用jdk1.8代替了,此处解压后的文件夹也需要改名
  • 配置环境变量,执行:vi /etc/profile
  • 添加:
#set java environment
export JAVA_HOME=/usr/src/jdk1.8
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
  • 运行source /etc/profile使更新后的profile生效

安装、配置hadoop

安装hadoop

  • 将hadoop-2.6.0.tar.gz解压到/home/hadoop文件夹下(文件夹路径可以自由选择,但注意三个主机最好相同,后期可以省掉很多麻烦)
  • 修改/etc/profile文件,增加下面的部分:
#set hadoop environment
export HADOOP_HOME=/home/hadoop/hadoop-2.6.0
export HADOOP_MAPARED_HOME=${HADOOP_HOME}
export HADOOP_COMMON_HOME=${HADOOP_HOME}
export HADOOP_HDFS_HOME=${HADOOP_HOME}
export YARN_HOME=${HADOOP_HOME}
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HDFS_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export YARN_CONF_DIR=${HADOOP_HOME}/etc/hadoop
  • 需要在PATH路径中添加HADOOP_HOME,即将文件上方的export PATH=$PATH:$JAVA_HOME/bin改为export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
  • 执行source /etc/profile使文件生效
  • tips: 在一个机器上写好,复制到共享文件夹,其他3个粘贴,或者用ssh传递都可以

配置hadoop

  • 在namenode中新建3个文件夹,其中-p表示,如果父文件夹不存在的话,也一起创建父文件夹:
mkdir /home/hadoop/tmp
mkdir -p /home/hadoop/dfs/name
mkdir -p /home/hadoop/dfs/data

这3个文件夹在hadoop的配置文件中需要使用,如果和笔者的文件夹名称不同,在后面配置文件中做相应修改即可

  • 一般情况下需要修改7个hadoop的配置文件:
    • /home/hadoop/hadoop-2.6.0/etc/hadoop/hadoop-env.sh
    • /home/hadoop/hadoop-2.6.0/etc/hadoop/yarn-env.sh
    • /home/hadoop/hadoop-2.6.0/etc/hadoop/slaves
    • /home/hadoop/hadoop-2.6.0/etc/hadoop/core-site.xml
    • /home/hadoop/hadoop-2.6.0/etc/hadoop/hdfs-site.xml
    • /home/hadoop/hadoop-2.6.0/etc/hadoop/mapred-site.xml
    • /home/hadoop/hadoop-2.6.0/etc/hadoop/yarn-site.xml
  • 修改hadoop-env.sh文件:找到JAVA_HOME修改为:JAVA_HOME=/usr/src/jdk1.8
  • 修改yarn-env.sh文件:找到JAVA_HOME修改为:JAVA_HOME=/usr/src/jdk1.8
  • 修改slaves文件:写入:
namenode
datanode1
datanode2

该文件的作用是指定datanode运行在哪些机器上,笔者设置在三台虚机上均运行datanode。如果虚机的host名与笔者不同,此处需要修改为自己的虚机host名

  • 修改core-site.xml文件,在configuration部分增加:
<configuration>
    <property>
        <name>fs.defaultFS</name>
             <value>hdfs://namenode:9000</value>
    </property>
    <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/home/hadoop/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>hadoop.proxyuser.hduser.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.hduser.groups</name>
        <value>*</value>
    </property>
</configuration>
  • 注意事项:

    • fs.defaultFS是图形可视化界面的地址,具体值为namenode:9000,如果虚机host名不是namenode,则需要改为承载namenode的虚机host名
    • hadoop.tmp.dir属性里可以看到之前新建的文件夹目录,如果目录不同,此处也需做相应修改
  • 修改hdfs-site.xml文件,在configuration部分增加:

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

  • 注意事项:

    • dfs.namenode.secondary.http-address项的值需要根据虚机host名修改
    • dfs.namenode.name.dir和dfs.namenode.data.dir正是之前新建的文件夹目录
  • 修改mapred-site.xml文件,在configuration部分增加:

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

  • 注意事项:

    • 同样mapreduce.jobhistory.address和mapreduce.jobhistory.webapp.address的值里面,根据虚机的host名自行修改
  • 修改yarn-site.xml文件,在configuration部分增加:

<configuration>
    <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.ShuffleHandler</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>namenode:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>namenode:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>namenode:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>namenode:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>namenode:8088</value>
    </property>
</configuration>

  • 注意事项:
    • 同样注意修改部分地址的host名

配置2个datanode节点

  • 按照namenode的方式新建3个文件夹,并且配置好hadoop-env.sh和yarn-env.sh文件
  • 从namenode上将剩余文件复制到datanode1和datanode2的相应文件夹内,执行:
scp slaves datanode1:/home/hadoop/hadoop-2.6.0/etc/hadoop
scp core-site.xml datanode1:/home/hadoop/hadoop-2.6.0/etc/hadoop
scp hdfs-site.xml datanode1:/home/hadoop/hadoop-2.6.0/etc/hadoop
scp mapred-site.xml datanode1:/home/hadoop/hadoop-2.6.0/etc/hadoop
scp yarn-site.xml datanode1:/home/hadoop/hadoop-2.6.0/etc/hadoop

scp slaves datanode2:/home/hadoop/hadoop-2.6.0/etc/hadoop
scp core-site.xml datanode2:/home/hadoop/hadoop-2.6.0/etc/hadoop
scp hdfs-site.xml datanode2:/home/hadoop/hadoop-2.6.0/etc/hadoop
scp mapred-site.xml datanode2:/home/hadoop/hadoop-2.6.0/etc/hadoop
scp yarn-site.xml datanode2:/home/hadoop/hadoop-2.6.0/etc/hadoop

至此hadoop配置结束,可以启动hadoop进行验证了

hadoop启动

进入home/hadoop/hadoop-2.6.0,初始化namenode,执行:./bin/hdfs namenode -format,命令行最终有successfully字样即为初始化成功
在这里插入图片描述

启动hadoop,执行:./sbin/start-all.sh

启动后可以执行:./bin/hadoop dfsadmin –report查看节点运行情况
或者登陆http://namenode:50070查看

hadoop关闭

执行:./sbin/stop-all.sh

经验教训

单纯按照某个教程走,除非所有文件、文件夹命名完全一样,不然总容易出问题,还是需要关注一下配置文件的具体内容,搞懂这里为什么这么写,就没那么多问题了……

另外,发现如果是使用自己编译的源码,那么每次在源码上有修改后,都需要初始化namenode,同时注意,初始化namenode时需要保证/home/hadoop/dfs/name、/home/hadoop/dfs/data、/home/hadoop/tmp三个文件夹为空,不然会导致2次初始化的namenodeID不同而没有分配相应空间。datanode上的这几个文件也需要清空。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值