hadoop3.0【GA版】集群安装与hadoop2.x集群安装还是有一定区别的。通过比较发现,hadoop3.x中除了yarn中增加的可定义资源【Hadoop3.0: YARN Resource自定义资源配置说明http://www.aboutyun.com/forum.php?mod=viewthread&tid=23626】,其它配置项基本都是相同的。但是在常用配置里面,却有比较大的不同。因为很多如果不配置,在2.x中不会报错,但是在3.x中会出问题。比如:虚拟内存的检测,如果不配置,那么在2.x中一般不会出现问题,但是在3.x则成为常用配置。缺少此配置项yarn.nodemanager.vmem-check-enabled,可能会出现下面问题。
Container is running beyond virtual memory limits. Current usage: 44.5 MB of 1 GB physical memory used; 2.5 GB of 2.1 GB virtual memory
used. Killing container
所以需要加上
<property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property>
当然解决方法比较多,大家也可以调整其它参数。
这里只是举例,其它的大家可以尝试。为了照顾一些零基础的同学,下面从零开始搭建集群。
首先通过虚拟机安装centos7.不会可参考下面文章
VMware workstation安装linux(ubuntu)配置详解
http://www.aboutyun.com/forum.php?mod=viewthread&tid=6424
centos7下载:
链接: https://pan.baidu.com/s/1eTj2fb8 密码: rmjw
1.网络配置
步骤3弹出内容:
如上图,我们按照配置即可。对于手动、自动、仅本地,这里选择需要按住鼠标不动,才能选择对应的内容。其中:网关不要使用192.168.1.1,这样可能上不了网。对于虚拟机的网络可参考此篇文章:
虚拟机三种网络模式该如何上网指导
http://www.aboutyun.com/forum.php?mod=viewthread&tid=6700
2.jdk1.8\hadoop环境变量设置
安装包:链接: https://pan.baidu.com/s/1pKVVNdx密码: d3s7
配置JDK:
在~/.bashrc里面加入JAVA_HOME、JRE_HOME、HADOOP_HOME、PATH、CLASSPATH:
export JAVA_HOME="/usr/hadoop3.0-yarn/jdk1.8" export HADOOP_HOME="/usr/hadoop-3.0.0" export JRE_HOME="$JAVA_HOME/jre" export PATH="$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH" export CLASSPATH="./:$JAVA_HOME/lib:$JRE_HOME/lib"
生效:
source ~/.bashrc
分发到slave1和slave2上
scp ~/.bashrc aboutyun@slave1:~/ scp ~/.bashrc aboutyun@slave2:~/
执行生效
补充:
source命令的作用就是用来执行一个脚本
更多补充:
#####################################################
补充1:source与./a.sh 不同之处
你在一个脚本里export $KKK=111 ,如果你用./a.sh执行该脚本,执行完毕后,你运行 echo $KKK ,发现没有值,如果你用source来执行,然后再echo ,就会发现KKK=111。因为调用./a.sh来执行shell是在一个子shell里运行的,所以执行后,结构并没有反应到父shell里,但是source不同它就是在本shell中执行的,所以可以看到结果
补充2:Linux环境变量配置文件的区别:
(1) /etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。
(2) /etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取(即每次新开一个终端,都会执行bashrc)。
(3) ~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。默认情况下,设置一些环境变量,执行用户的.bashrc文件。
(4) ~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
(5) ~/.bash_logout: 当每次退出系统(退出bash shell)时,执行该文件. 另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承 /etc/profile中的变量,他们是"父子"关系。
(6) ~/.bash_profile: 是交互式、login 方式进入 bash 运行的~/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。
摘自:csdn xyqzki
#####################################################
3.配置sudo无密码执行:
1.首先切换到root:
su root
2. sudo chmod a+w /etc/sudoers
3.通过vi命令编辑
4.添加如下内容:
aboutyun ALL=(ALL) NOPASSWD: ALL
5.恢复权限
sudo chmod a-w /etc/sudoers或则
sudo chmod 440 /etc/sudoers
二者操作是一样的
补充:
1.sudo解释
sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt、reboot、su等。这样不仅减少了root用户的登录和管理时间,同样也提高了安全性。sudo不是对shell的一个代替,它是面向每个命令的。sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0440。
2.权限说明
这两个对于初学者很容易混肴,这里ch,其实是change的简写,它们的含义分别是:
chown-》change own改变所有者
chmod-》change mod(mod不知道是否为简写)改变文件权限
一、chown 命令
用途:更改文件的所有者或组。命令由单词change owner组合而成。
使用示例:
1,更改文件的所有者:
chown jim program.c
文件 program.c 的所有者更改为 jim。作为所有者,jim 可以使用 chmod 命令允许或拒绝其他用户访问 program.c。
2,更改目录的所有者:
chown -R john:build /tmp/src
将目录 /tmp/src 中所有文件的所有者和组更改为用户 john 和组 build
- R 递归式地改变指定目录及其下的所有子目录和文件的拥有者。
- v 显示chown命令所做的工作。
(eg.chown –R root:root rootfs 将rootfs文件夹及其子录的权限和组均改为root
chown –R liufan:liufan-desktop rootfs 将目录rootfs文件夹及子目录的所有者和组更改为用户liufan和组liufan-desktop )
二、chmod 命令
用途:改变文件或目录的访问权限。
该命令有两种用法:
一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。
1,文字设定法
chmod [who] [+ | - | =] [mode] 文件名
命令中各选项的含义为:
操作对象who可是下述字母中的任一个或者它们的组合:
u 表示“用户(user)”,即文件或目录的所有者。
g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。
o 表示“其他(others)用户”。
a 表示“所有(all)用户”。它是系统默认值。
操作符号可以是:
+ 添加某个权限。
- 取消某个权限。
= 赋予给定权限并取消其他所有权限(如果有的话)。
设置mode所表示的权限可用下述字母的任意组合:
r 可读。
w 可写。
x 可执行。
X 只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属性。
s 在文件执行时把进程的属主或组ID置为该文件的文件属主。方式“u+s”设置文件的用户ID位,“g+s”设置组ID位。
t 保存程序的文本到交换设备上。
u 与文件属主拥有一样的权限。
g 与和文件属主同组的用户拥有一样的权限。
o 与其他用户拥有一样的权限。
文件名:以空格分开的要改变权限的文件列表,支持通配符。
在一个命令行中可给出多个权限方式,其间用逗号隔开。例如:chmod g+r,o+r example
使同组和其他用户对文件 example 有读权限。
2,数字设定法
我们必须首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。
所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。
例如,如果想让某个文件的属主有“读/写”二种权限,需要把4(可读)+2(可写)=6(读/写)。
数字设定法的一般形式为:
chmod [mode] 文件名
3.vi编辑器
vi比较重要的命令.
插入命令:按下a键,或则i键
退出命令::q
退出命令:wq
强制退出::!q
查找命令:/+查找内容(按下/键然后输入查找内容)
更多参考
linux之vi编辑器
http://www.aboutyun.com/forum.php?mod=viewthread&tid=6450
4.NTP设置
centos7 ntp默认配置的,master使用默认同步网络服务器即可。
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
对于slave节点则同步master,对于出现的
server 0.centos.pool.ntp.org iburst server 1.centos.pool.ntp.org iburst server 2.centos.pool.ntp.org iburst server 3.centos.pool.ntp.org iburst
注释掉,然后替换下面内容
server master iburst
验证ntp:
ntpq -p
关于ntp信息,更多参考
让你真正明白Linux NTP(包括历史、参数解释、安装配置)
http://www.aboutyun.com/forum.php?mod=viewthread&tid=11395
5.防火墙
关闭防火墙
sudo systemctl stop firewalld
开机禁用防火墙
sudo systemctl disable firewalld
关闭SElinux
SELINUX=disable
6.虚拟机克隆
网卡更换mac地址,防止重复:按照下面步骤点击弹出对应对话框,最后点击生成,点击确定。
克隆后修改内容
以master为例
a.修改hostnme
sudo vi /etc/hostname
b.修改hosts
127.0.0.1 localhost.localdomainlocalhost
::1 localhost6.localdomain6localhost6
192.168.1.10 master
192.168.1.20 slave1
192.168.1.30 slave2
slave1和slave2配置
相同:hosts配置相同
不同:hostname不同,分别为slave1和slave2
修改ip地址:
操作通上面网络配置部分。
ssh配置
第一步:产生密钥
$ ssh-keygen -t dsa -P ''
第二步:导入authorized_keys
$ cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys
其它的同样的内容,最后三个节点id_dsa.pub追加到authorized_keys
然后分发到三个节点。
比如master分发到slave1:
scp ~/.ssh/authorized_keysaboutyun@slave1:~/.ssh
最后三台机器的id_dsa.pub都追加到authorized_keys,这样达到三者彼此相互免密钥登陆
同时注意权限:
~/.ssh需要是700权限
chmod 700 ~/.ssh
authorized_keys需要是644权限
chmod 644 ~/.ssh/authorized_keys
如果权限不对,可能造成ssh无密码失败。
更多ssh可参考
云技术基础:集群搭建SSH的作用及这些命令的含义
http://www.aboutyun.com/forum.php?mod=viewthread&tid=6977
7.指定slave
.$HADOOP_HOME/etc/hadoop/works
8.配置文件
/etc/hadoop/core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/hadoop3.0/tmp</value> </property> </configuration>
uri: fs.defaultFS
hadoop.tmp.dir:临时路径
创建临时路径:
sudo mkdir -p /usr/hadoop3.0/tmp
注意授权,否则会格式化失败
sudo chown -Raboutyun:aboutyun /usr/hadoop3.0/
etc/hadoop/hdfs-site.xml:
<configuration> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> </property> <property> <name>dfs.blocksize</name> <value>134217728</value> </property> </configuration>
dfs.replication:hadoop副本的数目
dfs.permissions.enabled:如果为true,则在HDFS中启用权限检查。 如果“false”,权限检查被关闭,如果缺少此配置,可能在远程开发中会连接失败。
新的默认的文件块大小,字节。你可以使用后缀k(kilo), m(mega), g(giga), t(tera), p(peta), e(exa)(比如:128k, 512m, 1g等等)或则提供完整的字节大小((比如134217728为128 MB).)
etc/hadoop/mapred-site.xml:
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.admin.user.env</name> <value>HADOOP_MAPRED_HOME=/usr/hadoop-3.0.0</value> </property> </configuration> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=/usr/hadoop-3.0.0</value> </property> </configuration>
mapreduce.framework.name:可以为local, classic 或则 yarn.
local表示本地运行,classic表示经典mapreduce框架,yarn表示新的框架。
mapreduce.admin.user.env:如果map和reduce任务访问本地库(压缩等),则必须保留原始值。
当此值为空时,设置执行环境的命令将取决于操作系统:
Linux:LD_LIBRARY_PATH=$HADOOP_COMMON_HOME/lib/native.
windows:PATH =%PATH%;%HADOOP_COMMON_HOME%\\bin.
yarn.app.mapreduce.am.env:可以设置AM【AppMaster】端的环境变量
注意:如果上面缺少配置,可能会造成mapreduce失败。
etc/hadoop/yarn-site.xml:
<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>master </value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.env-whitelist</name> <value> JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ</value> </property> </configuration>
yarn.resourcemanager.hostname :RM的主机名。
yarn.nodemanager.env-whitelist:容器可能会覆盖的环境变量,而不是使用NodeManager的默认值。
yarn.nodemanager.aux-services :NodeManager上运行的附属服务
9.安装包分发
scp -r /usr/hadoop3.0 aboutyun@slave1:/usr/
scp -r /usr/hadoop3.0 aboutyun@slave2:/usr/
10.格式化nemenode:
hdfs namenode -format
11.启动集群
start-dfs.sh
start-yarn.sh
访问页面:
12.运行wordcount:
对于wordcount需要创建文件,并上传至hdfs,它的运行跟hadoop2.x没有什么区别的。可参考
hadoop2.2使用手册2:如何运行自带wordcount
http://www.aboutyun.com/forum.php?mod=viewthread&tid=7713
做完准备工作,运行命令,并查看结果
hadoop jar /usr/hadoop-3.0.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.0.jarwordcount /data/wordcount /output/wordcount
查看结果
13.遇到问题:
产生错误:
Container[pid=31333,containerID=container_1515487818814_0001_01_000004] is runningbeyond virtual memory limits. Current usage: 93.0 MB of 1 GB physical memoryused; 2.5 GB of 2.1 GB virtual memory used. Killing container.
解决办法:
禁用虚拟机内存检测
<property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property>
参考资料:
hadoop3.0集群安装知识1
http://www.aboutyun.com/forum.php?mod=viewthread&tid=23725
Hadoop3.0集群安装知识2
http://www.aboutyun.com/forum.php?mod=viewthread&tid=23732
Hadoop3.0集群安装知识3
http://www.aboutyun.com/forum.php?mod=viewthread&tid=23745
hadoop3.x常用配置与hadoop2.x有哪些不同
http://www.aboutyun.com/forum.php?mod=viewthread&tid=23759