文章目录
- 1 VBOX安装CentOS7
- 1.1 安装VBOX软件
- 1.2 下载CentOS7镜像文件
- 1.3 初始化VBOX虚拟盘
- 1.4 CentOS7网络配置
- 1.5 CentOS7 yum源配置
- 1.6 CentOS7 一般配置
- 1.6.1关闭防火墙
- 1.6.2 修改hostname
- 1.6.3 配置DNS绑定
- 1.6.4 关闭selinux
- 2 JDK等基础安装配置
- 2.1 安装JDK前检查
- 2.2 安装tar格式JDK
- 2.3 安装rpm格式JDK
- 2.4 配置SSH互信
- 2.5 配置NTP时钟同步
- 3 Hadoop安装
- 3.1 Hadoop 1.x伪分布式
- 3.1.1 上传hadoop-1.2.1-bin.tar.gz至/opt目录
- 3.1.2 配置环境变量
- 3.1.3 修改Hadoop配置文件
- 3.1.4 启动Hadoop
- 3.1.5 使用jps命令查看结果
- 3.1.6 查看Web界面
- 3.2 Hadoop1.x完全分布式
- 3.2.1 hadoop1.x配置
- 3.2.2 复制hadoop1.2.1的安装包至其他两个机器
- 3.2.3 格式化启动
- 3.2.4 验证
- 3.3 Hadoop2.X伪分布式
- 3.4 Hadoop2.X完全分布式
- 3.4.1 服务器功能规划
- 3.4.2 BigData01安装
- 3.4.3 拷贝目录至其他机器
- 3.4.4 格式 NameNode
- 3.4.5 启动集群
- 3.5 Hadoop3.X完全分布式
- 3.6 Docker安装Hadoop
- 4 问题
- 4.1 当把配置resourcemanager到BigData02时,start-all.sh启动报错
- 4.2 执行命令后提示WARN
主要讲解在虚拟机中安装Hadoop的方法
在本示例中,使用VBOX模拟3台Centos系统,分别是1台master和2台slaver。IP分别是:
- 192.168.56.3
- 192.168.56.4
- 192.168.56.5
每台均安装下面章节安装。
1 VBOX安装CentOS7
1.1 安装VBOX软件
(略)
1.2 下载CentOS7镜像文件
从阿里镜像网站下载镜像文件
1.3 初始化VBOX虚拟盘
(略)
1.4 CentOS7网络配置
ip addr
检查网卡信息,显示有两个网卡eno0s3
和enp0s8
,如下图:
cd /etc/sysconfig/network-scripts/
修改对应ifcfg-enp0s3
和ifcfg-enp0s8
文件,如下图:
- enp0s3对应VBOX网卡1 NET方式取动态获取IP,如下图:
- enp0s8对应VBOX网卡2 仅主机(Host-only)网络,配置静态IP,与宿主机windows中VBOX网卡对应,如下图:
service network restart
重启网络后,在xshell中配置静态IP即可访问,如下图:
1.5 CentOS7 yum源配置
访问阿里镜像网站,点击centos右侧帮助按钮
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
安装一些基础工具
yum install -y lrzsz
1.6 CentOS7 一般配置
1.6.1关闭防火墙
命令 | 备注 |
---|
service iptable status | 查看防火墙状态 |
service iptables stop | 临时关闭防火墙 |
chkconfig iptables off | 永久关闭防火墙 |
命令 | 备注 |
---|
firewall-cmd --state | 查看防火墙状态(关闭后显示notrunning,开启后显示running) |
systemctl list-unit-files|grep firewalld.service 或 systemctl status firewalld.service | 从centos7开始使用systemctl来管理服务和程序,包括了service和chkconfig |
systemctl stop firewalld.service | 停止firewall |
systemctl disable firewalld.service | 禁止firewall开机启动 |
systemctl start firewalld.service | 启动一个服务 |
systemctl stop firewalld.service | 关闭一个服务 |
systemctl restart firewalld.service | 重启一个服务 |
systemctl status firewalld.service | 显示一个服务的状态 |
systemctl enable firewalld.service | 在开机时启用一个服务 |
systemctl disable firewalld.service | 在开机时禁用一个服务 |
systemctl is-enabled firewalld.service | 查看服务是否开机启动 |
systemctl list-unit-files|grep enabled | 查看已启动的服务列表 |
1.6.2 修改hostname
临时修改 hostname | |
---|
hostname bigdata01 | 这种修改方式,系统重启后就会失效 |
永久修改 hostname | |
---|
想永久修改,应该修改配置文件 | 写入以下内容: |
vi /etc/hosts | 修改 127.0.0.1这行中的 localhost.localdomain为 bigdata01 |
vi /etc/hostname | 删除文件中的所有文字,在第一行添加slave3 |
重启并验证 | #>reboot -f |
1.6.3 配置DNS绑定
将所有主机的vi /etc/hosts
都配置如下:
192.168.56.3 bigdata01
192.168.56.4 bigdata02
192.168.56.5 bigdata03
1.6.4 关闭selinux
vi /etc/sysconfig/selinux
修改为
2 JDK等基础安装配置
2.1 安装JDK前检查
检查是否已经安装了JDK
注意: Hadoop机器上的JDK, 最好是Oracle的JavaJDK, 不然会有一些问题,比如可能没有 JPS 命令。如果安装了其他版本的JDK, 卸载掉。
删除自带 java
[root@server media]
tzdata-java-2014g-1.el6.noarch
java-1.7.0-openjdk-1.7.0.65-2.5.1.2.el6_5.x86_64
java-1.6.0-openjdk-1.6.0.0-11.1.13.4.el6.x86_64
[root@server media]
[root@server media]
[root@server media]
tzdata-java-2014g-1.el6.noarch
2.2 安装tar格式JDK
上传tar.gz包只安装目录
[root@bigdata-senior01 /]
添加环境变量
export JAVA_HOME="/opt/modules/jdk1.7.0_67"
export PATH=$JAVA_HOME/bin:$PATH
2.3 安装rpm格式JDK
rpm -ivh jdk-8u261-linux-x64.rpm
添加环境变量
vi /etc/profile
export JAVA\_HOME="/usr/java/jdk1.7.0\_80"
export PATH=`$JAVA_HOME/bin:$`PATH
2.4 配置SSH互信
- 首先是安装SSH(安全外壳协议),这里推荐安装OpenSSH
- 安装expect,使用expect建立主机间的互信
yum -y install expect
[root@bigdata01 ~]
/usr/bin/expect
- 编写节点文件hadoop_hosts.txt如下:
bigdata01
bigdata02
bigdata03
password=mage
ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa &> /dev/null
rpm -q expect &> /dev/null || yum install expect -y &> /dev/null
while read ip;do
expect << EOF
set timeout 20
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub root@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$password\n" }
}
expect eof
EOF
done < /tmp/hadoop_hosts.txt
(略)
2.5 配置NTP时钟同步
bigdata01 ntpd服务器,用于与外部公共ntpd同步标准时间
bigdata02 ntpd客户端,用于与ntpd同步时间
bigdata03 ntpd客户端,用于与ntpd同步时间
rpm -q ntp
- 使用yum进行安装,并设置系统开机自动启动并启动服务
yum -y install ntp
systemctl enable ntpd
systemctl start ntpd
- 配置前先使用命令:
ntpdate -u cn.pool.ntp.org
,同步服务器
- 修改
vi /etc/ntp.conf
文件,红色字体是修改的内容
driftfile /var/lib/ntp/drift
restrict default nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict ::1
restrict 192.168.56.0 mask 255.255.255.0 nomodify notrap
server 127.127.1.0
fudge 127.127.1.0 stratum 8
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
disable monitor
systemctl restart ntpd
ntpq -p
ntpstat
lsof -i:123
- ntp客户机/etc/ntp.conf按照如下配置,并启动ntp服务
server 192.168.56.3
restrict 192.168.56.3 nomodify notrap noquery
server 127.127.1.0
fudge 127.127.1.0 stratum 10
3 Hadoop安装
3.1 Hadoop 1.x伪分布式
伪分布式模式,只需要使用一台主机,以bigdata01为例。其即作为master也作为slaver使用。
3.1.1 上传hadoop-1.2.1-bin.tar.gz至/opt目录
tar -zxvf hadoop-1.2.1-bin.tar.gz
ln -s hadoop-1.2.1 hadoop
3.1.2 配置环境变量
如下图配置/etc/profile
,并source
生效
其中export HADOOP_HOME_WARN_SUPPRESS=1
配置后是为了解决Hadoop1.2.1出现==Warning: $HADOOP_HOME is deprecated.==的问题
3.1.3 修改Hadoop配置文件
export JAVA_HOME=/usr/java/jdk1.7.0_80
</xml version="1.0"/>
</xml-stylesheet type="text/xsl" href="configuration.xsl"/>
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://bigdata01:9000</value>
<description>用于dfs命令模块中指定默认的文件系统协议</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/tmp/hadoop1xlocalm</value>
<description>临时目录,其他临时目录的父目录</description>
</property>
</configuration>
</xml version="1.0"/>
</xml-stylesheet type="text/xsl" href="configuration.xsl"/>
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/hadoop/1x/localm/hdfs/name</value>
<description>name node的元数据,以,号隔开,hdfs会把元数据冗余复制到这些目录,一般这些目录是不同的块设备,不存在的目录会被忽略掉</description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/hadoop/1x/localm/hdfs/data</value>
<description>data node的数据目录,以,号隔开,hdfs会把数据存在这些目录下,一般这些目录是不同的块设备,不存在的目录会被忽略掉</description>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
<description>文件复制的副本数,如果创建时不指定这个参数,就使用这个默认值作为复制的副本数</description>
</property>
</configuration>
</xml version="1.0"/>
</xml-stylesheet type="text/xsl" href="configuration.xsl"/>
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>bigdata01:9001</value>
<description>job tracker交互端口</description>
</property>
</configuration>
bigdata01
bigdata01
3.1.4 启动Hadoop
- 格式化工作空间
hadoop namenode –format
start-all.sh
stop-all.sh
start-mapred.sh
stop-mapred.sh
start-dfs.sh
stop-dfs.sh
3.1.5 使用jps命令查看结果
3.1.6 查看Web界面
http://192.168.56.3:50070/dfshealth.jsp
http://192.168.56.3:50030/jobtracker.jsp
3.2 Hadoop1.x完全分布式
安装部署完全分布式集群,现有3台机器,分别规划为
- bigdata01 : namenode,secondarynamenode,jobtracker
- bigdata02 : datanode,tasktracker
- bigdata03 : datanode,tasktracker
3.2.1 hadoop1.x配置
export JAVA_HOME=/usr/java/jdk1.7.0_80
</xml version="1.0"/>
</xml-stylesheet type="text/xsl" href="configuration.xsl"/>
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://bigdata01:9000</value>
<description>用于dfs命令模块中指定默认的文件系统协议</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/tmp/hadoop1xclusterm</value>
<description>临时目录,其他临时目录的父目录</description>
</property>
</configuration>
</xml version="1.0"/>
</xml-stylesheet type="text/xsl" href="configuration.xsl"/>
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/hadoop/1x/clusterm/hdfs/name</value>
<description>name node的元数据,以,号隔开,hdfs会把元数据冗余复制到这些目录,一般这些目录是不同的块设备,不存在的目录会被忽略掉</description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/hadoop/1x/clusterm/hdfs/data</value>
<description>data node的数据目录,以,号隔开,hdfs会把数据存在这些目录下,一般这些目录是不同的块设备,不存在的目录会被忽略掉</description>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
<description>文件复制的副本数,如果创建时不指定这个参数,就使用这个默认值作为复制的副本数</description>
</property>
</configuration>
</xml version="1.0"/>
</xml-stylesheet type="text/xsl" href="configuration.xsl"/>
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>bigdata01:9001</value>
<description>job tracker交互端口</description>
</property>
</configuration>
bigdata01
bigdata02
bigdata03
3.2.2 复制hadoop1.2.1的安装包至其他两个机器
- 在bigdata01上传两个安装脚本到/usr/local/bin目录下,方便后续集群间拷贝文件和执行命令。
cluster_copy_all_nodes 用来集群间同步拷贝文件:
#!/bin/bash
SELF=`hostname`
if [ -z "$NODE_LIST" ]; then
echo
echo Error: NODE_LIST environment variable must be set in .bash_profile
exit 1
fi
for i in $NODE_LIST; do
if [ ! $i = $SELF ]; then
if [ $1 = "-r" ]; then
scp -oStrictHostKeyChecking=no -r $2 $i:$3
else
scp -oStrictHostKeyChecking=no $1 $i:$2
fi
fi
done
wait
cluster_run_all_nodes 用来集群间同步运行命令:
#!/bin/bash
if [ -z "$NODE_LIST" ]; then
echo
echo Error: NODE_LIST environment variable must be set in .bash_profile
exit 1
fi
if [[ $1 = '--background' ]]; then
shift
for i in $NODE_LIST; do
ssh -oStrictHostKeyChecking=no -n $i "$@" &
done
else
for i in $NODE_LIST; do
ssh -oStrictHostKeyChecking=no $i "$@"
done
fi
wait
授予两个脚本的可执行权限:
chmod +x /usr/local/bin/cluster_*
- 压缩hadoop-1.2.1目录,并scp至bigdata02,bigdata03
tar -zcvf hadoop-1.2.1.tar.gz hadoop-1.2.1
cluster_copy_all_nodes.sh "bigdata02 bigdata03" /opt/hadoop-1.2.1.tar.gz /opt/hadoop-1.2.1.tar.gz
cluster_run_all_nodes.sh "bigdata02 bigdata03" "tar -zxvf /opt/hadoop-1.2.1.tar.gz"
cluster_run_all_nodes.sh "bigdata02 bigdata03" "cd /opt;ln -s hadoop-1.2.1 hadoop"
3.2.3 格式化启动
hadoop namenode -format
start-all.sh
3.2.4 验证
在各台机器上执行jps
3.3 Hadoop2.X伪分布式
(略)
3.4 Hadoop2.X完全分布式
3.4.1 服务器功能规划
BigData01 | BigData02 | BigData03 |
---|
NameNode | ResourceManager | |
DataNode | DataNode | DataNode |
NodeManager | NodeManager | NodeManager |
HistoryServer | | SecondaryNameNode |
3.4.2 BigData01安装
mkdir -p /opt/modules/app/
tar -zxf /root/hadoop-2.6.5.tar.gz -C /opt/modules/app/
- 配置环境变量(每台都配置)
/etc/profile
JAVA_HOME=/usr/java/jdk1.7.0_80
CLASSPATH=.:$JAVA_HOME/lib.tools.jar
export HADOOP_HOME=/opt/modules/app/hadoop-2.6.5
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$JAVA_HOME/bin
cd /opt/modules/app/hadoop-2.6.5/etc/hadoop
export JAVA_HOME="/usr/java/jdk1.7.0_80"
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://BigData01:8020</value>
<description>NameNode的地址</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/modules/app/hadoop-2.6.5/data/tmp</value>
<description>hadoop临时目录的地址,默认情况下,NameNode和DataNode的数据文件都会存在这个目录下的对应子目录下.应该保证此目录是存在的,如果不存在,先创建</description>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/name</value>
<description>NameNode的目录,该目录必须手动创建,不然启动报错</description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/data</value>
<description>DataNode的目录,该目录可以由程序自动创建</description>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>BigData03:50090</value>
<description>secondaryNameNode的http访问地址和端口号</description>
</property>
</configuration>
slaves:slaves文件是指定HDFS上有哪些DataNode节点
BigData01
BigData02
BigData03
yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
<description>附属服务AuxiliaryService是由YARN中节点管理器NM启动的通用服务</description>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>BigData02</value>
<description>resourcemanager服务器</description>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
<description>配置是否启用日志聚集功能</description>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>106800</value>
<description>配置聚集的日志在HDFS上最多保存多长时间</description>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<description>设置mapreduce任务运行在yarn</description>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>BigData01:10020</value>
<description>设置mapreduce的历史服务器</description>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>BigData01:19888</value>
<description>设置历史服务器的web页面地址和端口号</description>
</property>
</configuration>
3.4.3 拷贝目录至其他机器
mkdir -p /opt/modules/app
scp -r /opt/modules/app/hadoop-2.6.5/ BigData02:/opt/modules/app
scp -r /opt/modules/app/hadoop-2.6.5/ BigData03:/opt/modules/app
3.4.4 格式 NameNode
在NameNode机器上执行格式化:
/opt/modules/app/hadoop-2.6.5/bin/hdfs namenode -format
3.4.5 启动集群
-
启动 HDFS 在BigData01主机上执行:start-dfs.sh
-
启动YARN 在BigData01主机执行 start-yarn.sh
-
启动ResourceManager 在BigData02主机执行 yarn-daemon.sh start resourcemanager
-
启动日志服务器 在BigData03主机执行 mr-jobhistory-daemon.sh start historyserver
-
检查进程
-
直接启动,无需执行上面多个命令 start-all.sh
-
查看 HDFS Web 页面
http://192.168.137.10:50070/
-
查看 YARN Web 页面
http://192.168.137.12:8088/cluster
3.5 Hadoop3.X完全分布式
此处未做测试,可以参考文章:最新Hadoop3.2.1完全分布式集群安装教程
3.6 Docker安装Hadoop
通过Docker可以更方便的安装Hadoop集群,而无需配置如此多的机器。具体安装方法,请参见:Docker章节。
4 问题
4.1 当把配置resourcemanager到BigData02时,start-all.sh启动报错
2018-08-09 11:06:46,081 INFO org.apache.hadoop.service.AbstractService: Service ResourceManager failed in state STARTED; cause: org.apache.hadoop.yarn.exceptions.YarnRuntimeException: java.net.BindException: Problem binding to [BigData02:8031] java.net.BindException: 无法指定被请求的地址; For more details see: http://wiki.apache.org/hadoop/BindException
org.apache.hadoop.yarn.exceptions.YarnRuntimeException: java.net.BindException: Problem binding to [BigData02:8031] java.net.BindException: 无法指定被请求的地址; For more details see: http://wiki.apache.org/hadoop/BindException
at org.apache.hadoop.yarn.factories.impl.pb.RpcServerFactoryPBImpl.getServer(RpcServerFactoryPBImpl.java:139)
at org.apache.hadoop.yarn.ipc.HadoopYarnProtoRPC.getServer(HadoopYarnProtoRPC.java:65)
at org.apache.hadoop.yarn.ipc.YarnRPC.getServer(YarnRPC.java:54)
at org.apache.hadoop.yarn.server.resourcemanager.ResourceTrackerService.serviceStart(ResourceTrackerService.java:162)
at org.apache.hadoop.service.AbstractService.start(AbstractService.java:193)
at org.apache.hadoop.service.CompositeService.serviceStart(CompositeService.java:120)
yarn-site.xml 按照以下配置也不行
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
<description>附属服务AuxiliaryService是由YARN中节点管理器NM启动的通用服务</description>
</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>192.168.137.12:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>192.168.137.12:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>192.168.137.12:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>192.168.137.12:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>192.168.137.12:8088</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
<description>配置是否启用日志聚集功能</description>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>106800</value>
<description>配置聚集的日志在HDFS上最多保存多长时间</description>
</property>
</configuration>
原因暂未找到
4.2 执行命令后提示WARN
[root@bigdata01 ~]
18/09/13 10:45:34 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 1 items
drwxr-xr-x - root supergroup 0 2018-09-13 10:36 /input
[root@bigdata01 ~]
问题处理参见:
util.NativeCodeLoader: Unable to load native-hadoop library for your platform
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)