Hadoop集群搭建笔记

参考书籍:

Hadoop大数据开发基础(第2版)(微课版)

作者: 张军 , 张良均 (主编) 余明辉 , 王新云 , 刘名军 (副主编)

配置网络

在本次搭建过程中,我们在VMware虚拟机中使用NAT模式网络

Windows中

  1. 在控制面板\网络和 Internet\网络和共享中心\更改适配器设置中,开启VMnet8网卡
  2. 右击属性\Internet协议版本4,输入:

Ip地址: 192.168.128.2

子网掩码: 255.255.255.0

默认网关: 192.168.128.1

DNS: 8.8.8.8

VMware中

打开虚拟网络编辑器\VMnet8:

取消勾选"使用本地DHCP服务将IP地址分配给虚拟机"

设置子网192.168.128.0网段,子网掩码255.255.255.0

点击NAT设置, 设置网关192.168.128.1

CentOS7中

输入vim /etc/sysconfig/network-scripts/ifcfg-ens33

修改如下内容:

shell 复制代码
bootproto=static
onboot=yes

添加Ip地址\网关\子网掩码\DNS信息:

shell 复制代码
IPADDR=192.168.128.130
GATEWAY=192.168.128.131
NETMASK=255.255.255.0
DNS1=8.8.8.8

保存后,使用systemctl restart network重启网卡

使用ifconfig指令查看IP配置成功

输入ping www.baidu.com, 可以ping通

更改主机名

使用hostnamectl set-hostname master设置主机名为master

使用hostname查看主机名已配置成功, 重启后永久生效

配置yum源并安装软件

这里配置的是本地yum源, 即使没有网络也可以下载软件

进入/etc/yum.repo.d目录下, 对里面的所有文件使用如下命令(保留CentOS-Media.repo):

shell 复制代码
mv Centos-xxx.repoCentos-xxx.rep.bak

然后使用命令vim CentOS-Media.repo, 只修改如下内容:

shell 复制代码
baseurl=file:///media/
gpgcheck=0
enabled=1

把/dev/sr0挂载到/media,挂载前确保VMware虚拟机设置\CD/DVD\设备状态已连接勾选。否则会失败,使用如下命令:

mount /dev/sr0 /media

显示写保护说明成功

使用yum clean all清除yum缓存

使用yum安装ssh远程连接和ntp时钟同步软件

shell 复制代码
yum insatall -y openssh-server openssh-clients ntp ntpdate

安装和配置JDK\Hadoop

使用xftp把Hadoop和JDK安装包传输到CentOS中

这里使用的是jdk-8u281-linux-x64.rpmhadoop-3.1.4.tar.gz

安装和配置JDK

安装JDK

使用rpm -ivh jdk-8u281-linux-x64.rpm安装JDK

配置JDK

输入命令: vim ~/.bashrc 添加如下内容:

shell 复制代码
export JAVA HOME=/usr/java/jdk1.8.0 281-amd64

使用source ~/.bashrc使修改生效,使用java -version验证配置成功

解压并修改Hadoop配置文件

解压Hadoop

解压Hadoop并修改配置文件: tar -xf hadoop-3.1.4.tar.gz

修改Hadoop相关配置文件

cd /usr/local/hadoop-3.1.4/etc/hadoop目录(Hadoo安装目录),

修改core-site.xml、hadoop-env.shyarn-env.sh、mapred-site.xml、yarn-site.xml、workers、hdfs-site.xml7个配置文件的内容。

core-site.xml

xml 复制代码
<configuration>
    <property>
    <name>fs.defaultFS</name>
      <value>hdfs://master:8020</value>
      </property>
    <property>
      <name>hadoop.tmp.dir</name>
      <value>/var/log/hadoop/tmp</value>
    </property>
</configuration>

hadoop-env.sh

shell 复制代码
export JAVA_HOME=/usr/java/jdk1.8.0_281-amd64
#修改JAVA_HOME的值为JDK所在目录(注意版本,确保文件名正确/usr/java/...)
#(文件内高亮查找:/JAVA_HOME)

yarn-env.sh

shell 复制代码
# export JAVA_HOME=/home/y/libexec/jdk1.6.0/
export JAVA_HOME=/usr/java/jdk1.8.0_281-amd64

mapred-site.xml

xml 复制代码
<configuration>
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
<!-- jobhistory properties -->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>master:10020</value>
</property>
<property>
     <name>mapreduce.jobhistory.webapp.address</name>
     <value>master:19888</value>
</property>
<property>
  <name>yarn.app.mapreduce.am.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
  <name>mapreduce.map.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
  <name>mapreduce.reduce.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
</configuration>

yarn-site.xml

xml 复制代码
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>master</value>
  </property>    
  <property>
    <name>yarn.resourcemanager.address</name>
    <value>${yarn.resourcemanager.hostname}:8032</value>
  </property>
 <property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>${yarn.resourcemanager.hostname}:8030</value>
  </property>
  <property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>${yarn.resourcemanager.hostname}:8088</value>
  </property>
  <property>
    <name>yarn.resourcemanager.webapp.https.address</name>
    <value>${yarn.resourcemanager.hostname}:8090</value>
  </property>
<property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>${yarn.resourcemanager.hostname}:8031</value>
  </property>
  <property>
    <name>yarn.resourcemanager.admin.address</name>
    <value>${yarn.resourcemanager.hostname}:8033</value>
  </property>
  <property>
    <name>yarn.nodemanager.local-dirs</name>
    <value>/data/hadoop/yarn/local</value>
  </property>
  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>
  <property>
    <name>yarn.nodemanager.remote-app-log-dir</name>
    <value>/data/tmp/logs</value>
  </property>
<property> 
 <name>yarn.log.server.url</name> 
 <value>http://master:19888/jobhistory/logs/</value>
 <description>URL for job history server</description>
</property>
<property>
   <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
  </property>
 <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.nodemanager.resource.memory-mb</name>  
        <value>2048</value>  
 </property>  
 <property>  
        <name>yarn.scheduler.minimum-allocation-mb</name>  
        <value>512</value>  
 </property>   
 <property>  
        <name>yarn.scheduler.maximum-allocation-mb</name>  
        <value>4096</value>  
 </property> 
 <property> 
    <name>mapreduce.map.memory.mb</name> 
    <value>2048</value> 
 </property> 
 <property> 
    <name>mapreduce.reduce.memory.mb</name> 
    <value>2048</value> 
 </property> 
 <property> 
    <name>yarn.nodemanager.resource.cpu-vcores</name> 
    <value>1</value> 
 </property>
</configuration>

workers

shell 复制代码
#删除localhost,添加以下内容
slave1
slave2
slave3

hdfs-site.xml

xml 复制代码
<configuration>
<property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///data/hadoop/hdfs/name</value>
</property>
<property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///data/hadoop/hdfs/data</value>
</property>
<property>
     <name>dfs.namenode.secondary.http-address</name>
     <value>master:50090</value>
</property>
<property>
     <name>dfs.replication</name>
     <value>3</value>
</property>
</configuration>

为了防止Hadoop集群启动失败,需要修改Hadoop集群启动和关闭服务的文件。启动和关闭服务的文件在/usr/local/hadoop-3.1.4/sbin/目录下,需要修改的文件分别是start-dfs.shstop-dfs.shstart-yarn.sh和stop-yarn.shstart-dfs.sh、stop-dfs.sh

shell 复制代码
HDFS_DATANODE_USER=root 
HDFS_DATANODE_SECURE_USER=hdfs 
HDFS_NAMENODE_USER=root 
HDFS_SECONDARYNAMENODE_USER=root

start-yarn.sh和stop-yarn.sh

shell 复制代码
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn 
YARN_NODEMANAGER_USER=root

修改主机与IP地址映射

/etc/hosts

shell 复制代码
192.168.128.130 master master.centos.com
192.168.128.131 slave1 salve1.centos.com
192.168.128.132 slave2 slave2.centos.com
192.168.128.133 slave3 slave3.centos.com

克隆和配置集群

克隆master为slave1和slave2。

配置slave1、slave2网络(与master方法一致,只是IP地址最后分别改为131和132)

shell 复制代码
vim /etc/sysconfig/network-scripts/ifcfg-ens33
...省略
service network restart#重启网卡服务

修改主机名:

shell 复制代码
hostnamectl set-hostname slave1
hostnamectl set-hostname slave2

使用master查看是否能ping通slave1和slave2。

shell 复制代码
ping slave1
ping slave2

配置ssh免密登录

在master上使用如下命令:

shell 复制代码
ssh-keygen -t rsa #三次Enter键
ssh-copy-id -i /root/.ssh/id_rsa.pub master
ssh-copy-id -i /root/.ssh/id_rsa.pub slave1
ssh-copy-id -i /root/.ssh/id_rsa.pub slave2 #按提示输入yes和密码

验证SSH是否能够无密钥登录。在master主节点下分别输入:

shell 复制代码
ssh slave1
ssh slave2

无需密码就能登录

禁用防火墙

分别在master、slave1、slave2关闭和禁用防火墙。

shell 复制代码
systemctl stop firewalld 
systemctl disable firewalld
systemctl status firewalld #查看若状态为inactive(dead)说明防火墙已关闭。

配置时钟同步服务

修改master的/etc/ntp.conf文件,

  1. 注释掉以server开头的行
  2. 添加:
shell 复制代码
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
server 127.127.1.0 
fudge 127.127.1.0 stratum 10

修改slave1、slave2的/etc/ntp.conf文件

  1. 注释掉server开头的行,并添加:
  2. server master

在master启动ntp

shell 复制代码
systemctl start ntpd
systemctl enable ntpd
systemctl status ntpd#查看状态为active说明成功

在slave1和slave2上同步并启动

shell 复制代码
ntpdate master
systemctl start ntpd
systemctl enable ntpd
systemctl status ntpd#查看状态为active说明成功

格式化HDFS

分别在master\slave1\slave2上输入命令:

vim /etc/profile

添加如下内容:

shell 复制代码
export HADOOP_HOME=/usr/local/hadoop-3.1.4#这里是你的Hadoop解压后的路径
export PATH=$HADOOP_HOME/bin:$PATH:$JAVA_HOME/bin

分别在master\slave1\slave2上使用命令 cd $HADOOP_HOME进入Hadoop安装目录

输入如下命令进行格式化:

shell 复制代码
bin/hdfs namenode -format

启动Hadoop集群

在master上执行如下命令:

shell 复制代码
cd $HADOOP
sbin/start-dfs.sh
sbin/start-yarn.sh
sbin/mr-jobhistory-daemon.sh start historyserver

在master上使用jps, 显示:

NameNode、SecondaryNameNode、ResourceManager和JobHistoryServer

在slave1\slave2上使用jps, 显示:

NameNode、DataNode

说明启动成功

监控集群

为了方便在Windows上监控集群, 需要配置域名与IP映射:

修改windows中的C:\Windows\System32\drivers\etc\hosts文件(需要到修改写入权限, 自行搜索)

shell 复制代码
192.168.128.130 master master.centos.com
192.168.128.131 slave1 salve1.centos.com
192.168.128.132 slave2 slave2.centos.com
192.168.128.133 slave3 slave3.centos.com

在浏览器输入如下网址监控集群:

bash 复制代码
http://master:9870 #hdfs监控
http://master:8088 #yarn监控
http://master:19888 #jobhistory日志监控

关闭集群

在master上输入

shell 复制代码
cd $HADOOP
sbin/stop-dfs.sh
sbin/stop-yarn.sh
sbin/mr-jobhistory-daemon.sh stop historyserver

测试

以下是简单的指令测试hdfs系统能否正常使用:

shell 复制代码
hdfs dfs -ls / #查看hdfs系统根目录文件
hdfs dfs -mkdir /input #创建输入文件
hdfs dfs -put 本地文件路径 /input #上传文件到input
hdfs dfs -cat /input/文件名 #查看文件内容, 同样也可以通过网页监控HDFS查看

MapReduce编程

Eclipse安装Hadoop

  1. 首先在linux中安装Eclipse
  2. 下载Hadoop-eclipse-plugin插件的jar包, 并拷贝到eclipse安装目录的dropins文件夹下面
  3. 使用root用户启动eclipse, 在windows\preferences中设置Hadoop Map/Reduce的安装目录(Hadoop安装目录)
  4. 点击windows\showView\MapReduce Tools中,选择Map/Reduce Locations
  5. 点击右上角的紫色大象logo,创建新的Map/Reduce Locations
  6. Host输入master, 两个端口号分别输入80328020
  7. 在Project Explorer中可以成功看到hdfs系统中的内容,说明成功

编写代码并导出为Jar

这里使用Hadoop官方的WordCount代码, 编写完成后, 右击project explorer中的项目文件, 选择export导出为JAR文件, 指定一个Jar文件路径

编写测试文件

cat > 测试文件名或路径 << EOF 输入几段文字和句子, 最后输入EOF作为结束符

首先使用hdfs dfs -mkdir /input 在hdfs中创建一个输入文件

然后使用hdfs dfs -put 测试文件的路径 /input上传到hdfs的/input文件夹中

输入hdfs dfs -cat /input/文件名 可以查看到内容成功上传

上传到Hadoop执行

使用hadoop jar指令, 在Hadoop上执行WordCount

shell 复制代码
hadoop jar /root/WordCount.jar WordCount /input /output

这个命令的含义是:

scss 复制代码
hadoop jar jar文件路径 类名 输入文件夹 输出文件夹(输出文件夹不需要事先创建)

执行结果: /output中出现两个文件, _SUCCESS表示成功, part-r-00000文件中可以查看执行的结果(使用hdfs dfs -cat指令或在网页监控http://master:9870中的utilities\broswer the file system )

相关推荐
星光璀璨山河无恙5 小时前
【Hadoop】Hadoop3.1.4完全分布式集群搭建
大数据·hadoop·分布式
Hole_up1 天前
【hadoop】远程调试环境
大数据·hadoop·分布式
atwdy1 天前
【hadoop】hadoop streaming
大数据·hadoop·mr·streaming
埃菲尔铁塔_CV算法1 天前
WPF 与 C# 融合开发:从基础到高级应用(二)
大数据·hadoop·分布式
想要变瘦的小码头2 天前
hive数据仓库
数据仓库·hive·hadoop
昨天今天明天好多天3 天前
【Apache Hive】
hive·hadoop·apache
一个天蝎座 白勺 程序猿4 天前
大数据(2)Hadoop架构深度拆解:HDFS与MapReduce企业级实战与高阶调优
大数据·hadoop·架构
酷爱码4 天前
hadoop相关面试题以及答案
大数据·hadoop·分布式
孤独打铁匠Julian5 天前
【Linux】Hadoop-3.4.1的伪分布式集群的初步配置
linux·hadoop·ubuntu