创建hadoop用户
安装好Ubuntu16.04后,新建一个hadoop用户。
首先按 ctrl+alt+t 打开终端窗口,输入如下命令创建新用户:
sudo useradd -m hadoop -s /bin/bash
这条命令创建了可以登陆的 hadoop 用户,并使用 /bin/bash 作为 shell。
接着使用如下命令设置hadoop用户的密码,按提示输入两次密码:
sudo passwd hadoop
为hadoop用户增加管理员权限,避免新手可能遇到的权限问题:
sudo adduser hadoop sudo
最后,注销当前用户(点击屏幕右上角的齿轮,选择注销),在登陆界面使用刚创建的 hadoop 用户进行登陆。
更新apt
hadoop用户登陆后,我们先更新一下 apt,后续使用 apt 安装软件,如果没有更新可能有一些软件安装不了。按 ctrl+alt+t 打开终端窗口,执行如下命令:
sudo apt-get update
安装vim,以便后续更改配置文件
sudo apt-get install vim
安装文件时若需要确认,在提示处输入 Y 即可.
安装ssh,配置ssh无密码登陆
Ubuntu默认已安装了SSH client,此外还需要安装SSH server:
sudo apt-get install openssh-server
安装后,用如下命令登陆:
ssh localhost
此时会有提示(ssh首次登陆提示),输入yes,然后按提示输入密码,即可登陆本机。
接下来配置成ssh无需输密码登陆。退出刚才的ssh
exit
cd ~/.ssh/
利用ssh-keygen生成密钥,并将密钥加入授权(有提示都按回车):
ssh-keygen -t rsa
cat ./id_rsa.pub >> ./authorized_keys
此时利用ssh localhost
命令,则无需输入密码了。
安装java 环境
Java环境最好选择openjdk,因为后面用到的jps语句,oracle的jdk没有办法直接使用。此时可以输入jps
,看屏幕上显示的缺失jdk是什么,选择其中一个安装。比如,我选择的就是openjdk-8-jdk-headless
sudo apt-get install openjdk-8-jdk-headless
这里的openjdk-8-jdk-headless换成你自己选择的jdk版本
安装好后,需要找到相应的安装路径,执行下列命令:
dpkg -L openjdk-8-jdk-headless | grep '/bin/javac'
该命令会输出一个路径,除去路径末尾的 /bin/bash,剩下的就是正确的路径了。如输出的路径为 /usr/lib/jvm/openjdk-8-jdk-headless/bin/javac,则我们需要的路径为 /usr/lib/jvm/openjdk-8-jdk-headless。
接着配置JAVA_HOME环境变量,在~/.bashrc
中设置:
vim ~/.bashrc
vim使用方法
进入文件后,点击”i”则进入insert编辑模式,输入内容。然后按”Esc”进入退出模式,输入:wq
则保存退出。此处w
表示写入保存,q
表示quit退出,如果不想保存,也可直接输入:q
退出。
在文件最前面添加如下单独一行(注意 = 号前后不能有空格),将“JDK 安装路径”改为上述命令得到的路径,并保存:
export JAVA_HOME=JDK安装路径
接下来使环境变量生效:
source ~/.bashrc
接下来检验一下是否正确:
echo $JAVA_HOME
java -version
$JAVA_HOME/bin/java -version
如果设置正确的话,$JAVA_HOME/bin/java -version 会输出 Java 的版本信息,且和 java -version 的输出结果一样。
安装hadoop3
在这个网址http://apache.claz.org/hadoop/common/ 下载tar.gz的包,注意是不包含src的
会自动保存在Downloads目录中,本教程是3.0.0-alpha4版本,2.0以后版本也均可使用。
将 Hadoop 安装至 /usr/local 中:
sudo tar -zxf ~/Downloads/hadoop-3.0.0-alpha4.tar.gz -C /usr/local
cd /usr/local/
sudo chown -R hadoop:hadoop ./hadoop-3.0.0-alpha4
Hadoop 解压后即可以使用。输入如下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息:
cd /usr/local/hadoop-3.0.0-alpha4
./bin/hadoop version
Hadoop 伪分布式/单机模式配置
Hadoop 的配置文件位于 /usr/local/hadoop-3.0.0-alpha4/etc/hadoop/ 中,伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml。Hadoop 的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。
修改配置文件 core-site.xml(通过 gedit 编辑会比较方便:gedit ./etc/hadoop/core-site.xml
),将当中的
填写如下图
同样,修改配置文件hdfs-site.xml
Hadoop 配置文件说明
Hadoop 的运行方式是由配置文件决定的(运行 Hadoop 时会读取配置文件),因此如果需要从伪分布式模式切换回分布式模式,需要删除 core-site.xml 中的配置项。
此外,伪分布式虽然只需要配置 fs.defaultFS 和 dfs.replication 就可以运行(官方教程如此),不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。所以我们进行了设置,同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。*
配置完成后,执行namenode的格式化:
./bin/hdfs namenode -format
成功的话,会看到“successfully formatted”和”Exitting with status 0”(不过第二个,我的terminal没有看到),若为”Exitting with status 1”是出错。
如果在这一步时提示 Error: JAVA_HOME is not set and could not be found. 的错误,则说明之前设置 JAVA_HOME 环境变量那边就没设置好,请按教程先设置好 JAVA_HOME 变量,否则后面的过程是进行不下去的。
接着开启守护进程:
./sbin/start-dfs.sh
若出现ssh提示,输入yes即可。
启动时可能会出现如下 WARN 提示:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable。该 WARN 提示可以忽略,并不会影响正常使用(该 WARN 可以编译 Hadoop 源码解决)。
启动完成后,可以通过命令 jps 来判断是否成功启动,若成功启动则会列出如下进程:“NameNode”、“DataNode”和“SecondaryNameNode”(如果 SecondaryNameNode 没有启动,请运行 sbin/stop-dfs.sh 关闭进程,然后再次尝试启动尝试)。如果没有 NameNode 或 DataNode,那就是配置不成功,请仔细检查之前步骤,或通过查看启动日志排查原因。
Hadoop 无法正常启动的解决方法
一般可以查看启动日志来排查原因,注意几点:
启动时会提示形如 hadoop: starting namenode, logging to /usr/local/hadoop-3.0.0-alpha4/logs/hadoop-hadoop-namenode-hadoop.out,启动日志信息是记录在 /usr/local/hadoop-3.0.0-alpha4/logs/hadoop-hadoop-namenode-hadoop.log 中,查看后缀为 .log 的文件;
每一次的启动日志都是追加在日志文件之后,所以得拉到最后面看,对比下记录的时间就知道了;
一般出错的提示在最后面,通常是写着 Fatal、Error、Warning 或者 Java Exception 的地方;
可以在网上搜索一下出错信息,看能否找到一些相关的解决方法。 此外,若是 DataNode 没有启动,可尝试如下的方法(注意这会删除 HDFS 中原有的所有数据,如果原有的数据很重要请不要这样做):
./sbin/stop-dfs.sh
rm -r ./tmp
./bin/hdfs namenode -format
./sbin/start-dfs.sh
成功启动后,可以访问web界面http://localhost:50070查看NameNode和DataNode信息。
若要关闭 Hadoop,则运行
./sbin/stop-dfs.sh