环境选择
Hadoop官方虽然支持Windows系统,但是需要自行编译或者下载别人编译好的util,而且像Hbase这样的组件不支持在windows平台下伪分布式安装,所以这里选择的是Ubuntu环境。
- Ubuntu 18.04
- JDK:1.8.0._231
- Hadoop:3.2.1
创建用户
为了方便区分用户功能以及便于管理,一般会创建一个新的用户专门用来管理Hadoop生态。
这里以创建hadoop用户为例
首先创建用户,useradd直接创建的是三无账户,所以要加-m -s等参数创建用户,来创建对应的用户文件夹以及让用户能够执行一些命令
sudo useradd -m hadoop -s /bin/bash
设置用户的密码
sudo passwd hadoop
为新添加的hadoop用户添加管理员权限
sudo adduser hadoop sudo
完毕之后切换用户胡,或者可以重启选择hadoop进行登录
sudo su hadoop
安装Java
Hadoop是用Java进行开发的,所以首先要安装JDK才能正常运行
首先去Oracle官网下载linux平台下载,tar.gz是安装最方便的,网上资料也最全
解压、目录创建
将下载好的压缩包移动到虚拟机里去(不同的虚拟机平台有不同的方式),解压文件
tar -zxvf jdk-8u231-linux-x64.tar.gz
本人习惯是将文件安装在 /usr/local 目录下,而JDK版本有很多,为了方便切换
所以先创建一个Java文件夹
cd /usr/local
sudo mkdir java
把刚才解压的文件移动到java目录下,在刚才解压的目录下打开终端terminal,输入命令
sudo mv jdk1.8.0_231 /usr/local/java
环境变量
打开文件配置环境变量
sudo gedit /etc/profile
在文件末尾加上这些内容
export JAVA_HOME=/usr/local/java/jdk1.8.0_231
export JRE_HOME=/usr/local/java/jdk1.8.0_231/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
保存文件,关闭退出
在终端输入命令,让环境变量立即生效
source /etc/profile
验证
输入命令,如果有下面这样的输出,就说明JDK安装成功了
java -version
SSH登录权限设置
对于Hadoop的伪分布式和全分布式而言,名称节点需要启动集群中所有机器的Hadoop守护进程,这个过程是通过SSH来实现的,但是Hadoop没用提供SSH输入密码登录的形式。所以,为了能够顺利登录每台机器,需要将所有机器配置为名称节点可以无密码登录它们。
首先安装openssh服务端
sudo apt-get install openssh-server
然后切换到/home/hadoop目录底下,就是你自己为Hadoop创建的用户目录,查看是否有一个名叫 .ssh 的文件夹,没有的话创建一个
cd /home/hadoop/
mkdir .ssh
修改这个文件夹的权限
chmod 700 .ssh
执行命令生成公钥和私钥,后面跳出来的要求全部按回车(选择默认)就行了
ssh-keygen -t rsa
进入到.ssh目录里面,执行命令拷贝秘钥
cd .ssh
cat id_rsa.pub >> authorized_keys
验证
在终端登录ssh,第一次登录的时候会有一个提问,输入yes就行了
我这里是非第一次登录,如果这样显示就表示成功了
ssh localhost
Hadoop安装与配置
安装包
这里的操作与安装JDK类似
首先去官网下载Hadoop的压缩包,我这里选择的版本是3.2.1版,把下载好的压缩包放到虚拟机里面去
解压压缩包并重命名文件夹,因为一般一台机器只安装一个版本的Hadoop,所以就精简了文件名
tar -zxvf hadoop-3.2.1.tar.gz
mv hadoop-3.2.1 hadoop
然后把这个文件夹移动到 /usr/local 目录底下,当然根据个人喜好可以放置在不同的目录
sudo mv hadoop /usr/local
环境变量
打开profile文件
sudo gedit /etc/profile
在最后添加以下内容
export HADOOP_HOME=/usr/local/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
保存后退出,先让环境变量生效
source /etc/profile
然后在命令行输入以下命令,如果出现以下显示,就说明安装正确了
hadoop version
文件夹权限修改
这一步很重要,本人在安装的时候就出现了问题
我们需要把hadoop文件夹下所有文件权限都分配给hadoop用户(或者其他你创建的用户),让Hadoop进程可以创建或修改文件
切换到 /usr/local 目录,然后修改用户权限
cd /usr/local
sudo chown -R hadoop ./hadoop
伪分布式配置
Hadoop一共有三种部署方式:单机部署、伪分布式部署、完全分布式部署
一般我们做实验的时候都是采用伪分布式部署,在一台机器上模拟分布的场景,也更加方便
Hadoop的所有配置文件都在 hadoop/etc/hadoop 目录下面
core-site.xml
首先切换到上面所说的目录下面,打开配置文件进行编辑
sudo gedit core-site.xml
填写下面的内容
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
保存后关闭
- hadoop.tmp.dir:hadoop的缓存目录,存放一些临时文件在本地目录
- fs.defaultFS:HDFS分布式文件运行的IP和端口,这里写本地就好了
hdfs-site.xml
同上面一样,编辑hdfs-site.xml文件,填写下面的内容
sudo gedit hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/data/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/data/datanode</value>
</property>
</configuration>
保存后退出
- dfs.replication:HDFS文件系统中同一份数据的副本数量,因为是伪分布式,所以就写1
- dfs.namenode.name.dir:名称节点的数据保存路径
- dfs.datanode.data.dir:数据节点的数据保存路径
hadoop-env.sh
这里需要在hadoop的运行环境中添加JDK的路径,如果不加这句很容易出错
sudo gedit hadoop-env.sh
随便找一个位置添加这一句话,也就是Java的根目录
export JAVA_HOME=/usr/local/java/jdk1.8.0_231
保存后关闭
运行测试
到这里Hadoop就能运行了
格式化节点
在第一次运行HDFS的时候,需要先初始化一下名称节点,以后就不需要了
切换到hadoop目录,执行格式化命令
cd /usr/local/hadoop
sudo ./bin/hdfs namenode -format
后面会有很多输出信息,如果没有出现[error],那就是没有问题的
运行节点
因为我们没有配置YARN,所以YARN服务是运行不起来的,只运行HDFS系统就好了。
如果按照本人那样把sbin目录也写进profile环境变量的话,可以在任何地方运行
start-dfs.sh
如果没有的话,切换到hadoop的目录去也可以
cd /usr/local/hadoop
./sbin/start-dfs.sh
出现这样的显示就代表启动成功
也可以输入jps命令来查看守护进程
jps
浏览器查看
在虚拟机里面打开浏览器,输入网址http://localhost:9870
就能看到Hadoop的WebUI界面了
关闭
同启动一样的道理,要么配置环境变量可以随处运行,要么使用绝对目录运行
stop-dfs.sh
到此为止Hadoop的基本配置就全部完成了。
网络设置
这里是针对虚拟机开发的用户一些建议。
因为本人习惯Windows下进行开发,但是大数据Hadoop又不得不使用Linux系统,所以选择了安装虚拟机。
但是虚拟机毕竟性能有限,所以写代码的时候依然是在Windows下进行,那么怎么才能在主机连接到虚拟机里的HDFS以及其他一些Hadoop生态组件呢?
本人使用的是Virtualbox,当然VMware的用户也是一样的道理。
推荐将虚拟机的网络模式设置成桥接网卡模式,选择自己上网的那张网卡作为桥接。
这种模式简单来说就是虚拟机作为一个单独的节点加入到主机所在的局域网中,给虚拟机分配一个单独的IP,与主机在同一个子网下面。
这样在同一个子网下的两台机器就能互相访问了。
在重新调整模式之后,需要重启虚拟机来更新配置。
在虚拟机中用命令查看自己被分配的IP地址
ipconfig
然后在主机里就可以用这个IP对虚拟机进行访问了。
比如访问刚才的网页内容:
这样就方便很多了,HDFS文件系统也可以通过这个IP进行访问。