大数据应用(一)hadoop集群搭建
最近在学习大数据技术,我把实验过程写在csdn上,以帮助我以后快速的复习。
实验环境:
centos7
Xshell6
jdk-1.8.0_261
hadoop-2.7.1
已知配置:
用户:root,hadoop
普通用户获取sudo功能
我的网络配置在另一篇文章有详细的介绍就不说啦,添加链接描述
通过Xshell连接后我们修改用户的sudo功能
先进入root账号
sudo
vim /etc/sudoers
修改sudoers文件,添加内容 hadoop ALL=(ALL) NOPASSWD:ALL
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
hadoop ALL=(ALL) NOPASSWD:ALL
关闭防火墙
返回hadoop用户,关闭防火墙,并且禁止开机启动
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
查看防火墙是否关闭
sudo firewall-cmd --state
成功界面:
sudo systemctl status firewalld.service
成功界面:
修改主机名
系统永久修改主机名
sudo vim /etc/hostname
修改文件内容为
centos01
然后使用reboot重启
sudo reboot
新建资源目录
在目录/opt下创建两个文件夹softwares和modules,分别存放软件安装包和软件安装后的程序文件,并修改/opt/的所有者
提一下,chown是修改所属用户和所属组,chmod是修改(用户个人,用户组,其他人的)读、写、执行的权限
sudo mkdir /opt/softwares
sudo mkdir /opt/modules
sudo chown -R hadoop:hadoop /opt/*
安装JDK
删除系统自带的jdk
rpm -qa | grep java
#以下是输出结果
javapackages-tools-3.4.1-11.el7.noarch
tzdata-java-2019c-1.el7.noarch
java-1.8.0-openjdk-headless-1.8.0.242.b08-1.el7.x86_64
java-1.8.0-openjdk-1.8.0.242.b08-1.el7.x86_64
java-1.7.0-openjdk-headless-1.7.0.251-2.6.21.1.el7.x86_64
python-javapackages-3.4.1-11.el7.noarch
java-1.7.0-openjdk-1.7.0.251-2.6.21.1.el7.x86_64
执行一下命令(下面是补全的命令,不完整但是可以正常运行),卸载以上查询出的自带jdk
sudo rpm -e --nodeps javapackages-tools
sudo rpm -e --nodeps tzdata-java
sudo rpm -e --nodeps java-1.8.0-openjdk
sudo rpm -e --nodeps java-1.8.0-openjdk-headless
sudo rpm -e --nodeps java-1.7.0-openjdk
sudo rpm -e --nodeps java-1.7.0-openjdk-headless
sudo rpm -e --nodeps python-javapackages
使用rz把java和Hadoop安装包(因为后面安装我们就一起上传啦)上传到/opt/softwares中
上传之后把安装包解压到/opt/modules中
tar -zxvf jdk-8u261-linux-x64.tar.gz -C /opt/modules/
tar -zxvf hadoop-2.7.1.tar.gz -C /opt/modules/
现在修改配置位置profile
sudo vim /etc/profile
在profile文件头上加入下面代码
export JAVA_HOME=/opt/modules/jdk1.8.0_261
export PATH=$PATH:$JAVA_HOME/bin
执行以下命令,刷新profile文件,使修改生效:
source /etc/profile
运行java -version查看是否成功
java -version
#以下是输出
java version "1.8.0_261"
Java(TM) SE Runtime Environment (build 1.8.0_261-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.261-b12, mixed mode)
修改一下主机映射
sudo vim /etc/hosts
#添加以下内容
192.168.10.51 centos01
192.168.10.52 centos02
192.168.10.53 centos03
克隆出两个节点,命名为centos02,centos03,修改他们的主机名和ip,就不多赘述了
免密登陆
分别在三个节点上执行以下命令:
ssh localhost
cd ~/.ssh/
ssh-keygen -t rsa
ssh-copy-id centos01
ssh-copy-id centos02
ssg-copy-id centos03
配置Haddop
在centos01上修改profile环境变量,其他两个节点不需要
sudo vim /etc/profile
#以下是修改内容
export JAVA_HOME=/opt/modules/jdk1.8.0_261
export HADOOP_HOME=/opt/modules/hadoop-2.7.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
可以直接复制粘贴修改之前的内容
现在进入hadoop-2.7.1/etc/hadoop目录,修改以下配置文件:
cd /opt/modules/hadoop-2.7.1/etc/hadoop/
vim hadoop-env.sh
vim mapred-env.sh
vim yarn-env.sh
#在头部加入以下内容
export JAVA_HOME=/opt/modules/jdk1.8.0_261
下面修改core-site.xml文件
vim core-site.xml
#修改为以下内容
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://centos01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/opt/modules/hadoop-2.7.1/tmp</value>
</property>
</configuration>
fs.defaultFS: HDFS的默认访问路径,也是NameNode的访问地址
hadoop.tmp.dir: Hadoop临时数据文件的存放文件,如果不配置,默认指向/tmp目录,linux系统重启之后会被自动清空
下面修改hdfs-site.xml
vim hdfs-site.xml
#修改为以下内容
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/modules/hadoop-2.7.1/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/modules/hadoop-2.7.1/tmp/dfs/data</value>
</property>
</configuration>
dfs.replication: 文件在HDFS系统中的副本数
dfs.permissions.enabled: 检查用户权限
dfs.namenode.name.dir: NameNode节点数据在本地文件系统的存放位置
dfs.datanode.data.dir: DataNode节点数据在本地问及那系统的存放位置
下面修改slaves文件
vim slaves
#修改为以下内容
centos01
centos02
centos03
下面复制mapred-site.xml.template为mapred-site.xml,并修改内容
cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
#修改为以下内容
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
修改 vim yarn-site.xml
vim yarn-site.xml
#修改为以下内容
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>centos01:8032</value>
</property>
</configuration>
将修改好的hadoop包传给其他节点(所以上面多解压了几次,不过就不管了,不影响)
scp -r /opt/modules/hadoop-2.7.1/ hadoop@centos02:/opt/modules/
scp -r /opt/modules/hadoop-2.7.1/ hadoop@centos03:/opt/modules/
格式化namenode
hadoop namenode -format
开启hadoop集群!
start-all.sh
查看java进程
jps
三个节点情况应该是上面这种情况,不使用集群要记得使用命令关闭:
stop-all.sh
测试 HDFS
在主节点上执行以下命令,在HDFS根目录创建input,并将hadoop安装目录下的文件README.txt上传到新建input文件夹中
hdfs dfs -mkdir /input
hdfs dfs -put /opt/modules/hadoop-2.7.1/README.txt /input
测试 MapReduce
测试hadoop自带的mapreduce单词计数程序,统计/input文件夹中的所有文件的单词数目
cd /opt/modules/hadoop-2.7.1/share/hadoop/mapreduce/
hadoop jar hadoop-mapreduce-examples-2.7.1.jar wordcount /input /output
统计完成之后,用以下命令检查
hdfs dfs -cat /output/*
你将会看到所有的单词以及它们的数目,到此就说明hadoop搭建成功啦!
注意:
1、上面的scp -r命令是不能覆盖文件夹内容的,所以你重新修改hadoop的配置文件和删改文件(夹)之后要先把其他节点的hadoop文件删除了之后再用scp命令
2、使用mapreduce命令时,要严格的使用上面的代码,否则会出现路径出错问题