Hadoop-3.0伪分布模式安装
1.创建hadoop用户
本教程需要创建一个名称为hadoop的普通用户,后续所有操作都会使用该用户名登录到Linux系统。使用root用户登录Linux 系统,然后,打开一个终端(可以使用快捷键 Ctrl+Alt+T),使用如下命令创建一个用户hadoop:([sudo]zhangyu的密码为:zhangyu)
sudo useradd -m hadoop -s /bin/bash
Copy

这条命令创建了可以登录的 hadoop 用户,并使用 /bin/bash 作为 Shell。
接着使用如下命令为hadoop用户设置密码:
sudo passwd hadoop
Copy

由于是处于学习阶段,不需要把密码设置得过于复杂,本实验把密码简单设置为 hadoop,也就是,用户名和密码相同,方便记忆。需要按照提示输入两次密码。
然后,可为hadoop用户增加管理员权限,以方便部署,避免一些对于新手来说比较棘手的权限问题,命令如下:
sudo adduser hadoop sudo
Copy

最后,切换到刚刚创建的hadoop用户并输入密码(hadoop)进行登录。
su - hadoop
Copy

2.更新APT
为了确保Hadoop安装过程顺利进行,执行下面命令更新APT软件:
su - hadoop
Copy
3.安装SSH
Ubuntu默认已安装了SSH客户端,因此,这里还需要安装SSH服务端,请在Linux的终端中执行以下命令:
sudo apt-get install openssh-server
Copy

执行上述安装命令后,会出现"您希望继续执行吗",输入Y,就可以继续安装了。
安装后,可以使用如下命令登录本机:
ssh localhost
Copy

执行该命令后会,会出现“yes/no”选择提示,输入“yes”,然后按提示输入密码hadoop,就登录到本机了。
然后,请输入命令“exit”退出刚才的SSH,就回到了原先的终端窗口;然后,可以利用ssh-keygen生成密钥,并将密钥加入到授权中,命令如下:
cd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa # 会有提示,都按回车即可
cat ./id_rsa.pub >> ./authorized_keys # 加入授权
Copy

此时,再执行ssh localhost命令,无需输入密码就可以直接登录了。
ssh localhost
Copy

4.****安装Java环境
由于Hadoop本身是使用Java语言编写的,因此,Hadoop的开发和运行都需要Java的支持,对于Hadoop3.1.3而言,要求使用JDK1.8或者更新的版本。
首先,下载JDK1.8的安装包。
cd ~
wget http://192.168.1.100:60000/allfiles/hadoop3.0_examples/jdk-8u162-linux-x64.tar.gz
Copy
执行如下命令创建“/usr/lib/jvm”目录用来存放JDK文件:
cd /usr/lib
sudo mkdir jvm #创建/usr/lib/jvm目录用来存放JDK文件
Copy

执行如下命令对安装文件进行解压缩:
cd ~ #进入hadoop用户的主目录
sudo tar -zxvf ./jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm
Copy
下面继续执行如下命令,设置环境变量:
vim ~/.bashrc
Copy
上面命令使用vim编辑器打开了hadoop这个用户的环境变量配置文件,请在这个文件的开头位置,添加如下几行内容:
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
Copy

保存.bashrc文件并退出vim编辑器。然后,继续执行如下命令让.bashrc文件的配置立即生效:
source ~/.bashrc
Copy

使用如下命令查看是否安装成功:
java -version
Copy
如果能够在屏幕上返回如下信息,则说明安装成功:

至此,就成功安装了Java环境。下面就可以进入Hadoop的安装。
5.安装Hadoop
下载安装文件hadoop-3.1.3.tar.gz.
cd ~
wget http://192.168.1.100:60000/allfiles/hadoop3.0_examples/hadoop-3.1.3.tar.gz
Copy
对文件进行解压,按照Linux系统使用的默认规范,用户安装的软件一般都是存放在“/usr/local/”目录下。请使用hadoop用户登录Linux系统,打开一个终端,执行如下命令:
sudo tar -zxf ~/hadoop-3.1.3.tar.gz -C /usr/local # 解压到/usr/local中
cd /usr/local/
sudo mv ./hadoop-3.1.3/ ./hadoop # 将文件夹名改为hadoop
sudo chown -R hadoop ./hadoop # 修改文件权限
Copy

