目录
1. JAVA安装 & 配置
通过apt安装openjdk-8
sudo apt-get install openjdk-8-jdk
然后借鉴了该大佬的方法配置JAVA_HOME完全分布式Hadoop-3.3.0搭建 - 教程
node1@node1-VirtualBox:~$ which java
/usr/bin/java
node1@node1-VirtualBox:~$ ls -l /usr/bin/java
lrwxrwxrwx 1 root root 22 4月 21 21:16 /usr/bin/java -> /etc/alternatives/java
node1@node1-VirtualBox:~$ ls -l /etc/alternatives/java
lrwxrwxrwx 1 root root 46 4月 21 21:16 /etc/alternatives/java -> /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
记录最后得到的地址,并将文件夹路径加入到~/.bashrc中
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
然后从清华源下载Hadoop相应版本(此处链接指向3.3.2)解压即可,可尝试运行/bin/hadoop文件测试,无报错则安装成功。
2. 开始搭建分布式环境
这部分内容参考了很多
Hadoop安装搭建伪分布式教程(全面)吐血整理http://dljz.nicethemes.cn/news/show-337573.html
和完全分布式Hadoop-3.3.0搭建 - 教程https://www.keanes.cn/index.php/archives/426/
首先要关闭防火墙,对于Ubuntu系统,一般可以使用以下的命令:
# 查看防火墙状态 check the status of firewall
sudo ufw status
# 关闭防火墙 Disable the firewall
sudo ufw disable
# 开启防火墙 Enable the firewall
sudo ufw enable
然后重启网卡(如果防火墙本就没开启可跳过)
# 查看网卡信息,我这里得到的网卡名称为enp0s3
ifconfig
# 重启网卡
sudo ifconfig enp0s3 down
sudo ifconfig enp0s3 up
随后修改主机名,我这里使用的是虚拟机,直接将基础虚拟机复制两份,并将虚拟机主机名修改为main,node01,node02,修改方法
# 获取当前主机名
hostname
# 打开文件,文件内容仅有主机名,修改即可
sudo gedit /etc/hostname
# 打开文件,向文件内容中添加127.0.0.1 node01
sudo gedit /etc/hosts
然后分别修改位于hadoop/etc/hadoop文件夹下的core-site.xml, hdfs-site.xml, yarn-site.xml和mapred-site.xml
<!--core-site.xml-->
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/media/node1/More/username/hadoop-3.3.2/tmp</value>
<description>Abase for other temporary directories</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://main:9000</value>
<description>host, port of the file system</description>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
<description>size of buffer zone</description>
</property>
</configuration>
<!--hdfs-site.xml-->
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>${hadoop.tmp.dir}/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>${hadoop.tmp.dir}/dfs/data</value>
</property>
<property>
<name>dfs.datanode.handler.count</name>
<value>10</value>
</property>
</configuration>
<!--yarn-site.xml-->
<configuration>
<property>
<name>yarn.acl.enable</name>
<value>true</value>
</property>
<property>
<name>yarn.admin.acl</name>
<value>Admin ACL</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
<!--mapred-site.xml-->
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
然后复制到另外n台虚拟机上,这里因为我只修改了etc/hadoop的内容,所以只复制了该文件夹的内容
scp -r hadoop node01:/media/node1/More/username/hadoop-3.3.2/etc/
然后执行
./bin/hdfs namenode -format
格式化文件系统,然后执行
./sbin/start-all.sh
这一步即使设置了JAVA_HOME变量也有可能会报错,这时候需要修改/etc/hadoop/hadoop.env.sh向里面再加入一次JAVA_HOME的环境变量值,就可以运行了。除此之外,这一步报错可能也会导致在调用start-all.sh的时候报错,这个时候就需要寻找之前开启了的hadoop进程关闭它们再重新启动hadoop,可能会用到的代码如下所示:
# List all the threads
ps -aux
# List all the threads which belong to hadoop
ps -aux | grep hadoop
# Kill these threads
sudo kill [id of thread]
启动完成没有报错之后在浏览器中打开localhost:9870打开hadoop页面,显示正常即为成功。
封面图来自Apache Hadoop