hadoop是用java实现的,所以需要现在ubuntu上安装合适版本的Java开发工具包(JDK),可以执行下列命令查看是否安装了java:
java -version
如果返回不存在这样的命令,则说明没安装java。ubuntu安装java教程可以看我的另一个博客。
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/
进入存放压缩包的目录中,运行如下命令:
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
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的安装路径,如图:
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命令连接本地机器,应该会获得一个如上图显示的关于信任主机证书的警告。确认后,就可以连接而不再需要密码或出现提示。
本次配置需要对hadoop安装路径下的 etc目录里的core-site.xml、hdfs-site.xml和mapred-site.xml这三个文件进行修改。
修改core-site.xml文件:
在
dfs.default.name
hdfs://localhost:9000
原理分析:变量dfs.default.name保存了NameNode的位置,HDFS和MapReduce组件都需要它。这就是它出现在core-site.xml文件中而不是hdfs-site.xml文件中的原因。
修改hdfs-site.xml文件:
在
dfs.replication
1
原理分析:变量dfs.replication指定了每个HDFS数据块的复制次数。HDFS确保每个数据被复制到多台不同主机(通常是3台),以此方式处理故障。由于我们只有 一台主机和一个为分布式模式的DataNode,所以将此值修改为1.
修改mapred-site.xml文件:
在
mapred.job.tracker
localhost:9001
原理分析:变量mapred.job.tracker保存了JobTracker的位置。因为只有MapReduce组件需要知道这个位置,所以它出现在mapred-site.xml文件中。
创建Hadoop保存数据的目录(不一定非得把目录建在hadoop安装目录下):
mkdir /usr/local/hadoop/tmp
修改目录权限,确保任何用户都可在此目录写入数据:
chmod 777 /usr/local/hadoop/tmp
再次修改core-site.xml文件,添加下列属性:
hadoop.tmp.dir
/usr/local/hadoop/tmp
原理分析:Hadoop默认使用hadoop.tmp.dir属性作为根目录,所有文件和数据都写入给目录。而hadoop.tmp.dir的默认值为/tmp,也就是Linux系统中存放临时文件的目录,一些版本的Linux系统会自动删除/tmp内的数据。所以,明确规定数据存放的位置更为安全。
hdfs namenode -format
如果成功,会输出类似如下的数据:
启动hadoop
start-dfs.sh
查看结果
jps
如果输出与下图类似,则说明hadoop启动成功了: