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 )

相关推荐
yumgpkpm43 分钟前
CMP (类ClouderaCDP7.3(404次编译) )华为鲲鹏Aarch64(ARM)信创环境 查询2100w行 hive 查询策略
数据库·数据仓库·hive·hadoop·flink·mapreduce·big data
K_i1341 天前
Hadoop 集群自动化运维实战
运维·hadoop·自动化
Q26433650231 天前
【有源码】基于Python与Spark的火锅店数据可视化分析系统-基于机器学习的火锅店综合竞争力评估与可视化分析-基于用户画像聚类的火锅店市场细分与可视化研究
大数据·hadoop·python·机器学习·数据分析·spark·毕业设计
顧棟2 天前
【Yarn实战】Yarn 2.9.1滚动升级到3.4.1调研与实践验证
hadoop·yarn
D明明就是我2 天前
Hive 拉链表
数据仓库·hive·hadoop
嘉禾望岗5032 天前
hive join优化和数据倾斜处理
数据仓库·hive·hadoop
yumgpkpm2 天前
华为鲲鹏 Aarch64 环境下多 Oracle 数据库汇聚操作指南 CMP(类 Cloudera CDP 7.3)
大数据·hive·hadoop·elasticsearch·zookeeper·big data·cloudera
忧郁火龙果2 天前
六、Hive的基本使用
数据仓库·hive·hadoop
忧郁火龙果2 天前
五、安装配置hive
数据仓库·hive·hadoop
chad__chang2 天前
dolphinscheduler安装过程
hive·hadoop