Hadoop解压后即可使用,可以输入如下命令来检查 Hadoop是否可用,成功则会显示 Hadoop版本信息:
cd /usr/local/hadoop
./bin/hadoop version
Copy

6.伪分布式模式配置
Hadoop可以在单个节点(一台机器)上以伪分布式的方式运行,同一个节点既作为名称节点(NameNode),也作为数据节点(DataNode),读取的是分布式文件系统 HDFS 中的文件。
修改配置文件。
需要配置相关文件,才能够让Hadoop在伪分布式模式下顺利运行。Hadoop的配置文件位于“/usr/local/hadoop/etc/hadoop/”中,进行伪分布式模式配置时,需要修改2个配置文件,即core-site.xml和hdfs-site.xml。
可以使用vim编辑器打开core-site.xml文件。
vim /usr/local/hadoop/etc/hadoop/core-site.xml
Copy
它的初始内容如下:
<configuration>
</configuration>
Copy
修改以后,core-site.xml文件的内容如下:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
Copy

在上面的配置文件中,hadoop.tmp.dir用于保存临时文件,若没有配置hadoop.tmp.dir这个参数,则默认使用的临时目录为“/tmp/hadoo-hadoop”,而这个目录在Hadoop重启时有可能被系统清理掉,导致一些意想不到的问题,因此,必须配置这个参数。fs.defaultFS这个参数,用于指定HDFS的访问地址,其中,9000是端口号。
同样,需要修改配置文件hdfs-site.xml。
vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
Copy
修改后的内容如下:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
Copy

在hdfs-site.xml文件中,dfs.replication这个参数用于指定副本的数量,因为,在分布式文件系统HDFS中,数据会被冗余存储多份,以保证可靠性和可用性。但是,由于这里采用伪分布式模式,只有一个节点,因此,只可能有1个副本,因此,设置dfs.replication的值为1。dfs.namenode.name.dir用于设定名称节点的元数据的保存目录,dfs.datanode.data.dir用于设定数据节点的数据保存目录,这两个参数必须设定,否则后面会出错。
需要指出的是,Hadoop的运行方式(比如运行在单机模式下还是运行在伪分布式模式下),是由配置文件决定的,启动Hadoop时会读取配置文件,然后根据配置文件来决定运行在什么模式下。因此,如果需要从伪分布式模式切换回单机模式,只需要删除 core-site.xml中的配置项即可。
执行名称节点格式化
修改配置文件以后,要执行名称节点的格式化,命令如下:
cd /usr/local/hadoop
./bin/hdfs namenode -format
Copy
如果格式化成功,会看到“successfully formatted”的提示信息。
如果在执行这一步时提示错误信息“Error: JAVA_HOME is not set and could not be found”,则说明之前设置JAVA_HOME环境变量的时候,没有设置成功,请按前面的教程先设置好 JAVA_HOME变量,否则,后面的过程都无法顺利进行。
启动Hadoop
执行下面命令启动Hadoop:
cd /usr/local/hadoop
./sbin/start-dfs.sh #start-dfs.sh是个完整的可执行文件,中间没有空格
Copy

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable WARN
Copy
这个警告提示信息可以忽略,并不会影响Hadoop正常使用。
Hadoop启动完成后,可以通过命令 jps 来判断是否成功启动,命令如下:
jps
Copy

若成功启动,则会列出如下进程:NameNode、DataNode和SecondaryNameNode。如果看不到SecondaryNameNode进程,请运行命令“./sbin/stop-dfs.sh”关闭Hadoop相关进程,然后,再次尝试启动。如果看不到NameNode或DataNode进程,则表示配置不成功,请仔细检查之前步骤,或通过查看启动日志排查原因。
通过start-dfs.sh命令启动Hadoop以后,就可以运行MapReduce程序处理数据,此时是对HDFS进行数据读写,而不是对本地文件进行读写。
使用Web界面查看HDFS信息
Hadoop成功启动后,可以在Linux系统中(不是Windows系统)打开一个浏览器,在地址栏输入地址“http://localhost:9870”,就可以查看名称节点和数据节点信息,还可以在线查看 HDFS 中的文件。

运行Hadoop伪分布式实例
伪分布式模式下,grep例子读取的则是分布式文件系统HDFS 上的数据。要使用HDFS,首先需要在HDFS中创建用户目录(本实验全部统一采用hadoop用户名登录Linux系统),命令如下:
cd /usr/local/hadoop
./bin/hdfs dfs -mkdir -p /user/hadoop
Copy

接着需要把本地文件系统的“/usr/local/hadoop/etc/hadoop”目录中的所有xml文件作为输入文件,复制到分布式文件系统HDFS中的“/user/hadoop/input”目录中,命令如下:
cd /usr/local/hadoop
./bin/hdfs dfs -mkdir input #在HDFS中创建hadoop用户对应的input目录
./bin/hdfs dfs -put ./etc/hadoop/*.xml input #把本地文件复制到HDFS中
Copy

复制完成后,可以通过如下命令查看HDFS中的文件列表:
./bin/hdfs dfs -ls input
Copy

执行上述命令以后,可以看到input目录下的文件信息。
现在就可以运行Hadoop自带的grep程序,命令如下:
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep input output 'dfs[a-z.]+'
Copy
运行结束后,可以通过如下命令查看HDFS中的output文件夹中的内容:
./bin/hdfs dfs -cat output/*
Copy

需要强调的是,Hadoop运行程序时,输出目录不能存在,否则会提示如下错误信息:
org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/hadoop/output already exists
Copy
因此,若要再次执行grep程序,需要执行如下命令删除HDFS中的output文件夹:
./bin/hdfs dfs -rm -r output # 删除 output 文件夹
Copy

关闭Hadoop。
如果要关闭Hadoop,可以执行下面命令:
cd /usr/local/hadoop
./sbin/stop-dfs.sh
Copy

下次启动Hadoop时,无需进行名称节点的初始化(否则会出错),也就是说,不要再次执行“hdfs namenode -format”命令,每次启动Hadoop只需要直接运行start-dfs.sh命令即可。
配置PATH变量。
前面在启动Hadoop时,都要加上命令的路径,比如,“./sbin/start-dfs.sh”这个命令中就带上了路径,实际上,通过设置PATH变量,就可以在执行命令时,不用带上命令本身所在的路径。比如,我们打开一个Linux终端,在任何一个目录下执行“ls”命令时,都没有带上ls命令的路径,实际上,执行ls命令时,是执行“/bin/ls”这个程序,之所以不需要带上路径,是因为Linux系统已经把ls命令的路径加入到PATH变量中,当执行ls命令时,系统是根据 PATH 这个环境变量中包含的目录位置,逐一进行查找,直至在这些目录位置下找到匹配的ls程序(若没有匹配的程序,则系统会提示该命令不存在)。
知道了这个原理以后,我们同样可以把start-dfs.sh、stop-dfs.sh等命令所在的目录“/usr/local/hadoop/sbin”,加入到环境变量PATH中,这样,以后在任何目录下都可以直接使用命令“start-dfs.sh”启动Hadoop,不用带上命令路径。具体操作方法是,首先使用vim编辑器打开“~/.bashrc”这个文件。
vim ~/.bashrc
Copy
然后,在这个文件的最前面位置加入如下单独一行:
export PATH=$PATH:/usr/local/hadoop/sbin
Copy
在后面的学习过程中,如果要继续把其他命令的路径也加入到PATH变量中,也需要继续修改“~/.bashrc”这个文件。当后面要继续加入新的路径时,只要用英文冒号“:”隔开,把新的路径加到后面即可,比如,如果要继续把“/usr/local/hadoop/bin”路径增加到PATH中,只要继续追加到后面,如下所示:
export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin
Copy

添加后,保存~/.bashrc文件,执行命令“source ~/.bashrc”使设置生效。设置生效后,在任何目录下启动Hadoop,都只要直接输入start-dfs.sh命令即可,同理,停止Hadoop,也只需要在任何目录下输入stop-dfs.sh命令即可。
source ~/.bashrc
Copy
如下所示:
cd ~
start-dfs.sh
Copy

浙公网安备 33010602011771号