Hadoop平台搭建过程及问题解决
使用VM:
文件:
注:hadoop不能下载-src版本的:得编译,不能直接用,非-src的改配置文件就可以直接用。 CentOS自带的JDK不能用,得下载oracle的。
下载链接:
http://ftp.agdsn.de/pub/mirrors/centos/7.6.1810/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso
https://archive.apache.org/dist/hadoop/common/hadoop-3.0.0/hadoop-3.0.0.tar.gz
1.创建三台虚拟机 hd-master、hd-node1、hd-node2 三台虚拟机服务器中的主机名(hostname)分别更改为master、node1、node2。
命令如下:
cd /etc/ // 进入配置目录
vi hostname // 编辑hostname 配置文件
(这个直接运行不成功,权限不够。在终端输入:su。进入超级用户模式,输入sudo vi /etc/hostname进行编辑主机名)
尽量用root账号登录可以避免这些麻烦
先点击 Esc 然后输 :wq 保存
在另外两个节点上进行相同的操作
注意:登录虚拟机的时候使用root账号登录,这样可以避免权限的麻烦
2.查看三台虚拟机的IP地址(我这里是用DHCP的,没有静态设置)。我的是:
192.168.233.128 master
192.168.233.129 node1
192.168.233.130 node2
3.配置hosts:
hosts文件是域名解析文件,在hosts文件内配置了 ip地址和主机名的对应关系,配置之后,通过主机名,电脑就可以定位到相应的ip地址 。
命令:vi /etc/hosts
三台虚拟机上,都改为:(进去按i就可以编辑,编辑完按esc,输入:wq保存退出,以后编辑的步骤都是如此)
4.ssh 免密登录
ssh-keygen
回车到最后
输入以下命令将公钥复制到node1和node2节点:
ssh-copy-id root@node1
ssh-copy-id root@localhost
ssh-copy-id root@node2
输入命令ssh node1或ssh node2测试一下能不能免密登录
5.安装JDK,JDK是安装hadoop所需要的基本环境,CentOS自带的JDK不能用,得下载oracle的。
先把CentOS自带的open jdk删了:
如下所示:
rpm查询java安装包名称
[root@localhost java]# rpm -qa | grep java
java-1.7.0-openjdk-headless-1.7.0.51-2.4.5.5.el7.x86_64
tzdata-java-2014b-1.el7.noarch
python-javapackages-3.4.1-5.el7.noarch
java-1.7.0-openjdk-1.7.0.51-2.4.5.5.el7.x86_64
javapackages-tools-3.4.1-5.el7.noarch
保留.noarch的,其他的jdk就删除掉,用以下语句依次删除:
rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.51-2.4.5.5.el7.x86_64
rpm -e --nodeps java-1.7.0-openjdk-1.7.0.51-2.4.5.5.el7.x86_64
总之就是将所有rpm查询出的非.norch的jdk删掉。
然后创建一个自己的文件夹bigdata,将jdk和hadoop的安装包解压进去,
可以随便解压到哪,通过:
mv jdk1.8.0_202/ bigdata/移动到bigdata里
配置环境变量的过程放在最后和hadoop的环境变量一起配置
6.安装Hadoop:
同样的操作,将hadoop的压缩包解压到bigdata里,同上。
接下来我们要配置环境变量,环境变量是让系统变量,在环境变量配置的命令目录后,该目录的命令将可以在任何位置都可以使用。
输入:
vi /etc/profile
然后再里面添加:Java和hadoop的环境变量
export JAVA_HOME=/home/master/bigdata/jdk1.8.0_202
export PATH=$JAVA_HOME/bin:$PATH
export HADOOP_HOME=/home/master/bigdata/hadoop-3.0.0
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export HADOOP_HDFS_HOME=/home/master/bigdata/hadoop-3.0.0
export HADOOP_CONF_DIR=/home/master/bigdata/hadoop-3.0.0/etc/Hadoop
里面具体的路径按照你自己创建文件的路径来,看你把hadoop和java放哪了
保存退出后,输入:source profile 这样才能起作用。
检查是否配置成功,输入:
java -version
hadoop version 看两个的环境有没有配置成功。如:
至此,基本的安装步骤就完成了,但是还需要配置hadoop才能使用,但是可能会遇到小问题,大家慢慢度娘都能解决。
7.配置hadoop:修改对里的配置
这几个表必须配置对,要不然会出各种错误。把每个配置表里路径按自己的情况改了,照猫画虎就行。
(1) vi hadoop-env.sh
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_JOURNALNODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
export JAVA_HOME=/home/master/bigdata/jdk1.8.0_202
(2) vi core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9001</value>
</property>
<property>
<name>hadoop.temp.dir</name>
<value>/home/master/bigdata/tmp</value>
</property>
</configuration>
(3) vi hdfs-site.xml
在目录下新建tmp
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/master/bigdata/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/master/bigdata/tmp/dfs/data</value>
</property>
</configuration>
(4) vi yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</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_MAPRED_HOME</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>49152</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>49152</value>
</property>
</configuration>
(5) vi mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</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>
</configuration>
(6) vi workers
此处因为前面配置了hosts,所以此处可以直接写主机名,如果没有配置,必须输入相应主机的ip地址。配置的workers,hadoop会把配置在这里的主机当作datanode。
8.分发安装包到其它两个节点:
scp -r * node1:/home/master/
scp -r * node2:/home/master/
我这么传输的文件会很多,不太好,当时没注意,不过可以成功就行。
9.验证Hadoop是否搭建成功:
输入命令:
start-all.sh //开启hadoop
看有没有报错信息
我遇到了:hadoop启动时WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER. Using value of HADOOP_SECURE_DN_USER.错误。
解决方案:在$ vi sbin/start-dfs.sh
$ vi sbin/stop-dfs.sh添加(都要加):
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
验证方法两个:
(1) 输入jps查看角色服务:
正常在master上应该有NameNode等:
在node1和node2上应该有如:
符合上述情况基本上就是成功了。
(2) 使用Hadoop自带的wordcount程序来判断:
自己造一个texs.txt来测试,我放到了/home/下,只要把路径记住就行。
新建.txt文本可以用命令:touch。编辑用vi编辑保存就行。
运行前要输入:start-all.sh
确保已经启动了Hadoop集群
严格按如下设置:
hadoop fs -ls / //查看hdfs上的目录
hadoop fs -mkdir /input //创建input目录
hadoop fs -rm -r /output //如果有output目录,删除
hadoop fs -put /home/test.txt /input //把测试文本上传到input目录上
Hadoop jar /home/master/bigdata/hadoop-3.0.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.0.jar wordcount /input /output
//执行程序,wordcount为程序的主类名, /input 输入目录 /output 输出目录(输出目录不能存在)
这个wordcount程序可以去/hadoop-3.0.0/share/hadoop/mapreduce/ 里去找,一定要把路径写对.
hadoop fs -ls /output //完成后查看输出目录
hadoop fs -cat /output/part-r-00000 //查看输出结果
运行处如下结果就说明搭建正确了: