1. 检查是否安装JDK:
hadoop是用java实现的,所以需要现在ubuntu上安装合适版本的Java开发工具包(JDK),可以执行下列命令查看是否安装了java:
java -version
如果返回不存在这样的命令,则说明没安装java。ubuntu安装java教程可以看我的另一个博客。
2.下载、配置hadoop
(1)下载地址:
- 3.0.1 版本下载地址:
http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.0.1/hadoop-3.0.1.tar.gz
- 其它版本下载地址:
https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/
(2)将下载的压缩包解压:
进入存放压缩包的目录中,运行如下命令:
sudo tar -zxvf hadoop-3.0.1.tar.gz -C /usr/local
加压后的目录名是hadoop-3.0.1,为了方便起见,重命名为hadoop:
cd /usr/local
sudo mv hadoop-3.0.1 hadoop
(3)切换到root下,更改配置文件:
编辑/etc/profile :
sudo vim /etc/profile
在文档末尾加入以下代码:
export HADOOP_HOME=/usr/local/hadoop
export PATH=$HADOOP_HOME/bin:$PATH
使改动的配置文价生效:
source /etc/profile
编辑hadoop-env.sh :
该文件在/usr/local/hadoop/etc/hadoop 目录下,编辑hasoop-env.sh文件,搜索JAVA_HOME,并取消注释,加入java的安装路径,如图:
(4)安装SSH:
ssh是远程登录协议,在ubuntu环境下,已经自带了ssh-client,所以只需要安装ssh-server :
sudo apt-get install openssh-server
创建OpenSSL密钥对(工作目录为当前用户的Home目录):
ssh-keygen
将生成的公钥复制到已授权秘钥列表:
cp .ssh/id_rsa.pub .ssh/authorized_keys
初次连接主机:
ssh localhost
由于是初次连接主机,会有类似如下图所示的警告,然而不用理会,输入yes就行:
由于Hadoop需要在一台或多台计算机上的多个进程之间通信,所以需要确保正在使用Hadoop的用户不用输入密码即可连接到所需的每台主机。通过创建有一个空口令的SSH的秘钥对来实现这一点。于是使用ssh-keygen命令启动这一进程,并接受所提供的缺省设置。一旦创建了密钥对,需要将生成的公钥添加到可信秘钥的存储列表。这就意味着,当试图连接这台机器时,公钥会被信任然后,使用ssh命令连接本地机器,应该会获得一个如上图显示的关于信任主机证书的警告。确认后,就可以连接而不再需要密码或出现提示。
(5)配置伪分布式模式
本次配置需要对hadoop安装路径下的 etc目录里的core-site.xml、hdfs-site.xml和mapred-site.xml这三个文件进行修改。
修改core-site.xml文件:
在<configuration>和</configuration>之间插入配置代码,
<property>
<name>dfs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
原理分析:变量dfs.default.name保存了NameNode的位置,HDFS和MapReduce组件都需要它。这就是它出现在core-site.xml文件中而不是hdfs-site.xml文件中的原因。
修改hdfs-site.xml文件:
在<configuration>和</configuration>之间插入配置代码,
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
原理分析:变量dfs.replication指定了每个HDFS数据块的复制次数。HDFS确保每个数据被复制到多台不同主机(通常是3台),以此方式处理故障。由于我们只有 一台主机和一个为分布式模式的DataNode,所以将此值修改为1.
修改mapred-site.xml文件:
在<configuration>和</configuration>之间插入配置代码,
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
原理分析:变量mapred.job.tracker保存了JobTracker的位置。因为只有MapReduce组件需要知道这个位置,所以它出现在mapred-site.xml文件中。
(6)修改HDFS的根目录
创建Hadoop保存数据的目录(不一定非得把目录建在hadoop安装目录下):
mkdir /usr/local/hadoop/tmp
修改目录权限,确保任何用户都可在此目录写入数据:
chmod 777 /usr/local/hadoop/tmp
再次修改core-site.xml文件,添加下列属性:
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
原理分析:Hadoop默认使用hadoop.tmp.dir属性作为根目录,所有文件和数据都写入给目录。而hadoop.tmp.dir的默认值为/tmp,也就是Linux系统中存放临时文件的目录,一些版本的Linux系统会自动删除/tmp内的数据。所以,明确规定数据存放的位置更为安全。
(7)格式化NameNode
hdfs namenode -format
如果成功,会输出类似如下的数据:
(8)启动Hadoop
启动hadoop
start-dfs.sh
查看结果
jps
如果输出与下图类似,则说明hadoop启动成功了: